From 7c955d4d2ce1cc6db7e900f71e6603b475ef9103 Mon Sep 17 00:00:00 2001 From: Circulate233 Date: Wed, 14 Oct 2026 11:22:11 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E7=94=A8mdg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/build.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/runtime-test.yml | 2 +- build.gradle | 127 ++-- gradle.properties | 5 +- gradle/scripts/dependencies.gradle | 13 +- gradle/scripts/extra.gradle | 227 ++----- gradle/scripts/publishing.gradle | 6 +- .../UniminedPatch/1.1/UniminedPatch-1.1.jar | Bin 19301 -> 0 bytes .../UniminedPatch/1.1/UniminedPatch-1.1.pom | 19 - .../gradle/remap/FallbackModRemap.java | 565 ------------------ .../util/kotlin/KotlinClasspathService.java | 55 -- gradle/wrapper/gradle-wrapper.jar | Bin 59536 -> 47623 bytes gradlew | 62 +- gradlew.bat | 93 +-- settings.gradle | 20 +- .../MixinActiniumWorldRendererLazyBatch.java | 6 +- .../MixinTileEntityPhantomface.java | 2 +- ...ixinNetworkInventoryOutputPreparation.java | 3 +- .../MixinCCBlockStateLoader.java | 3 +- .../MixinPreprocessorManager.java | 8 + .../ctm/MixinTextureCTMConnectToCache.java | 4 + .../MixinMinecraftDisplayerRenderer.java | 2 + ...ixinRenderTileChaosStabilizerGeometry.java | 2 + .../MixinModelBookshelfConcurrent.java | 9 +- .../mixin/ic2/MixinTileEntityBlock.java | 2 +- .../MixinTileEntityMultiblockPart.java | 4 +- .../mixin/journeymap/MixinJMChunkCache.java | 9 +- .../mixin/konkrete/MixinLocalsCopy.java | 6 + .../librarianlib/MixinSavingFieldCache.java | 3 +- .../minecraft/MixinChunkEntityQuery.java | 4 + ...MixinClassInheritanceMultiMapIterator.java | 6 +- .../MixinConditionAndCanonicalization.java | 4 + .../MixinConditionOrCanonicalization.java | 4 + .../minecraft/MixinFaceBakeryAllocations.java | 4 +- .../mixin/minecraft/MixinInventoryPlayer.java | 13 +- .../MixinNetworkManagerBandwidth.java | 2 +- .../minecraft/MixinResourceLocation.java | 11 +- .../forge/MixinFMLOutboundHandlerReply.java | 1 + .../forge/MixinModelLoaderTextureContext.java | 3 +- .../MixinModelLoaderVanillaModelWrapper.java | 1 + .../novaeng/mixin/mmce/MixinTaskExecutor.java | 7 +- .../mmce/MixinTileEnergyHatchDEBinding.java | 3 + .../MixinCosmicBlendStateBufferReuse.java | 2 + .../MixinFontRenderTuningBufferReuse.java | 2 + .../mixin/reid/MixinReidSectionAccess.java | 2 + 46 files changed, 341 insertions(+), 989 deletions(-) delete mode 100644 gradle/unimined-patch/repo/novaeng/unimined/UniminedPatch/1.1/UniminedPatch-1.1.jar delete mode 100644 gradle/unimined-patch/repo/novaeng/unimined/UniminedPatch/1.1/UniminedPatch-1.1.pom delete mode 100644 gradle/unimined-patch/src/github/kasuminova/gradle/remap/FallbackModRemap.java delete mode 100644 gradle/unimined-patch/src/net/fabricmc/loom/util/kotlin/KotlinClasspathService.java diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ad15e759..a188903e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,7 +10,7 @@ permissions: jobs: build: - uses: FormlessDragon/.github/.github/workflows/build.yml@main + uses: FormlessDragon/.github/.github/workflows/build-mdg.yml@main secrets: inherit permissions: contents: write diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e650d6c5..5c253a41 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,7 +10,7 @@ permissions: jobs: release: - uses: FormlessDragon/.github/.github/workflows/release.yml@main + uses: FormlessDragon/.github/.github/workflows/release-mdg.yml@main secrets: inherit permissions: contents: write diff --git a/.github/workflows/runtime-test.yml b/.github/workflows/runtime-test.yml index 1bc3615e..15e724f8 100644 --- a/.github/workflows/runtime-test.yml +++ b/.github/workflows/runtime-test.yml @@ -14,5 +14,5 @@ permissions: jobs: runtime-test: - uses: FormlessDragon/.github/.github/workflows/runtime-test.yml@main + uses: FormlessDragon/.github/.github/workflows/runtime-test-mdg.yml@main secrets: inherit diff --git a/build.gradle b/build.gradle index 51b8d35f..8937b645 100644 --- a/build.gradle +++ b/build.gradle @@ -5,9 +5,9 @@ plugins { id 'java-library' id 'maven-publish' id 'org.jetbrains.gradle.plugin.idea-ext' version '1.4.1' - id 'com.gradleup.shadow' version '9.4.0' - id 'xyz.wagyourtail.unimined' version '1.4.37-kappa' - id 'com.diffplug.spotless' version '8.4.0' + id 'com.gradleup.shadow' version '9.6.1' + id 'net.neoforged.moddev.mcpforge' version '2.0.185-legacy' + id 'com.diffplug.spotless' version '8.10.4' id 'org.jetbrains.kotlin.jvm' id "org.jetbrains.kotlin.plugin.lombok" version '2.4.20' id "org.jetbrains.kotlin.kapt" version '2.4.20' @@ -52,6 +52,7 @@ assertProperty 'mod_name' assertSubProperties 'use_lombok_ap', 'lombok_version' assertSubProperties 'use_access_transformer', 'access_transformer_locations' +assertSubProperties 'use_mixins', 'mixin_configs' assertSubProperties 'is_coremod', 'coremod_includes_mod', 'coremod_plugin_class_name' assertSubProperties 'use_asset_mover', 'asset_mover_version' @@ -82,48 +83,34 @@ java { configurations { contain implementation.extendsFrom(contain) - modCompileOnly - compileOnly.extendsFrom(modCompileOnly) - modRuntimeOnly - runtimeOnly.extendsFrom(modRuntimeOnly) } -String remapTaskName = propertyBool('enable_shadow') ? "remapShadowJar" : "remapJar" +String reobfTaskName = 'reobfJar' +boolean useMixins = propertyBool('use_mixins') +def mixinConfigs = propertyStringList('mixin_configs', ',') -def devMappingsJar = layout.projectDirectory.file(".gradle/unimined/local/mappings/srg2mcp.jar") -def devMappingsSrg = layout.projectDirectory.file(".gradle/unimined/local/mappings/srg2mcp.tsrg") -def devMappingsCsvDir = layout.buildDirectory.dir("dev/mcp-csv") -def prepareDevMappings = tasks.register("prepareDevMappings", Copy) { - from({ zipTree(devMappingsJar.asFile) }) { - include "fields.csv", "methods.csv" +mcpForge { + if (propertyBool('use_access_transformer')) { + accessTransformers.from(propertyStringList('access_transformer_locations', ',').collect { + "src/main/resources/${it.trim()}" + }) } - into(devMappingsCsvDir) -} - -tasks.matching { it.name == 'runClient' || it.name == 'runServer' }.configureEach { - dependsOn(prepareDevMappings) -} -unimined.minecraft { - version "1.12.2" - - mappings { - mcp("stable", "39-1.12") + enable { + cleanroomVersion = '0.6.13-alpha' + mcpMappings = 'de.oceanlabs.mcp:mcp_stable:39-1.12@zip' + obfuscateJar = !propertyBool('enable_shadow') } - cleanroom { - if (propertyBool('use_access_transformer')) { - accessTransformer "${rootProject.projectDir}/src/main/resources/${propertyString('access_transformer_locations')}" - } - loader "0.6.13-alpha" - runs.auth.username = minecraft_username - runs.all { - systemProperty("crl.dev.mixin", "${mod_id}.mixin.json") - systemProperty("net.minecraftforge.gradle.GradleStart.srg.notch-srg", devMappingsSrg.asFile.absolutePath) - systemProperty("net.minecraftforge.gradle.GradleStart.csvDir", devMappingsCsvDir.get().asFile.absolutePath) + runs { + configureEach { + programArguments.addAll('--username', propertyString('minecraft_username')) + if (useMixins) { + systemProperty('crl.dev.mixin', mixinConfigs.join(',')) + } def extraArgs = propertyString('extra_jvm_args') if (extraArgs != null && !extraArgs.trim().isEmpty()) { - jvmArgs += extraArgs.split { "\\s+" }.toList() + extraArgs.trim().split(/\s+/).each { jvmArgument(it) } } if (propertyBool('enable_foundation_debug')) { systemProperty("foundation.dump", "true") @@ -131,31 +118,54 @@ unimined.minecraft { } systemProperty('mixin.debug.export', 'true') systemProperty('fml.ignorePatchDiscrepancies', 'true') - jvmArgs('-Xmx4G') + jvmArgument('-Xmx4G') if (propertyBool('is_coremod')) { systemProperty("fml.coreMods.load", propertyString('coremod_plugin_class_name')) } - return + } + client { + client() + disableIdeRun() + } + server { + server() + disableIdeRun() + systemProperty 'fml.queryResult', 'confirm' } } - defaultRemapJar = false + mods { + create(propertyString('mod_id')) { + sourceSet(sourceSets.main) + } + } +} - String jarTaskName = propertyBool('enable_shadow') ? "shadowJar" : "jar" +if (propertyBool('enable_shadow')) { + def reobfShadowJar = obfuscation.reobfuscate(tasks.named('shadowJar'), sourceSets.main) + reobfTaskName = reobfShadowJar.name + tasks.named('assemble').configure { + dependsOn reobfShadowJar + } +} - remap(tasks.named(jarTaskName).get()) { - mixinRemap { - enableBaseMixin() - enableMixinExtra() +if (useMixins) { + mixin { + mixinConfigs.each { config(it) } + String refmap = propertyString('mixin_refmap') + if (!refmap.isBlank()) { + add(refmap) } - } - mods { - remap(configurations.modCompileOnly) - remap(configurations.modRuntimeOnly) + messages([ + MIXIN_SOFT_TARGET_NOT_FOUND: 'warning' + ]) } } dependencies { + if (useMixins) { + annotationProcessor 'com.cleanroommc:cleanmix:0.7.2' + } if (propertyBool('use_lombok_ap')) { compileOnly "org.projectlombok:lombok:${propertyString('lombok_version')}" annotationProcessor "org.projectlombok:lombok:${propertyString('lombok_version')}" @@ -266,6 +276,7 @@ tasks.matching { it.name.toLowerCase().contains('kotlin') }.configureEach { jar { archiveClassifier = 'dev' + destinationDirectory = layout.buildDirectory.dir('libs') duplicatesStrategy = DuplicatesStrategy.EXCLUDE if (configurations.contain.size() > 0) { into('/') { @@ -293,7 +304,7 @@ jar { attributes(attribute_map) } } - finalizedBy(tasks.named(remapTaskName).get()) + finalizedBy(tasks.named(reobfTaskName).get()) } @@ -303,7 +314,8 @@ shadowJar { } -tasks.named(remapTaskName).configure { +tasks.named(reobfTaskName).configure { + archiveClassifier = '' doFirst { logging.captureStandardOutput LogLevel.INFO } @@ -319,8 +331,8 @@ idea { project { settings { runConfigurations { - "0. Apply Spotless"(Gradle) { - taskNames = ["spotlessApply"] + "0. Create Artifacts"(Gradle) { + taskNames = ["createMinecraftArtifacts"] } "1. Run Client"(Gradle) { taskNames = ["runClient"] @@ -331,6 +343,9 @@ idea { "3. Build Mod"(Gradle) { taskNames = ["build"] } + "4. Apply Spotless"(Gradle) { + taskNames = ["spotlessApply"] + } } compiler.javac { afterEvaluate { @@ -364,6 +379,14 @@ tasks.withType(JavaCompile).configureEach { options.encoding = 'UTF-8' } +tasks.withType(Javadoc).configureEach { + options.encoding = 'UTF-8' + options.charSet = 'UTF-8' + options.docEncoding = 'UTF-8' + options.addStringOption('sourcepath', '') + options.addStringOption('Xdoclint:none', '-quiet') +} + apply from: 'gradle/scripts/publishing.gradle' apply from: 'gradle/scripts/extra.gradle' repositories { diff --git a/gradle.properties b/gradle.properties index 8cc74822..bfa48529 100644 --- a/gradle.properties +++ b/gradle.properties @@ -80,10 +80,13 @@ jitpack_version = # A way to change visibility of Minecraft's classes, methods and fields # AT files should be in the root of src/main/resources with the filename formatted as: `mod_id_at.cfg` # Use the property `access_transformer_locations` to state custom AT files if you aren't using the default `mod_id_at.cfg` location -# WARNING: Use MCP name in AT file. Unimined will remap it to srg name when building. use_access_transformer = true access_transformer_locations = ${mod_id}_at.cfg +use_mixins = true +mixin_configs = ${mod_id}.mixin.json +mixin_refmap = ${mod_id}.refmap.json + # Coremods # The most powerful way to change java classes at runtime, it is however very primitive with little documentation. # Change the property `coremod_includes_mod` to false if your coremod doesn't have a @Mod annotation diff --git a/gradle/scripts/dependencies.gradle b/gradle/scripts/dependencies.gradle index c3557069..16e890d3 100644 --- a/gradle/scripts/dependencies.gradle +++ b/gradle/scripts/dependencies.gradle @@ -1,6 +1,10 @@ apply from: 'gradle/scripts/helpers.gradle' repositories { + maven { + name = 'CleanroomMC' + url = 'https://maven.cleanroommc.com' + } flatDir { dirs('lib') }/* @@ -30,16 +34,19 @@ repositories { mavenLocal() // Must be last for caching to work } +configurations.named('mcpAccessTransformerScan').configure { + exclude group: 'curse.maven', module: 'RandomTweaker-514170' +} + dependencies { contain 'com.github.luben:zstd-jni:1.5.7-4' - // Unimined's Minecraft libraries are not inherited by the standalone JUnit source set. - // Match Cleanroom 0.6.13-alpha; these are test dependencies, not bundled networking libraries. testImplementation 'io.netty:netty-codec-base:4.2.15.Final' testImplementation 'io.netty:netty-transport:4.2.15.Final' compileOnly 'com.cleanroommc:sponge-mixin:0.20.13+mixin.0.8.7' annotationProcessor 'org.ow2.asm:asm-debug-all:5.2' - annotationProcessor 'com.google.guava:guava:32.0.1-android' + // Mixin's mapping keys require the JRE HashBiMap implementation to retain all SRG entries. + annotationProcessor 'com.google.guava:guava:32.1.3-jre' annotationProcessor 'com.google.code.gson:gson:2.8.9' compileOnly 'org.jetbrains:annotations:24.1.0' annotationProcessor 'org.jetbrains:annotations:24.1.0' diff --git a/gradle/scripts/extra.gradle b/gradle/scripts/extra.gradle index e60c72a0..319363cf 100644 --- a/gradle/scripts/extra.gradle +++ b/gradle/scripts/extra.gradle @@ -12,42 +12,39 @@ dependencies.add(cleanroomInstaller.name, "com.cleanroommc:cleanroom:${cleanroom transitive = false } -def productionJarTaskName = propertyBool('enable_shadow') ? 'remapShadowJar' : 'remapJar' +def productionJarTaskName = propertyBool('enable_shadow') ? 'reobfShadowJar' : 'reobfJar' def productionJarTask = tasks.named(productionJarTaskName) -def minecraftConfig = unimined.minecrafts.get(sourceSets.main) -def productionNamespace = minecraftConfig.mcPatcher.prodNamespace - def runtimeTestProductionMods = configurations.maybeCreate('runtimeTestProductionMods') runtimeTestProductionMods.canBeConsumed = false runtimeTestProductionMods.canBeResolved = true runtimeTestProductionMods.transitive = false +runtimeTestProductionMods.extendsFrom( + configurations.modImplementation, + configurations.modRuntimeOnly, + configurations.modApi +) +def mappingsAttribute = Attribute.of( + 'com.gtnewhorizons.retrofuturagradle.obfuscation', + String +) +runtimeTestProductionMods.attributes { + attribute(mappingsAttribute, 'srg') + attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, 'java-runtime')) +} -[configurations.modImplementation, configurations.modRuntimeOnly].each { sourceConfiguration -> - sourceConfiguration.dependencies.each { dependency -> - if (!(dependency instanceof ModuleDependency)) { - return - } - def productionNotation = [ - group: dependency.group, - name: dependency.name, - version: dependency.version - ] - if (!dependency.artifacts.empty) { - def requestedArtifact = dependency.artifacts.iterator().next() - if (requestedArtifact.classifier != null) { - productionNotation.classifier = requestedArtifact.classifier - } - if (requestedArtifact.extension != null) { - productionNotation.ext = requestedArtifact.extension - } - } - def productionDependency = project.dependencies.create( - productionNotation - ) - productionDependency.transitive = false - runtimeTestProductionMods.dependencies.add(productionDependency) - } +def modularMachineryDependency = configurations.modImplementation.dependencies.find { + it.name == 'ModularMachinery-CE' } +def modularMachineryDevJarName = "${modularMachineryDependency.name}-${modularMachineryDependency.version}-dev.jar" +def remapJarType = productionJarTask.get().class.superclass +def runtimeTestReobfModularMachinery = tasks.register('runtimeTestReobfModularMachinery', remapJarType) { + input = layout.projectDirectory.file("lib/${modularMachineryDevJarName}") + libraries.from(sourceSets.main.compileClasspath) + obfuscation.configureNamedToSrgOperation(remapOperation) + archiveFileName = "${modularMachineryDependency.name}-${modularMachineryDependency.version}.jar" + destinationDirectory = layout.buildDirectory.dir('runtime-test/remapped-mods') +} + def runtimeTestModsDir = providers.gradleProperty('runtimeTestModsDir') .map { file(it) } .orElse(layout.buildDirectory.dir('runtime-test/instance/mods')) @@ -56,175 +53,41 @@ def runtimeTestMinecraftDir = providers.gradleProperty('runtimeTestMinecraftDir' .orElse(layout.buildDirectory.dir('runtime-test/minecraft')) def runtimeTestSupportDir = layout.buildDirectory.dir('runtime-test/support') def runtimeTestClientModsDir = layout.buildDirectory.dir('runtime-test/client-mods') -def runtimeRemappedDir = layout.buildDirectory.dir('runtime-test/remapped-mods') -def runtimeFallbackClasspathDir = layout.buildDirectory.dir( - 'runtime-test/fallback-classpath' -) def runtimeMcpRemapMarker = layout.buildDirectory.file( 'runtime-test/runtime-mcp-remap.marker' ) -def runtimeProductionFiles = [] -def runtimeFallbackArtifacts = [] -def namespaceAttribute = Attribute.of( - 'com.gtnewhorizons.retrofuturagradle.obfuscation', - String -) - -def resolveProductionArtifact = { artifact -> - def moduleId = artifact.variant.owner - if (!(moduleId instanceof ModuleComponentIdentifier)) { - throw new GradleException( - "Runtime test artifact is not an external module: ${artifact.file}" - ) - } - - def productionDependency = project.dependencies.create([ - group: moduleId.group, - name: moduleId.module, - version: moduleId.version - ]) - productionDependency.transitive = false - def productionConfiguration = configurations.detachedConfiguration( - productionDependency - ) - productionConfiguration.transitive = false - productionConfiguration.attributes { - attribute(namespaceAttribute, 'srg') - } - def candidates = productionConfiguration.incoming.artifactView { - lenient true - }.artifacts.findAll { candidate -> - candidate.file.name.endsWith('.jar') - && !candidate.file.name.endsWith('-dev.jar') - && !candidate.file.name.endsWith('-sources.jar') - } - if (candidates.isEmpty()) { - return null - } - if (candidates.size() > 1) { - throw new GradleException( - "Multiple production artifacts resolved for ${moduleId}: " + - candidates.collect { it.file.name }.join(', ') - ) - } - candidates.iterator().next().file -} - -def runtimeTestTasksRequested = gradle.startParameter.taskNames.any { - it.toLowerCase().contains('runtimetest') -} - -def runtimeFallbackTasks = [] - -// tiny-remapper 只在插件类加载器里可见,构建脚本看不到,所以从补丁 jar 里取工具类。 -def fallbackRemapClass = { - minecraftConfig.class.classLoader.loadClass( - 'github.kasuminova.gradle.remap.FallbackModRemap' - ) -} - -if (runtimeTestTasksRequested) { - runtimeTestProductionMods.incoming.artifactView {}.artifacts.each { artifact -> - if (!artifact.file.name.endsWith('.jar') - || artifact.file.name.endsWith('-sources.jar')) { - return - } - - def artifactNamespace = artifact.variant.attributes.getAttribute(namespaceAttribute) - def isMcpArtifact = artifactNamespace == 'mcp' - def isDevArtifact = artifact.file.name.endsWith('-dev.jar') - if (!isMcpArtifact && !isDevArtifact) { - runtimeProductionFiles.add(artifact.file) - return - } - - def productionFile = resolveProductionArtifact(artifact) - if (productionFile == null) { - runtimeFallbackArtifacts.add(artifact) - } else { - runtimeProductionFiles.add(productionFile) - } - } - - if (!runtimeFallbackArtifacts.isEmpty()) { - def fallbackJobs = new LinkedHashMap() - runtimeFallbackArtifacts.each { artifact -> - fallbackJobs.put( - artifact.file, - new File( - runtimeRemappedDir.get().asFile, - artifact.file.name.replaceFirst('-dev(?=\\.jar$)', '') - ) - ) - } - def remapTask = tasks.register('runtimeTestRemapFallbackMods') { - group = 'unimined' - description = '把只有 dev 形态的 mod 依赖反混淆到生产命名空间:类路径索引只建一次。' - inputs.files(fallbackJobs.keySet()) - inputs.property( - 'namespaces', - "${minecraftConfig.mappings.checkedNs('mcp').name}->" + - "${productionNamespace.name}" - ) - outputs.files(fallbackJobs.values()) - doFirst { - fallbackJobs.keySet().each { inputJar -> - logger.lifecycle( - "[RuntimeTest] Remapping ${inputJar.name} from mcp to " + - "${productionNamespace.name}" - ) - } - } - doLast { - fallbackRemapClass().remapAll( - minecraftConfig, - logger, - fallbackJobs, - runtimeFallbackClasspathDir.get().asFile - ) - } - } - runtimeFallbackTasks.add(remapTask) - } -} - def runtimeMcpRemapTask = tasks.register('runtimeTestRemapMcp') { - dependsOn(runtimeFallbackTasks) - inputs.files(runtimeFallbackTasks.collect { remapTask -> - remapTask.map { it.outputs.files.files } - }) - inputs.files(runtimeProductionFiles) - inputs.property('runtimeRemapSchema', 'runtime-production-variants-v2') + dependsOn runtimeTestReobfModularMachinery + inputs.files(runtimeTestProductionMods) + inputs.file(runtimeTestReobfModularMachinery.flatMap { it.archiveFile }) + inputs.property('runtimeRemapSchema', 'moddevgradle-mcp-runtime-classpath-v1') outputs.file(runtimeMcpRemapMarker) doLast { - def remappedFiles = runtimeFallbackTasks.collectMany { remapTask -> - remapTask.get().outputs.files.files + def files = runtimeTestProductionMods.files.findAll { + it.name.endsWith('.jar') && !it.name.endsWith('-sources.jar') && it.name != modularMachineryDevJarName } - runtimeMcpRemapMarker.get().asFile.text = ( - runtimeProductionFiles.collect { it.name } + - remappedFiles.collect { it.name } - ).sort().join('\n') + '\n' - if (remappedFiles.isEmpty()) { - project.delete(runtimeRemappedDir) + files += runtimeTestReobfModularMachinery.get().archiveFile.get().asFile + runtimeMcpRemapMarker.get().asFile.with { + parentFile.mkdirs() + text = files.collect { it.name }.sort().join('\n') + '\n' } logger.lifecycle( - "[RuntimeTest] Production variants: ${runtimeProductionFiles.size()}, " + - "fallback remaps: ${remappedFiles.size()}" + "[RuntimeTest] ModDevGradle supplied ${files.size()} runtime mod variant(s)" ) } } - - tasks.register('stageRuntimeTestMods', Sync) { dependsOn productionJarTask - dependsOn(runtimeMcpRemapTask) + dependsOn runtimeMcpRemapTask from(productionJarTask.flatMap { it.archiveFile }) - from(runtimeProductionFiles) - runtimeFallbackTasks.each { remapTask -> - from(remapTask.map { it.outputs.files.files }) + from(runtimeTestProductionMods) { + include '*.jar' + exclude '*-sources.jar' + exclude modularMachineryDevJarName } + from(runtimeTestReobfModularMachinery.flatMap { it.archiveFile }) into(runtimeTestModsDir) include '*.jar' duplicatesStrategy = DuplicatesStrategy.FAIL @@ -279,8 +142,8 @@ tasks.register('installRuntimeTestClient', JavaExec) { tasks.register('printRuntimeTestPaths') { doLast { - println "runtimeTestModsDir=${runtimeTestModsDir.get().absolutePath}" - println "runtimeTestMinecraftDir=${runtimeTestMinecraftDir.get().absolutePath}" + println "runtimeTestModsDir=${runtimeTestModsDir.get().asFile.absolutePath}" + println "runtimeTestMinecraftDir=${runtimeTestMinecraftDir.get().asFile.absolutePath}" } } diff --git a/gradle/scripts/publishing.gradle b/gradle/scripts/publishing.gradle index ef987e39..7decd7e7 100644 --- a/gradle/scripts/publishing.gradle +++ b/gradle/scripts/publishing.gradle @@ -33,15 +33,13 @@ setDefaultProperty('jitpack_group', false, '') setDefaultProperty('jitpack_artifact_id', false, '') setDefaultProperty('jitpack_version', false, '') -def publishMainJarTask = propertyBool('enable_shadow') ? 'remapShadowJar' : 'remapJar' - def configureMavenJavaPublication = { MavenPublication publication, String groupId, String artifactId, String publicationVersion -> def scmUrl = propertyString('maven_scm_url') def scmConnectionUrl = scmUrl.endsWith('.git') ? scmUrl : "${scmUrl}.git" publication.from components.java - publication.artifact(tasks.named(publishMainJarTask)) { - classifier = null + publication.artifact(tasks.named('jar')) { + classifier = 'dev' } publication.setGroupId(groupId) publication.setArtifactId(artifactId) diff --git a/gradle/unimined-patch/repo/novaeng/unimined/UniminedPatch/1.1/UniminedPatch-1.1.jar b/gradle/unimined-patch/repo/novaeng/unimined/UniminedPatch/1.1/UniminedPatch-1.1.jar deleted file mode 100644 index 8ac1a731bdef1334fdbe3be4d5bc6e220f9d2cd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19301 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 CVbDha diff --git a/gradle/unimined-patch/repo/novaeng/unimined/UniminedPatch/1.1/UniminedPatch-1.1.pom b/gradle/unimined-patch/repo/novaeng/unimined/UniminedPatch/1.1/UniminedPatch-1.1.pom deleted file mode 100644 index d0de09f8..00000000 --- a/gradle/unimined-patch/repo/novaeng/unimined/UniminedPatch/1.1/UniminedPatch-1.1.pom +++ /dev/null @@ -1,19 +0,0 @@ - - - 4.0.0 - novaeng.unimined - UniminedPatch - 1.1 - jar - Neutralizes unimined's Kotlin metadata remapping and provides the on-demand mod deobfuscation used by the runtime test staging. - - - xyz.wagyourtail.unimined - unimined - 1.4.37-kappa - compile - - - diff --git a/gradle/unimined-patch/src/github/kasuminova/gradle/remap/FallbackModRemap.java b/gradle/unimined-patch/src/github/kasuminova/gradle/remap/FallbackModRemap.java deleted file mode 100644 index 4dd87d2a..00000000 --- a/gradle/unimined-patch/src/github/kasuminova/gradle/remap/FallbackModRemap.java +++ /dev/null @@ -1,565 +0,0 @@ -package github.kasuminova.gradle.remap; - -import kotlin.Pair; -import kotlin.coroutines.Continuation; -import kotlin.coroutines.EmptyCoroutineContext; -import kotlin.jvm.functions.Function1; -import kotlinx.coroutines.BuildersKt; -import net.fabricmc.tinyremapper.IMappingProvider; -import net.fabricmc.tinyremapper.InputTag; -import net.fabricmc.tinyremapper.OutputConsumerPath; -import net.fabricmc.tinyremapper.TinyRemapper; -import org.gradle.api.logging.Logger; -import org.objectweb.asm.AnnotationVisitor; -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.FieldVisitor; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; -import org.objectweb.asm.Type; -import org.objectweb.asm.commons.ClassRemapper; -import org.objectweb.asm.commons.Remapper; -import xyz.wagyourtail.unimined.api.mapping.MappingsConfig; -import xyz.wagyourtail.unimined.api.minecraft.MinecraftConfig; -import xyz.wagyourtail.unimined.internal.mapping.extension.MixinRemapExtension; -import xyz.wagyourtail.unimined.mapping.Namespace; -import xyz.wagyourtail.unimined.util.TrLoggerFilter; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.UncheckedIOException; -import java.net.URI; -import java.nio.charset.StandardCharsets; -import java.nio.file.FileSystem; -import java.nio.file.FileSystems; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Deque; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.CompletableFuture; -import java.util.jar.JarEntry; -import java.util.jar.JarOutputStream; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -public final class FallbackModRemap { - - private static final String CLASS_SUFFIX = ".class"; - private static final int ASM_API = Opcodes.ASM9; - - private FallbackModRemap() { - } - - public static void remapAll( - MinecraftConfig config, - Logger logger, - Map jobs, - File workDir - ) throws IOException, InterruptedException { - if (jobs.isEmpty()) { - return; - } - - Namespace fromNamespace = config.getMappings().checkedNs("mcp"); - Namespace toNamespace = config.getMcPatcher().getProdNamespace(); - IMappingProvider mappings = createMappings( - config.getMappings(), - fromNamespace, - toNamespace - ); - - List baseClasspath = new ArrayList<>(); - for (File library : config.getMinecraftLibraries().getFiles()) { - baseClasspath.add(library.toPath()); - } - baseClasspath.add(config.getMinecraft(fromNamespace)); - - Map classIndex = buildClassIndex(config, logger, baseClasspath); - for (Map.Entry job : jobs.entrySet()) { - File inputJar = job.getKey(); - Set needed = collectNeededClasses(inputJar, classIndex); - Path neededJar = extractNeededClasses(classIndex, needed, workDir, inputJar); - logger.lifecycle( - "[RuntimeTest] {} needs {} classes from the mod class index", - inputJar.getName(), - needed.size() - ); - - List classpath = new ArrayList<>(); - if (Boolean.getBoolean("novaeng.fallbackRemapFullIndex")) { - classpath.addAll(new LinkedHashSet<>(classIndex.values())); - } else { - classpath.add(neededJar); - } - classpath.addAll(baseClasspath); - remapJar( - config, - logger, - mappings, - inputJar, - job.getValue(), - classpath - ); - } - } - - private static void remapJar( - MinecraftConfig config, - Logger logger, - IMappingProvider mappings, - File inputJar, - File outputJar, - List classpath - ) throws IOException { - TinyRemapper.Builder builder = TinyRemapper - .newRemapper(new TrLoggerFilter(logger)) - .withMappings(mappings) - .skipLocalVariableMapping(true) - .ignoreConflicts(true) - .threads(2); - - MixinRemapExtension mixinExtension = new MixinRemapExtension(logger, true); - mixinExtension.enableBaseMixin(); - mixinExtension.enableMixinExtra(); - mixinExtension.disableRefmap(); - builder.extension(mixinExtension); - config.getMinecraftRemapper().getTinyRemapperConf().invoke(builder); - - TinyRemapper remapper = builder.build(); - InputTag inputTag = remapper.createInputTag(); - Path inputPath = inputJar.toPath(); - await(mixinExtension.readClassPath(remapper, classpath.toArray(new Path[0]))); - await(mixinExtension.readInput(remapper, inputTag, inputPath)); - apply(remapper, inputTag, inputPath, outputJar); - remapper.finish(); - insertExtra(mixinExtension, inputTag, outputJar); - } - - private static Map buildClassIndex( - MinecraftConfig config, - Logger logger, - List wholesale - ) throws IOException { - Set shadowed = new HashSet<>(); - for (Path path : wholesale) { - collectClassNames(path, shadowed); - } - Map index = new HashMap<>(); - LinkedHashSet jars = new LinkedHashSet<>(); - for (File file : config.getSourceSet().getCompileClasspath().getFiles()) { - Path path = file.toPath(); - if (!file.exists() || config.isMinecraftJar(path)) { - continue; - } - jars.add(path); - } - for (Path jar : jars) { - indexJar(index, jar, shadowed); - } - logger.lifecycle( - "[RuntimeTest] Mod class index: {} jars, {} classes", - jars.size(), - index.size() - ); - return index; - } - - private static void collectClassNames(Path jar, Set names) throws IOException { - File file = jar.toFile(); - if (!file.isFile()) { - return; - } - try (ZipFile zip = new ZipFile(file)) { - Enumeration entries = zip.entries(); - while (entries.hasMoreElements()) { - String name = entries.nextElement().getName(); - if (name.endsWith(CLASS_SUFFIX)) { - names.add(name.substring(0, name.length() - CLASS_SUFFIX.length())); - } - } - } - } - - private static void indexJar(Map index, Path jar, Set shadowed) - throws IOException { - try (ZipFile zip = new ZipFile(jar.toFile())) { - Enumeration entries = zip.entries(); - while (entries.hasMoreElements()) { - ZipEntry entry = entries.nextElement(); - String name = entry.getName(); - if (entry.isDirectory() || !name.endsWith(CLASS_SUFFIX)) { - continue; - } - String className = name.substring(0, name.length() - CLASS_SUFFIX.length()); - if (shadowed.contains(className)) { - continue; - } - index.putIfAbsent(className, jar); - } - } - } - - private static Set collectNeededClasses( - File inputJar, - Map classIndex - ) throws IOException { - Set referenced = new HashSet<>(); - CollectingRemapper collector = new CollectingRemapper(referenced); - try (ZipFile zip = new ZipFile(inputJar)) { - Enumeration entries = zip.entries(); - while (entries.hasMoreElements()) { - ZipEntry entry = entries.nextElement(); - if (entry.isDirectory() || !entry.getName().endsWith(CLASS_SUFFIX)) { - continue; - } - byte[] bytes; - try (InputStream stream = zip.getInputStream(entry)) { - bytes = stream.readAllBytes(); - } - ClassReader reader = new ClassReader(bytes); - reader.accept( - new ClassRemapper(new PassThroughVisitor(), collector), - ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES - ); - reader.accept( - new TargetAnnotationCollector(collector), - ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES | ClassReader.SKIP_CODE - ); - } - } - - Set needed = new LinkedHashSet<>(); - Set visited = new HashSet<>(); - Deque queue = new ArrayDeque<>(referenced); - while (!queue.isEmpty()) { - String name = queue.poll(); - if (name == null || name.isEmpty() || name.startsWith("[") || name.startsWith("java/")) { - continue; - } - if (!visited.add(name) || !classIndex.containsKey(name)) { - continue; - } - needed.add(name); - byte[] bytes = readClass(classIndex.get(name), name); - if (bytes == null) { - continue; - } - ClassReader reader = new ClassReader(bytes); - String superName = reader.getSuperName(); - if (superName != null) { - queue.add(superName); - } - Collections.addAll(queue, reader.getInterfaces()); - } - return needed; - } - - private static Path extractNeededClasses( - Map classIndex, - Set needed, - File workDir, - File inputJar - ) throws IOException { - workDir.mkdirs(); - Path target = new File(workDir, inputJar.getName() + "-classpath.jar").toPath(); - Path temporary = new File(workDir, target.getFileName() + ".tmp").toPath(); - Files.deleteIfExists(temporary); - try (JarOutputStream out = new JarOutputStream(Files.newOutputStream(temporary))) { - for (String name : needed) { - byte[] bytes = readClass(classIndex.get(name), name); - if (bytes == null) { - continue; - } - out.putNextEntry(new JarEntry(name + CLASS_SUFFIX)); - out.write(bytes, 0, bytes.length); - out.closeEntry(); - } - out.putNextEntry(new JarEntry("META-INF/MANIFEST.MF")); - out.write("Manifest-Version: 1.0\n".getBytes(StandardCharsets.UTF_8)); - out.closeEntry(); - } - Files.deleteIfExists(target); - Files.move(temporary, target); - return target; - } - - private static byte[] readClass(Path jar, String className) throws IOException { - try (ZipFile zip = new ZipFile(jar.toFile())) { - ZipEntry entry = zip.getEntry(className + CLASS_SUFFIX); - if (entry == null) { - return null; - } - try (InputStream stream = zip.getInputStream(entry)) { - return stream.readAllBytes(); - } - } - } - - // getTRMappings 是 suspend 函数,用 runBlocking 桥接一次。 - @SuppressWarnings({"unchecked", "rawtypes"}) - private static IMappingProvider createMappings( - MappingsConfig mappingsConfig, - Namespace fromNamespace, - Namespace toNamespace - ) throws InterruptedException { - Pair namespaces = new Pair<>(fromNamespace, toNamespace); - Object trMappings = BuildersKt.runBlocking( - EmptyCoroutineContext.INSTANCE, - (scope, continuation) -> mappingsConfig.getTRMappings( - namespaces, - false, - (Continuation) continuation - ) - ); - return acceptor -> ((Function1) trMappings).invoke(acceptor); - } - - private static void await(Object future) { - if (future instanceof CompletableFuture) { - ((CompletableFuture) future).join(); - } - } - - private static void apply( - TinyRemapper remapper, - InputTag inputTag, - Path input, - File outputFile - ) throws IOException { - outputFile.getParentFile().mkdirs(); - try (OutputConsumerPath consumer = new OutputConsumerPath.Builder(outputFile.toPath()).build()) { - consumer.addNonClassFiles( - input, - remapper, - Collections.emptyList() - ); - remapper.apply(consumer, inputTag); - } catch (UncheckedIOException e) { - throw e.getCause(); - } - } - - private static void insertExtra( - MixinRemapExtension mixinExtension, - InputTag inputTag, - File outputFile - ) throws IOException { - Map environment = new HashMap<>(); - environment.put("mutable", "true"); - try (FileSystem fileSystem = FileSystems.newFileSystem( - URI.create("jar:" + outputFile.toPath().toUri()), - environment - )) { - mixinExtension.insertExtra(inputTag, fileSystem); - } - } - - // 返回 null 会让 ASM 跳过方法体,类型引用就收不到。 - private static final class PassThroughVisitor extends ClassVisitor { - - private PassThroughVisitor() { - super(ASM_API); - } - - @Override - public AnnotationVisitor visitAnnotation(String descriptor, boolean visible) { - return new AnnotationVisitor(ASM_API) { - }; - } - - @Override - public FieldVisitor visitField( - int access, - String name, - String descriptor, - String signature, - Object value - ) { - return new FieldVisitor(ASM_API) { - @Override - public AnnotationVisitor visitAnnotation(String descriptor, boolean visible) { - return new AnnotationVisitor(ASM_API) { - }; - } - }; - } - - @Override - public MethodVisitor visitMethod( - int access, - String name, - String descriptor, - String signature, - String[] exceptions - ) { - return new MethodVisitor(ASM_API) { - @Override - public AnnotationVisitor visitAnnotation(String descriptor, boolean visible) { - return new AnnotationVisitor(ASM_API) { - }; - } - }; - } - } - - private static final class CollectingRemapper extends Remapper { - - private final Set referenced; - - private CollectingRemapper(Set referenced) { - this.referenced = referenced; - } - - @Override - public String map(String internalName) { - collect(internalName); - return internalName; - } - - @Override - public String mapType(String internalName) { - collect(internalName); - return internalName; - } - - void collect(String value) { - if (value == null) { - return; - } - String trimmed = value.trim(); - if (trimmed.isEmpty()) { - return; - } - if (trimmed.startsWith("[")) { - collect(trimmed.substring(trimmed.lastIndexOf('[') + 1)); - return; - } - if (trimmed.startsWith("L") && trimmed.indexOf(';') > 0) { - int cursor = 0; - while (cursor < trimmed.length()) { - int start = trimmed.indexOf('L', cursor); - int end = start < 0 ? -1 : trimmed.indexOf(';', start); - if (end < 0) { - break; - } - add(trimmed.substring(start + 1, end)); - cursor = end + 1; - } - return; - } - String candidate = trimmed; - int dot = candidate.indexOf('.'); - if (dot > 0) { - candidate = candidate.substring(0, dot); - } - int parenthesis = candidate.indexOf('('); - if (parenthesis > 0) { - candidate = candidate.substring(0, parenthesis); - } - add(candidate); - } - - private void add(String name) { - if (!name.isEmpty()) { - referenced.add(name); - } - } - } - - private static final class TargetAnnotationCollector extends ClassVisitor { - - private final CollectingRemapper collector; - - private TargetAnnotationCollector(CollectingRemapper collector) { - super(ASM_API); - this.collector = collector; - } - - @Override - public AnnotationVisitor visitAnnotation(String descriptor, boolean visible) { - return new TargetAnnotationVisitor(collector, super.visitAnnotation(descriptor, visible)); - } - - @Override - public FieldVisitor visitField( - int access, - String name, - String descriptor, - String signature, - Object value - ) { - FieldVisitor next = super.visitField(access, name, descriptor, signature, value); - return new FieldVisitor(ASM_API, next) { - @Override - public AnnotationVisitor visitAnnotation(String descriptor, boolean visible) { - return new TargetAnnotationVisitor(collector, super.visitAnnotation(descriptor, visible)); - } - }; - } - - @Override - public MethodVisitor visitMethod( - int access, - String name, - String descriptor, - String signature, - String[] exceptions - ) { - MethodVisitor next = super.visitMethod(access, name, descriptor, signature, exceptions); - return new MethodVisitor(ASM_API, next) { - @Override - public AnnotationVisitor visitAnnotation(String descriptor, boolean visible) { - return new TargetAnnotationVisitor(collector, super.visitAnnotation(descriptor, visible)); - } - }; - } - } - - private static final class TargetAnnotationVisitor extends AnnotationVisitor { - - private final CollectingRemapper collector; - - private TargetAnnotationVisitor(CollectingRemapper collector, AnnotationVisitor next) { - super(ASM_API, next); - this.collector = collector; - } - - @Override - public void visit(String name, Object value) { - if (value instanceof String) { - collector.collect((String) value); - } else if (value instanceof Type) { - Type type = (Type) value; - collector.collect( - type.getSort() == Type.ARRAY ? type.getDescriptor() : type.getInternalName() - ); - } else if (value instanceof String[]) { - // 枚举值是 {描述符, 常量名} - collector.collect(((String[]) value)[0]); - } - super.visit(name, value); - } - - @Override - public AnnotationVisitor visitAnnotation(String name, String descriptor) { - collector.collect(descriptor); - return new TargetAnnotationVisitor(collector, super.visitAnnotation(name, descriptor)); - } - - @Override - public AnnotationVisitor visitArray(String name) { - return new TargetAnnotationVisitor(collector, super.visitArray(name)); - } - } - -} diff --git a/gradle/unimined-patch/src/net/fabricmc/loom/util/kotlin/KotlinClasspathService.java b/gradle/unimined-patch/src/net/fabricmc/loom/util/kotlin/KotlinClasspathService.java deleted file mode 100644 index 6e1f9b0a..00000000 --- a/gradle/unimined-patch/src/net/fabricmc/loom/util/kotlin/KotlinClasspathService.java +++ /dev/null @@ -1,55 +0,0 @@ -package net.fabricmc.loom.util.kotlin; - -import org.gradle.api.Project; - -import java.net.URL; -import java.util.Collections; -import java.util.Set; - -/** - * 用来顶掉 unimined 内置的同名类(本补丁 jar 只含这一个 class)。 - * - *

背景:unimined 的 {@code ModRemapProvider#constructRemapper} 会调用 - * {@code KotlinClasspathService.getOrCreateIfRequired(project)},一旦返回非 null, - * 就给 mod 反混淆用的重映射器挂上 loom 的 Kotlin 元数据改写扩展。而 fugue、 - * CraftTweaker2-API 这类 mod 内含 1.4 之前的 Kotlin 元数据,kotlin-metadata-jvm - * 拒绝改写(该限制在 2.3.20 / 2.4.0 等所有版本中都存在),导致整个反混淆阶段抛出 - * {@code Failed to remap ... to mcp},且无法通过调整构建脚本顺序绕过 - * (反混淆发生在 build.gradle 执行完之后)。 - * - *

这里让 {@code getOrCreateIfRequired} 恒返回 null,从而不再启用该扩展。 - * 本项目的 Kotlin 元数据改写需求由 {@code mixinRemap} 自行处理,不依赖此扩展。 - * - *

该 class 被编译进 {@code gradle/unimined-patch/repo} 下的本地 maven 仓库, - * 并在 settings.gradle 中通过 {@code pluginManagement.resolutionStrategy.eachPlugin} - * 以独立模块的形式放到插件类路径最前面,从而覆盖原实现。 - */ -public class KotlinClasspathService implements KotlinClasspath { - - final Set classpath; - final String version; - - public KotlinClasspathService(Set classpath, String version) { - this.classpath = classpath; - this.version = version; - } - - /** 恒返回 null:不启用 Kotlin 元数据改写扩展。 */ - public static KotlinClasspathService getOrCreateIfRequired(Project project) { - return null; - } - - public static synchronized KotlinClasspathService getOrCreate(Project project, String kotlinVersion) { - return new KotlinClasspathService(Collections.emptySet(), kotlinVersion); - } - - @Override - public String version() { - return version; - } - - @Override - public Set classpath() { - return classpath; - } -} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7454180f2ae8848c63b8b4dea2cb829da983f2fa..5097068a8d375f5bf0d15693fb5b3615c972a801 100644 GIT binary patch literal 47623 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 literal 59536 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 QuEJmfE|#`Dqx|px0L@K;Y5)KL diff --git a/gradlew b/gradlew index 3da45c16..249efbb0 100644 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright ? 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -15,10 +15,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # -# Gradle start up script for POSIX generated by Gradle. +# gradlew start up script for POSIX generated by Gradle. # # Important for running: # @@ -27,15 +29,15 @@ # bash, then to run this script, type that shell name before the whole # command line, like: # -# ksh Gradle +# ksh gradlew # # Busybox and similar reduced shells will NOT work, because this script # requires all of these POSIX shell features: # * functions; -# * expansions ?$var?, ?${var}?, ?${var:-default}?, ?${var+SET}?, -# ?${var#prefix}?, ?${var%suffix}?, and ?$( cmd )?; -# * compound commands having a testable exit status, especially ?case?; -# * various built-in commands including ?command?, ?set?, and ?ulimit?. +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». # # Important for patching: # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,13 +82,11 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -114,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -133,22 +132,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -165,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -193,18 +198,27 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index 107acd32..3185a43f 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,19 +13,49 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem -@rem Gradle startup script for Windows +@rem gradlew startup script for Windows @rem @rem ########################################################################## -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal +@rem Set local scope for the variables, and ensure extensions are enabled +setlocal EnableExtensions + +@rem Catch executions from older scripts and ensure they exit cleanly. +@rem This can be removed once we can be reasonably confident that few people +@rem will be migrating directly to this new wrapper. +goto afterSafetyNet +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +goto exitWithErrorLevel +:afterSafetyNet set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,15 +70,16 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +1>&2 echo. +1>&2 echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +1>&2 echo. +1>&2 echo Please set the JAVA_HOME variable in your environment to match the +1>&2 echo location of your Java installation. -goto fail +"%COMSPEC%" /c exit 1 +goto exitWithErrorLevel :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% @@ -56,34 +87,26 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +1>&2 echo. +1>&2 echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +1>&2 echo. +1>&2 echo Please set the JAVA_HOME variable in your environment to match the +1>&2 echo location of your Java installation. -goto fail +"%COMSPEC%" /c exit 1 +goto exitWithErrorLevel :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 -:mainEnd -if "%OS%"=="Windows_NT" endlocal +@rem Execute gradlew +@rem endlocal doesn't take effect until after the line is parsed and variables are expanded +@rem which allows us to clear the local environment before executing the java command +endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel & goto exitWithErrorLevel -:omega +@rem This label must not be changed. We rely on old scripts being able to jump to this point. +:exitWithErrorLevel +@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts +"%COMSPEC%" /c exit %ERRORLEVEL% diff --git a/settings.gradle b/settings.gradle index 50277229..48542f9b 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,8 +1,5 @@ pluginManagement { repositories { - maven { - url = uri('gradle/unimined-patch/repo') - } gradlePluginPortal() { content { excludeGroup('org.apache.logging.log4j') @@ -12,24 +9,11 @@ pluginManagement { maven { url = 'https://maven.minecraftforge.net/' } - maven { - url = 'https://maven.fabricmc.net/' - } - maven { - url = 'https://maven.wagyourtail.xyz/releases' - } - maven { - url = 'https://maven.outlands.top/releases' - } - - maven { - url = 'https://maven.wagyourtail.xyz/snapshots' - } } resolutionStrategy { eachPlugin { - if (requested.id.id == 'xyz.wagyourtail.unimined') { - useModule('novaeng.unimined:UniminedPatch:1.1') + if (requested.id.namespace == 'net.neoforged.moddev') { + useModule("io.github.ruixuqi:moddev-gradle:${requested.version}") } } } diff --git a/src/main/java/github/kasuminova/novaeng/mixin/actinium/MixinActiniumWorldRendererLazyBatch.java b/src/main/java/github/kasuminova/novaeng/mixin/actinium/MixinActiniumWorldRendererLazyBatch.java index f834be84..53348947 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/actinium/MixinActiniumWorldRendererLazyBatch.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/actinium/MixinActiniumWorldRendererLazyBatch.java @@ -32,7 +32,7 @@ public abstract class MixinActiniumWorldRendererLazyBatch { method = "renderBlockEntities(Lcom/dhj/actinium/render/terrain/ActiniumWorldRenderer$TileEntityRenderContext;)I", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher;preDrawBatch()V", - remap = true), + remap = false), remap = false, require = 1 ) @@ -78,7 +78,7 @@ public abstract class MixinActiniumWorldRendererLazyBatch { at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher;drawBatch(I)V", ordinal = 0, - remap = true), + remap = false), remap = false, require = 1 ) @@ -91,7 +91,7 @@ public abstract class MixinActiniumWorldRendererLazyBatch { at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher;drawBatch(I)V", ordinal = 1, - remap = true), + remap = false), remap = false, require = 1 ) diff --git a/src/main/java/github/kasuminova/novaeng/mixin/actuallyadditions/MixinTileEntityPhantomface.java b/src/main/java/github/kasuminova/novaeng/mixin/actuallyadditions/MixinTileEntityPhantomface.java index b772e1ad..96ffadc5 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/actuallyadditions/MixinTileEntityPhantomface.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/actuallyadditions/MixinTileEntityPhantomface.java @@ -11,7 +11,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(TileEntityPhantomface.class) +@Mixin(value = TileEntityPhantomface.class, remap = false) public abstract class MixinTileEntityPhantomface extends TileEntityInventoryBase { @Shadow public BlockPos boundPosition; diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinNetworkInventoryOutputPreparation.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinNetworkInventoryOutputPreparation.java index 02749c84..1f588c4a 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinNetworkInventoryOutputPreparation.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinNetworkInventoryOutputPreparation.java @@ -1,5 +1,6 @@ package github.kasuminova.novaeng.mixin.ae2; +import appeng.tile.inventory.AppEngNetworkInventory; import appeng.util.item.AEItemStack; import github.kasuminova.novaeng.common.performance.AeOutputPreparation; import github.kasuminova.novaeng.common.performance.AeOutputTarget; @@ -8,7 +9,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(targets = "appeng.tile.inventory.AppEngNetworkInventory", remap = false) +@Mixin(value = AppEngNetworkInventory.class, remap = false) public abstract class MixinNetworkInventoryOutputPreparation implements AeOutputTarget { @Redirect(method = "insertItem", at = @At(value = "INVOKE", target = "Lappeng/util/item/AEItemStack;fromItemStack(Lnet/minecraft/item/ItemStack;)Lappeng/util/item/AEItemStack;"), require = 1) diff --git a/src/main/java/github/kasuminova/novaeng/mixin/codechickenlib/MixinCCBlockStateLoader.java b/src/main/java/github/kasuminova/novaeng/mixin/codechickenlib/MixinCCBlockStateLoader.java index 3076fe28..d03cdb55 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/codechickenlib/MixinCCBlockStateLoader.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/codechickenlib/MixinCCBlockStateLoader.java @@ -1,5 +1,6 @@ package github.kasuminova.novaeng.mixin.codechickenlib; +import codechicken.lib.model.loader.blockstate.CCBlockStateLoader; import github.kasuminova.novaeng.NovaEngCoreConfig; import github.kasuminova.stellarcore.client.resource.ClasspathAssetIndex; import net.minecraft.client.resources.IResourceManager; @@ -9,7 +10,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(targets = "codechicken.lib.model.loader.blockstate.CCBlockStateLoader", remap = false) +@Mixin(value = CCBlockStateLoader.class, remap = false) public abstract class MixinCCBlockStateLoader { /** diff --git a/src/main/java/github/kasuminova/novaeng/mixin/crafttweaker/MixinPreprocessorManager.java b/src/main/java/github/kasuminova/novaeng/mixin/crafttweaker/MixinPreprocessorManager.java index 022f3b62..45b13701 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/crafttweaker/MixinPreprocessorManager.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/crafttweaker/MixinPreprocessorManager.java @@ -26,6 +26,10 @@ private void addPreprocessorToFileMap(final String filename, final IPreprocessor throw new AssertionError(); } + /** + * @author NovaEngineering contributors + * @reason Skip non-directive lines early and register recognised preprocessors by script group. + */ @Overwrite(remap = false) private IPreprocessor checkLine(final ScriptFile scriptFile, final String line, final int lineIndex) { final String trimmed = line.trim(); @@ -49,6 +53,10 @@ private IPreprocessor checkLine(final ScriptFile scriptFile, final String line, return preprocessor; } + /** + * @author NovaEngineering contributors + * @reason Execute a snapshot so post-actions can modify the registered preprocessor list safely. + */ @Overwrite(remap = false) private void executePostActions(final ScriptFile scriptFile) { final List preprocessors = preprocessorActionsPerFile.get(scriptFile.getGroupName()); diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ctm/MixinTextureCTMConnectToCache.java b/src/main/java/github/kasuminova/novaeng/mixin/ctm/MixinTextureCTMConnectToCache.java index 444024cf..a521a72d 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/ctm/MixinTextureCTMConnectToCache.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/ctm/MixinTextureCTMConnectToCache.java @@ -31,6 +31,10 @@ public abstract class MixinTextureCTMConnectToCache { @Unique private Reference2ObjectOpenHashMap[]> nova$connectionsByDirection; + /** + * @author NovaEngineering contributors + * @reason Cache connections by source state and direction without allocating composite lookup keys. + */ @Overwrite(remap = false) public boolean connectTo(final CTMLogic logic, final IBlockState from, final IBlockState to, final EnumFacing dir) { diff --git a/src/main/java/github/kasuminova/novaeng/mixin/customloadingscreen/MixinMinecraftDisplayerRenderer.java b/src/main/java/github/kasuminova/novaeng/mixin/customloadingscreen/MixinMinecraftDisplayerRenderer.java index 7c508978..aa804743 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/customloadingscreen/MixinMinecraftDisplayerRenderer.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/customloadingscreen/MixinMinecraftDisplayerRenderer.java @@ -3,9 +3,11 @@ import github.kasuminova.novaeng.NovaEngCoreConfig; import net.minecraft.client.Minecraft; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; +@Pseudo @Mixin(targets = "alexiil.mc.mod.load.render.MinecraftDisplayerRenderer", remap = false) public abstract class MixinMinecraftDisplayerRenderer { diff --git a/src/main/java/github/kasuminova/novaeng/mixin/draconicadditions/MixinRenderTileChaosStabilizerGeometry.java b/src/main/java/github/kasuminova/novaeng/mixin/draconicadditions/MixinRenderTileChaosStabilizerGeometry.java index 903f7cf3..37dccd9a 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/draconicadditions/MixinRenderTileChaosStabilizerGeometry.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/draconicadditions/MixinRenderTileChaosStabilizerGeometry.java @@ -11,6 +11,7 @@ import github.kasuminova.novaeng.client.render.CclModelGeometryCache; import net.minecraft.client.renderer.GlStateManager; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -21,6 +22,7 @@ * * @see github.kasuminova.novaeng.mixin.draconicevolution.MixinRenderTileReactorCoreGeometry */ +@Pseudo @Mixin(targets = "net.foxmcloud.draconicadditions.client.render.tile.RenderTileChaosStabilizerCore", remap = false) public abstract class MixinRenderTileChaosStabilizerGeometry { diff --git a/src/main/java/github/kasuminova/novaeng/mixin/electroblobs/MixinModelBookshelfConcurrent.java b/src/main/java/github/kasuminova/novaeng/mixin/electroblobs/MixinModelBookshelfConcurrent.java index 59dd81dc..15d0bde5 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/electroblobs/MixinModelBookshelfConcurrent.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/electroblobs/MixinModelBookshelfConcurrent.java @@ -1,5 +1,7 @@ package github.kasuminova.novaeng.mixin.electroblobs; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import electroblob.wizardry.block.BlockBookshelf; import electroblob.wizardry.client.model.ModelBookshelf; import github.kasuminova.novaeng.client.model.async.ModelBookshelfBakeCache; @@ -18,9 +20,6 @@ import java.util.List; import java.util.function.Function; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; - /** Builds each Wizardry bookshelf variant off-thread and publishes only complete results. */ @Mixin(value = ModelBookshelf.class, remap = false) public abstract class MixinModelBookshelfConcurrent { @@ -33,6 +32,10 @@ public abstract class MixinModelBookshelfConcurrent { @Shadow private String variant; + /** + * @author NovaEngineering contributors + * @reason Publish complete bookshelf model arrays through the concurrent bake cache. + */ @Overwrite(remap = false) protected IBakedModel[][] getBakedBookModels(final VertexFormat format, final Function bakedTextureGetter) throws Exception { diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ic2/MixinTileEntityBlock.java b/src/main/java/github/kasuminova/novaeng/mixin/ic2/MixinTileEntityBlock.java index 6f22fc70..560e528f 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/ic2/MixinTileEntityBlock.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/ic2/MixinTileEntityBlock.java @@ -12,7 +12,7 @@ @Mixin(TileEntityBlock.class) public class MixinTileEntityBlock extends TileEntity { - @Shadow + @Shadow(remap = false) private byte loadState; @Inject(method = "validate", at = @At(value = "INVOKE", target = "Lic2/core/block/TileEntityBlock;getWorld()Lnet/minecraft/world/World;"), cancellable = true) diff --git a/src/main/java/github/kasuminova/novaeng/mixin/immersiveengineering/MixinTileEntityMultiblockPart.java b/src/main/java/github/kasuminova/novaeng/mixin/immersiveengineering/MixinTileEntityMultiblockPart.java index b689b0ac..eed997f6 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/immersiveengineering/MixinTileEntityMultiblockPart.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/immersiveengineering/MixinTileEntityMultiblockPart.java @@ -17,7 +17,9 @@ public abstract class MixinTileEntityMultiblockPart> iterator = this.pendingWrites.entrySet().iterator(); - while (iterator.hasNext()) { - final Entry next = iterator.next(); + for (Entry next : this.pendingWrites.entrySet()) { if (this.pendingWrites.remove(next.getKey(), next.getValue())) { final JMChunkStorage stor = this.storage; if (stor != null) { diff --git a/src/main/java/github/kasuminova/novaeng/mixin/konkrete/MixinLocalsCopy.java b/src/main/java/github/kasuminova/novaeng/mixin/konkrete/MixinLocalsCopy.java index 85bdb91f..cb4e7bae 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/konkrete/MixinLocalsCopy.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/konkrete/MixinLocalsCopy.java @@ -4,6 +4,7 @@ import net.minecraft.util.ResourceLocation; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Pseudo; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -27,9 +28,14 @@ * writer is kept as it was, including the fact that a failure to open the source reports through * {@code printStackTrace} and leaves whatever was already created closed.

*/ +@Pseudo @Mixin(targets = "de.keksuccino.konkrete.localization.Locals", remap = false) public abstract class MixinLocalsCopy { + /** + * @author NovaEngineering contributors + * @reason Stream localisation lines to the output instead of repeatedly copying the whole file. + */ @Overwrite(remap = false) public static void copyLocalsFileToDir(final ResourceLocation file, final String language, final String saveDirWithoutFilename) { diff --git a/src/main/java/github/kasuminova/novaeng/mixin/librarianlib/MixinSavingFieldCache.java b/src/main/java/github/kasuminova/novaeng/mixin/librarianlib/MixinSavingFieldCache.java index dce22b18..948a47fd 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/librarianlib/MixinSavingFieldCache.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/librarianlib/MixinSavingFieldCache.java @@ -1,5 +1,6 @@ package github.kasuminova.novaeng.mixin.librarianlib; +import com.teamwizardry.librarianlib.features.saving.SavingFieldCache; import github.kasuminova.novaeng.NovaEngCoreConfig; import kotlin.Metadata; import kotlin.jvm.JvmClassMappingKt; @@ -12,7 +13,7 @@ import java.util.Collection; import java.util.Collections; -@Mixin(targets = "com.teamwizardry.librarianlib.features.saving.SavingFieldCache", remap = false) +@Mixin(value = SavingFieldCache.class, remap = false) public abstract class MixinSavingFieldCache { /** diff --git a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinChunkEntityQuery.java b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinChunkEntityQuery.java index 62d85642..e8bfc21b 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinChunkEntityQuery.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinChunkEntityQuery.java @@ -21,6 +21,10 @@ public abstract class MixinChunkEntityQuery { @Final private ClassInheritanceMultiMap[] entityLists; + /** + * @author NovaEngineering contributors + * @reason Walk entity lists by index to avoid per-section iterator allocations during bounds queries. + */ @Overwrite public void getEntitiesWithinAABBForEntity(final Entity excluded, final AxisAlignedBB bounds, diff --git a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinClassInheritanceMultiMapIterator.java b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinClassInheritanceMultiMapIterator.java index 7188a024..b194a76a 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinClassInheritanceMultiMapIterator.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinClassInheritanceMultiMapIterator.java @@ -34,11 +34,15 @@ public abstract class MixinClassInheritanceMultiMapIterator { map = new Reference2ObjectOpenHashMap<>(); } - @Redirect(method = "", at = @At(value = "INVOKE", target = "Lcom/google/common/collect/Sets;newIdentityHashSet()Ljava/util/Set;")) + @Redirect(method = "", at = @At(value = "INVOKE", target = "Lcom/google/common/collect/Sets;newIdentityHashSet()Ljava/util/Set;", remap = false)) public Set nova$redSet() { return new ReferenceOpenHashSet<>(); } + /** + * @author NovaEngineering contributors + * @reason Filter the stored class list without allocating Guava filtering wrappers. + */ @Overwrite public Iterable getByClass(final Class clazz) { final Class key = this.initializeClassLookup(clazz); diff --git a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinConditionAndCanonicalization.java b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinConditionAndCanonicalization.java index 6b5710e9..b12f195f 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinConditionAndCanonicalization.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinConditionAndCanonicalization.java @@ -25,6 +25,10 @@ public abstract class MixinConditionAndCanonicalization { @Unique private final BlockStatePredicateCache nova$predicateCache = new BlockStatePredicateCache(); + /** + * @author NovaEngineering contributors + * @reason Cache and canonicalise conjunction predicates for each block state container. + */ @Overwrite public Predicate getPredicate(final BlockStateContainer blockState) { return nova$predicateCache.getOrCompute(blockState, () -> { diff --git a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinConditionOrCanonicalization.java b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinConditionOrCanonicalization.java index e793fac1..6ab1e6eb 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinConditionOrCanonicalization.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinConditionOrCanonicalization.java @@ -25,6 +25,10 @@ public abstract class MixinConditionOrCanonicalization { @Unique private final BlockStatePredicateCache nova$predicateCache = new BlockStatePredicateCache(); + /** + * @author NovaEngineering contributors + * @reason Cache and canonicalise disjunction predicates for each block state container. + */ @Overwrite public Predicate getPredicate(final BlockStateContainer blockState) { return nova$predicateCache.getOrCompute(blockState, () -> { diff --git a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinFaceBakeryAllocations.java b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinFaceBakeryAllocations.java index b5d63aac..100b2a13 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinFaceBakeryAllocations.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinFaceBakeryAllocations.java @@ -34,7 +34,7 @@ public abstract class MixinFaceBakeryAllocations { */ @Redirect(method = "fillVertexData([IILnet/minecraft/util/EnumFacing;Lnet/minecraft/client/renderer/block/model/BlockFaceUV;[FLnet/minecraft/client/renderer/texture/TextureAtlasSprite;Lnet/minecraftforge/common/model/ITransformation;Lnet/minecraft/client/renderer/block/model/BlockPartRotation;Z)V", at = @At(value = "NEW", target = "org/lwjgl/util/vector/Vector3f"), - require = 1) + remap = false, require = 1) private Vector3f nova$reuseVertex(final float x, final float y, final float z) { final Vector3f vertex = NOVA_VERTEX.get(); vertex.set(x, y, z); @@ -54,7 +54,7 @@ public abstract class MixinFaceBakeryAllocations { @Redirect(method = "rotateVertex(Lorg/lwjgl/util/vector/Vector3f;Lnet/minecraft/util/EnumFacing;ILnet/minecraftforge/common/model/ITransformation;)I", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/common/model/ITransformation;getMatrix()Ljavax/vecmath/Matrix4f;", remap = false), - require = 1) + remap = false, require = 1) private Matrix4f nova$readModelMatrix(final ITransformation transformation) { return ModelTransformAccess.readOnlyMatrix(transformation); } diff --git a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinInventoryPlayer.java b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinInventoryPlayer.java index e4b1208b..441158d7 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinInventoryPlayer.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinInventoryPlayer.java @@ -11,15 +11,24 @@ @Mixin(InventoryPlayer.class) public abstract class MixinInventoryPlayer { - @Shadow @Final public NonNullList mainInventory; + @Shadow + public NonNullList mainInventory; @Shadow @Final public NonNullList armorInventory; @Shadow @Final public NonNullList offHandInventory; + /** + * @author NovaEngineering contributors + * @reason Return the fixed vanilla slot count without traversing the inventory lists. + */ @Overwrite public int getSizeInventory() { return 41; } + /** + * @author NovaEngineering contributors + * @reason Index directly into the matching inventory list instead of traversing all lists. + */ @Overwrite public ItemStack getStackInSlot(final int index) { if (index < 36) { @@ -29,7 +38,7 @@ public ItemStack getStackInSlot(final int index) { return this.armorInventory.get(index - 36); } if (index == 40) { - return this.offHandInventory.get(0); + return this.offHandInventory.getFirst(); } return ItemStack.EMPTY; } diff --git a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinNetworkManagerBandwidth.java b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinNetworkManagerBandwidth.java index d78151e0..d0a85640 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinNetworkManagerBandwidth.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinNetworkManagerBandwidth.java @@ -23,7 +23,7 @@ public class MixinNetworkManagerBandwidth { } @ModifyArg(method = "setCompressionThreshold", at = @At(value = "INVOKE", - target = "Lio/netty/channel/ChannelPipeline;addBefore(Ljava/lang/String;Ljava/lang/String;Lio/netty/channel/ChannelHandler;)Lio/netty/channel/ChannelPipeline;"), index = 0) + target = "Lio/netty/channel/ChannelPipeline;addBefore(Ljava/lang/String;Ljava/lang/String;Lio/netty/channel/ChannelHandler;)Lio/netty/channel/ChannelPipeline;", remap = false), index = 0) private String novaeng$compressionOutsideAggregation(String original) { return NovaBandwidth.compressionAnchor((NetworkManager) (Object) this, original); } diff --git a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinResourceLocation.java b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinResourceLocation.java index b0dc286d..75b930ae 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinResourceLocation.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/MixinResourceLocation.java @@ -1,7 +1,6 @@ package github.kasuminova.novaeng.mixin.minecraft; import net.minecraft.util.ResourceLocation; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; @@ -11,11 +10,9 @@ public abstract class MixinResourceLocation { @Shadow - @Final protected String namespace; @Shadow - @Final protected String path; @Unique @@ -24,11 +21,19 @@ public abstract class MixinResourceLocation { @Unique private volatile int nova$stableHash; + /** + * @author NovaEngineering contributors + * @reason Cache the string representation of this immutable resource location. + */ @Overwrite public String toString() { return nova$stableValue(); } + /** + * @author NovaEngineering contributors + * @reason Reuse the hash of the immutable namespace and path on repeated lookups. + */ @Overwrite public int hashCode() { int hash = this.nova$stableHash; diff --git a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/forge/MixinFMLOutboundHandlerReply.java b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/forge/MixinFMLOutboundHandlerReply.java index 4f0f4530..31098a7a 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/forge/MixinFMLOutboundHandlerReply.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/forge/MixinFMLOutboundHandlerReply.java @@ -35,6 +35,7 @@ * guard and answer with the original call, so the cost of that drift is the exception coming back, not a guard placed * on the wrong target. */ +@SuppressWarnings("unresolvable-target") // Anonymous enum body exists in bytecode but is invisible to javac's model. @Mixin(targets = "net.minecraftforge.fml.common.network.FMLOutboundHandler$OutboundTarget$3", remap = false) public abstract class MixinFMLOutboundHandlerReply { diff --git a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/forge/MixinModelLoaderTextureContext.java b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/forge/MixinModelLoaderTextureContext.java index ed0304c2..79e23d6d 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/forge/MixinModelLoaderTextureContext.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/forge/MixinModelLoaderTextureContext.java @@ -8,6 +8,7 @@ import net.minecraft.client.renderer.vertex.VertexFormat; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.model.IModel; +import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.common.model.IModelState; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -15,7 +16,7 @@ import java.util.function.Function; /** Publishes the current bake texture getter to repaired asynchronous model implementations. */ -@Mixin(targets = "net.minecraftforge.client.model.ModelLoader", remap = false) +@Mixin(value = ModelLoader.class, remap = false) public abstract class MixinModelLoaderTextureContext { @WrapOperation( diff --git a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/forge/MixinModelLoaderVanillaModelWrapper.java b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/forge/MixinModelLoaderVanillaModelWrapper.java index 42086249..06de12f4 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/minecraft/forge/MixinModelLoaderVanillaModelWrapper.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/minecraft/forge/MixinModelLoaderVanillaModelWrapper.java @@ -23,6 +23,7 @@ @Mixin(targets = "net.minecraftforge.client.model.ModelLoader$VanillaModelWrapper", remap = false) public abstract class MixinModelLoaderVanillaModelWrapper { + @SuppressWarnings("target") // javac hides the synthetic outer-instance field from annotation processors. @Shadow @Final ModelLoader this$0; diff --git a/src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinTaskExecutor.java b/src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinTaskExecutor.java index 2c9fe99f..f24706bd 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinTaskExecutor.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinTaskExecutor.java @@ -26,7 +26,7 @@ import java.util.Set; import java.util.concurrent.ForkJoinTask; -@Mixin(TaskExecutor.class) +@Mixin(value = TaskExecutor.class, remap = false) public abstract class MixinTaskExecutor implements ITaskExecutor { @Unique @@ -70,7 +70,6 @@ public abstract class MixinTaskExecutor implements ITaskExecutor { } @Unique - @SuppressWarnings("unchecked") private static Long2ObjectMap nova$groupMap(final Long2ObjectMap groups) { try { return (Long2ObjectMap) NOVA_GROUP_MAP.invoke(groups); @@ -120,6 +119,10 @@ public void addTEMarkTask(final TileEntity te) { return queue; } + /** + * @author NovaEngineering contributors + * @reason Submit queued work and walk execute-group storage directly to avoid temporary entry allocations. + */ @Overwrite private synchronized void submitTask() { ActionExecutor executor; diff --git a/src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinTileEnergyHatchDEBinding.java b/src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinTileEnergyHatchDEBinding.java index d0ba584c..74db6f7a 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinTileEnergyHatchDEBinding.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinTileEnergyHatchDEBinding.java @@ -23,6 +23,9 @@ public abstract class MixinTileEnergyHatchDEBinding extends TileColorableMachine * Deliberately empty: the hatch used to scan for a DE core from its own tick. The core is now bound through * {@link DECoreBindingIndex}, which listens to the circulation-networks tile entity lifecycle events, so the scan * must not run. The visibility has to match the target method, else Mixin only warns and silently upgrades it. + * + * @author NovaEngineering contributors + * @reason Replace per-tick core scans with lifecycle-driven bindings from DECoreBindingIndex. */ @Overwrite protected void findCore() { diff --git a/src/main/java/github/kasuminova/novaeng/mixin/neofontrender/MixinCosmicBlendStateBufferReuse.java b/src/main/java/github/kasuminova/novaeng/mixin/neofontrender/MixinCosmicBlendStateBufferReuse.java index a72d1128..fbb333bb 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/neofontrender/MixinCosmicBlendStateBufferReuse.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/neofontrender/MixinCosmicBlendStateBufferReuse.java @@ -2,12 +2,14 @@ import github.kasuminova.novaeng.client.font.FontGlStateScratch; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; import java.nio.ByteBuffer; import java.nio.FloatBuffer; +@Pseudo @Mixin(targets = "neofontrender.core.font.cosmic.CosmicTextRenderer$PremultipliedBlendState", remap = false) public abstract class MixinCosmicBlendStateBufferReuse { @Redirect( diff --git a/src/main/java/github/kasuminova/novaeng/mixin/neofontrender/MixinFontRenderTuningBufferReuse.java b/src/main/java/github/kasuminova/novaeng/mixin/neofontrender/MixinFontRenderTuningBufferReuse.java index 66d16d37..44ad51bb 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/neofontrender/MixinFontRenderTuningBufferReuse.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/neofontrender/MixinFontRenderTuningBufferReuse.java @@ -2,11 +2,13 @@ import github.kasuminova.novaeng.client.font.FontGlStateScratch; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; import java.nio.FloatBuffer; +@Pseudo @Mixin(targets = "neofontrender.core.font.support.FontRenderTuning", remap = false) public abstract class MixinFontRenderTuningBufferReuse { @Redirect( diff --git a/src/main/java/github/kasuminova/novaeng/mixin/reid/MixinReidSectionAccess.java b/src/main/java/github/kasuminova/novaeng/mixin/reid/MixinReidSectionAccess.java index 208fa994..07d36c8c 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/reid/MixinReidSectionAccess.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/reid/MixinReidSectionAccess.java @@ -13,9 +13,11 @@ */ @Mixin(value = BlockStateContainer.class, priority = 1001) public abstract class MixinReidSectionAccess implements ReidSectionAccess { + @SuppressWarnings("target") // Added by REID before this mixin is applied. @Shadow(remap = false) @Dynamic(mixin = MixinBlockStateContainer.class) private int[] temporaryPalette; + @SuppressWarnings("target") // Added by REID before this mixin is applied. @Shadow(remap = false) @Dynamic(mixin = MixinBlockStateContainer.class) private NibbleArray add2; From cb17fab8e879c2cba23732e9017dbbd3022e84e7 Mon Sep 17 00:00:00 2001 From: vcwdfca <2168409010@qq.com> Date: Mon, 14 Sep 2026 19:10:53 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../runtime-test-config/random_complement.cfg | 111 ++++ gradle/scripts/dependencies.gradle | 20 +- gradle/scripts/extra.gradle | 195 +++++++ lib/appcompat-0.0.0+ecf0ef8-dev.jar | Bin 0 -> 610115 bytes .../novaeng/NovaEngineeringCore.java | 5 +- .../novaeng/client/ClientProxy.java | 12 - .../client/gui/GuiEFabricatorPatternBus.java | 9 +- .../novaeng/client/gui/GuiNEWCraftConfirm.kt | 42 -- .../gui/widget/ecalculator/MonitorPanel.java | 6 +- .../gui/widget/efabricator/PatternPanel.java | 44 +- .../gui/widget/efabricator/PatternSlot.java | 48 +- .../gui/widget/vanilla/GuiButtonImageExt.java | 62 --- .../handler/BlockAngelRendererHandler.java | 61 +-- .../client/util/RCGuiCraftConfirm.java | 8 - .../kasuminova/novaeng/common/CommonProxy.kt | 43 +- .../BlockECalculatorCellDrive.java | 6 +- .../BlockECalculatorThreadCore.java | 2 +- .../BlockEFabricatorPatternBus.java | 6 +- .../estorage/BlockEStorageCellDrive.java | 35 +- .../common/command/CommandBuilder.java | 2 +- .../ContainerEFabricatorPatternBus.java | 12 +- .../container/ContainerNEWCraftConfirm.kt | 49 -- .../container/data/ECalculatorData.java | 68 +-- .../data/EFabricatorPatternData.java | 4 +- .../container/data/EStorageCellData.java | 32 +- .../common/ecalculator/ECPUCluster.java | 2 +- .../common/estorage/ECellDriveWatcher.java | 70 +-- .../common/estorage/EStorageCellHandler.java | 37 -- .../estorage/EStorageCellInventory.java | 376 -------------- .../handler/ECalculatorEventHandler.java | 28 +- .../common/handler/EStorageEventHandler.java | 32 +- .../theoneprobe/ECalculatorInfoProvider.java | 15 +- .../novaeng/common/item/ItemBlockME.java | 8 +- .../common/item/ItemMachineAssemblyTool.kt | 79 ++- .../common/item/estorage/EStorageCell.java | 61 +-- .../item/estorage/EStorageCellFluid.java | 18 +- .../common/item/estorage/EStorageCellGas.java | 14 +- .../item/estorage/EStorageCellItem.java | 11 +- .../machine/BiogenicSimulationComputer.kt | 2 +- .../kasuminova/novaeng/common/mod/Mods.java | 20 +- .../network/ParallelNetworkManager.java | 35 -- .../common/network/PktAutoCraftConfirm.kt | 33 -- .../PktEFabricatorPatternSearchGUIAction.java | 2 +- .../common/network/PktEStorageGUIData.java | 2 +- .../network/PktPatternTermUploadPattern.kt | 68 +-- .../common/registry/RegistryAssembly.kt | 32 +- .../common/tile/TileCustomControllerME.java | 136 ++--- .../ecalculator/ECalculatorCellDrive.java | 49 +- .../ecalculator/ECalculatorController.java | 5 +- .../ecalculator/ECalculatorMEChannel.java | 156 +++--- .../ecalculator/ECalculatorThreadCore.java | 6 +- .../efabricator/EFabricatorController.kt | 90 ++-- .../efabricator/EFabricatorMEChannel.kt | 241 ++++----- .../efabricator/EFabricatorPatternBus.kt | 116 ++--- .../ecotech/efabricator/EFabricatorWorker.kt | 38 +- .../ecotech/estorage/EStorageCellDrive.java | 210 ++------ .../ecotech/estorage/EStorageController.java | 26 +- .../ecotech/estorage/EStorageEnergyCell.java | 2 +- .../ecotech/estorage/EStorageMEChannel.java | 328 +++++++----- .../novaeng/common/util/AEItemStackSet.java | 25 +- .../novaeng/common/util/AssemblyBlockArray.kt | 60 +-- .../novaeng/common/util/AutoCraftingQueue.kt | 89 ---- .../novaeng/common/util/EmptyQueue.kt | 81 --- .../novaeng/common/util/MixinDecisions.java | 4 - .../common/util/NEWMachineAssemblyManager.kt | 77 ++- .../ae2/AccessorAbstractCellInventory.java | 35 -- .../mixin/ae2/AccessorCellRegistry.java | 16 - .../ae2/AccessorContainerCraftConfirm.java | 19 - .../ae2/AccessorContainerPatternEncoder.java | 18 - .../mixin/ae2/AccessorCraftingCPURecord.java | 13 - .../mixin/ae2/AccessorGuiCraftConfirm.java | 16 - .../ae2/MixinAppEngClientPacketHandler.java | 29 -- .../ae2/MixinAppEngServerPacketHandler.java | 34 -- .../mixin/ae2/MixinCraftingCPUCluster.java | 240 +++------ .../mixin/ae2/MixinCraftingCPUClusterTwo.java | 481 ------------------ .../mixin/ae2/MixinCraftingCPUStatus.java | 48 -- .../mixin/ae2/MixinCraftingGridCache.java | 68 --- .../mixin/ae2/MixinGridStorageCache.java | 31 -- .../mixin/ae2/MixinGuiCraftConfirm.java | 10 - .../mixin/ae2/MixinGuiCraftingStatus.java | 163 ------ .../mixin/ae2/MixinGuiPatternTerm.java | 58 --- ...ixinNetworkInventoryOutputPreparation.java | 19 - .../mixin/ae2/MixinPacketInventoryAction.java | 39 -- .../mixin/ae2/MixinTileChestFilter.java | 9 +- .../mixin/ae2/MixinTileDriveFilter.java | 9 +- .../mixin/ae2/MixinUVLModelLoader.java | 35 -- .../betterp2p/MixinServerLinkP2PHandler.java | 40 -- .../MixinServerUnlinkP2PHandler.java | 38 -- .../mixin/mmce/MixinMEPatternProvider.java | 25 - .../mixin/nae2/MixinJEICellCategory.java | 33 -- src/main/resources/novaeng_core.mixin.json | 21 - 91 files changed, 1433 insertions(+), 3680 deletions(-) create mode 100644 .github/runtime-test-config/random_complement.cfg create mode 100644 lib/appcompat-0.0.0+ecf0ef8-dev.jar delete mode 100644 src/main/java/github/kasuminova/novaeng/client/gui/GuiNEWCraftConfirm.kt delete mode 100644 src/main/java/github/kasuminova/novaeng/client/gui/widget/vanilla/GuiButtonImageExt.java delete mode 100644 src/main/java/github/kasuminova/novaeng/client/util/RCGuiCraftConfirm.java delete mode 100644 src/main/java/github/kasuminova/novaeng/common/container/ContainerNEWCraftConfirm.kt delete mode 100644 src/main/java/github/kasuminova/novaeng/common/estorage/EStorageCellHandler.java delete mode 100644 src/main/java/github/kasuminova/novaeng/common/estorage/EStorageCellInventory.java delete mode 100644 src/main/java/github/kasuminova/novaeng/common/network/PktAutoCraftConfirm.kt delete mode 100644 src/main/java/github/kasuminova/novaeng/common/util/AutoCraftingQueue.kt delete mode 100644 src/main/java/github/kasuminova/novaeng/common/util/EmptyQueue.kt delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorAbstractCellInventory.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorCellRegistry.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorContainerCraftConfirm.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorContainerPatternEncoder.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorCraftingCPURecord.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorGuiCraftConfirm.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinAppEngClientPacketHandler.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinAppEngServerPacketHandler.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCraftingCPUClusterTwo.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCraftingCPUStatus.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCraftingGridCache.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinGridStorageCache.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinGuiCraftConfirm.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinGuiCraftingStatus.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinGuiPatternTerm.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinNetworkInventoryOutputPreparation.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinPacketInventoryAction.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinUVLModelLoader.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/betterp2p/MixinServerLinkP2PHandler.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/betterp2p/MixinServerUnlinkP2PHandler.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinMEPatternProvider.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/nae2/MixinJEICellCategory.java diff --git a/.github/runtime-test-config/random_complement.cfg b/.github/runtime-test-config/random_complement.cfg new file mode 100644 index 00000000..4fc99b51 --- /dev/null +++ b/.github/runtime-test-config/random_complement.cfg @@ -0,0 +1,111 @@ +# Configuration file + +general { + # Enable additional item information prompts + B:ExTooltip=true + + ae2 { + # Sets the texture index used for the crafting item slot + # Min: 0 + # Max: 6 + I:CraftingSlotTextureIndex=1 + + # Enable the whole AE ecosystem integration + B:Enable=false + + # Disable the Build permission check for AE2's security station + B:SecurityCache=true + + # Make the grid always think it's full of energy + B:debugEnergy=false + + # Drag item from JEI into the search box to automatically enter the name + B:dragJeiItemToSearchBox=true + + # Allow multiple pattern to synthesize the same product + # May have potential performance implications; consider disabling if not needed. + B:enableBranchCraft=true + + # Enable miss craft feature + B:enableMissCraft=true + + # Use the new Patten Terminal Gui + # Closing will cause all patterns created while enabled to become invalid. + B:newPattenGui=true + } + + ic2 { + # The additional energy storage provided by each Energy Storage Upgrade + I:energyStorageEnergy=10000 + + # The increased energy consumption caused by each Overclocker Upgrade + D:overclockerEnergy=1.6 + + # The reduced processing time effected by each Overclocker Upgrade + D:overclockerTime=0.7 + } + + lazyae { + # Fixes related to the lazy ae feature may occasionally introduce errors; disabling it can prevent such issues. + B:EnableRepair=true + } + + te5 { + # Set the efficiency of the Fuel Catalyzer, which defaults to 15 + I:FuelCatalyzer=15 + + # Whether to enable energy consumption boost, just like the original upgrade state + B:FuelCatalyzerQuantityChanges=true + + # Whether to enable energy consumption boost, just like the original upgrade state + B:IncreasedEnergyConsumption=false + + # The maximum chance of modifying an item to be reused is 100 + B:SecondaryProbability=true + + # Prevent the Thermal Expansion Cyclic Assembler from operating when the output slot contains items to avoid potential bugs + B:SequentialFabricatorMixin=true + } + + ftbu { + # Change the name of the nbtedit command of FTB + B:ModifyCmdEditNBT=false + } + + tf5 { + # When the offhand has a red map and the player is crouching, cancel the clear setting + B:RedDiagramOfTheDeputy=true + } + + botania { + # Allow the use of sparks on Botanical Brewery + B:BrewerySparkSupport=false + + # Fix some bugs. If there is a problem as a result, it should be closed + B:BugFix=true + + # Allow flor geradora to directly link to the mana pool + B:FlowerLinkPool=false + + # Allow the use of sparks on Runic Altar + B:RuneAltarSparkSupport=false + + # If false, Spark Support will not take effect + B:SparkSupport=false + } + + cofhcohe { + # Modify the number of upgrades that can be placed in slots + # Min: 1 + # Max: 64 + I:SocketLimitModified=1 + } + + nee { + # Whether to enable NEE compatibility for ae2exttable. + B:ae2e=true + } + +} + + diff --git a/gradle/scripts/dependencies.gradle b/gradle/scripts/dependencies.gradle index 16e890d3..a8c4417c 100644 --- a/gradle/scripts/dependencies.gradle +++ b/gradle/scripts/dependencies.gradle @@ -30,6 +30,10 @@ repositories { name = 'Modrinth' url = 'https://api.modrinth.com/maven' } + maven { + name = 'jitpack' + url = 'https://jitpack.io' + } mavenCentral() mavenLocal() // Must be last for caching to work } @@ -76,11 +80,10 @@ dependencies { modCompileOnly 'curse.maven:zettai-psi-537428:3662855' modImplementation("curse.maven:circulation-flow-networks-1519385:8699343") modImplementation name: 'ModularMachinery-CE', version: '2.3.3', classifier: 'dev' - modImplementation 'curse.maven:extended-crafting-terminals-for-applied-1157825:6503414' + modImplementation name: 'appcompat', version: '0.0.0+ecf0ef8', classifier: 'dev' modImplementation 'curse.maven:lumenized-1234162:6734060' modImplementation 'curse.maven:mantle-74924:2713386' modImplementation 'curse.maven:tinkers-construct-74072:2902483' - modImplementation 'curse.maven:not-enough-energistics-515565:5234732' modImplementation 'curse.maven:psi-241665:3085917' modImplementation 'curse.maven:psio-339394:3077697' modImplementation 'curse.maven:RandomTweaker-514170:5528753' @@ -90,11 +93,9 @@ dependencies { modImplementation 'curse.maven:the-one-probe-245211:2667280' modImplementation 'curse.maven:FTB-Library-237167:2985811' modImplementation 'curse.maven:FTBU-237102:3157548' - modImplementation 'curse.maven:ae2-extended-life-570458:6302098' - modImplementation 'curse.maven:ae2fluidcraft-rework-unofficial-1404390:7336029' - modCompileOnly 'curse.maven:MekanismEnergistics-1027681:5775101' - modImplementation 'curse.maven:nae2-884359:5380800' - modImplementation 'curse.maven:CodeChickenLib-242818:2779848' + modImplementation 'com.github.FormlessDragon:Applied-Energistics-2-Supergiant:v1.0.14:dev' + modCompileOnly 'com.github.FormlessDragon:Applied-Mekanistics:v1.1.1:dev' + modImplementation 'curse.maven:codechicken-lib-cre-1328922:6898525' modImplementation 'curse.maven:wanionlib-253043:4623135' modImplementation 'curse.maven:avaritia-1-1x-unofficial-1165010:7939693' modImplementation 'curse.maven:eternal-singularity-253077:2922583' @@ -124,7 +125,6 @@ dependencies { modCompileOnly 'curse.maven:more-electric-tools-366298:3491973' modImplementation 'curse.maven:extrabotany-299086:3112313' modImplementation 'curse.maven:libnine-322344:3073839' - modImplementation 'curse.maven:lazy-ae2-322347:3254160' modCompileOnly 'curse.maven:better-chat-363860:3048407' modCompileOnly 'curse.maven:lunatriuscore-225605:2489549' modCompileOnly 'curse.maven:immersive-engineering-231951:2974106' @@ -136,7 +136,6 @@ dependencies { modImplementation 'curse.maven:extended-crafting-nomifactory-edition-398267:5778512' modImplementation 'curse.maven:techguns-244201:2958103' modImplementation 'curse.maven:legendary-tooltips-532127:5734973' - modImplementation 'curse.maven:betterer-p2p-943734:4928154' modImplementation 'curse.maven:nuclearcraft-overhauled-336895:6605808' modImplementation 'curse.maven:loot-overhaul-299389:2711740' modImplementation 'curse.maven:BloodMagic-224791:2822288' @@ -145,7 +144,7 @@ dependencies { modRuntimeOnly 'curse.maven:patchouli-306770:3162874' modCompileOnly 'curse.maven:libvulpes-236541:3801015' modCompileOnly 'curse.maven:advanced-rocketry-236542:4671856' - modImplementation 'curse.maven:random-complement-1198138:7340975' + modImplementation 'curse.maven:random-complement-1198138:8828633' modImplementation 'curse.maven:modular-routers-250294:2954953' modCompileOnly 'curse.maven:actually-additions-228404:3117927' modImplementation 'curse.maven:brandons-core-231382:3408276' @@ -168,4 +167,5 @@ dependencies { modCompileOnly 'curse.maven:vintagefix-871198:8895999' modCompileOnly 'curse.maven:universal-tweaks-705000:5138787' modImplementation("curse.maven:reid-629017:8029704") + modCompileOnly "curse.maven:mouse-tweaks-unofficial-461660:5876158" } diff --git a/gradle/scripts/extra.gradle b/gradle/scripts/extra.gradle index 319363cf..2e406cae 100644 --- a/gradle/scripts/extra.gradle +++ b/gradle/scripts/extra.gradle @@ -140,6 +140,201 @@ tasks.register('installRuntimeTestClient', JavaExec) { } } +def runtimeTestConfigDir = layout.projectDirectory.dir('.github/runtime-test-config') +def runtimeTestServerConfigDir = layout.buildDirectory.dir('runtime-test/server/config') +def runtimeTestInstanceTemplate = layout.buildDirectory.file( + 'runtime-test/cleanroom-instance-template.zip' +) +def runtimeTestTemplateRequiredEntries = [ + 'instance.cfg', + 'mmc-pack.json', + 'patches/net.minecraft.json', + 'patches/net.minecraftforge.json', + 'patches/org.lwjgl3.json' +] + +def runtimeTestConfigFiles = providers.provider { + def dir = runtimeTestConfigDir.asFile + if (!dir.isDirectory()) { + return [] + } + def files = dir.listFiles({ candidate -> + candidate.isFile() && candidate.name.endsWith('.cfg') + } as FileFilter) + if (files == null) { + return [] + } + return files.toList().sort { left, right -> left.name <=> right.name } +} + +def downloadRuntimeTestTemplate = { String downloadUrl, File target -> + def partial = new File(target.parentFile, "${target.name}.part") + def lastError = null + for (int attempt = 1; attempt <= 3; attempt++) { + try { + java.net.HttpURLConnection connection = + java.net.URI.create(downloadUrl).toURL().openConnection() + connection.setConnectTimeout(30000) + connection.setReadTimeout(120000) + connection.setInstanceFollowRedirects(true) + connection.setRequestProperty('User-Agent', 'novaeng-runtime-test') + def status = connection.getResponseCode() + if (status != 200) { + throw new GradleException("HTTP ${status}") + } + partial.withOutputStream { output -> + connection.getInputStream().withCloseable { input -> + input.transferTo(output) + } + } + connection.disconnect() + return partial + } catch (Exception error) { + lastError = error + partial.delete() + logger.lifecycle( + "[RuntimeTest] 模板下载第 ${attempt} 次失败:${error.message}" + ) + if (attempt < 3) { + Thread.sleep(2000L * attempt) + } + } + } + throw new GradleException( + "无法下载 Cleanroom 模板 ${downloadUrl}:${lastError}" + ) +} + +def stageRuntimeTestServerConfig = tasks.register('stageRuntimeTestServerConfig', Sync) { + group = 'unimined' + description = '把 .github/runtime-test-config 下的 cfg 放到运行时测试服务端的 config 目录。' + from(runtimeTestConfigDir) { + include '*.cfg' + } + into(runtimeTestServerConfigDir) + duplicatesStrategy = DuplicatesStrategy.FAIL +} + +def injectRuntimeTestClientConfig = tasks.register('injectRuntimeTestClientConfig') { + group = 'unimined' + description = '把运行时测试配置注入 Cleanroom MMC 模板 zip,解压后即成为客户端的 config。' + inputs.files(runtimeTestConfigFiles) + inputs.property('cleanroomVersion', cleanroomVersion) + inputs.property('requiredEntries', runtimeTestTemplateRequiredEntries) + outputs.upToDateWhen { false } + doLast { + def configFiles = runtimeTestConfigFiles.get() + if (configFiles.isEmpty()) { + logger.lifecycle( + '[RuntimeTest] .github/runtime-test-config 下没有 cfg,跳过客户端配置注入。' + ) + return + } + + def templateFile = runtimeTestInstanceTemplate.get().asFile + if (!templateFile.isFile()) { + templateFile.parentFile.mkdirs() + def templateUrl = 'https://github.com/CleanroomMC/Cleanroom/releases/download/' + + "${cleanroomVersion}/cleanroom-${cleanroomVersion}.zip" + logger.lifecycle("[RuntimeTest] 本地缺少模板,开始下载:${templateUrl}") + def downloaded = downloadRuntimeTestTemplate(templateUrl, templateFile) + java.nio.file.Files.move( + downloaded.toPath(), + templateFile.toPath(), + java.nio.file.StandardCopyOption.REPLACE_EXISTING + ) + } + + def additions = new LinkedHashMap() + configFiles.each { configFile -> + additions.put("minecraft/config/${configFile.name}".toString(), configFile) + } + + def rewritten = new File(templateFile.parentFile, "${templateFile.name}.injected") + rewritten.delete() + def written = new LinkedHashSet() + new java.util.zip.ZipFile(templateFile).withCloseable { sourceZip -> + def rawOutput = new FileOutputStream(rewritten) + try { + new java.util.zip.ZipOutputStream( + new BufferedOutputStream(rawOutput) + ).withCloseable { targetZip -> + sourceZip.entries().each { entry -> + if (additions.containsKey(entry.name)) { + // 模板自带同名配置:丢弃,稍后写入我们的版本。 + return + } + def copied = new java.util.zip.ZipEntry(entry.name) + copied.time = entry.time + if (entry.comment != null) { + copied.comment = entry.comment + } + if (entry.extra != null) { + copied.extra = entry.extra + } + targetZip.putNextEntry(copied) + if (!entry.isDirectory()) { + sourceZip.getInputStream(entry).withCloseable { input -> + input.transferTo(targetZip) + } + } + targetZip.closeEntry() + written.add(entry.name) + } + additions.each { entryName, configFile -> + def added = new java.util.zip.ZipEntry(entryName) + added.time = configFile.lastModified() + targetZip.putNextEntry(added) + configFile.withInputStream { input -> + input.transferTo(targetZip) + } + targetZip.closeEntry() + written.add(entryName) + } + } + } finally { + rawOutput.close() + } + } + + runtimeTestTemplateRequiredEntries.each { requiredEntry -> + if (!written.contains(requiredEntry)) { + rewritten.delete() + throw new GradleException( + "Cleanroom 模板缺少 ${requiredEntry},已放弃写入注入后的模板。" + ) + } + } + additions.keySet().each { injectedEntry -> + if (!written.contains(injectedEntry)) { + rewritten.delete() + throw new GradleException("配置注入失败:${injectedEntry} 未写入模板。") + } + } + if (rewritten.length() <= 0L) { + rewritten.delete() + throw new GradleException('注入后的模板为空,已放弃覆盖原模板。') + } + + java.nio.file.Files.move( + rewritten.toPath(), + templateFile.toPath(), + java.nio.file.StandardCopyOption.REPLACE_EXISTING + ) + logger.lifecycle( + "[RuntimeTest] 已向客户端模板注入 ${additions.size()} 个配置:" + + additions.keySet().join(', ') + ) + } +} + +tasks.named('stageRuntimeTestMods') { + dependsOn stageRuntimeTestServerConfig +} +tasks.named('installRuntimeTestClient') { + dependsOn injectRuntimeTestClientConfig +} + tasks.register('printRuntimeTestPaths') { doLast { println "runtimeTestModsDir=${runtimeTestModsDir.get().asFile.absolutePath}" diff --git a/lib/appcompat-0.0.0+ecf0ef8-dev.jar b/lib/appcompat-0.0.0+ecf0ef8-dev.jar new file mode 100644 index 0000000000000000000000000000000000000000..4f457f5f23f7fd6b6bb92d3c9de3191debbab2a4 GIT binary patch literal 610115 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

&h548znmzkF#XA@#%6jLuV5bJqAZ#CUUG2 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ʰ%aA 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

#rBdd&4uysCMUuVpG+ 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 Bb4&mL literal 0 HcmV?d00001 diff --git a/src/main/java/github/kasuminova/novaeng/NovaEngineeringCore.java b/src/main/java/github/kasuminova/novaeng/NovaEngineeringCore.java index fc579ac6..53628746 100644 --- a/src/main/java/github/kasuminova/novaeng/NovaEngineeringCore.java +++ b/src/main/java/github/kasuminova/novaeng/NovaEngineeringCore.java @@ -7,7 +7,6 @@ import github.kasuminova.novaeng.common.hypernet.old.HyperNetCaches; import github.kasuminova.novaeng.common.integration.DECoreBindingIndex; import github.kasuminova.novaeng.common.network.ParallelNetworkManager; -import github.kasuminova.novaeng.common.network.PktAutoCraftConfirm; import github.kasuminova.novaeng.common.network.PktCellDriveStatusUpdate; import github.kasuminova.novaeng.common.network.PktECalculatorGUIData; import github.kasuminova.novaeng.common.network.PktEFabricatorGUIAction; @@ -55,8 +54,7 @@ @Mod(modid = Tags.MOD_ID, name = Tags.MOD_NAME, version = Tags.VERSION, dependencies = "required-after:modularmachinery@[2.3.0,);" + "required-after:theoneprobe;" + - "required-after:appliedenergistics2@[v0.56.4,);" + - "required-after:ae2fc@[2.6.3-r,);" + + "required-after:ae2@[1.0.14,);" + "required-after-client:lumenized@[1.0.2,);", acceptedMinecraftVersions = "[1.12, 1.13)", acceptableRemoteVersions = "[1.21.7, 1.24.0)" @@ -120,7 +118,6 @@ public void preInit(FMLPreInitializationEvent event) { NET_CHANNEL.registerMessage(PktCProfilerReply.class, PktCProfilerReply.class, start++, Side.SERVER); NET_CHANNEL.registerMessage(PktGeocentricDrillControl.class, PktGeocentricDrillControl.class, start++, Side.SERVER); NET_CHANNEL.registerMessage(PktItemDisplay.class, PktItemDisplay.class, start++, Side.SERVER); - NET_CHANNEL.registerMessage(PktAutoCraftConfirm.class, PktAutoCraftConfirm.class, start++, Side.SERVER); proxy.preInit(); diff --git a/src/main/java/github/kasuminova/novaeng/client/ClientProxy.java b/src/main/java/github/kasuminova/novaeng/client/ClientProxy.java index 558e826c..1f4e3156 100644 --- a/src/main/java/github/kasuminova/novaeng/client/ClientProxy.java +++ b/src/main/java/github/kasuminova/novaeng/client/ClientProxy.java @@ -1,8 +1,5 @@ package github.kasuminova.novaeng.client; -import appeng.api.features.IWirelessTermHandler; -import appeng.helpers.WirelessTerminalGuiObject; -import baubles.api.BaublesApi; import github.kasuminova.mmce.client.renderer.MachineControllerRenderer; import github.kasuminova.novaeng.client.book.BookTransformerAppendModifiers; import github.kasuminova.novaeng.client.gui.GuiECalculatorController; @@ -14,7 +11,6 @@ import github.kasuminova.novaeng.client.gui.GuiHyperNetTerminal; import github.kasuminova.novaeng.client.gui.GuiMachineAssemblyTool; import github.kasuminova.novaeng.client.gui.GuiModularServerAssembler; -import github.kasuminova.novaeng.client.gui.GuiNEWCraftConfirm; import github.kasuminova.novaeng.client.gui.GuiSingularityCore; import github.kasuminova.novaeng.client.handler.BlockAngelRendererHandler; import github.kasuminova.novaeng.client.handler.ClientEventHandler; @@ -304,14 +300,6 @@ public Object getClientGuiElement(final int id, final EntityPlayer player, final case EFABRICATOR_PATTERN_BUS -> new GuiEFabricatorPatternBus((EFabricatorPatternBus) present, player); case GEOCENTRIC_DRILL_CONTROLLER -> new GuiGeocentricDrill((GeocentricDrillController) present, player); case ECALCULATOR_CONTROLLER -> new GuiECalculatorController((ECalculatorController) present, player); - case AUTO_CRAFTGUI -> { - var stack = y == 1 ? BaublesApi.getBaublesHandler(player).getStackInSlot(x) - : player.inventory.getStackInSlot(x); - if (stack.getItem() instanceof IWirelessTermHandler wt) { - yield new GuiNEWCraftConfirm(player.inventory, - new WirelessTerminalGuiObject(wt, stack, player, player.world, x, y, Integer.MIN_VALUE)); - } else yield null; - } case MACHINE_ASSEMBLY_TOOL -> new GuiMachineAssemblyTool(player); }; } diff --git a/src/main/java/github/kasuminova/novaeng/client/gui/GuiEFabricatorPatternBus.java b/src/main/java/github/kasuminova/novaeng/client/gui/GuiEFabricatorPatternBus.java index 841469ae..a335eb42 100644 --- a/src/main/java/github/kasuminova/novaeng/client/gui/GuiEFabricatorPatternBus.java +++ b/src/main/java/github/kasuminova/novaeng/client/gui/GuiEFabricatorPatternBus.java @@ -1,6 +1,6 @@ package github.kasuminova.novaeng.client.gui; -import appeng.client.gui.AEBaseGui; +import ae2.client.gui.AEBaseGui; import github.kasuminova.novaeng.common.container.ContainerEFabricatorPatternBus; import github.kasuminova.novaeng.common.tile.ecotech.efabricator.EFabricatorPatternBus; import github.kasuminova.novaeng.novaeng_core.Tags; @@ -9,13 +9,13 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; -public class GuiEFabricatorPatternBus extends AEBaseGui { +public class GuiEFabricatorPatternBus extends AEBaseGui { public static final ResourceLocation GUI_TEXTURE = new ResourceLocation(Tags.MOD_ID, "textures/gui/efabricator_pattern_bus.png"); public GuiEFabricatorPatternBus(final EFabricatorPatternBus owner, final EntityPlayer player) { - super(new ContainerEFabricatorPatternBus(owner, player)); + super(new ContainerEFabricatorPatternBus(owner, player), player.inventory); this.xSize = 230; this.ySize = 232; this.guiLeft = (this.width - this.xSize) / 2; @@ -29,7 +29,8 @@ public void drawFG(final int offsetX, final int offsetY, final int mouseX, final } @Override - public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) { + public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, + final float partialTicks) { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(GUI_TEXTURE); this.drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); diff --git a/src/main/java/github/kasuminova/novaeng/client/gui/GuiNEWCraftConfirm.kt b/src/main/java/github/kasuminova/novaeng/client/gui/GuiNEWCraftConfirm.kt deleted file mode 100644 index f6f1dc3c..00000000 --- a/src/main/java/github/kasuminova/novaeng/client/gui/GuiNEWCraftConfirm.kt +++ /dev/null @@ -1,42 +0,0 @@ -package github.kasuminova.novaeng.client.gui - -import appeng.client.gui.implementations.GuiCraftConfirm -import appeng.helpers.WirelessTerminalGuiObject -import github.kasuminova.novaeng.NovaEngineeringCore -import github.kasuminova.novaeng.client.util.RCGuiCraftConfirm -import github.kasuminova.novaeng.common.network.PktAutoCraftConfirm -import github.kasuminova.novaeng.mixin.ae2.AccessorGuiCraftConfirm -import net.minecraft.client.gui.GuiButton -import net.minecraft.entity.player.InventoryPlayer -import java.io.IOException - -open class GuiNEWCraftConfirm(ip: InventoryPlayer, te: WirelessTerminalGuiObject) : GuiCraftConfirm(ip, te),RCGuiCraftConfirm { - - var cancel: GuiButton? = null - var start: GuiButton? = null - val utils = this as AccessorGuiCraftConfirm - - @Suppress("CAST_NEVER_SUCCEEDS") - override fun initGui() { - super.initGui() - cancel = utils.getCancel() - start = utils.getStart() - } - - @Throws(IOException::class) - override fun actionPerformed(btn: GuiButton) { - if (btn == cancel) { - if (isShiftKeyDown()) { - `rc$addMissBookmark`() - } - NovaEngineeringCore.NET_CHANNEL.sendToServer(PktAutoCraftConfirm()) - this.mc.player.closeScreenAndDropStack() - return - } - super.actionPerformed(btn) - if (btn == start) { - this.mc.player.closeScreenAndDropStack() - } - } - -} \ No newline at end of file diff --git a/src/main/java/github/kasuminova/novaeng/client/gui/widget/ecalculator/MonitorPanel.java b/src/main/java/github/kasuminova/novaeng/client/gui/widget/ecalculator/MonitorPanel.java index 4a31c8a3..9b59f19d 100644 --- a/src/main/java/github/kasuminova/novaeng/client/gui/widget/ecalculator/MonitorPanel.java +++ b/src/main/java/github/kasuminova/novaeng/client/gui/widget/ecalculator/MonitorPanel.java @@ -1,6 +1,6 @@ package github.kasuminova.novaeng.client.gui.widget.ecalculator; -import appeng.api.storage.data.IAEItemStack; +import ae2.api.stacks.GenericStack; import github.kasuminova.mmce.client.gui.util.MousePos; import github.kasuminova.mmce.client.gui.util.RenderPos; import github.kasuminova.mmce.client.gui.util.RenderSize; @@ -277,11 +277,11 @@ public Task(final ECalculatorData.ECPUData ecpuData) { setWidthHeight(WIDTH, HEIGHT); setUseScissor(false); setMargin(2, 0, 2, 0); - final IAEItemStack crafting = ecpuData.crafting(); + final GenericStack crafting = ecpuData.crafting(); this.usedMemory = ecpuData.usedMemory(); this.parallelismPreSecond = ecpuData.parallelismPreSecond(); this.cpuUsage = ecpuData.cpuUsagePerSecond(); - addWidget(new SlotItemVirtualJEI(crafting.createItemStack()).setAbsXY(ITEM_OFFSET_X, ITEM_OFFSET_Y)); + addWidget(new SlotItemVirtualJEI(crafting.what().wrapForDisplayOrFilter()).setAbsXY(ITEM_OFFSET_X, ITEM_OFFSET_Y)); } @Override diff --git a/src/main/java/github/kasuminova/novaeng/client/gui/widget/efabricator/PatternPanel.java b/src/main/java/github/kasuminova/novaeng/client/gui/widget/efabricator/PatternPanel.java index 4e7ea2e3..e23b56ca 100644 --- a/src/main/java/github/kasuminova/novaeng/client/gui/widget/efabricator/PatternPanel.java +++ b/src/main/java/github/kasuminova/novaeng/client/gui/widget/efabricator/PatternPanel.java @@ -1,7 +1,8 @@ package github.kasuminova.novaeng.client.gui.widget.efabricator; -import appeng.api.networking.crafting.ICraftingPatternDetails; -import appeng.api.storage.data.IAEItemStack; +import ae2.api.crafting.IPatternDetails; +import ae2.api.stacks.AEKey; +import ae2.api.stacks.GenericStack; import github.kasuminova.mmce.client.gui.util.MousePos; import github.kasuminova.mmce.client.gui.util.RenderFunction; import github.kasuminova.mmce.client.gui.util.RenderPos; @@ -69,8 +70,8 @@ public PatternPanel() { addWidget(internal); } - private static String getClearColorName(final IAEItemStack input) { - return COLOR_CODE_PATTERN.matcher(input.getDefinition().getDisplayName()).replaceAll(""); + private static String getClearColorName(final AEKey input) { + return COLOR_CODE_PATTERN.matcher(input.getDisplayName().getFormattedText()).replaceAll(""); } @Override @@ -100,6 +101,7 @@ public boolean onGuiEvent(final GuiEvent event) { if (patternSet.isEmpty()) { continue; } + for (final EFabricatorPatternData.PatternData pattern : patternSet) { final BlockPos pos = pattern.pos(); final ItemStack patternStack = pattern.pattern(); @@ -113,7 +115,7 @@ public boolean onGuiEvent(final GuiEvent event) { continue; } - final Int2ObjectMap slotMap = patterns.computeIfAbsent(pos, key -> new Int2ObjectLinkedOpenHashMap<>()); + final Int2ObjectMap slotMap = patterns.computeIfAbsent(pos, _ -> new Int2ObjectLinkedOpenHashMap<>()); PatternSlot slot = slotMap.get(slotID); if (slot == null) { slot = new PatternSlot(pos, slotID); @@ -131,20 +133,24 @@ public boolean onGuiEvent(final GuiEvent event) { for (Int2ObjectMap slotPattern : patterns.values()) { for (final PatternSlot slot : slotPattern.values()) { - ICraftingPatternDetails details = slot.getDetails(); + IPatternDetails details = slot.getDetails(); if (details == null) { continue; } - IAEItemStack[] inputs = details.getCondensedInputs(); - IAEItemStack primaryOutput = details.getPrimaryOutput(); + IPatternDetails.IInput[] inputs = details.getInputs(); + GenericStack primaryOutput = details.getPrimaryOutput(); - for (final IAEItemStack input : inputs) { - String displayName = getClearColorName(input); + for (final IPatternDetails.IInput input : inputs) { + GenericStack[] possibleInputs = input.possibleInputs(); + if (possibleInputs.length == 0) { + continue; + } + String displayName = getClearColorName(possibleInputs[0].what()); inputSearchStorage.put(displayName.toLowerCase(), slot); } if (primaryOutput != null) { - String displayName = getClearColorName(primaryOutput); + String displayName = getClearColorName(primaryOutput.what()); outputSearchStorage.put(displayName.toLowerCase(), slot); } } @@ -163,20 +169,24 @@ public boolean onGuiEvent(final GuiEvent event) { if (changed == null) { continue; } - ICraftingPatternDetails details = changed.getDetails(); + IPatternDetails details = changed.getDetails(); if (details == null) { continue; } - IAEItemStack[] inputs = details.getCondensedInputs(); - IAEItemStack primaryOutput = details.getPrimaryOutput(); + IPatternDetails.IInput[] inputs = details.getInputs(); + GenericStack primaryOutput = details.getPrimaryOutput(); - for (final IAEItemStack input : inputs) { - String displayName = getClearColorName(input); + for (final IPatternDetails.IInput input : inputs) { + GenericStack[] possibleInputs = input.possibleInputs(); + if (possibleInputs.length == 0) { + continue; + } + String displayName = getClearColorName(possibleInputs[0].what()); inputSearchStorage.put(displayName.toLowerCase(), changed); } if (primaryOutput != null) { - String displayName = getClearColorName(primaryOutput); + String displayName = getClearColorName(primaryOutput.what()); outputSearchStorage.put(displayName.toLowerCase(), changed); } } diff --git a/src/main/java/github/kasuminova/novaeng/client/gui/widget/efabricator/PatternSlot.java b/src/main/java/github/kasuminova/novaeng/client/gui/widget/efabricator/PatternSlot.java index ffd12ce5..72c8df34 100644 --- a/src/main/java/github/kasuminova/novaeng/client/gui/widget/efabricator/PatternSlot.java +++ b/src/main/java/github/kasuminova/novaeng/client/gui/widget/efabricator/PatternSlot.java @@ -1,9 +1,9 @@ package github.kasuminova.novaeng.client.gui.widget.efabricator; -import appeng.api.implementations.ICraftingPatternItem; -import appeng.api.networking.crafting.ICraftingPatternDetails; -import appeng.api.storage.data.IAEItemStack; -import appeng.util.item.AEItemStack; +import ae2.api.crafting.IPatternDetails; +import ae2.api.crafting.PatternDetailsHelper; +import ae2.api.stacks.AEItemKey; +import ae2.api.stacks.GenericStack; import github.kasuminova.mmce.client.gui.util.MousePos; import github.kasuminova.mmce.client.gui.util.RenderPos; import github.kasuminova.mmce.client.gui.util.RenderSize; @@ -24,12 +24,12 @@ public class PatternSlot extends SlotItemVirtual { - private static final WeakHashMap> DETAILS_CACHE = new WeakHashMap<>(); + private static final WeakHashMap> DETAILS_CACHE = new WeakHashMap<>(); private final BlockPos slotOwnerPos; private final int slotIndex; - private ICraftingPatternDetails details = null; + private IPatternDetails details = null; public PatternSlot(final BlockPos slotOwnerPos, final int slotIndex) { this.slotOwnerPos = slotOwnerPos; @@ -41,8 +41,13 @@ public PatternSlot(final BlockPos slotOwnerPos, final int slotIndex) { public void render(final WidgetGui widgetGui, final RenderSize renderSize, final RenderPos renderPos, final MousePos mousePos) { final ItemStack prevStack = stackInSlot; if (details != null) { - IAEItemStack primaryOutput = details.getPrimaryOutput(); - stackInSlot = primaryOutput.getCachedItemStack(primaryOutput.getStackSize()); + GenericStack primaryOutput = details.getPrimaryOutput(); + if (primaryOutput.what() instanceof AEItemKey itemKey) { + final int amount = (int) Math.min(Integer.MAX_VALUE, primaryOutput.amount()); + stackInSlot = itemKey.toStack(amount); + } else { + stackInSlot = GenericStack.wrapInItemStack(primaryOutput); + } } super.render(widgetGui, renderSize, renderPos, mousePos); stackInSlot = prevStack; @@ -72,24 +77,15 @@ public boolean equals(final Object obj) { @Override public SlotItemVirtual setStackInSlot(final ItemStack stackInSlot) { - if (stackInSlot.getItem() instanceof ICraftingPatternItem patternItem) { - AEItemStack key = AEItemStack.fromItemStack(stackInSlot); - if (key == null) { - this.details = null; - return super.setStackInSlot(stackInSlot); - } - - if (DETAILS_CACHE.containsKey(key)) { - WeakReference ref = DETAILS_CACHE.get(key); - if (ref != null) { - this.details = ref.get(); - } else { - this.details = patternItem.getPatternForItem(stackInSlot, Minecraft.getMinecraft().world); - DETAILS_CACHE.put(key.copy(), new WeakReference<>(this.details)); - } + AEItemKey key = AEItemKey.of(stackInSlot); + if (key != null) { + WeakReference ref = DETAILS_CACHE.get(key); + IPatternDetails cachedDetails = ref == null ? null : ref.get(); + if (cachedDetails != null) { + this.details = cachedDetails; } else { - this.details = patternItem.getPatternForItem(stackInSlot, Minecraft.getMinecraft().world); - DETAILS_CACHE.put(key.copy(), new WeakReference<>(this.details)); + this.details = PatternDetailsHelper.decodePattern(stackInSlot, Minecraft.getMinecraft().world); + DETAILS_CACHE.put(key, new WeakReference<>(this.details)); } } else { this.details = null; @@ -99,7 +95,7 @@ public SlotItemVirtual setStackInSlot(final ItemStack stackInSlot) { } @Nullable - public ICraftingPatternDetails getDetails() { + public IPatternDetails getDetails() { return details; } diff --git a/src/main/java/github/kasuminova/novaeng/client/gui/widget/vanilla/GuiButtonImageExt.java b/src/main/java/github/kasuminova/novaeng/client/gui/widget/vanilla/GuiButtonImageExt.java deleted file mode 100644 index 2069f38b..00000000 --- a/src/main/java/github/kasuminova/novaeng/client/gui/widget/vanilla/GuiButtonImageExt.java +++ /dev/null @@ -1,62 +0,0 @@ -package github.kasuminova.novaeng.client.gui.widget.vanilla; - -import appeng.client.gui.widgets.ITooltip; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButtonImage; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.util.ResourceLocation; -import org.jetbrains.annotations.NotNull; - -public class GuiButtonImageExt extends GuiButtonImage implements ITooltip { - - private String message = ""; - - public GuiButtonImageExt(final int buttonId, final int xIn, final int yIn, final int widthIn, final int heightIn, final int textureOffestX, final int textureOffestY, final int p_i47392_8_, final ResourceLocation resource) { - super(buttonId, xIn, yIn, widthIn, heightIn, textureOffestX, textureOffestY, p_i47392_8_, resource); - } - - @Override - public void drawButton(final @NotNull Minecraft mc, final int mouseX, final int mouseY, final float partialTicks) { - GlStateManager.disableLighting(); - GlStateManager.enableBlend(); - GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); - GlStateManager.color(1f, 1f, 1f, 1f); - super.drawButton(mc, mouseX, mouseY, partialTicks); - } - - @Override - public String getMessage() { - return message; - } - - public GuiButtonImageExt setMessage(final String message) { - this.message = message; - return this; - } - - @Override - public int xPos() { - return x; - } - - @Override - public int yPos() { - return y; - } - - @Override - public int getWidth() { - return width; - } - - @Override - public int getHeight() { - return height; - } - - @Override - public boolean isVisible() { - return visible; - } - -} diff --git a/src/main/java/github/kasuminova/novaeng/client/handler/BlockAngelRendererHandler.java b/src/main/java/github/kasuminova/novaeng/client/handler/BlockAngelRendererHandler.java index 4c7ba74b..84bd2699 100644 --- a/src/main/java/github/kasuminova/novaeng/client/handler/BlockAngelRendererHandler.java +++ b/src/main/java/github/kasuminova/novaeng/client/handler/BlockAngelRendererHandler.java @@ -6,12 +6,11 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.multiplayer.WorldClient; -import net.minecraft.client.renderer.BlockRendererDispatcher; import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.client.renderer.vertex.VertexFormat; import net.minecraft.entity.Entity; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; @@ -19,7 +18,6 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import org.lwjgl.opengl.GL11; -@SuppressWarnings("MethodMayBeStatic") public class BlockAngelRendererHandler { public static final BlockAngelRendererHandler INSTANCE = new BlockAngelRendererHandler(); @@ -27,41 +25,46 @@ private BlockAngelRendererHandler() { } protected static void renderAngelBlockToWorld(final BlockPos renderPos) { + Minecraft mc = Minecraft.getMinecraft(); Entity view = getViewEntity(); - float partialTicks = Minecraft.getMinecraft().getRenderPartialTicks(); + float partialTicks = mc.getRenderPartialTicks(); double tx = view.lastTickPosX + ((view.posX - view.lastTickPosX) * partialTicks); double ty = view.lastTickPosY + ((view.posY - view.lastTickPosY) * partialTicks); double tz = view.lastTickPosZ + ((view.posZ - view.lastTickPosZ) * partialTicks); - GlStateManager.translate(-tx, -ty, -tz); - GlStateManager.color(1F, 1F, 1F, 0.5F); - GlStateManager.disableDepth(); - GlStateManager.enableBlend(); - GlStateManager.blendFunc(GL11.GL_ONE_MINUS_DST_COLOR, GL11.GL_DST_COLOR); - - BlockRendererDispatcher brd = Minecraft.getMinecraft().getBlockRendererDispatcher(); - Tessellator tes = Tessellator.getInstance(); - BufferBuilder vb = tes.getBuffer(); - VertexFormat blockFormat = DefaultVertexFormats.BLOCK; GlStateManager.pushMatrix(); - GlStateManager.translate(renderPos.getX(), renderPos.getY(), renderPos.getZ()); - GlStateManager.translate(0.125, 0.125, 0.125); - GlStateManager.scale(0.75, 0.75, 0.75); + try { + GlStateManager.translate(-tx, -ty, -tz); + GlStateManager.translate(renderPos.getX(), renderPos.getY(), renderPos.getZ()); + GlStateManager.translate(0.125D, 0.125D, 0.125D); + GlStateManager.scale(0.75F, 0.75F, 0.75F); + + GlStateManager.color(1F, 1F, 1F, 0.5F); + GlStateManager.disableDepth(); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(GL11.GL_ONE_MINUS_DST_COLOR, GL11.GL_DST_COLOR); - vb.begin(GL11.GL_QUADS, blockFormat); - brd.renderBlock( - BlockAngel.INSTANCE.getDefaultState(), - BlockPos.ORIGIN, - Minecraft.getMinecraft().world, - vb - ); - tes.draw(); + mc.getTextureManager().bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); - GlStateManager.popMatrix(); - GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GlStateManager.enableDepth(); - GlStateManager.color(1F, 1F, 1F, 1F); + Tessellator tess = Tessellator.getInstance(); + BufferBuilder buf = tess.getBuffer(); + buf.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); + + mc.getBlockRendererDispatcher().renderBlock( + BlockAngel.INSTANCE.getDefaultState(), + BlockPos.ORIGIN, + mc.world, + buf + ); + tess.draw(); + } finally { + GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GlStateManager.disableBlend(); + GlStateManager.enableDepth(); + GlStateManager.color(1F, 1F, 1F, 1F); + GlStateManager.popMatrix(); + } } protected static Entity getViewEntity() { diff --git a/src/main/java/github/kasuminova/novaeng/client/util/RCGuiCraftConfirm.java b/src/main/java/github/kasuminova/novaeng/client/util/RCGuiCraftConfirm.java deleted file mode 100644 index 18398de2..00000000 --- a/src/main/java/github/kasuminova/novaeng/client/util/RCGuiCraftConfirm.java +++ /dev/null @@ -1,8 +0,0 @@ -package github.kasuminova.novaeng.client.util; - -public interface RCGuiCraftConfirm { - - default void rc$addMissBookmark() { - - } -} diff --git a/src/main/java/github/kasuminova/novaeng/common/CommonProxy.kt b/src/main/java/github/kasuminova/novaeng/common/CommonProxy.kt index 972ec2e6..7c98d911 100644 --- a/src/main/java/github/kasuminova/novaeng/common/CommonProxy.kt +++ b/src/main/java/github/kasuminova/novaeng/common/CommonProxy.kt @@ -1,10 +1,7 @@ package github.kasuminova.novaeng.common -import appeng.api.AEApi -import baubles.api.BaublesApi -import com.circulation.random_complement.common.util.MEHandler -import github.kasuminova.mmce.common.integration.ModIntegrationAE2 import github.kasuminova.novaeng.NovaEngCoreConfig +import github.kasuminova.novaeng.NovaEngineeringCore import github.kasuminova.novaeng.common.adapter.RecipeAdapterExtended import github.kasuminova.novaeng.common.container.ContainerECalculatorController import github.kasuminova.novaeng.common.container.ContainerEFabricatorController @@ -14,10 +11,8 @@ import github.kasuminova.novaeng.common.container.ContainerEStorageController import github.kasuminova.novaeng.common.container.ContainerGeocentricDrill import github.kasuminova.novaeng.common.container.ContainerHyperNetTerminal import github.kasuminova.novaeng.common.container.ContainerModularServerAssembler -import github.kasuminova.novaeng.common.container.ContainerNEWCraftConfirm import github.kasuminova.novaeng.common.container.ContainerSingularityCore import github.kasuminova.novaeng.common.enchantment.MagicBreaking -import github.kasuminova.novaeng.common.estorage.EStorageCellHandler import github.kasuminova.novaeng.common.handler.ECalculatorEventHandler import github.kasuminova.novaeng.common.handler.EFabricatorEventHandler import github.kasuminova.novaeng.common.handler.EStorageEventHandler @@ -67,7 +62,6 @@ import github.kasuminova.novaeng.common.tile.machine.GeocentricDrillController import github.kasuminova.novaeng.common.trait.Register.registerModifiers import github.kasuminova.novaeng.common.util.MachineCoolants import github.kasuminova.novaeng.common.util.MixinDecisions -import github.kasuminova.novaeng.mixin.ae2.AccessorCellRegistry import github.kasuminova.novaeng.novaeng_core.Tags.MOD_ID import hellfirepvp.modularmachinery.ModularMachinery import hellfirepvp.modularmachinery.common.base.Mods @@ -165,10 +159,6 @@ open class CommonProxy : IGuiHandler { RegistryMachineSpecial.registrySpecialMachine(SmallOreDrill) } } - if (Mods.AE2.isPresent) { - val handlers = ((AEApi.instance().registries().cell()) as AccessorCellRegistry).getHandlers() - handlers.add(0, EStorageCellHandler.INSTANCE) - } registerModifiers() } @@ -211,20 +201,14 @@ open class CommonProxy : IGuiHandler { GuiType.EFABRICATOR_CONTROLLER -> { val efController = present as? EFabricatorController - if (efController?.channel != null && ModIntegrationAE2.securityCheck( - player, efController.channel!!.proxy - ) - ) { + if (efController?.channel != null && !efController.channel!!.mainNode.isActive) { null } else ContainerEFabricatorController(efController, player) } GuiType.EFABRICATOR_PATTERN_SEARCH -> { val efController = present as? EFabricatorController - if (efController?.channel != null && ModIntegrationAE2.securityCheck( - player, efController.channel!!.proxy - ) - ) { + if (efController?.channel != null && !efController.channel!!.mainNode.isActive) { null } else ContainerEFabricatorPatternSearch(efController, player) } @@ -232,10 +216,7 @@ open class CommonProxy : IGuiHandler { GuiType.EFABRICATOR_PATTERN_BUS -> { val efPatternBus = present as? EFabricatorPatternBus val efController = efPatternBus?.controller - if (efController?.channel != null && ModIntegrationAE2.securityCheck( - player, efController.channel!!.proxy - ) - ) { + if (efController?.channel != null && !efController.channel!!.mainNode.isActive) { null } else ContainerEFabricatorPatternBus(efPatternBus, player) } @@ -247,24 +228,11 @@ open class CommonProxy : IGuiHandler { GuiType.ECALCULATOR_CONTROLLER -> { val ecController = present as ECalculatorController? - if (ecController?.channel != null && ModIntegrationAE2.securityCheck( - player, ecController.channel.getProxy() - ) - ) { + if (ecController?.channel != null && !ecController.channel.mainNode.isActive) { null } else ContainerECalculatorController(present, player) } - GuiType.AUTO_CRAFTGUI -> { - val stack = if (y == 1) BaublesApi.getBaublesHandler(player).getStackInSlot(x) - else player.inventory.getStackInSlot(x) - - MEHandler.getTerminalGuiObject(stack, player, x, y)?.let { - return ContainerNEWCraftConfirm(player.inventory, it) - } - null - } - GuiType.MACHINE_ASSEMBLY_TOOL -> null } } @@ -283,7 +251,6 @@ open class CommonProxy : IGuiHandler { EFABRICATOR_PATTERN_BUS(EFabricatorPatternBus::class.java), GEOCENTRIC_DRILL_CONTROLLER(GeocentricDrillController::class.java), ECALCULATOR_CONTROLLER(ECalculatorController::class.java), - AUTO_CRAFTGUI(null), MACHINE_ASSEMBLY_TOOL(null) } } \ No newline at end of file diff --git a/src/main/java/github/kasuminova/novaeng/common/block/ecotech/ecalculator/BlockECalculatorCellDrive.java b/src/main/java/github/kasuminova/novaeng/common/block/ecotech/ecalculator/BlockECalculatorCellDrive.java index 33356a48..a3a3a14b 100644 --- a/src/main/java/github/kasuminova/novaeng/common/block/ecotech/ecalculator/BlockECalculatorCellDrive.java +++ b/src/main/java/github/kasuminova/novaeng/common/block/ecotech/ecalculator/BlockECalculatorCellDrive.java @@ -1,6 +1,6 @@ package github.kasuminova.novaeng.common.block.ecotech.ecalculator; -import appeng.tile.inventory.AppEngInternalInventory; +import ae2.util.inv.AppEngInternalInventory; import github.kasuminova.novaeng.common.block.ecotech.ecalculator.prop.DriveLink; import github.kasuminova.novaeng.common.block.ecotech.ecalculator.prop.DriveStatus; import github.kasuminova.novaeng.common.block.ecotech.ecalculator.prop.DriveStorageLevel; @@ -81,11 +81,11 @@ public void breakBlock(World worldIn, @Nonnull BlockPos pos, @Nonnull IBlockStat TileEntity te = worldIn.getTileEntity(pos); if (te instanceof ECalculatorCellDrive drive) { AppEngInternalInventory inv = drive.getDriveInv(); - for (int i = 0; i < inv.getSlots(); i++) { + for (int i = 0; i < inv.size(); i++) { ItemStack stack = inv.getStackInSlot(i); if (!stack.isEmpty()) { spawnAsEntity(worldIn, pos, stack); - inv.setStackInSlot(i, ItemStack.EMPTY); + inv.setItemDirect(i, ItemStack.EMPTY); } } } diff --git a/src/main/java/github/kasuminova/novaeng/common/block/ecotech/ecalculator/BlockECalculatorThreadCore.java b/src/main/java/github/kasuminova/novaeng/common/block/ecotech/ecalculator/BlockECalculatorThreadCore.java index ca9722e5..b0f7cd8e 100644 --- a/src/main/java/github/kasuminova/novaeng/common/block/ecotech/ecalculator/BlockECalculatorThreadCore.java +++ b/src/main/java/github/kasuminova/novaeng/common/block/ecotech/ecalculator/BlockECalculatorThreadCore.java @@ -1,6 +1,6 @@ package github.kasuminova.novaeng.common.block.ecotech.ecalculator; -import appeng.me.cluster.implementations.CraftingCPUCluster; +import ae2.me.cluster.implementations.CraftingCPUCluster; import github.kasuminova.mmce.common.util.Sides; import github.kasuminova.novaeng.NovaEngineeringCore; import github.kasuminova.novaeng.common.block.ecotech.ecalculator.prop.Levels; diff --git a/src/main/java/github/kasuminova/novaeng/common/block/ecotech/efabricator/BlockEFabricatorPatternBus.java b/src/main/java/github/kasuminova/novaeng/common/block/ecotech/efabricator/BlockEFabricatorPatternBus.java index 93925f13..37dbdb3f 100644 --- a/src/main/java/github/kasuminova/novaeng/common/block/ecotech/efabricator/BlockEFabricatorPatternBus.java +++ b/src/main/java/github/kasuminova/novaeng/common/block/ecotech/efabricator/BlockEFabricatorPatternBus.java @@ -1,6 +1,6 @@ package github.kasuminova.novaeng.common.block.ecotech.efabricator; -import appeng.tile.inventory.AppEngInternalInventory; +import ae2.util.inv.AppEngInternalInventory; import github.kasuminova.novaeng.common.CommonProxy; import github.kasuminova.novaeng.common.block.prop.FacingProp; import github.kasuminova.novaeng.common.core.CreativeTabNovaEng; @@ -76,11 +76,11 @@ public void breakBlock(World worldIn, @Nonnull BlockPos pos, @Nonnull IBlockStat TileEntity te = worldIn.getTileEntity(pos); if (te instanceof EFabricatorPatternBus terminal) { AppEngInternalInventory inv = terminal.getPatterns(); - for (int i = 0; i < inv.getSlots(); i++) { + for (int i = 0; i < inv.size(); i++) { ItemStack stack = inv.getStackInSlot(i); if (!stack.isEmpty()) { spawnAsEntity(worldIn, pos, stack); - inv.setStackInSlot(i, ItemStack.EMPTY); + inv.setItemDirect(i, ItemStack.EMPTY); } } } diff --git a/src/main/java/github/kasuminova/novaeng/common/block/ecotech/estorage/BlockEStorageCellDrive.java b/src/main/java/github/kasuminova/novaeng/common/block/ecotech/estorage/BlockEStorageCellDrive.java index 38558445..7ce39bb7 100644 --- a/src/main/java/github/kasuminova/novaeng/common/block/ecotech/estorage/BlockEStorageCellDrive.java +++ b/src/main/java/github/kasuminova/novaeng/common/block/ecotech/estorage/BlockEStorageCellDrive.java @@ -1,17 +1,15 @@ package github.kasuminova.novaeng.common.block.ecotech.estorage; -import appeng.api.AEApi; -import appeng.api.storage.ICellInventoryHandler; -import appeng.api.storage.IStorageChannel; -import appeng.api.storage.data.IAEStack; -import appeng.tile.inventory.AppEngCellInventory; +import ae2.api.storage.StorageCells; +import ae2.api.storage.cells.StorageCell; +import ae2.api.storage.cells.StorageCellStatistics; +import ae2.util.inv.AppEngCellInventory; import github.kasuminova.novaeng.common.block.ecotech.estorage.prop.DriveStatus; import github.kasuminova.novaeng.common.block.ecotech.estorage.prop.DriveStorageCapacity; import github.kasuminova.novaeng.common.block.ecotech.estorage.prop.DriveStorageLevel; import github.kasuminova.novaeng.common.block.ecotech.estorage.prop.DriveStorageType; import github.kasuminova.novaeng.common.block.prop.FacingProp; import github.kasuminova.novaeng.common.core.CreativeTabNovaEng; -import github.kasuminova.novaeng.common.estorage.EStorageCellHandler; import github.kasuminova.novaeng.common.item.estorage.EStorageCell; import github.kasuminova.novaeng.common.tile.ecotech.estorage.EStorageCellDrive; import github.kasuminova.novaeng.novaeng_core.Tags; @@ -35,7 +33,6 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -import java.util.Collection; import java.util.List; @SuppressWarnings("deprecation") @@ -78,11 +75,11 @@ public void breakBlock(World worldIn, @Nonnull BlockPos pos, @Nonnull IBlockStat TileEntity te = worldIn.getTileEntity(pos); if (te instanceof EStorageCellDrive drive) { AppEngCellInventory inv = drive.getDriveInv(); - for (int i = 0; i < inv.getSlots(); i++) { + for (int i = 0; i < inv.size(); i++) { ItemStack stack = inv.getStackInSlot(i); if (!stack.isEmpty()) { spawnAsEntity(worldIn, pos, stack); - inv.setStackInSlot(i, ItemStack.EMPTY); + inv.setItemDirect(i, ItemStack.EMPTY); } } } @@ -97,7 +94,6 @@ public int getLightValue(@Nonnull final IBlockState state) { @Nonnull @Override - @SuppressWarnings("rawtypes") public IBlockState getActualState(@Nonnull final IBlockState state, @Nonnull final IBlockAccess world, @Nonnull final BlockPos pos) { TileEntity te = world.getTileEntity(pos); if (!(te instanceof EStorageCellDrive drive)) { @@ -109,31 +105,18 @@ public IBlockState getActualState(@Nonnull final IBlockState state, @Nonnull fin return state; } - EStorageCellHandler handler = EStorageCellHandler.getHandler(stack); - if (handler == null) { + StorageCell cellInventory = StorageCells.getCellInventory(stack, null); + if (!(cellInventory instanceof StorageCellStatistics)) { return state; } - EStorageCell cell = (EStorageCell) stack.getItem(); + EStorageCell cell = (EStorageCell) stack.getItem(); DriveStorageLevel level = cell.getLevel(); DriveStorageType type = EStorageCellDrive.getCellType(cell); if (type == null) { return state; } - final Collection>> storageChannels = AEApi.instance().storage().storageChannels(); - ICellInventoryHandler cellInventory = null; - for (final IStorageChannel> channel : storageChannels) { - cellInventory = handler.getCellInventory(stack, drive, channel); - if (cellInventory != null) { - break; - } - } - - if (cellInventory == null) { - return state; - } - return state.withProperty(DriveStorageLevel.STORAGE_LEVEL, level) .withProperty(DriveStorageType.STORAGE_TYPE, type) .withProperty(DriveStatus.STATUS, drive.isWriting() ? DriveStatus.RUN : DriveStatus.IDLE) diff --git a/src/main/java/github/kasuminova/novaeng/common/command/CommandBuilder.java b/src/main/java/github/kasuminova/novaeng/common/command/CommandBuilder.java index e93c0492..f017f7cd 100644 --- a/src/main/java/github/kasuminova/novaeng/common/command/CommandBuilder.java +++ b/src/main/java/github/kasuminova/novaeng/common/command/CommandBuilder.java @@ -29,7 +29,7 @@ private CommandBuilder() { } @Override - public void execute(@NotNull MinecraftServer server, @NotNull ICommandSender sender, String @NotNull [] args) { + public void execute(@NotNull MinecraftServer server, @NotNull ICommandSender sender, @NotNull String[] args) { if (args.length >= 2) { switch (args[0]) { case "tick" -> isTickWork = args[1].equals("true"); diff --git a/src/main/java/github/kasuminova/novaeng/common/container/ContainerEFabricatorPatternBus.java b/src/main/java/github/kasuminova/novaeng/common/container/ContainerEFabricatorPatternBus.java index 30d44869..351c405c 100644 --- a/src/main/java/github/kasuminova/novaeng/common/container/ContainerEFabricatorPatternBus.java +++ b/src/main/java/github/kasuminova/novaeng/common/container/ContainerEFabricatorPatternBus.java @@ -1,8 +1,8 @@ package github.kasuminova.novaeng.common.container; -import appeng.container.AEBaseContainer; -import appeng.container.slot.SlotRestrictedInput; -import appeng.tile.inventory.AppEngInternalInventory; +import ae2.container.AEBaseContainer; +import ae2.container.slot.RestrictedInputSlot; +import ae2.util.inv.AppEngInternalInventory; import github.kasuminova.novaeng.common.tile.ecotech.efabricator.EFabricatorPatternBus; import lombok.Getter; import net.minecraft.entity.player.EntityPlayer; @@ -19,13 +19,13 @@ public ContainerEFabricatorPatternBus(final EFabricatorPatternBus owner, final E super(player.inventory, owner); this.owner = owner; - this.bindPlayerInventory(getInventoryPlayer(), 27, 150); + this.addPlayerInventorySlots(27, 150); AppEngInternalInventory patterns = owner.getPatterns(); for (int row = 0; row < ROWS; row++) { for (int col = 0; col < COLS; col++) { - this.addSlotToContainer(new SlotRestrictedInput(SlotRestrictedInput.PlacableItemType.ENCODED_PATTERN, patterns, - (row * COLS) + col, 8 + (col * 18), 28 + (row * 18), getInventoryPlayer())); + this.addSlotToContainer(new RestrictedInputSlot(RestrictedInputSlot.PlacableItemType.ENCODED_PATTERN, patterns, + (row * COLS) + col, 8 + (col * 18), 28 + (row * 18))); } } } diff --git a/src/main/java/github/kasuminova/novaeng/common/container/ContainerNEWCraftConfirm.kt b/src/main/java/github/kasuminova/novaeng/common/container/ContainerNEWCraftConfirm.kt deleted file mode 100644 index 34764101..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/container/ContainerNEWCraftConfirm.kt +++ /dev/null @@ -1,49 +0,0 @@ -package github.kasuminova.novaeng.common.container - -import appeng.api.networking.crafting.ICraftingGrid -import appeng.api.networking.security.IActionHost -import appeng.container.implementations.ContainerCraftConfirm -import appeng.helpers.WirelessTerminalGuiObject -import appeng.me.helpers.PlayerSource -import github.kasuminova.novaeng.common.util.AutoCraftingQueue -import github.kasuminova.novaeng.mixin.ae2.AccessorContainerCraftConfirm -import github.kasuminova.novaeng.mixin.ae2.AccessorCraftingCPURecord -import net.minecraft.entity.player.EntityPlayerMP -import net.minecraft.entity.player.InventoryPlayer - -open class ContainerNEWCraftConfirm(ip: InventoryPlayer, te: WirelessTerminalGuiObject) : ContainerCraftConfirm(ip, te) { - override fun canInteractWith(playerIn: net.minecraft.entity.player.EntityPlayer): Boolean { - return true - } - - override fun startJob() { - if (this is AccessorContainerCraftConfirm) { - val h = this.target as? IActionHost - h?.actionableNode?.grid?.let { grid -> - if (this.getResult() != null && !this.isSimulation) { - val cc = grid.getCache(ICraftingGrid::class.java) - cc.submitJob( - this.getResult(), - null, - if (this.getSelectedCpu() == -1) null - else { - val c = this.getCpus()[this.getSelectedCpu()] - if (c is AccessorCraftingCPURecord) { - c.getCpu() - } else null - }, - true, - PlayerSource(this.playerInv.player, h) - ) - } - } - val player = playerInv.player as EntityPlayerMP - AutoCraftingQueue.getQueue(player)?.let { - if (!it.executionQueue(player)) { - player.closeContainer() - } - } - } - } - -} diff --git a/src/main/java/github/kasuminova/novaeng/common/container/data/ECalculatorData.java b/src/main/java/github/kasuminova/novaeng/common/container/data/ECalculatorData.java index bbf48e53..59ed7f07 100644 --- a/src/main/java/github/kasuminova/novaeng/common/container/data/ECalculatorData.java +++ b/src/main/java/github/kasuminova/novaeng/common/container/data/ECalculatorData.java @@ -1,19 +1,19 @@ package github.kasuminova.novaeng.common.container.data; -import appeng.api.networking.crafting.ICraftingCPU; -import appeng.api.networking.crafting.ICraftingGrid; -import appeng.api.storage.data.IAEItemStack; -import appeng.me.GridAccessException; -import appeng.util.item.AEItemStack; +import ae2.api.networking.crafting.ICraftingCPU; +import ae2.api.networking.crafting.CraftingJobStatus; +import ae2.api.networking.crafting.ICraftingService; +import ae2.api.networking.IGridNode; +import ae2.api.stacks.GenericStack; import github.kasuminova.novaeng.common.block.ecotech.ecalculator.prop.Levels; import github.kasuminova.novaeng.common.ecalculator.ECPUCluster; import github.kasuminova.novaeng.common.tile.ecotech.ecalculator.ECalculatorController; import github.kasuminova.novaeng.common.tile.ecotech.ecalculator.ECalculatorMEChannel; import github.kasuminova.novaeng.common.tile.ecotech.ecalculator.ECalculatorThreadCore; import io.netty.buffer.ByteBuf; +import net.minecraft.network.PacketBuffer; import javax.annotation.Nonnull; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -45,26 +45,33 @@ private static List getEcpuData(final ECalculatorController controller return ecpuData; } - try { - final ICraftingGrid crafting = channel.getProxy().getCrafting(); - final List threadCores = controller.getThreadCores(); - for (ICraftingCPU cpu : crafting.getCpus()) { - if (!(cpu instanceof ECPUCluster ecpu)) { - continue; - } - - ECalculatorThreadCore core = ecpu.novaeng_ec$getController(); - if (core == null || !threadCores.contains(core)) { - continue; - } - - ecpuData.add(new ECPUData( - cpu.getFinalOutput(), cpu.getAvailableStorage(), ecpu.novaeng_ec$getUsedExtraStorage(), - ecpu.novaeng_ec$getParallelismRecorder().usedTimeAvg(), - ecpu.novaeng_ec$getTimeRecorder().usedTimeAvg() - )); + final IGridNode node = channel.getActionableNode(); + if (node == null || node.grid() == null) { + return ecpuData; + } + + final ICraftingService crafting = node.grid().getCraftingService(); + final List threadCores = controller.getThreadCores(); + for (ICraftingCPU cpu : crafting.getCpus()) { + if (!(cpu instanceof ECPUCluster ecpu)) { + continue; + } + + final ECalculatorThreadCore core = ecpu.novaeng_ec$getController(); + if (core == null || !threadCores.contains(core)) { + continue; + } + + final CraftingJobStatus status = cpu.getJobStatus(); + if (status == null || status.crafting() == null) { + continue; } - } catch (GridAccessException ignored) { + + ecpuData.add(new ECPUData( + status.crafting(), cpu.getAvailableStorage(), ecpu.novaeng_ec$getUsedExtraStorage(), + ecpu.novaeng_ec$getParallelismRecorder().usedTimeAvg(), + ecpu.novaeng_ec$getTimeRecorder().usedTimeAvg() + )); } return ecpuData; @@ -88,9 +95,10 @@ public static ECalculatorData read(final ByteBuf buf) { } byte ecpuSize = buf.readByte(); List ecpuList = new ArrayList<>(); + PacketBuffer packetBuffer = new PacketBuffer(buf); if (ecpuSize > 0) { for (byte i = 0; i < ecpuSize; i++) { - ecpuList.add(new ECPUData(AEItemStack.fromPacket(buf), buf.readLong(), buf.readLong(), buf.readInt(), buf.readInt())); + ecpuList.add(new ECPUData(GenericStack.readBuffer(packetBuffer), buf.readLong(), buf.readLong(), buf.readInt(), buf.readInt())); } } int cpuUsagePerSecond = buf.readInt(); @@ -110,11 +118,9 @@ public void write(final ByteBuf buf) { buf.writeByte(threadCore.maxHyperThreads); }); buf.writeByte(ecpuList.size()); + PacketBuffer packetBuffer = new PacketBuffer(buf); ecpuList.forEach(ecpu -> { - try { - ecpu.crafting.writeToPacket(buf); - } catch (IOException ignored) { - } + GenericStack.writeBuffer(ecpu.crafting, packetBuffer); buf.writeLong(ecpu.usedMemory); buf.writeLong(ecpu.usedExtraMemory); buf.writeInt(ecpu.parallelismPreSecond); @@ -123,7 +129,7 @@ public void write(final ByteBuf buf) { buf.writeInt(cpuUsagePerSecond); } - public record ECPUData(IAEItemStack crafting, long usedMemory, long usedExtraMemory, int parallelismPreSecond, + public record ECPUData(GenericStack crafting, long usedMemory, long usedExtraMemory, int parallelismPreSecond, int cpuUsagePerSecond) { } diff --git a/src/main/java/github/kasuminova/novaeng/common/container/data/EFabricatorPatternData.java b/src/main/java/github/kasuminova/novaeng/common/container/data/EFabricatorPatternData.java index 6df11571..50102e95 100644 --- a/src/main/java/github/kasuminova/novaeng/common/container/data/EFabricatorPatternData.java +++ b/src/main/java/github/kasuminova/novaeng/common/container/data/EFabricatorPatternData.java @@ -1,6 +1,6 @@ package github.kasuminova.novaeng.common.container.data; -import appeng.tile.inventory.AppEngInternalInventory; +import ae2.util.inv.AppEngInternalInventory; import github.kasuminova.novaeng.common.tile.ecotech.efabricator.EFabricatorController; import github.kasuminova.novaeng.common.tile.ecotech.efabricator.EFabricatorPatternBus; import github.kasuminova.novaeng.common.util.BlockPos2ValueMap; @@ -21,7 +21,7 @@ public static EFabricatorPatternData ofFull(final EFabricatorController efContro for (final EFabricatorPatternBus patternBus : efController.getPatternBuses()) { final AppEngInternalInventory patternInv = patternBus.getPatterns(); final BlockPos pos = patternBus.getPos(); - for (int i = 0; i < patternInv.getSlots(); i++) { + for (int i = 0; i < patternInv.size(); i++) { final ItemStack patternStack = patternInv.getStackInSlot(i); if (!patternStack.isEmpty()) { patterns.computeIfAbsent(pos, key -> new ObjectLinkedOpenHashSet<>()) diff --git a/src/main/java/github/kasuminova/novaeng/common/container/data/EStorageCellData.java b/src/main/java/github/kasuminova/novaeng/common/container/data/EStorageCellData.java index b95eee0b..cfb5de00 100644 --- a/src/main/java/github/kasuminova/novaeng/common/container/data/EStorageCellData.java +++ b/src/main/java/github/kasuminova/novaeng/common/container/data/EStorageCellData.java @@ -1,13 +1,11 @@ package github.kasuminova.novaeng.common.container.data; -import appeng.api.storage.ICellInventory; -import appeng.api.storage.ICellInventoryHandler; -import appeng.api.storage.data.IAEItemStack; -import appeng.tile.inventory.AppEngCellInventory; +import ae2.api.storage.StorageCells; +import ae2.api.storage.cells.StorageCell; +import ae2.api.storage.cells.StorageCellStatistics; +import ae2.util.inv.AppEngCellInventory; import github.kasuminova.novaeng.common.block.ecotech.estorage.prop.DriveStorageLevel; import github.kasuminova.novaeng.common.block.ecotech.estorage.prop.DriveStorageType; -import github.kasuminova.novaeng.common.estorage.ECellDriveWatcher; -import github.kasuminova.novaeng.common.estorage.EStorageCellHandler; import github.kasuminova.novaeng.common.item.estorage.EStorageCell; import github.kasuminova.novaeng.common.tile.ecotech.estorage.EStorageCellDrive; import net.minecraft.item.ItemStack; @@ -20,31 +18,17 @@ public static EStorageCellData from(final EStorageCellDrive drive) { if (stack.isEmpty()) { return null; } - EStorageCellHandler handler = EStorageCellHandler.getHandler(stack); - if (handler == null) { + StorageCell cellInventory = StorageCells.getCellInventory(stack, null); + if (!(cellInventory instanceof StorageCellStatistics statistics)) { return null; } - EStorageCell cell = (EStorageCell) stack.getItem(); + EStorageCell cell = (EStorageCell) stack.getItem(); DriveStorageType type = EStorageCellDrive.getCellType(cell); if (type == null) { return null; } DriveStorageLevel level = cell.getLevel(); - ECellDriveWatcher watcher = drive.getWatcher(); - if (watcher == null) { - return null; - } - ICellInventoryHandler cellInventory = (ICellInventoryHandler) watcher.getInternal(); - if (cellInventory == null) { - return null; - } - ICellInventory cellInv = cellInventory.getCellInv(); - if (cellInv == null) { - return null; - } - long storedTypes = cellInv.getStoredItemTypes(); - long usedBytes = cellInv.getUsedBytes(); - return new EStorageCellData(type, level, (int) storedTypes, usedBytes); + return new EStorageCellData(type, level, (int) statistics.getStoredTypes(), statistics.getUsedBytes()); } } diff --git a/src/main/java/github/kasuminova/novaeng/common/ecalculator/ECPUCluster.java b/src/main/java/github/kasuminova/novaeng/common/ecalculator/ECPUCluster.java index 981cb196..5bed0f05 100644 --- a/src/main/java/github/kasuminova/novaeng/common/ecalculator/ECPUCluster.java +++ b/src/main/java/github/kasuminova/novaeng/common/ecalculator/ECPUCluster.java @@ -1,6 +1,6 @@ package github.kasuminova.novaeng.common.ecalculator; -import appeng.me.cluster.implementations.CraftingCPUCluster; +import ae2.me.cluster.implementations.CraftingCPUCluster; import github.kasuminova.mmce.common.util.TimeRecorder; import github.kasuminova.novaeng.common.block.ecotech.ecalculator.prop.Levels; import github.kasuminova.novaeng.common.tile.ecotech.ecalculator.ECalculatorController; diff --git a/src/main/java/github/kasuminova/novaeng/common/estorage/ECellDriveWatcher.java b/src/main/java/github/kasuminova/novaeng/common/estorage/ECellDriveWatcher.java index 9a3e32b4..ebea2b54 100644 --- a/src/main/java/github/kasuminova/novaeng/common/estorage/ECellDriveWatcher.java +++ b/src/main/java/github/kasuminova/novaeng/common/estorage/ECellDriveWatcher.java @@ -1,81 +1,41 @@ package github.kasuminova.novaeng.common.estorage; -import appeng.api.config.Actionable; -import appeng.api.networking.security.IActionSource; -import appeng.api.storage.ICellInventoryHandler; -import appeng.api.storage.IMEInventory; -import appeng.api.storage.IStorageChannel; -import appeng.api.storage.data.IAEStack; -import appeng.me.GridAccessException; -import appeng.me.helpers.AENetworkProxy; -import appeng.me.storage.MEInventoryHandler; -import github.kasuminova.novaeng.NovaEngineeringCore; +import ae2.api.config.Actionable; +import ae2.api.networking.security.IActionSource; +import ae2.api.stacks.AEKey; +import ae2.api.storage.MEStorage; +import ae2.me.storage.MEInventoryHandler; import github.kasuminova.novaeng.common.tile.ecotech.estorage.EStorageCellDrive; -import github.kasuminova.novaeng.common.tile.ecotech.estorage.EStorageMEChannel; -import io.netty.util.internal.ThrowableUtil; -import java.util.Collections; -import java.util.List; - -public class ECellDriveWatcher> extends MEInventoryHandler { +public class ECellDriveWatcher extends MEInventoryHandler { protected final EStorageCellDrive drive; - public ECellDriveWatcher(final IMEInventory i, final IStorageChannel channel, final EStorageCellDrive drive) { - super(i, channel); + public ECellDriveWatcher(final MEStorage i, final EStorageCellDrive drive) { + super(i); this.drive = drive; } @Override - public T injectItems(final T input, final Actionable type, final IActionSource src) { - final long size = input.getStackSize(); - final T remainder = super.injectItems(input, type, src); + public long insert(final AEKey input, final long amount, final Actionable type, final IActionSource src) { + final long inserted = super.insert(input, amount, type, src); - if (type == Actionable.MODULATE && (remainder == null || remainder.getStackSize() != size)) { - EStorageMEChannel channel = this.drive.getController().getChannel(); - AENetworkProxy proxy = channel.getProxy(); - if (proxy.isActive()) { - try { - List changed = Collections.singletonList(input.copy().setStackSize(input.getStackSize() - (remainder == null ? 0 : remainder.getStackSize()))); - proxy.getStorage().postAlterationOfStoredItems(this.getChannel(), changed, channel.getSource()); - } catch (GridAccessException e) { - NovaEngineeringCore.log.warn(ThrowableUtil.stackTraceToString(e)); - } - } + if (type == Actionable.MODULATE && inserted > 0) { this.drive.onWriting(); } - return remainder; + return inserted; } @Override - public T extractItems(final T request, final Actionable type, final IActionSource src) { - final T extractable = super.extractItems(request, type, src); + public long extract(final AEKey request, final long amount, final Actionable type, final IActionSource src) { + final long extractable = super.extract(request, amount, type, src); - if (type == Actionable.MODULATE && extractable != null) { - EStorageMEChannel channel = this.drive.getController().getChannel(); - AENetworkProxy proxy = channel.getProxy(); - if (proxy.isActive()) { - try { - List changed = Collections.singletonList(request.copy().setStackSize(-extractable.getStackSize())); - proxy.getStorage().postAlterationOfStoredItems(this.getChannel(), changed, channel.getSource()); - } catch (GridAccessException e) { - NovaEngineeringCore.log.warn(ThrowableUtil.stackTraceToString(e)); - } - } + if (type == Actionable.MODULATE && extractable > 0) { this.drive.onWriting(); } return extractable; } - @Override - public boolean isSticky() { - if (this.getInternal() instanceof ICellInventoryHandler cellInventoryHandler) { - return cellInventoryHandler.isSticky(); - } - - return super.isSticky(); - } - } diff --git a/src/main/java/github/kasuminova/novaeng/common/estorage/EStorageCellHandler.java b/src/main/java/github/kasuminova/novaeng/common/estorage/EStorageCellHandler.java deleted file mode 100644 index 2f7b2aae..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/estorage/EStorageCellHandler.java +++ /dev/null @@ -1,37 +0,0 @@ -package github.kasuminova.novaeng.common.estorage; - -import appeng.api.storage.ICellInventory; -import appeng.api.storage.ICellInventoryHandler; -import appeng.api.storage.ISaveProvider; -import appeng.api.storage.IStorageChannel; -import appeng.api.storage.data.IAEStack; -import appeng.core.features.registries.cell.BasicCellHandler; -import appeng.me.storage.BasicCellInventoryHandler; -import github.kasuminova.novaeng.common.item.estorage.EStorageCell; -import net.minecraft.item.ItemStack; - -public class EStorageCellHandler extends BasicCellHandler { - public static final EStorageCellHandler INSTANCE = new EStorageCellHandler(); - - public static EStorageCellHandler getHandler(final ItemStack cell) { - if (INSTANCE.isCell(cell)) { - return INSTANCE; - } - return null; - } - - @Override - public boolean isCell(final ItemStack is) { - return is.getItem() instanceof EStorageCell; - } - - @Override - public > ICellInventoryHandler getCellInventory(final ItemStack is, final ISaveProvider host, final IStorageChannel channel) { - final ICellInventory inv = EStorageCellInventory.createInventory(is, host); - if (inv == null || inv.getChannel() != channel) { - return null; - } - return new BasicCellInventoryHandler<>(inv, channel); - } - -} diff --git a/src/main/java/github/kasuminova/novaeng/common/estorage/EStorageCellInventory.java b/src/main/java/github/kasuminova/novaeng/common/estorage/EStorageCellInventory.java deleted file mode 100644 index fdb571ca..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/estorage/EStorageCellInventory.java +++ /dev/null @@ -1,376 +0,0 @@ -package github.kasuminova.novaeng.common.estorage; - -import appeng.api.AEApi; -import appeng.api.config.Actionable; -import appeng.api.exceptions.AppEngException; -import appeng.api.implementations.items.IStorageCell; -import appeng.api.networking.security.IActionSource; -import appeng.api.storage.ICellInventory; -import appeng.api.storage.ICellInventoryHandler; -import appeng.api.storage.ISaveProvider; -import appeng.api.storage.IStorageChannel; -import appeng.api.storage.data.IAEItemStack; -import appeng.api.storage.data.IAEStack; -import appeng.api.storage.data.IItemList; -import appeng.core.AEConfig; -import appeng.core.AELog; -import appeng.me.storage.AbstractCellInventory; -import github.kasuminova.novaeng.NovaEngineeringCore; -import github.kasuminova.novaeng.common.item.estorage.EStorageCell; -import github.kasuminova.novaeng.mixin.ae2.AccessorAbstractCellInventory; -import io.netty.util.internal.ThrowableUtil; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fml.relauncher.ReflectionHelper; - -public class EStorageCellInventory> extends AbstractCellInventory { - public static final String ITEM_SLOT = "#"; - public static final String ITEM_SLOT_COUNT = "@"; - public static final String ITEM_TYPE_TAG = "it"; - public static final String ITEM_COUNT_TAG = "ic"; - - private final EStorageCell cellType; - private final IStorageChannel channel; - - @SuppressWarnings("deprecation") - protected EStorageCellInventory(final EStorageCell cellType, final ItemStack o, final ISaveProvider container) { - super(cellType, o, container); - ReflectionHelper.setPrivateValue(AbstractCellInventory.class, this, cellType.getTotalTypes(o), "maxItemTypes", null); - this.cellType = cellType; - this.channel = cellType.getChannel(); - } - - @SuppressWarnings({"rawtypes"}) - public static > ICellInventory createInventory(final ItemStack o, final ISaveProvider container) { - try { - if (o == null) { - throw new AppEngException("ItemStack was used as a cell, but was not a cell!"); - } - - final Item type = o.getItem(); - if (!(type instanceof EStorageCell cellType)) { - throw new AppEngException("ItemStack was used as a cell, but was not a cell!"); - } - - if (!cellType.isStorageCell(o)) { - throw new AppEngException("ItemStack was used as a cell, but was not a cell!"); - } - - return new EStorageCellInventory(cellType, o, container); - } catch (final AppEngException e) { - NovaEngineeringCore.log.error(ThrowableUtil.stackTraceToString(e)); - return null; - } - } - - private static IStorageCell getStorageCell(final ItemStack input) { - if (input != null) { - final Item type = input.getItem(); - - if (type instanceof IStorageCell) { - return (IStorageCell) type; - } - } - - return null; - } - - @SuppressWarnings({"rawtypes"}) - private static boolean isCellEmpty(ICellInventory inv) { - if (inv != null) { - return inv.getAvailableItems(inv.getChannel().createList()).isEmpty(); - } - return true; - } - - private boolean isStorageCell(final T input) { - if (input instanceof final IAEItemStack stack) { - final IStorageCell type = getStorageCell(stack.getDefinition()); - - return type != null && !type.storableInStorageCell(); - } - - return false; - } - - protected IItemList getCellItems() { - if (this.cellItems == null) { - this.cellItems = this.channel.createList(); - this.loadCellItems(); - } - - return this.cellItems; - } - - private void loadCellItems() { - if (this.cellItems == null) { - this.cellItems = this.channel.createList(); - } - - this.cellItems.resetStatus(); // clears totals and stuff. - - final long types = this.getStoredItemTypes(); - boolean needsUpdate = false; - - AccessorAbstractCellInventory inv = (AccessorAbstractCellInventory) this; - for (int slot = 0; slot < types; slot++) { - NBTTagCompound compoundTag = inv.getTagCompound().getCompoundTag(ITEM_SLOT + slot); - long stackSize = inv.getTagCompound().getLong(ITEM_SLOT_COUNT + slot); - needsUpdate |= !this.loadCellItem(compoundTag, stackSize); - } - - if (needsUpdate) { - this.saveChanges(); - } - } - - @Override - public void persist() { - AccessorAbstractCellInventory inv = (AccessorAbstractCellInventory) this; - if (inv.getIsPersisted()) { - return; - } - NBTTagCompound tagCompound = inv.getTagCompound(); - - long itemCount = 0; - - // add new pretty stuff... - int x = 0; - for (final T v : this.cellItems) { - itemCount += v.getStackSize(); - - final NBTTagCompound g = new NBTTagCompound(); - v.writeToNBT(g); - tagCompound.setTag(ITEM_SLOT + x, g); - tagCompound.setLong(ITEM_SLOT_COUNT + x, v.getStackSize()); - - x++; - } - - final short oldStoredItems = inv.getStoredItemTypes(); - - inv.setStoredItemTypes((short) this.cellItems.size()); - - if (this.cellItems.isEmpty()) { - tagCompound.removeTag(ITEM_TYPE_TAG); - } else { - tagCompound.setShort(ITEM_TYPE_TAG, inv.getStoredItemTypes()); - } - - inv.setStoredItemCount(itemCount); - if (itemCount == 0) { - tagCompound.removeTag(ITEM_COUNT_TAG); - } else { - tagCompound.setLong(ITEM_COUNT_TAG, itemCount); - } - - // clean any old crusty stuff... - for (; x >= oldStoredItems && x < inv.getMaxItemTypes(); x++) { - tagCompound.removeTag(ITEM_SLOT + x); - tagCompound.removeTag(ITEM_SLOT_COUNT + x); - } - - inv.setIsPersisted(true); - } - - @Override - public T injectItems(T input, Actionable mode, IActionSource src) { - if (input == null) { - return null; - } - if (input.getStackSize() == 0) { - return null; - } - - if (this.cellType.isBlackListed(this.getItemStack(), input)) { - return input; - } - // This is slightly hacky as it expects a read-only access, but fine for now. - // TODO: Guarantee a read-only access. E.g. provide an isEmpty() method and ensure CellInventory does not write - // any NBT data for empty cells instead of relying on an empty IItemContainer - if (isStorageCell(input)) { - ItemStack cellStack = ((IAEItemStack) input).createItemStack(); - ICellInventoryHandler cellInvHandler = AEApi.instance().registries().cell().getCellInventory(cellStack, null, getStorageCell(cellStack).getChannel()); - if (cellInvHandler != null && !isCellEmpty(cellInvHandler.getCellInv())) { - return input; - } - } - - final T l = this.getCellItems().findPrecise(input); - if (l != null) { - final long remainingItemCount = this.getRemainingItemCount(); - if (remainingItemCount <= 0) { - return input; - } - - if (input.getStackSize() > remainingItemCount) { - final T r = input.copy(); - r.setStackSize(r.getStackSize() - remainingItemCount); - if (mode == Actionable.MODULATE) { - l.setStackSize(l.getStackSize() + remainingItemCount); - // Update Count. - AccessorAbstractCellInventory inv = (AccessorAbstractCellInventory) this; - inv.setStoredItemCount(inv.getStoredItemCount() + remainingItemCount); - this.saveChangesES(); - } - return r; - } else { - if (mode == Actionable.MODULATE) { - long prev = l.getStackSize(); - l.setStackSize(l.getStackSize() + input.getStackSize()); - // Update Count. - AccessorAbstractCellInventory inv = (AccessorAbstractCellInventory) this; - if (prev == 0) { - inv.setStoredItemTypes((short) (inv.getStoredItemTypes() + 1)); - } - inv.setStoredItemCount(inv.getStoredItemCount() + input.getStackSize()); - this.saveChangesES(); - } - return null; - } - } - - // room for new type, and for at least one item! - if (this.canHoldNewItem()) { - final long remainingItemCount = this.getRemainingItemCount() - (long) this.getBytesPerType() * this.itemsPerByte; - if (remainingItemCount > 0) { - if (input.getStackSize() > remainingItemCount) { - final T toReturn = input.copy(); - toReturn.setStackSize(input.getStackSize() - remainingItemCount); - if (mode == Actionable.MODULATE) { - final T toWrite = input.copy(); - toWrite.setStackSize(remainingItemCount); - - this.cellItems.add(toWrite); - - // Update Types and Counts. - AccessorAbstractCellInventory inv = (AccessorAbstractCellInventory) this; - inv.setStoredItemTypes((short) (inv.getStoredItemTypes() + 1)); - inv.setStoredItemCount(inv.getStoredItemCount() + remainingItemCount); - this.saveChangesES(); - } - return toReturn; - } - - if (mode == Actionable.MODULATE) { - this.cellItems.add(input); - - // Update Types and Counts. - AccessorAbstractCellInventory inv = (AccessorAbstractCellInventory) this; - inv.setStoredItemTypes((short) (inv.getStoredItemTypes() + 1)); - inv.setStoredItemCount(inv.getStoredItemCount() + input.getStackSize()); - this.saveChangesES(); - } - - return null; - } - } - - return input; - } - - @Override - public T extractItems(T request, Actionable mode, IActionSource src) { - if (request == null) { - return null; - } - - final long size = request.getStackSize(); - - T results = null; - - final T l = this.getCellItems().findPrecise(request); - if (l != null) { - results = l.copy(); - - if (l.getStackSize() <= size) { - results.setStackSize(l.getStackSize()); - if (mode == Actionable.MODULATE && l.getStackSize() > 0) { - l.setStackSize(0); - this.saveChanges(); - } - } else { - results.setStackSize(size); - if (mode == Actionable.MODULATE) { - l.setStackSize(l.getStackSize() - size); - // Update Count. - AccessorAbstractCellInventory inv = (AccessorAbstractCellInventory) this; - inv.setStoredItemCount(inv.getStoredItemCount() - size); - this.saveChangesES(); - } - } - } - - return results; - } - - @Override - public IStorageChannel getChannel() { - return this.channel; - } - - /** - * 类似 {@link AbstractCellInventory#saveChanges()},但是不对 cellItems 进行完全扫描。 - */ - protected void saveChangesES() { - if (this.container != null) { - ((AccessorAbstractCellInventory) this).setIsPersisted(false); - this.container.saveChanges(this); - } else { - saveChanges(); - } - } - - @Override - protected boolean loadCellItem(NBTTagCompound compoundTag, long stackSize) { - // Now load the item stack - final T t; - try { - t = this.channel.createFromNBT(compoundTag); - if (t == null) { - AELog.warn("Removing item " + compoundTag + " from storage cell because the associated item type couldn't be found."); - return false; - } - } catch (Throwable ex) { - if (AEConfig.instance().isRemoveCrashingItemsOnLoad()) { - AELog.warn(ex, "Removing item " + compoundTag + " from storage cell because loading the ItemStack crashed."); - return false; - } - throw ex; - } - - t.setStackSize(stackSize); - t.setCraftable(false); - - if (stackSize > 0) { - this.cellItems.add(t); - } - - return true; - } - - @Override - public long getUsedBytes() { - final long bytesForItemCount = (this.getStoredItemCount() + this.getUnusedItemCount()) / ((long) this.itemsPerByte * cellType.getByteMultiplier()); - return this.getStoredItemTypes() * this.getBytesPerType() + bytesForItemCount; - } - - @Override - public long getRemainingItemCount() { - final long remaining = this.getFreeBytes() * ((long) this.itemsPerByte * cellType.getByteMultiplier()) + this.getUnusedItemCount(); - return remaining > 0 ? remaining : 0; - } - - @Override - public int getUnusedItemCount() { - final int div = (int) (this.getStoredItemCount() % (8 * cellType.getByteMultiplier())); - - if (div == 0) { - return 0; - } - - return (this.itemsPerByte * cellType.getByteMultiplier()) - div; - } - -} diff --git a/src/main/java/github/kasuminova/novaeng/common/handler/ECalculatorEventHandler.java b/src/main/java/github/kasuminova/novaeng/common/handler/ECalculatorEventHandler.java index 8da3456a..c866d1d7 100644 --- a/src/main/java/github/kasuminova/novaeng/common/handler/ECalculatorEventHandler.java +++ b/src/main/java/github/kasuminova/novaeng/common/handler/ECalculatorEventHandler.java @@ -1,12 +1,10 @@ package github.kasuminova.novaeng.common.handler; -import appeng.api.config.SecurityPermissions; -import appeng.api.networking.IGrid; -import appeng.api.networking.IGridNode; -import appeng.api.networking.energy.IEnergyGrid; -import appeng.api.networking.security.ISecurityGrid; -import appeng.me.helpers.IGridProxyable; -import appeng.tile.inventory.AppEngInternalInventory; +import ae2.api.networking.IGridNode; +import ae2.api.networking.security.IActionHost; +import ae2.api.util.DimensionalBlockPos; +import ae2.util.Platform; +import ae2.util.inv.AppEngInternalInventory; import github.kasuminova.novaeng.NovaEngineeringCore; import github.kasuminova.novaeng.common.container.ContainerECalculatorController; import github.kasuminova.novaeng.common.item.ecalculator.ECalculatorCell; @@ -34,17 +32,15 @@ public class ECalculatorEventHandler { public static final int UPDATE_INTERVAL = 10; - private static boolean canInteract(final EntityPlayer player, final IGridProxyable proxyable) { - final IGridNode gn = proxyable.getProxy().getNode(); + private static boolean canInteract(final EntityPlayer player, + final TileEntity target, + final IActionHost actionHost) { + final IGridNode gn = actionHost.getActionableNode(); if (gn != null) { - final IGrid g = gn.getGrid(); - final IEnergyGrid eg = g.getCache(IEnergyGrid.class); - if (!eg.isNetworkPowered()) { + if (!gn.isPowered()) { return true; } - - final ISecurityGrid sg = g.getCache(ISecurityGrid.class); - return sg.hasPermission(player, SecurityPermissions.BUILD); + return Platform.hasPermissions(new DimensionalBlockPos(target), player); } return true; } @@ -95,7 +91,7 @@ public void onRightClickBlock(PlayerInteractEvent.RightClickBlock event) { ECalculatorController controller = drive.getController(); if (controller != null) { ECalculatorMEChannel channel = controller.getChannel(); - if (channel != null && !canInteract(player, channel)) { + if (channel != null && !canInteract(player, drive, channel)) { player.sendMessage(new TextComponentTranslation("novaeng.ecalculator_cell_drive.player.no_permission")); event.setCanceled(true); return; diff --git a/src/main/java/github/kasuminova/novaeng/common/handler/EStorageEventHandler.java b/src/main/java/github/kasuminova/novaeng/common/handler/EStorageEventHandler.java index 31bb2f2e..08c22232 100644 --- a/src/main/java/github/kasuminova/novaeng/common/handler/EStorageEventHandler.java +++ b/src/main/java/github/kasuminova/novaeng/common/handler/EStorageEventHandler.java @@ -1,15 +1,13 @@ package github.kasuminova.novaeng.common.handler; -import appeng.api.config.SecurityPermissions; -import appeng.api.networking.IGrid; -import appeng.api.networking.IGridNode; -import appeng.api.networking.energy.IEnergyGrid; -import appeng.api.networking.security.ISecurityGrid; -import appeng.me.helpers.IGridProxyable; -import appeng.tile.inventory.AppEngCellInventory; +import ae2.api.networking.IGridNode; +import ae2.api.networking.security.IActionHost; +import ae2.api.storage.StorageCells; +import ae2.api.util.DimensionalBlockPos; +import ae2.util.inv.AppEngCellInventory; +import ae2.util.Platform; import github.kasuminova.novaeng.NovaEngineeringCore; import github.kasuminova.novaeng.common.container.ContainerEStorageController; -import github.kasuminova.novaeng.common.estorage.EStorageCellHandler; import github.kasuminova.novaeng.common.network.PktEStorageGUIData; import github.kasuminova.novaeng.common.tile.ecotech.estorage.EStorageCellDrive; import github.kasuminova.novaeng.common.tile.ecotech.estorage.EStorageController; @@ -33,17 +31,15 @@ public class EStorageEventHandler { public static final EStorageEventHandler INSTANCE = new EStorageEventHandler(); - private static boolean canInteract(final EntityPlayer player, final IGridProxyable proxyable) { - final IGridNode gn = proxyable.getProxy().getNode(); + private static boolean canInteract(final EntityPlayer player, + final TileEntity target, + final IActionHost actionHost) { + final IGridNode gn = actionHost.getActionableNode(); if (gn != null) { - final IGrid g = gn.getGrid(); - final IEnergyGrid eg = g.getCache(IEnergyGrid.class); - if (!eg.isNetworkPowered()) { + if (!gn.isPowered()) { return true; } - - final ISecurityGrid sg = g.getCache(ISecurityGrid.class); - return sg.hasPermission(player, SecurityPermissions.BUILD); + return Platform.hasPermissions(new DimensionalBlockPos(target), player); } return true; } @@ -73,7 +69,7 @@ public void onRightClickBlock(PlayerInteractEvent.RightClickBlock event) { EStorageController controller = drive.getController(); if (controller != null) { EStorageMEChannel channel = controller.getChannel(); - if (channel != null && !canInteract(player, channel)) { + if (channel != null && !canInteract(player, drive, channel)) { player.sendMessage(new TextComponentTranslation("novaeng.estorage_cell_drive.player.no_permission")); event.setCanceled(true); return; @@ -85,7 +81,7 @@ public void onRightClickBlock(PlayerInteractEvent.RightClickBlock event) { AppEngCellInventory inv = drive.getDriveInv(); ItemStack stackInSlot = inv.getStackInSlot(0); if (stackInSlot.isEmpty()) { - if (stackInHand.isEmpty() || EStorageCellHandler.getHandler(stackInHand) == null) { + if (stackInHand.isEmpty() || !StorageCells.isCellHandled(stackInHand)) { return; } player.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, inv.insertItem(0, stackInHand.copy(), false)); diff --git a/src/main/java/github/kasuminova/novaeng/common/integration/theoneprobe/ECalculatorInfoProvider.java b/src/main/java/github/kasuminova/novaeng/common/integration/theoneprobe/ECalculatorInfoProvider.java index d1390f50..28f2ccd9 100644 --- a/src/main/java/github/kasuminova/novaeng/common/integration/theoneprobe/ECalculatorInfoProvider.java +++ b/src/main/java/github/kasuminova/novaeng/common/integration/theoneprobe/ECalculatorInfoProvider.java @@ -1,7 +1,9 @@ package github.kasuminova.novaeng.common.integration.theoneprobe; -import appeng.api.storage.data.IAEItemStack; -import appeng.me.cluster.implementations.CraftingCPUCluster; +import ae2.api.stacks.AEItemKey; +import ae2.api.stacks.GenericStack; +import ae2.api.networking.crafting.CraftingJobStatus; +import ae2.me.cluster.implementations.CraftingCPUCluster; import github.kasuminova.mmce.common.util.TimeRecorder; import github.kasuminova.novaeng.common.crafttweaker.util.NovaEngUtils; import github.kasuminova.novaeng.common.ecalculator.ECPUCluster; @@ -81,16 +83,17 @@ private static void processThreadCoreInfo(final IProbeInfo probeInfo, final ECal box = newBox(probeInfo).vertical(); box.text("{*top.ecalculator.thread_core.crafting*}"); for (final CraftingCPUCluster cpu : cpus) { - final IAEItemStack output = cpu.getFinalOutput(); - if (output == null) { + final CraftingJobStatus status = cpu.getJobStatus(); + if (status == null || status.crafting() == null || !(status.crafting().what() instanceof AEItemKey itemKey)) { continue; } final IProbeInfo taskBox = newBox(box).vertical(); IProbeInfo row = taskBox.horizontal(taskBox.defaultLayoutStyle().alignment(ElementAlignment.ALIGN_CENTER)); - final long count = output.getStackSize(); - final ItemStack stack = output.getCachedItemStack(1); + final GenericStack output = status.crafting(); + final long count = output.amount(); + final ItemStack stack = itemKey.toStack(1); row.item(stack); row.itemLabel(stack); row.text(" x " + count); diff --git a/src/main/java/github/kasuminova/novaeng/common/item/ItemBlockME.java b/src/main/java/github/kasuminova/novaeng/common/item/ItemBlockME.java index 95bf0310..e3d10c23 100644 --- a/src/main/java/github/kasuminova/novaeng/common/item/ItemBlockME.java +++ b/src/main/java/github/kasuminova/novaeng/common/item/ItemBlockME.java @@ -1,7 +1,6 @@ package github.kasuminova.novaeng.common.item; -import appeng.me.helpers.AENetworkProxy; -import appeng.me.helpers.IGridProxyable; +import ae2.me.helpers.IGridConnectedTile; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; @@ -32,9 +31,8 @@ public boolean placeBlockAt(@Nonnull final ItemStack stack, @Nonnull final IBlockState newState) { if (super.placeBlockAt(stack, player, world, pos, side, hitX, hitY, hitZ, newState)) { TileEntity tile = world.getTileEntity(pos); - if (tile instanceof IGridProxyable) { - AENetworkProxy proxy = ((IGridProxyable) tile).getProxy(); - proxy.setOwner(player); + if (tile instanceof IGridConnectedTile gridConnectedTile) { + gridConnectedTile.setOwner(player); } return true; } diff --git a/src/main/java/github/kasuminova/novaeng/common/item/ItemMachineAssemblyTool.kt b/src/main/java/github/kasuminova/novaeng/common/item/ItemMachineAssemblyTool.kt index e58df1fc..985f412e 100644 --- a/src/main/java/github/kasuminova/novaeng/common/item/ItemMachineAssemblyTool.kt +++ b/src/main/java/github/kasuminova/novaeng/common/item/ItemMachineAssemblyTool.kt @@ -2,20 +2,21 @@ package github.kasuminova.novaeng.common.item -import appeng.api.networking.crafting.ICraftingGrid -import appeng.util.item.AEItemStack +import ae2.api.stacks.AEItemKey +import ae2.container.implementations.ContainerCraftConfirm +import ae2.container.interfaces.ICraftingGridContainer +import ae2.core.gui.locator.GuiHostLocator +import ae2.core.gui.locator.GuiHostLocators +import ae2.helpers.WirelessTerminalGuiHost import com.brandon3055.draconicevolution.api.itemconfig.BooleanConfigField import com.brandon3055.draconicevolution.api.itemconfig.IConfigurableItem import com.brandon3055.draconicevolution.api.itemconfig.IItemConfigField import com.brandon3055.draconicevolution.api.itemconfig.IntegerConfigField import com.brandon3055.draconicevolution.api.itemconfig.ItemConfigFieldRegistry import com.brandon3055.draconicevolution.api.itemconfig.ToolConfigHelper -import com.circulation.random_complement.common.interfaces.RCCraftingGridCache -import com.circulation.random_complement.common.util.MEHandler import github.kasuminova.novaeng.NovaEngineeringCore import github.kasuminova.novaeng.common.CommonProxy import github.kasuminova.novaeng.common.util.AssemblyBlockArray -import github.kasuminova.novaeng.common.util.AutoCraftingQueue import github.kasuminova.novaeng.common.util.NEWMachineAssemblyManager import hellfirepvp.modularmachinery.common.block.BlockController import hellfirepvp.modularmachinery.common.machine.DynamicMachine @@ -23,9 +24,11 @@ import hellfirepvp.modularmachinery.common.machine.MachineRegistry import hellfirepvp.modularmachinery.common.tiles.base.TileMultiblockMachineController import hellfirepvp.modularmachinery.common.util.BlockArrayCache import ink.ikx.mmce.common.utils.StructureIngredient +import it.unimi.dsi.fastutil.ints.IntArrayList import it.unimi.dsi.fastutil.objects.ObjectArrayList import net.minecraft.client.util.ITooltipFlag import net.minecraft.entity.player.EntityPlayer +import net.minecraft.entity.player.EntityPlayerMP import net.minecraft.item.ItemStack import net.minecraft.util.ActionResult import net.minecraft.util.EnumActionResult @@ -35,9 +38,9 @@ import net.minecraft.util.math.BlockPos import net.minecraft.util.text.TextComponentTranslation import net.minecraft.util.text.translation.I18n import net.minecraft.world.World +import net.minecraftforge.fml.common.Loader import net.minecraftforge.fml.relauncher.Side import net.minecraftforge.fml.relauncher.SideOnly -import java.util.ArrayDeque import kotlin.math.max import kotlin.math.min @@ -144,21 +147,36 @@ object ItemMachineAssemblyTool : ItemBasic("machine_assembly_tool"), IConfigurab val autoAECrafting = usingAE && isAutoAECrafting(stack) val missing = NEWMachineAssemblyManager.checkAllItems(player, st, usingAE, autoAECrafting) val q = missing.list - if (autoAECrafting && !q.isEmpty()) { - MEHandler.getTerminalGuiObject(player)?.actionableNode?.grid?.let { - val autoList = ArrayDeque() - val cgc: RCCraftingGridCache = it.getCache(ICraftingGrid::class.java) - val list = cgc.`rc$getCraftableItems`() - for (stacks in q) { - for (item in stacks) { - if (item.isEmpty) continue - if (list.containsKey(AEItemStack.fromItemStack(item))) { - autoList.add(item) - break + val serverPlayer = player as? EntityPlayerMP + if (autoAECrafting && !q.isEmpty() && serverPlayer != null) { + // 用原生 AE2 的合成确认队列:把「缺料且 AE 可合成」的条目交给 + // ContainerCraftConfirm,由它逐个确认、逐个推进,无需自建队列。 + val locator = findWirelessTerminalLocator(player) + val host = locator?.locate(player, WirelessTerminalGuiHost::class.java) + if (locator != null && host != null) { + host.getActionableNode()?.grid()?.let { + val craftables = it.getCraftingService().getCraftables(AEItemKey.filter()) + val toCraft = ObjectArrayList() + for (stacks in q) { + for (item in stacks) { + if (item.isEmpty) continue + val key = AEItemKey.of(item) ?: continue + if (craftables.contains(key)) { + toCraft.add( + ICraftingGridContainer.AutoCraftEntry( + key, + item.count.toLong(), + IntArrayList() + ) + ) + break + } } } + if (!toCraft.isEmpty()) { + ContainerCraftConfirm.openWithCraftingList(host, serverPlayer, locator, toCraft) + } } - AutoCraftingQueue.setQueueAndStrat(autoList, player) } } if (q.isEmpty() @@ -324,4 +342,29 @@ object ItemMachineAssemblyTool : ItemBasic("machine_assembly_tool"), IConfigurab .orElse(1) } + /** + * 找到装着无线终端的位置。原生 AE2 打开子界面时要的是定位器(它自己会用定位器再定位一次宿主), + * 所以这里返回定位器而不是宿主。 + */ + private fun findWirelessTerminalLocator(player: EntityPlayer): GuiHostLocator? { + for (slot in 0 until player.inventory.sizeInventory) { + val locator = GuiHostLocators.forInventorySlot(slot) + if (locator.locate(player, WirelessTerminalGuiHost::class.java) != null) { + return locator + } + } + + if (Loader.isModLoaded("baubles")) { + val handler = baubles.api.BaublesApi.getBaublesHandler(player) + for (slot in 0 until handler.slots) { + val locator = GuiHostLocators.forBaubleSlot(slot) + if (locator.locate(player, WirelessTerminalGuiHost::class.java) != null) { + return locator + } + } + } + + return null + } + } diff --git a/src/main/java/github/kasuminova/novaeng/common/item/estorage/EStorageCell.java b/src/main/java/github/kasuminova/novaeng/common/item/estorage/EStorageCell.java index 5619f155..00f7ce32 100644 --- a/src/main/java/github/kasuminova/novaeng/common/item/estorage/EStorageCell.java +++ b/src/main/java/github/kasuminova/novaeng/common/item/estorage/EStorageCell.java @@ -1,29 +1,31 @@ package github.kasuminova.novaeng.common.item.estorage; -import appeng.api.AEApi; -import appeng.api.config.FuzzyMode; -import appeng.api.implementations.items.IStorageCell; -import appeng.api.storage.data.IAEStack; -import appeng.items.AEBaseItem; -import appeng.items.contents.CellConfig; -import appeng.items.contents.CellUpgrades; -import appeng.util.Platform; +import ae2.api.storage.cells.IBasicCellItem; +import ae2.api.stacks.AEKey; +import ae2.api.stacks.AEKeyType; +import ae2.api.config.FuzzyMode; +import ae2.api.upgrades.IUpgradeInventory; +import ae2.api.upgrades.UpgradeInventories; +import ae2.items.AEBaseItem; +import ae2.items.contents.CellConfig; +import ae2.util.ConfigInventory; +import ae2.util.Platform; import github.kasuminova.novaeng.common.block.ecotech.estorage.prop.DriveStorageLevel; import github.kasuminova.novaeng.common.core.CreativeTabNovaEng; -import github.kasuminova.novaeng.common.estorage.EStorageCellHandler; import lombok.Getter; import net.minecraft.client.resources.I18n; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; -import net.minecraftforge.items.IItemHandler; import javax.annotation.Nonnull; import java.util.List; +import java.util.Set; -public abstract class EStorageCell> extends AEBaseItem implements IStorageCell { +public abstract class EStorageCell extends AEBaseItem implements IBasicCellItem { @Getter protected final DriveStorageLevel level; protected final int totalBytes; @@ -40,12 +42,9 @@ public EStorageCell(DriveStorageLevel level, final int millionBytes, final int b @Override @SideOnly(Side.CLIENT) - @SuppressWarnings("DataFlowIssue") protected void addCheckedInformation(final ItemStack stack, final World world, final List lines, final ITooltipFlag advancedTooltips) { super.addCheckedInformation(stack, world, lines, advancedTooltips); - AEApi.instance() - .client() - .addCellInformation(EStorageCellHandler.getHandler(stack).getCellInventory(stack, null, this.getChannel()), lines); + addCellInformationToTooltip(stack, lines); lines.add(I18n.format("novaeng.estorage_cell.insert.tip")); lines.add(I18n.format("novaeng.estorage_cell.extract.tip")); if (level == DriveStorageLevel.B) { @@ -67,43 +66,31 @@ public int getBytes(@Nonnull final ItemStack cellItem) { } @Override - public boolean isBlackListed(@Nonnull final ItemStack cellItem, @Nonnull final T requestedAddition) { + public boolean isBlackListed(@Nonnull final ItemStack cellItem, @Nonnull final AEKey requestedAddition) { return false; } + @Nonnull @Override - public boolean storableInStorageCell() { - return false; - } - - @Override - public boolean isStorageCell(@Nonnull final ItemStack i) { - return true; - } - - @Override - public boolean isEditable(final ItemStack is) { - return true; - } + public abstract AEKeyType getKeyType(); @Override - public IItemHandler getUpgradesInventory(final ItemStack is) { - return new CellUpgrades(is, 2); + public IUpgradeInventory getUpgrades(final ItemStack is) { + return UpgradeInventories.forItem(is, getKeyType() == AEKeyType.items() ? 4 : 3); } @Override - public IItemHandler getConfigInventory(final ItemStack is) { - return new CellConfig(is); + public ConfigInventory getConfigInventory(final ItemStack is) { + return CellConfig.create(Set.of(getKeyType()), is, getTotalTypes(is)); } @Override public FuzzyMode getFuzzyMode(final ItemStack is) { - final String fz = Platform.openNbtData(is).getString("FuzzyMode"); - try { - return FuzzyMode.valueOf(fz); - } catch (final Throwable t) { + final NBTTagCompound tag = is.getTagCompound(); + if (tag == null || !tag.hasKey("FuzzyMode", 8)) { return FuzzyMode.IGNORE_ALL; } + return FuzzyMode.valueOf(tag.getString("FuzzyMode")); } @Override diff --git a/src/main/java/github/kasuminova/novaeng/common/item/estorage/EStorageCellFluid.java b/src/main/java/github/kasuminova/novaeng/common/item/estorage/EStorageCellFluid.java index d3c358d6..4f132cd3 100644 --- a/src/main/java/github/kasuminova/novaeng/common/item/estorage/EStorageCellFluid.java +++ b/src/main/java/github/kasuminova/novaeng/common/item/estorage/EStorageCellFluid.java @@ -1,19 +1,14 @@ package github.kasuminova.novaeng.common.item.estorage; -import appeng.api.AEApi; -import appeng.api.storage.IStorageChannel; -import appeng.api.storage.channels.IFluidStorageChannel; -import appeng.api.storage.data.IAEFluidStack; -import appeng.fluids.helper.FluidCellConfig; +import ae2.api.stacks.AEKeyType; import github.kasuminova.novaeng.common.block.ecotech.estorage.prop.DriveStorageLevel; import github.kasuminova.novaeng.novaeng_core.Tags; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; -import net.minecraftforge.items.IItemHandler; import javax.annotation.Nonnull; -public class EStorageCellFluid extends EStorageCell { +public class EStorageCellFluid extends EStorageCell { public static final EStorageCellFluid LEVEL_A = new EStorageCellFluid(DriveStorageLevel.A, 16, 4); public static final EStorageCellFluid LEVEL_B = new EStorageCellFluid(DriveStorageLevel.B, 64, 16); @@ -35,14 +30,9 @@ public int getBytesPerType(@Nonnull final ItemStack cellItem) { return byteMultiplier * 1024; } - @Override - public IItemHandler getConfigInventory(final ItemStack is) { - return new FluidCellConfig(is); - } - @Nonnull @Override - public IStorageChannel getChannel() { - return AEApi.instance().storage().getStorageChannel(IFluidStorageChannel.class); + public AEKeyType getKeyType() { + return AEKeyType.fluids(); } } diff --git a/src/main/java/github/kasuminova/novaeng/common/item/estorage/EStorageCellGas.java b/src/main/java/github/kasuminova/novaeng/common/item/estorage/EStorageCellGas.java index e57918f9..ef3a9996 100644 --- a/src/main/java/github/kasuminova/novaeng/common/item/estorage/EStorageCellGas.java +++ b/src/main/java/github/kasuminova/novaeng/common/item/estorage/EStorageCellGas.java @@ -1,16 +1,14 @@ package github.kasuminova.novaeng.common.item.estorage; -import appeng.api.AEApi; -import appeng.api.storage.IStorageChannel; -import com.mekeng.github.common.me.data.IAEGasStack; -import com.mekeng.github.common.me.storage.IGasStorageChannel; -import github.kasuminova.novaeng.common.block.ecotech.estorage.prop.DriveStorageLevel; +import ae2.api.stacks.AEKeyType; import github.kasuminova.novaeng.novaeng_core.Tags; +import me.ramidzkh.mekae2.ae2.AEGasKeyType; +import github.kasuminova.novaeng.common.block.ecotech.estorage.prop.DriveStorageLevel; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import org.jetbrains.annotations.NotNull; -public class EStorageCellGas extends EStorageCell { +public class EStorageCellGas extends EStorageCell { public static final EStorageCellGas LEVEL_A = new EStorageCellGas(DriveStorageLevel.A, 16, 4); public static final EStorageCellGas LEVEL_B = new EStorageCellGas(DriveStorageLevel.B, 64, 16); @@ -35,7 +33,7 @@ public int getBytesPerType(@NotNull ItemStack itemStack) { @NotNull @Override - public IStorageChannel getChannel() { - return AEApi.instance().storage().getStorageChannel(IGasStorageChannel.class); + public AEKeyType getKeyType() { + return AEGasKeyType.TYPE; } } diff --git a/src/main/java/github/kasuminova/novaeng/common/item/estorage/EStorageCellItem.java b/src/main/java/github/kasuminova/novaeng/common/item/estorage/EStorageCellItem.java index b02132c8..d87c076d 100644 --- a/src/main/java/github/kasuminova/novaeng/common/item/estorage/EStorageCellItem.java +++ b/src/main/java/github/kasuminova/novaeng/common/item/estorage/EStorageCellItem.java @@ -1,9 +1,6 @@ package github.kasuminova.novaeng.common.item.estorage; -import appeng.api.AEApi; -import appeng.api.storage.IStorageChannel; -import appeng.api.storage.channels.IItemStorageChannel; -import appeng.api.storage.data.IAEItemStack; +import ae2.api.stacks.AEKeyType; import github.kasuminova.novaeng.common.block.ecotech.estorage.prop.DriveStorageLevel; import github.kasuminova.novaeng.novaeng_core.Tags; import net.minecraft.item.ItemStack; @@ -11,7 +8,7 @@ import javax.annotation.Nonnull; -public class EStorageCellItem extends EStorageCell { +public class EStorageCellItem extends EStorageCell { public static final EStorageCellItem LEVEL_A = new EStorageCellItem(DriveStorageLevel.A, 16, 4); public static final EStorageCellItem LEVEL_B = new EStorageCellItem(DriveStorageLevel.B, 64, 16); @@ -35,7 +32,7 @@ public int getBytesPerType(@Nonnull final ItemStack cellItem) { @Nonnull @Override - public IStorageChannel getChannel() { - return AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class); + public AEKeyType getKeyType() { + return AEKeyType.items(); } } diff --git a/src/main/java/github/kasuminova/novaeng/common/machine/BiogenicSimulationComputer.kt b/src/main/java/github/kasuminova/novaeng/common/machine/BiogenicSimulationComputer.kt index 8a76a027..e191f545 100644 --- a/src/main/java/github/kasuminova/novaeng/common/machine/BiogenicSimulationComputer.kt +++ b/src/main/java/github/kasuminova/novaeng/common/machine/BiogenicSimulationComputer.kt @@ -1,6 +1,6 @@ package github.kasuminova.novaeng.common.machine -import appeng.util.Platform +import ae2.util.Platform import crafttweaker.CraftTweakerAPI import crafttweaker.api.item.IItemStack import crafttweaker.api.minecraft.CraftTweakerMC diff --git a/src/main/java/github/kasuminova/novaeng/common/mod/Mods.java b/src/main/java/github/kasuminova/novaeng/common/mod/Mods.java index 5b0cafb8..5ececcab 100644 --- a/src/main/java/github/kasuminova/novaeng/common/mod/Mods.java +++ b/src/main/java/github/kasuminova/novaeng/common/mod/Mods.java @@ -4,25 +4,7 @@ public enum Mods { - AE2("appliedenergistics2"), - AE2EL("appliedenergistics2") { - @Override - public boolean loaded() { - if (this.initialized) { - return this.loaded; - } - this.initialized = true; - if (!super.loaded()) { - return this.loaded = false; - } - try { - Class.forName("appeng.core.AE2ELCore"); - return this.loaded = true; - } catch (Exception e) { - return this.loaded = false; - } - } - }, + AE2("ae2"), IC2("ic2"), MEK("mekanism"), MEKCEU("mekanism") { diff --git a/src/main/java/github/kasuminova/novaeng/common/network/ParallelNetworkManager.java b/src/main/java/github/kasuminova/novaeng/common/network/ParallelNetworkManager.java index de066c95..e26d8bf5 100644 --- a/src/main/java/github/kasuminova/novaeng/common/network/ParallelNetworkManager.java +++ b/src/main/java/github/kasuminova/novaeng/common/network/ParallelNetworkManager.java @@ -1,18 +1,13 @@ package github.kasuminova.novaeng.common.network; -import appeng.core.sync.network.NetworkHandler; import github.kasuminova.mmce.common.util.concurrent.Action; import github.kasuminova.mmce.common.util.concurrent.ActionExecutor; -import github.kasuminova.novaeng.NovaEngineeringCore; import github.kasuminova.novaeng.common.mod.Mods; import hellfirepvp.modularmachinery.ModularMachinery; -import ic2.core.network.NetworkManager; import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; import it.unimi.dsi.fastutil.objects.ReferenceSet; import mekanism.common.Mekanism; -import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import net.minecraftforge.fml.common.Optional; -import net.minecraftforge.fml.common.network.FMLEventChannel; import java.util.Map; import java.util.PriorityQueue; @@ -25,41 +20,11 @@ public class ParallelNetworkManager { private final ReferenceSet blacklistChannels = new ReferenceOpenHashSet<>(); public void init() { - if (Mods.IC2.loaded()) { - initializeIC2Blacklist(); - } - if (Mods.AE2.loaded()) { - initializeAE2Blacklist(); - } if (Mods.MEKCEU.loaded()) { initializeMekanismCEuBlacklist(); } } - @Optional.Method(modid = "ic2") - private void initializeIC2Blacklist() { - try { - FMLEventChannel channel = ObfuscationReflectionHelper.getPrivateValue(NetworkManager.class, null, "channel"); - if (channel != null) { - addBlacklistChannel(channel); - } - } catch (Throwable e) { - NovaEngineeringCore.log.warn(e); - } - } - - @Optional.Method(modid = "appliedenergistics2") - private void initializeAE2Blacklist() { - try { - FMLEventChannel ec = ObfuscationReflectionHelper.getPrivateValue(NetworkHandler.class, NetworkHandler.instance(), "ec"); - if (ec != null) { - addBlacklistChannel(ec); - } - } catch (Throwable e) { - NovaEngineeringCore.log.warn(e); - } - } - /** * MekCEu is async, so we dont need proxy that. */ diff --git a/src/main/java/github/kasuminova/novaeng/common/network/PktAutoCraftConfirm.kt b/src/main/java/github/kasuminova/novaeng/common/network/PktAutoCraftConfirm.kt deleted file mode 100644 index 64cdfbb1..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/network/PktAutoCraftConfirm.kt +++ /dev/null @@ -1,33 +0,0 @@ -package github.kasuminova.novaeng.common.network - -import github.kasuminova.novaeng.common.container.ContainerNEWCraftConfirm -import github.kasuminova.novaeng.common.util.AutoCraftingQueue -import io.netty.buffer.ByteBuf -import net.minecraftforge.fml.common.network.simpleimpl.IMessage -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext - -class PktAutoCraftConfirm : IMessage, IMessageHandler { - override fun fromBytes(buf: ByteBuf) { - - } - - override fun toBytes(buf: ByteBuf) { - - } - - override fun onMessage( - message: PktAutoCraftConfirm, - ctx: MessageContext - ): IMessage? { - val player = ctx.serverHandler.player - if (player.openContainer is ContainerNEWCraftConfirm) { - AutoCraftingQueue.getQueue(player)?.let { - if (!it.executionQueue(player)) { - player.closeContainer() - } - } - } - return null - } -} \ No newline at end of file diff --git a/src/main/java/github/kasuminova/novaeng/common/network/PktEFabricatorPatternSearchGUIAction.java b/src/main/java/github/kasuminova/novaeng/common/network/PktEFabricatorPatternSearchGUIAction.java index ce1e0be1..27dcf98c 100644 --- a/src/main/java/github/kasuminova/novaeng/common/network/PktEFabricatorPatternSearchGUIAction.java +++ b/src/main/java/github/kasuminova/novaeng/common/network/PktEFabricatorPatternSearchGUIAction.java @@ -1,6 +1,6 @@ package github.kasuminova.novaeng.common.network; -import appeng.tile.inventory.AppEngInternalInventory; +import ae2.util.inv.AppEngInternalInventory; import github.kasuminova.novaeng.NovaEngineeringCore; import github.kasuminova.novaeng.common.container.ContainerEFabricatorPatternSearch; import github.kasuminova.novaeng.common.tile.ecotech.efabricator.EFabricatorController; diff --git a/src/main/java/github/kasuminova/novaeng/common/network/PktEStorageGUIData.java b/src/main/java/github/kasuminova/novaeng/common/network/PktEStorageGUIData.java index d64fc38f..320c83b0 100644 --- a/src/main/java/github/kasuminova/novaeng/common/network/PktEStorageGUIData.java +++ b/src/main/java/github/kasuminova/novaeng/common/network/PktEStorageGUIData.java @@ -34,7 +34,7 @@ public PktEStorageGUIData() { public PktEStorageGUIData(final EStorageController controller) { List drives = controller.getCellDrives(); drives.stream() - .filter(drive -> drive.getDriveInv().getStackInSlot(0).getItem() instanceof EStorageCell cell && drive.isCellSupported(cell.getLevel())) + .filter(drive -> drive.getDriveInv().getStackInSlot(0).getItem() instanceof EStorageCell cell && drive.isCellSupported(cell.getLevel())) .map(EStorageCellData::from) .filter(Objects::nonNull) .forEach(dataList::add); diff --git a/src/main/java/github/kasuminova/novaeng/common/network/PktPatternTermUploadPattern.kt b/src/main/java/github/kasuminova/novaeng/common/network/PktPatternTermUploadPattern.kt index ecb3f928..9b90ac72 100644 --- a/src/main/java/github/kasuminova/novaeng/common/network/PktPatternTermUploadPattern.kt +++ b/src/main/java/github/kasuminova/novaeng/common/network/PktPatternTermUploadPattern.kt @@ -1,15 +1,12 @@ package github.kasuminova.novaeng.common.network -import appeng.api.AEApi -import appeng.api.networking.crafting.ICraftingPatternDetails -import appeng.api.networking.security.IActionHost -import appeng.api.storage.data.IAEItemStack -import appeng.container.implementations.ContainerPatternEncoder -import appeng.items.misc.ItemEncodedPattern -import appeng.me.GridAccessException -import com.glodblock.github.util.FluidCraftingPatternDetails +import ae2.api.crafting.IPatternDetails +import ae2.api.crafting.PatternDetailsHelper +import ae2.api.networking.security.IActionHost +import ae2.container.me.patternencode.ContainerPatternEncodingTerm +import ae2.container.SlotSemantics +import ae2.core.definitions.AEItems import github.kasuminova.novaeng.common.tile.ecotech.efabricator.EFabricatorMEChannel -import github.kasuminova.novaeng.mixin.ae2.AccessorContainerPatternEncoder import hellfirepvp.modularmachinery.ModularMachinery import io.netty.buffer.ByteBuf import net.minecraft.item.ItemStack @@ -29,42 +26,28 @@ class PktPatternTermUploadPattern : IMessage, IMessageHandler NODE_LISTENER = new IGridNodeListener<>() { + @Override + public void onSaveChanges(final TileCustomControllerME nodeOwner, final IGridNode node) { + nodeOwner.saveChanges(); + } + + @Override + public void onStateChanged(final TileCustomControllerME nodeOwner, + final IGridNode node, + final State state) { + nodeOwner.onMainNodeStateChanged(state); + } + }; + + protected final IManagedGridNode mainNode = new ManagedGridNode(this, NODE_LISTENER) + .setVisualRepresentation(getVisualItemStack()) + .setInWorldNode(true) + .setTagName("aeProxy"); protected final IActionSource source; public TileCustomControllerME() { this.source = new MachineSource(this); - this.proxy.setIdlePowerUsage(0.0D); - this.proxy.setFlags(GridFlags.REQUIRE_CHANNEL); + this.mainNode.setIdlePowerUsage(0.0D); + this.mainNode.setFlags(GridFlags.REQUIRE_CHANNEL); } public abstract ItemStack getVisualItemStack(); @@ -39,98 +52,95 @@ public TileCustomControllerME() { @Override public void readCustomNBT(final NBTTagCompound compound) { super.readCustomNBT(compound); - if (FMLCommonHandler.instance().getSide().isServer()) { - proxy.readFromNBT(compound); - } + mainNode.loadFromNBT(compound); } @Override public void writeCustomNBT(final NBTTagCompound compound) { super.writeCustomNBT(compound); - proxy.writeToNBT(compound); - } - - // AppEng Compat - - @MENetworkEventSubscribe - public void stateChange(final MENetworkChannelsChanged change) { - this.notifyNeighbors(); + mainNode.saveToNBT(compound); } - @MENetworkEventSubscribe - public void stateChange(final MENetworkPowerStatusChange change) { - this.notifyNeighbors(); + @Override + public void onMainNodeStateChanged(final IGridNodeListener.State reason) { + notifyNeighbors(); } private void notifyNeighbors() { - if (this.proxy.isActive()) { - try { - this.proxy.getTick().wakeDevice(this.proxy.getNode()); - } catch (GridAccessException e) { - // :P - } - Platform.notifyBlocksOfNeighbors(this.getWorld(), this.getPos()); + if (!mainNode.isActive()) { + return; } + mainNode.ifPresent((grid, node) -> grid.getTickManager().wakeDevice(node)); + Platform.notifyBlocksOfNeighbors(this.getWorld(), this.getPos()); } @Override - public void gridChanged() { - - } - - @Nonnull - @Override + @Nullable public IGridNode getActionableNode() { - return proxy.getNode(); + return mainNode.getNode(); } @Nonnull @Override - public AENetworkProxy getProxy() { - return proxy; + public IManagedGridNode getMainNode() { + return mainNode; } - @Nonnull @Override - public DimensionalCoord getLocation() { - return new DimensionalCoord(this); + public void saveChanges() { + markDirty(); } @Nullable @Override - public IGridNode getGridNode(@Nonnull final AEPartLocation dir) { - return proxy.getNode(); + public IGridNode getGridNode(@Nonnull final EnumFacing dir) { + return mainNode.getNode(); } @Nonnull @Override - public AECableType getCableConnectionType(@Nonnull final AEPartLocation dir) { + public AECableType getCableConnectionType(@Nonnull final EnumFacing dir) { return AECableType.SMART; } @Override - public void securityBreak() { - getWorld().destroyBlock(getPos(), true); + public boolean hasCapability(@Nonnull final Capability capability, @Nullable final EnumFacing facing) { + if (capability == AECapabilities.IN_WORLD_GRID_NODE_HOST) { + return true; + } + return super.hasCapability(capability, facing); + } + + @Nullable + @Override + public T getCapability(@Nonnull final Capability capability, @Nullable final EnumFacing facing) { + if (capability == AECapabilities.IN_WORLD_GRID_NODE_HOST) { + return AECapabilities.IN_WORLD_GRID_NODE_HOST.cast(this); + } + return super.getCapability(capability, facing); } @Override public void onChunkUnload() { super.onChunkUnload(); - proxy.onChunkUnload(); + mainNode.destroy(); } @Override public void invalidate() { super.invalidate(); - proxy.invalidate(); + mainNode.destroy(); } @Override public void validate() { super.validate(); if (!getWorld().isRemote) { - ModularMachinery.EXECUTE_MANAGER.addSyncTask(proxy::onReady); + ModularMachinery.EXECUTE_MANAGER.addSyncTask(() -> { + if (!mainNode.isReady()) { + mainNode.create(getWorld(), getPos()); + } + }); } } - } diff --git a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/ecalculator/ECalculatorCellDrive.java b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/ecalculator/ECalculatorCellDrive.java index b4d39f15..a423f340 100644 --- a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/ecalculator/ECalculatorCellDrive.java +++ b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/ecalculator/ECalculatorCellDrive.java @@ -1,10 +1,9 @@ package github.kasuminova.novaeng.common.tile.ecotech.ecalculator; -import appeng.tile.inventory.AppEngInternalInventory; -import appeng.util.helpers.ItemHandlerUtil; -import appeng.util.inv.IAEAppEngInventory; -import appeng.util.inv.InvOperation; -import appeng.util.inv.filter.IAEItemFilter; +import ae2.api.inventories.InternalInventory; +import ae2.util.inv.AppEngInternalInventory; +import ae2.util.inv.InternalInventoryHost; +import ae2.util.inv.filter.IAEItemFilter; import github.kasuminova.novaeng.common.block.ecotech.ecalculator.prop.DriveStorageLevel; import github.kasuminova.novaeng.common.block.ecotech.ecalculator.prop.Levels; import github.kasuminova.novaeng.common.item.ecalculator.ECalculatorCell; @@ -14,15 +13,11 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import static appeng.helpers.ItemStackHelper.stackFromNBT; -import static appeng.helpers.ItemStackHelper.stackWriteToNBT; - -public class ECalculatorCellDrive extends ECalculatorPart implements IAEAppEngInventory { +public class ECalculatorCellDrive extends ECalculatorPart implements InternalInventoryHost { protected final AppEngInternalInventory driveInv = new AppEngInternalInventory(this, 1); protected EnumFacing connectedSide = null; @@ -32,7 +27,7 @@ public ECalculatorCellDrive() { } @Override - public void onChangeInventory(final IItemHandler inv, final int slot, final InvOperation mc, final ItemStack removedStack, final ItemStack newStack) { + public void onChangeInventory(final AppEngInternalInventory inv, final int slot) { disconnectTransmitter(); final ECalculatorController controller = getController(); if (controller != null) { @@ -42,6 +37,16 @@ public void onChangeInventory(final IItemHandler inv, final int slot, final InvO this.markForUpdateSync(); } + @Override + public void saveChangedInventory(final AppEngInternalInventory inv) { + markDirty(); + } + + @Override + public boolean isClientSide() { + return world != null && world.isRemote; + } + public long getSuppliedBytes() { final ItemStack stackInSlot = driveInv.getStackInSlot(0); if (stackInSlot.isEmpty()) { @@ -134,7 +139,7 @@ public boolean hasCapability(@Nonnull final Capability capability, @Nullable @Override public T getCapability(@Nonnull final Capability capability, @Nullable final EnumFacing facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(driveInv); + return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(driveInv.toItemHandler()); } return super.getCapability(capability, facing); } @@ -144,9 +149,9 @@ public void readCustomNBT(final NBTTagCompound tag) { super.readCustomNBT(tag); final NBTTagCompound opt = tag.getCompoundTag("driveInv"); - for (int x = 0; x < driveInv.getSlots(); x++) { + for (int x = 0; x < driveInv.size(); x++) { final NBTTagCompound item = opt.getCompoundTag("item" + x); - ItemHandlerUtil.setStackInSlot(driveInv, x, stackFromNBT(item)); + driveInv.setItemDirect(x, item.hasKey("id", 8) ? new ItemStack(item) : ItemStack.EMPTY); } if (tag.hasKey("connectedSide")) { this.connectedSide = EnumFacing.values()[tag.getByte("connectedSide")]; @@ -164,11 +169,11 @@ public void writeCustomNBT(final NBTTagCompound tag) { super.writeCustomNBT(tag); final NBTTagCompound opt = new NBTTagCompound(); - for (int x = 0; x < driveInv.getSlots(); x++) { + for (int x = 0; x < driveInv.size(); x++) { final NBTTagCompound itemNBT = new NBTTagCompound(); final ItemStack is = driveInv.getStackInSlot(x); if (!is.isEmpty()) { - stackWriteToNBT(is, itemNBT); + is.writeToNBT(itemNBT); } opt.setTag("item" + x, itemNBT); } @@ -179,11 +184,6 @@ public void writeCustomNBT(final NBTTagCompound tag) { } } - @Override - public void saveChanges() { - markDirty(); - } - @Override public void notifyUpdate() { super.notifyUpdate(); @@ -203,12 +203,7 @@ private static class CellInvFilter implements IAEItemFilter { private static final CellInvFilter INSTANCE = new CellInvFilter(); @Override - public boolean allowExtract(IItemHandler inv, int slot, int amount) { - return true; - } - - @Override - public boolean allowInsert(IItemHandler inv, int slot, ItemStack stack) { + public boolean allowInsert(InternalInventory inv, int slot, ItemStack stack) { return !stack.isEmpty() && stack.getItem() instanceof ECalculatorCell; } diff --git a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/ecalculator/ECalculatorController.java b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/ecalculator/ECalculatorController.java index 9b56653d..6054e180 100644 --- a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/ecalculator/ECalculatorController.java +++ b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/ecalculator/ECalculatorController.java @@ -1,7 +1,6 @@ package github.kasuminova.novaeng.common.tile.ecotech.ecalculator; -import appeng.api.util.WorldCoord; -import appeng.me.cluster.implementations.CraftingCPUCluster; +import ae2.me.cluster.implementations.CraftingCPUCluster; import github.kasuminova.mmce.common.helper.IDynamicPatternInfo; import github.kasuminova.mmce.common.util.DynamicPattern; import github.kasuminova.novaeng.NovaEngineeringCore; @@ -221,7 +220,7 @@ public void createVirtualCPU() { return; } - WorldCoord pos = new WorldCoord(getPos()); + BlockPos pos = getPos(); this.virtualCPU = new CraftingCPUCluster(pos, pos); ECPUCluster eCluster = ECPUCluster.from(this.virtualCPU); eCluster.novaeng_ec$setVirtualCPUOwner(this); diff --git a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/ecalculator/ECalculatorMEChannel.java b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/ecalculator/ECalculatorMEChannel.java index 71ec6878..1af50bbc 100644 --- a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/ecalculator/ECalculatorMEChannel.java +++ b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/ecalculator/ECalculatorMEChannel.java @@ -1,42 +1,62 @@ package github.kasuminova.novaeng.common.tile.ecotech.ecalculator; -import appeng.api.networking.GridFlags; -import appeng.api.networking.IGridNode; -import appeng.api.networking.events.MENetworkChannelsChanged; -import appeng.api.networking.events.MENetworkCraftingCpuChange; -import appeng.api.networking.events.MENetworkEventSubscribe; -import appeng.api.networking.events.MENetworkPowerStatusChange; -import appeng.api.networking.security.IActionHost; -import appeng.api.networking.security.IActionSource; -import appeng.api.util.AECableType; -import appeng.api.util.AEPartLocation; -import appeng.api.util.DimensionalCoord; -import appeng.me.GridAccessException; -import appeng.me.cluster.implementations.CraftingCPUCluster; -import appeng.me.helpers.AENetworkProxy; -import appeng.me.helpers.IGridProxyable; -import appeng.me.helpers.MachineSource; +import ae2.api.AECapabilities; +import ae2.api.networking.GridFlags; +import ae2.api.networking.IGridNode; +import ae2.api.networking.IGridNodeListener; +import ae2.api.networking.IManagedGridNode; +import ae2.api.networking.events.GridCraftingCpuChange; +import ae2.api.networking.security.IActionSource; +import ae2.api.util.AECableType; +import ae2.me.ManagedGridNode; +import ae2.me.cluster.implementations.CraftingCPUCluster; +import ae2.me.helpers.IGridConnectedTile; +import ae2.me.helpers.MachineSource; import github.kasuminova.novaeng.common.block.ecotech.ecalculator.BlockECalculatorMEChannel; import hellfirepvp.modularmachinery.ModularMachinery; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Collections; import java.util.List; -public class ECalculatorMEChannel extends ECalculatorPart implements IActionHost, IGridProxyable { +public class ECalculatorMEChannel extends ECalculatorPart implements IGridConnectedTile { - protected final AENetworkProxy proxy = new AENetworkProxy(this, "channel", getVisualItemStack(), true); + private static final IGridNodeListener NODE_LISTENER = new IGridNodeListener<>() { + @Override + public void onSaveChanges(final ECalculatorMEChannel nodeOwner, final IGridNode node) { + nodeOwner.saveChanges(); + } + + @Override + public void onStateChanged(final ECalculatorMEChannel nodeOwner, + final IGridNode node, + final State state) { + nodeOwner.onMainNodeStateChanged(state); + } + }; + + protected IManagedGridNode mainNode; protected final IActionSource source = new MachineSource(this); private boolean wasActive = false; public ECalculatorMEChannel() { - this.proxy.setIdlePowerUsage(1.0D); - this.proxy.setFlags(GridFlags.REQUIRE_CHANNEL, GridFlags.DENSE_CAPACITY); + this.mainNode = createMainNode(); + } + + private IManagedGridNode createMainNode() { + return new ManagedGridNode(this, NODE_LISTENER) + .setIdlePowerUsage(1.0D) + .setFlags(GridFlags.REQUIRE_CHANNEL, GridFlags.DENSE_CAPACITY) + .setVisualRepresentation(getVisualItemStack()) + .setInWorldNode(true) + .setTagName("channel"); } public IActionSource getSource() { @@ -48,18 +68,9 @@ public ItemStack getVisualItemStack() { return new ItemStack(Item.getItemFromBlock(controller == null ? BlockECalculatorMEChannel.INSTANCE : controller.getParentController()), 1, 0); } - @MENetworkEventSubscribe - public void stateChange(final MENetworkPowerStatusChange c) { - final boolean currentActive = this.proxy.isActive(); - if (this.wasActive != currentActive) { - this.wasActive = currentActive; - postCPUClusterChangeEvent(); - } - } - - @MENetworkEventSubscribe - public void stateChange(final MENetworkChannelsChanged c) { - final boolean currentActive = this.proxy.isActive(); + @Override + public void onMainNodeStateChanged(final IGridNodeListener.State reason) { + final boolean currentActive = this.mainNode.isActive(); if (this.wasActive != currentActive) { this.wasActive = currentActive; postCPUClusterChangeEvent(); @@ -67,18 +78,15 @@ public void stateChange(final MENetworkChannelsChanged c) { } protected void postCPUClusterChangeEvent() { - if (this.proxy.isActive()) { - try { - this.proxy.getGrid().postEvent(new MENetworkCraftingCpuChange(this.proxy.getNode())); - } catch (final GridAccessException ignored) { - } + if (this.mainNode.isActive()) { + this.mainNode.ifPresent((grid, node) -> grid.postEvent(new GridCraftingCpuChange(node))); } } // Clusters public List getCPUs() { - final boolean currentActive = this.proxy.isActive(); + final boolean currentActive = this.mainNode.isActive(); if (!currentActive || !isAssembled()) { return Collections.emptyList(); } @@ -91,81 +99,103 @@ public List getCPUs() { // Misc - @Nonnull + @Nullable @Override public IGridNode getActionableNode() { - return proxy.getNode(); + return mainNode.getNode(); } - @Nonnull - @Override - public AENetworkProxy getProxy() { - return proxy; - } - - @Nonnull @Override - public DimensionalCoord getLocation() { - return new DimensionalCoord(this); + public IManagedGridNode getMainNode() { + return mainNode; } @Override - public void gridChanged() { + public void saveChanges() { + markDirty(); } @Nullable @Override - public IGridNode getGridNode(@Nonnull final AEPartLocation dir) { - return proxy.getNode(); + public IGridNode getGridNode(@Nonnull final EnumFacing dir) { + return mainNode.getNode(); } @Nonnull @Override - public AECableType getCableConnectionType(@Nonnull final AEPartLocation dir) { + public AECableType getCableConnectionType(@Nonnull final EnumFacing dir) { return AECableType.DENSE_SMART; } @Override - public void securityBreak() { - getWorld().destroyBlock(getPos(), true); + public boolean hasCapability(@Nonnull final Capability capability, @Nullable final EnumFacing facing) { + if (capability == AECapabilities.IN_WORLD_GRID_NODE_HOST) { + return true; + } + return super.hasCapability(capability, facing); + } + + @Nullable + @Override + public T getCapability(@Nonnull final Capability capability, @Nullable final EnumFacing facing) { + if (capability == AECapabilities.IN_WORLD_GRID_NODE_HOST) { + return AECapabilities.IN_WORLD_GRID_NODE_HOST.cast(this); + } + return super.getCapability(capability, facing); } @Override public void readCustomNBT(final NBTTagCompound compound) { super.readCustomNBT(compound); - proxy.readFromNBT(compound); + mainNode.loadFromNBT(compound); } @Override public void writeCustomNBT(final NBTTagCompound compound) { super.writeCustomNBT(compound); - proxy.writeToNBT(compound); + mainNode.saveToNBT(compound); } @Override public void onChunkUnload() { super.onChunkUnload(); - proxy.onChunkUnload(); + mainNode.destroy(); } @Override public void invalidate() { super.invalidate(); - proxy.invalidate(); + mainNode.destroy(); } @Override public void onAssembled() { super.onAssembled(); - proxy.setVisualRepresentation(getVisualItemStack()); - ModularMachinery.EXECUTE_MANAGER.addSyncTask(proxy::onReady); + mainNode.setVisualRepresentation(getVisualItemStack()); + final IManagedGridNode node = mainNode; + ModularMachinery.EXECUTE_MANAGER.addSyncTask(() -> { + if (mainNode == node && !node.isReady() && !getWorld().isRemote) { + node.create(getWorld(), getPos()); + } + }); } @Override public void onDisassembled() { super.onDisassembled(); - proxy.setVisualRepresentation(getVisualItemStack()); - proxy.invalidate(); + int ownerId = -1; + if (mainNode.isReady()) { + final IGridNode node = mainNode.getNode(); + if (node != null) { + ownerId = node.getOwningPlayerId(); + } + } + mainNode.destroy(); + mainNode = createMainNode(); + if (ownerId >= 0) { + mainNode.setOwningPlayerId(ownerId); + } + wasActive = false; } diff --git a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/ecalculator/ECalculatorThreadCore.java b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/ecalculator/ECalculatorThreadCore.java index 6d7611e0..a94604a7 100644 --- a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/ecalculator/ECalculatorThreadCore.java +++ b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/ecalculator/ECalculatorThreadCore.java @@ -1,13 +1,13 @@ package github.kasuminova.novaeng.common.tile.ecotech.ecalculator; -import appeng.api.util.WorldCoord; -import appeng.me.cluster.implementations.CraftingCPUCluster; +import ae2.me.cluster.implementations.CraftingCPUCluster; import github.kasuminova.mmce.common.util.Sides; import github.kasuminova.novaeng.common.ecalculator.ECPUCluster; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.network.play.server.SPacketUpdateTileEntity; +import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.util.Constants; import javax.annotation.Nonnull; @@ -153,7 +153,7 @@ public void readCPUNBT(final NBTTagCompound compound) { for (int i = 0; i < clustersTag.tagCount(); i++) { NBTTagCompound clusterTag = clustersTag.getCompoundTagAt(i); - WorldCoord coord = new WorldCoord(getPos()); + BlockPos coord = getPos(); CraftingCPUCluster cluster = new CraftingCPUCluster(coord, coord); ECPUCluster eCluster = ECPUCluster.from(cluster); diff --git a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorController.kt b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorController.kt index 31b77b9c..d2d58afb 100644 --- a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorController.kt +++ b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorController.kt @@ -1,16 +1,12 @@ package github.kasuminova.novaeng.common.tile.ecotech.efabricator -import appeng.api.AEApi -import appeng.api.config.Actionable -import appeng.api.config.PowerMultiplier -import appeng.api.networking.energy.IEnergyGrid -import appeng.api.storage.channels.IItemStorageChannel -import appeng.api.storage.data.IAEItemStack -import appeng.api.storage.data.IItemList -import appeng.me.GridAccessException -import appeng.util.Platform -import appeng.util.item.ItemList -import github.kasuminova.mmce.client.util.ItemStackUtils +import ae2.api.config.Actionable +import ae2.api.config.PowerMultiplier +import ae2.api.networking.energy.IEnergyService +import ae2.api.storage.MEStorage +import ae2.api.storage.StorageHelper +import ae2.api.stacks.KeyCounter +import ae2.api.stacks.GenericStack import github.kasuminova.novaeng.NovaEngineeringCore import github.kasuminova.novaeng.client.util.BlockModelHider import github.kasuminova.novaeng.common.block.ecotech.efabricator.BlockEFabricatorController @@ -28,7 +24,6 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList import net.minecraft.block.Block import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound -import net.minecraft.nbt.NBTTagList import net.minecraft.util.ResourceLocation import net.minecraft.util.math.BlockPos import net.minecraftforge.common.util.Constants @@ -77,10 +72,7 @@ class EFabricatorController() : EPartController() { val coolantInputHandlers = ObjectArrayList() val coolantOutputHandlers = ObjectArrayList() - val itemChannel = AEApi.instance().storage() - .getStorageChannel(IItemStorageChannel::class.java) - - var outputBuffer: IItemList = ItemList() + var outputBuffer: KeyCounter = KeyCounter() val parentController: BlockEFabricatorController? get() { @@ -140,7 +132,7 @@ class EFabricatorController() : EPartController() { } override fun onSyncTick(): Boolean { - if (channel == null || !channel!!.proxy.isActive) { + if (channel == null || !channel!!.mainNode.isActive) { this.tickExecutor = null return false } @@ -227,12 +219,8 @@ class EFabricatorController() : EPartController() { } fun supplyWorkerPower() { - val energy: IEnergyGrid - try { - energy = channel!!.proxy.energy - } catch (ignored: GridAccessException) { - return - } + val node = channel!!.mainNode.node ?: return + val energy: IEnergyService = node.grid().energyService for (worker in this.getWorkers()) { if (worker.energyCache < worker.getMaxEnergyCache()) { @@ -248,24 +236,19 @@ class EFabricatorController() : EPartController() { } fun clearOutputBuffer() { - try { - val proxy = this.channel!!.proxy - val inv = proxy.storage.getInventory(itemChannel) - for (stack in outputBuffer) { - val notInserted = Platform.poweredInsert( - proxy.energy, - inv, - stack.copy(), - this.channel!!.source - ) - if (notInserted != null) { - stack.stackSize = notInserted.stackSize - } else { - stack.stackSize = 0 - } + val node = this.channel!!.mainNode.node ?: return + val energy = node.grid().energyService + val inventory: MEStorage = node.grid().storageService.inventory + for (entry in outputBuffer) { + val inserted = StorageHelper.poweredInsert( + energy, + inventory, + entry.key, + entry.longValue, + this.channel!!.source + ) + outputBuffer.set(entry.key, entry.longValue - inserted) } - } catch (ignored: GridAccessException) { - } } override fun updateComponents() { @@ -356,7 +339,7 @@ class EFabricatorController() : EPartController() { if (this.energyConsumePerTick != newIdleDrain) { this.energyConsumePerTick = newIdleDrain if (this.channel != null) { - this.channel!!.proxy.idlePowerUsage = this.energyConsumePerTick + this.channel!!.mainNode.setIdlePowerUsage(this.energyConsumePerTick) } } } @@ -364,9 +347,9 @@ class EFabricatorController() : EPartController() { fun insertPattern(patternStack: ItemStack): Boolean { for (patternBus in this.getPatternBuses()) { val patternInv = patternBus.patterns - for (i in 0..() { activeCooling = compound.getBoolean("activeCooling") coolantCache = compound.getInteger("coolantCache") - outputBuffer = ItemList() + outputBuffer = KeyCounter() val list = compound.getTagList("outputBuffer", Constants.NBT.TAG_COMPOUND) - - list.forEach { - outputBuffer.add( - itemChannel.createStack( - ItemStackUtils.readNBTOversize(it as NBTTagCompound) - ) - ) + for (stack in GenericStack.readList(list)) { + if (stack != null) { + outputBuffer.add(stack.what(), stack.amount()) + } } loaded = prevLoaded @@ -587,13 +567,13 @@ class EFabricatorController() : EPartController() { compound.setBoolean("activeCooling", activeCooling) compound.setInteger("coolantCache", coolantCache) - val list = NBTTagList() synchronized(outputBuffer) { - for (stack in outputBuffer) { - list.appendTag(ItemStackUtils.writeNBTOversize(stack.getCachedItemStack(stack.stackSize))) + val stacks = ObjectArrayList() + for (entry in outputBuffer) { + stacks.add(GenericStack(entry.key, entry.longValue)) } + compound.setTag("outputBuffer", GenericStack.writeList(stacks)) } - compound.setTag("outputBuffer", list) } override fun readMachineNBT(compound: NBTTagCompound) { diff --git a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorMEChannel.kt b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorMEChannel.kt index 2d7da9a1..10ce5952 100644 --- a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorMEChannel.kt +++ b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorMEChannel.kt @@ -1,38 +1,29 @@ package github.kasuminova.novaeng.common.tile.ecotech.efabricator -import appeng.api.networking.GridFlags -import appeng.api.networking.IGridNode -import appeng.api.networking.crafting.ICraftingPatternDetails -import appeng.api.networking.crafting.ICraftingProvider -import appeng.api.networking.crafting.ICraftingProviderHelper -import appeng.api.networking.events.MENetworkChannelsChanged -import appeng.api.networking.events.MENetworkCraftingPatternChange -import appeng.api.networking.events.MENetworkEventSubscribe -import appeng.api.networking.events.MENetworkPowerStatusChange -import appeng.api.networking.security.IActionHost -import appeng.api.networking.security.IActionSource -import appeng.api.util.AECableType -import appeng.api.util.AEPartLocation -import appeng.api.util.DimensionalCoord -import appeng.me.GridAccessException -import appeng.me.helpers.AENetworkProxy -import appeng.me.helpers.IGridProxyable -import appeng.me.helpers.MachineSource -import com.glodblock.github.common.item.ItemFluidPacket -import com.glodblock.github.common.item.fake.FakeItemRegister -import com.glodblock.github.util.FluidCraftingPatternDetails -import github.kasuminova.mmce.common.util.PatternItemFilter +import ae2.api.AECapabilities +import ae2.api.crafting.IPatternDetails +import ae2.api.crafting.PatternDetailsHelper +import ae2.api.networking.GridFlags +import ae2.api.networking.IGridNode +import ae2.api.networking.IGridNodeListener +import ae2.api.networking.IManagedGridNode +import ae2.api.networking.crafting.ICraftingProvider +import ae2.api.stacks.AEItemKey +import ae2.api.stacks.KeyCounter +import ae2.api.networking.security.IActionSource +import ae2.api.util.AECableType +import ae2.me.ManagedGridNode +import ae2.me.helpers.IGridConnectedTile +import ae2.me.helpers.MachineSource import github.kasuminova.novaeng.common.block.ecotech.efabricator.BlockEFabricatorMEChannel import github.kasuminova.novaeng.common.tile.ecotech.efabricator.EFabricatorWorker.CraftWork import hellfirepvp.modularmachinery.ModularMachinery -import net.minecraft.inventory.InventoryCrafting import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound -import net.minecraftforge.fluids.FluidStack -import javax.annotation.Nonnull -import kotlin.math.min +import net.minecraft.util.EnumFacing +import net.minecraftforge.common.capabilities.Capability -class EFabricatorMEChannel : EFabricatorPart(), ICraftingProvider, IActionHost, IGridProxyable { +class EFabricatorMEChannel : EFabricatorPart(), ICraftingProvider, IGridConnectedTile { companion object { private fun getContainerItem(stackInSlot: ItemStack?): ItemStack { @@ -56,126 +47,75 @@ class EFabricatorMEChannel : EFabricatorPart(), ICraftingProvider, IActionHost, } } - private val aEProxy: AENetworkProxy = AENetworkProxy(this, "channel", this.visualItemStack, true) + private val nodeListener = object : IGridNodeListener { + override fun onSaveChanges(nodeOwner: EFabricatorMEChannel, node: IGridNode) { + nodeOwner.saveChanges() + } + + override fun onStateChanged(nodeOwner: EFabricatorMEChannel, node: IGridNode, state: IGridNodeListener.State) { + nodeOwner.postPatternChange() + } + } + + @JvmField + val mainNode: IManagedGridNode = ManagedGridNode(this, nodeListener) + .setIdlePowerUsage(1.0) + .setFlags(GridFlags.REQUIRE_CHANNEL, GridFlags.DENSE_CAPACITY) + .setVisualRepresentation(this.visualItemStack) + .setInWorldNode(true) + .setTagName("channel") val source: IActionSource = MachineSource(this) private var wasActive = false - init { - this.aEProxy.idlePowerUsage = 1.0 - this.aEProxy.setFlags(GridFlags.REQUIRE_CHANNEL, GridFlags.DENSE_CAPACITY) - } - val visualItemStack: ItemStack get() { val controller: EFabricatorController? = getController() return if (controller == null) ItemStack(BlockEFabricatorMEChannel.INSTANCE) - else ItemStack(controller.parentController) + else ItemStack(controller.parentController!!) } - @MENetworkEventSubscribe - fun stateChange(c: MENetworkPowerStatusChange?) { - postPatternChangeEvent() - } - - @MENetworkEventSubscribe - fun stateChange(c: MENetworkChannelsChanged?) { - postPatternChangeEvent() - } - - // Crafting Provider - private fun postPatternChangeEvent() { - val currentActive = this.aEProxy.isActive + private fun postPatternChange() { + val currentActive = this.mainNode.isActive if (this.wasActive != currentActive) { this.wasActive = currentActive - try { - this.aEProxy.grid.postEvent(MENetworkCraftingPatternChange(this, aEProxy.node)) - } catch (ignored: GridAccessException) { - } + ICraftingProvider.requestUpdate(mainNode) } } - override fun provideCrafting(craftingTracker: ICraftingProviderHelper) { - val controller: EFabricatorController = controller ?: return - - val patternBuses: List = controller.getPatternBuses() - patternBuses.stream() - .flatMap { patternBus: EFabricatorPatternBus? -> - patternBus!!.getDetails().stream() - } - .filter { details: ICraftingPatternDetails? -> details!!.isCraftable || details is FluidCraftingPatternDetails } - .forEach { details: ICraftingPatternDetails? -> craftingTracker.addCraftingOption(this, details) } + override fun getAvailablePatterns(): List { + return controller?.getPatternBuses()?.flatMap { it.getDetails() } ?: emptyList() } - override fun pushPattern(pattern: ICraftingPatternDetails, table: InventoryCrafting): Boolean { + override fun pushPattern(pattern: IPatternDetails, inputHolder: Array, multiplier: Int): Boolean { if (isBusy()) { return false } - if (!pattern.isCraftable) { - if (pattern is FluidCraftingPatternDetails) { - return pushFluidPattern(pattern, table) - } - return false - } - - val output = pattern.getOutput(table, this.getWorld()) - if (output.isEmpty) { + val outputKey = pattern.primaryOutput.what as? AEItemKey ?: return false + if (inputHolder.size > 9 || multiplier <= 0) { return false } val remaining = Array(9) { i -> ItemStack.EMPTY } - var size = 0 - for (i in 0.. Int.MAX_VALUE) { + return false } + val key = entries[0].key as? AEItemKey ?: return false + remaining[i] = getContainerItem(key.toStack(entries[0].longValue.toInt())) } - output.count *= size - - return partController.offerWork(CraftWork(remaining, output, size)) - } - - private fun pushFluidPattern(pattern: FluidCraftingPatternDetails, table: InventoryCrafting): Boolean { - val outputs = pattern.outputs - val output = - if (outputs[0] != null) outputs[0]!!.getCachedItemStack(outputs[0]!!.stackSize) else ItemStack.EMPTY - - if (output.isEmpty) return false - - val remaining = Array(9) { i -> ItemStack.EMPTY } - var size = 0 - for (i in 0..(item) as FluidStack).amount - val pamount = (FakeItemRegister.getStack(pattern.inputs[i]) as FluidStack).amount - size = amount / pamount - } - } - remaining[i] = getContainerItem(item) - } + val outputAmount = Math.multiplyExact(pattern.primaryOutput.amount, multiplier.toLong()) + if (outputAmount > Int.MAX_VALUE) { + return false } - - output.count *= size - - return partController.offerWork(CraftWork(remaining, output, size)) + return partController?.offerWork(CraftWork(remaining, outputKey.toStack(outputAmount.toInt()), multiplier)) ?: false } fun insertPattern(patternStack: ItemStack): Boolean { - if (!PatternItemFilter.INSTANCE.allowInsert(null, -1, patternStack)) { + if (!PatternDetailsHelper.isEncodedPattern(patternStack)) { return false } if (partController != null) { @@ -191,70 +131,59 @@ class EFabricatorMEChannel : EFabricatorPart(), ICraftingProvider, IActionHost, return true } - // Misc - @Nonnull - override fun getActionableNode(): IGridNode { - return aEProxy.node - } - - @Nonnull - override fun getProxy(): AENetworkProxy { - return aEProxy - } - - @Nonnull - override fun getLocation(): DimensionalCoord { - return DimensionalCoord(this) - } - - override fun gridChanged() { - } - - override fun getGridNode(@Nonnull dir: AEPartLocation): IGridNode? { - return aEProxy.node - } - - @Nonnull - override fun getCableConnectionType(@Nonnull dir: AEPartLocation): AECableType { - return AECableType.DENSE_SMART - } - - override fun securityBreak() { - getWorld().destroyBlock(getPos(), true) - } - override fun readCustomNBT(compound: NBTTagCompound?) { super.readCustomNBT(compound) - aEProxy.readFromNBT(compound) + mainNode.loadFromNBT(compound) } override fun writeCustomNBT(compound: NBTTagCompound?) { super.writeCustomNBT(compound) - aEProxy.writeToNBT(compound) + mainNode.saveToNBT(compound) } override fun onChunkUnload() { super.onChunkUnload() - aEProxy.onChunkUnload() + mainNode.destroy() } override fun invalidate() { super.invalidate() - aEProxy.invalidate() + mainNode.destroy() } override fun onAssembled() { super.onAssembled() - aEProxy.setVisualRepresentation(this.visualItemStack) + mainNode.setVisualRepresentation(this.visualItemStack) ModularMachinery.EXECUTE_MANAGER.addSyncTask { - aEProxy.onReady() - partController.recalculateEnergyUsage() + if (!mainNode.isReady() && !getWorld().isRemote) { + mainNode.create(getWorld(), getPos()) + } + partController?.recalculateEnergyUsage() } } override fun onDisassembled() { super.onDisassembled() - aEProxy.setVisualRepresentation(this.visualItemStack) - aEProxy.invalidate() + mainNode.setVisualRepresentation(this.visualItemStack) + mainNode.destroy() + } + + override fun getMainNode(): IManagedGridNode = mainNode + + override fun saveChanges() { + markDirty() + } + + override fun getCableConnectionType(dir: EnumFacing): AECableType = AECableType.DENSE_SMART + + override fun hasCapability(capability: Capability<*>, facing: EnumFacing?): Boolean { + return capability === AECapabilities.IN_WORLD_GRID_NODE_HOST || super.hasCapability(capability, facing) + } + + override fun getCapability(capability: Capability, facing: EnumFacing?): T? { + if (capability === AECapabilities.IN_WORLD_GRID_NODE_HOST) { + return AECapabilities.IN_WORLD_GRID_NODE_HOST.cast(this) + } + return super.getCapability(capability, facing) } } \ No newline at end of file diff --git a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorPatternBus.kt b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorPatternBus.kt index ea397486..afc1ffba 100644 --- a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorPatternBus.kt +++ b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorPatternBus.kt @@ -1,17 +1,11 @@ package github.kasuminova.novaeng.common.tile.ecotech.efabricator -import appeng.api.implementations.ICraftingPatternItem -import appeng.api.networking.crafting.ICraftingPatternDetails -import appeng.api.networking.events.MENetworkCraftingPatternChange -import appeng.api.storage.data.IAEItemStack -import appeng.items.misc.ItemEncodedPattern -import appeng.me.GridAccessException -import appeng.tile.inventory.AppEngInternalInventory -import appeng.util.inv.IAEAppEngInventory -import appeng.util.inv.InvOperation -import com.glodblock.github.util.FluidCraftingPatternDetails -import com.glodblock.github.util.FluidPatternDetails -import github.kasuminova.mmce.common.util.PatternItemFilter +import ae2.api.crafting.IPatternDetails +import ae2.api.crafting.PatternDetailsHelper +import ae2.api.networking.crafting.ICraftingProvider +import ae2.api.stacks.AEKey +import ae2.util.inv.AppEngInternalInventory +import ae2.util.inv.InternalInventoryHost import github.kasuminova.novaeng.NovaEngineeringCore import github.kasuminova.novaeng.common.container.ContainerEFabricatorPatternSearch import github.kasuminova.novaeng.common.container.data.EFabricatorPatternData @@ -21,40 +15,34 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet import net.minecraft.entity.player.EntityPlayer import net.minecraft.entity.player.EntityPlayerMP -import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound import net.minecraft.util.EnumFacing import net.minecraftforge.common.capabilities.Capability import net.minecraftforge.fml.common.FMLCommonHandler import net.minecraftforge.items.CapabilityItemHandler -import net.minecraftforge.items.IItemHandler -import java.util.Objects import java.util.function.Consumer -import java.util.function.IntFunction -import java.util.stream.Collectors -import java.util.stream.IntStream import javax.annotation.Nonnull -class EFabricatorPatternBus : EFabricatorPart(), IAEAppEngInventory { +class EFabricatorPatternBus : EFabricatorPart(), InternalInventoryHost { companion object { const val PATTERN_SLOTS = 12 * 6 } - val aePatterns = ObjectOpenHashSet() - val patterns = AppEngInternalInventory(this, PATTERN_SLOTS, 1, PatternItemFilter.INSTANCE) - private val details = ObjectArrayList(PATTERN_SLOTS) + val aePatterns = ObjectOpenHashSet() + val patterns = AppEngInternalInventory(this, PATTERN_SLOTS, 1) + private val details = ObjectArrayList(PATTERN_SLOTS) init { // Initialize details... - IntStream.range(0, PATTERN_SLOTS).mapToObj(IntFunction { i: Int -> null }) - .forEach { e: ICraftingPatternDetails? -> details.add(e) } + repeat(PATTERN_SLOTS) { details.add(null) } } private fun refreshPatterns() { for (i in 0.. { - return details.stream() - .filter { obj: ICraftingPatternDetails? -> Objects.nonNull(obj) } - .collect(Collectors.toList()) + fun getDetails(): List { + return details.filterNotNull() } val validPatterns: Int - get() = details.stream().filter { obj: ICraftingPatternDetails? -> Objects.nonNull(obj) }.count() - .toInt() + get() = details.count { it != null } - override fun saveChanges() { + override fun saveChangedInventory(inv: AppEngInternalInventory) { markNoUpdateSync() } - override fun onChangeInventory( - inv: IItemHandler, - slot: Int, - mc: InvOperation, - removedStack: ItemStack, - newStack: ItemStack - ) { - refreshPattern(slot) - notifyPatternChanged() - sendPatternSearchGUIUpdateToClient(slot) - when (mc) { - InvOperation.EXTRACT -> removePattern(removedStack) - InvOperation.INSERT -> addPattern(newStack) - InvOperation.SET -> { - removePattern(removedStack) - addPattern(newStack) - } - } + override fun isClientSide(): Boolean { + return world != null && world.isRemote } - private fun addPattern(stack: ItemStack) { - val item = stack.item - if (item is ItemEncodedPattern) { - val pattern = item.getPatternForItem(stack, this.world) ?: return - if (pattern.isCraftable || pattern is FluidPatternDetails) { - aePatterns.add(pattern.condensedOutputs[0]) - } - } + override fun onChangeInventory(inv: AppEngInternalInventory, slot: Int) { + refreshPattern(slot) + sendPatternSearchGUIUpdateToClient(slot) + refreshPatternOutputs() + notifyPatternChanged() } - private fun removePattern(stack: ItemStack) { - val item = stack.item - if (item is ItemEncodedPattern) { - val pattern = item.getPatternForItem(stack, this.world) ?: return - if (pattern.isCraftable || pattern is FluidPatternDetails) { - aePatterns.remove(pattern.condensedOutputs[0]) - } + private fun refreshPatternOutputs() { + aePatterns.clear() + for (detail in details) { + detail?.primaryOutput?.what?.let(aePatterns::add) } } @@ -131,13 +91,9 @@ class EFabricatorPatternBus : EFabricatorPart(), IAEAppEngInventory { if (this.partController == null) { return } - try { - val channel: EFabricatorMEChannel? = this.partController.channel - if (channel != null && channel.proxy.isActive) { - channel.proxy.grid - .postEvent(MENetworkCraftingPatternChange(channel, channel.proxy.node)) - } - } catch (ignored: GridAccessException) { + val channel: EFabricatorMEChannel? = this.partController.channel + if (channel != null && channel.mainNode.isActive) { + ICraftingProvider.requestUpdate(channel.mainNode) } this.partController.recalculateEnergyUsage() } @@ -190,17 +146,15 @@ class EFabricatorPatternBus : EFabricatorPart(), IAEAppEngInventory { override fun getCapability(@Nonnull capability: Capability, facing: EnumFacing?): T? { val cap = CapabilityItemHandler.ITEM_HANDLER_CAPABILITY if (capability === cap) { - return cap.cast(patterns) + return cap.cast(patterns.toItemHandler()) } return super.getCapability(capability, facing) } override fun readCustomNBT(compound: NBTTagCompound) { super.readCustomNBT(compound) - patterns.readFromNBT(compound.getCompoundTag("patterns")) - for (stack in patterns) { - addPattern(stack) - } + patterns.readFromNBT(compound, "patterns") + refreshPatterns() } override fun writeCustomNBT(compound: NBTTagCompound?) { diff --git a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorWorker.kt b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorWorker.kt index acd605aa..24dacb92 100644 --- a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorWorker.kt +++ b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorWorker.kt @@ -1,11 +1,9 @@ package github.kasuminova.novaeng.common.tile.ecotech.efabricator -import appeng.api.config.Actionable -import appeng.api.networking.energy.IEnergyGrid -import appeng.api.storage.data.IAEItemStack -import appeng.api.storage.data.IItemList -import appeng.me.GridAccessException -import appeng.util.item.AEItemStack +import ae2.api.config.Actionable +import ae2.api.networking.energy.IEnergyService +import ae2.api.stacks.AEItemKey +import ae2.api.stacks.KeyCounter import github.kasuminova.novaeng.NovaEngineeringCore import github.kasuminova.novaeng.common.block.ecotech.efabricator.prop.WorkerStatus import github.kasuminova.novaeng.common.network.PktEFabricatorWorkerStatusUpdate @@ -73,13 +71,9 @@ class EFabricatorWorker : EFabricatorPart() { } var energy = this.energyCache.toDouble() val c = controller.channel - var grid: IEnergyGrid? = null - if (c != null) { - try { - grid = c.proxy.grid.getCache(IEnergyGrid::class.java) - energy += grid.storedPower - } catch (ignored: GridAccessException) { - } + val energyService: IEnergyService? = c?.mainNode?.node?.grid()?.energyService + if (energyService != null) { + energy += energyService.getStoredPower() } var parallelism = min(max(controller.getAvailableParallelism(), 1).toDouble(), energy / energyUsage).toInt() if (controller.activeCooling) { @@ -87,7 +81,7 @@ class EFabricatorWorker : EFabricatorPart() { } var completed = 0 - val outputBuffer: IItemList = controller.outputBuffer + val outputBuffer: KeyCounter = controller.outputBuffer var craftWork: CraftWork synchronized(outputBuffer) { while ((parallelism > completed) && !queue.isEmpty) { @@ -103,10 +97,16 @@ class EFabricatorWorker : EFabricatorPart() { } for (remain in out.remaining) { if (!remain.isEmpty) { - outputBuffer.add(AEItemStack.fromItemStack(remain)) + val key = AEItemKey.of(remain) + if (key != null) { + outputBuffer.add(key, remain.count.toLong()) + } } } - outputBuffer.add(AEItemStack.fromItemStack(out.output)) + val key = AEItemKey.of(out.output) + if (key != null) { + outputBuffer.add(key, out.output.count.toLong()) + } completed += out.size } @@ -117,9 +117,9 @@ class EFabricatorWorker : EFabricatorPart() { if (`in` > energyCache) { `in` -= energyCache energyCache = 0 - if (grid != null) { - synchronized(grid) { - grid.injectPower(`in`.toDouble(), Actionable.MODULATE) + if (energyService != null) { + synchronized(energyService) { + energyService.injectPower(`in`.toDouble(), Actionable.MODULATE) } } } else { diff --git a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/estorage/EStorageCellDrive.java b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/estorage/EStorageCellDrive.java index 6a184771..6c951528 100644 --- a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/estorage/EStorageCellDrive.java +++ b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/estorage/EStorageCellDrive.java @@ -1,25 +1,15 @@ package github.kasuminova.novaeng.common.tile.ecotech.estorage; -import appeng.api.AEApi; -import appeng.api.networking.events.MENetworkCellArrayUpdate; -import appeng.api.networking.security.IActionSource; -import appeng.api.networking.storage.IStorageGrid; -import appeng.api.storage.ICellInventory; -import appeng.api.storage.ICellInventoryHandler; -import appeng.api.storage.IMEInventory; -import appeng.api.storage.IMEInventoryHandler; -import appeng.api.storage.ISaveProvider; -import appeng.api.storage.IStorageChannel; -import appeng.api.storage.data.IAEItemStack; -import appeng.api.storage.data.IAEStack; -import appeng.api.storage.data.IItemList; -import appeng.me.GridAccessException; -import appeng.me.helpers.AENetworkProxy; -import appeng.tile.inventory.AppEngCellInventory; -import appeng.util.helpers.ItemHandlerUtil; -import appeng.util.inv.IAEAppEngInventory; -import appeng.util.inv.InvOperation; -import appeng.util.inv.filter.IAEItemFilter; +import ae2.api.inventories.InternalInventory; +import ae2.api.stacks.AEKeyType; +import ae2.api.storage.StorageCells; +import ae2.api.storage.cells.ISaveProvider; +import ae2.api.storage.cells.StorageCell; +import ae2.api.storage.cells.StorageCellStatistics; +import ae2.util.inv.AppEngCellInventory; +import ae2.util.inv.AppEngInternalInventory; +import ae2.util.inv.InternalInventoryHost; +import ae2.util.inv.filter.IAEItemFilter; import github.kasuminova.novaeng.NovaEngineeringCore; import github.kasuminova.novaeng.common.block.ecotech.estorage.BlockEStorageController; import github.kasuminova.novaeng.common.block.ecotech.estorage.prop.DriveStorageCapacity; @@ -27,7 +17,6 @@ import github.kasuminova.novaeng.common.block.ecotech.estorage.prop.DriveStorageType; import github.kasuminova.novaeng.common.container.data.EStorageCellData; import github.kasuminova.novaeng.common.estorage.ECellDriveWatcher; -import github.kasuminova.novaeng.common.estorage.EStorageCellHandler; import github.kasuminova.novaeng.common.item.estorage.EStorageCell; import github.kasuminova.novaeng.common.item.estorage.EStorageCellFluid; import github.kasuminova.novaeng.common.item.estorage.EStorageCellGas; @@ -45,26 +34,21 @@ import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import java.util.Collection; import java.util.Map; -import static appeng.helpers.ItemStackHelper.stackFromNBT; -import static appeng.helpers.ItemStackHelper.stackWriteToNBT; - -@SuppressWarnings("rawtypes") -public class EStorageCellDrive extends EStoragePart implements ISaveProvider, IAEAppEngInventory { +public class EStorageCellDrive extends EStoragePart implements ISaveProvider, InternalInventoryHost { @Getter protected final AppEngCellInventory driveInv = new AppEngCellInventory(this, 1); - protected final Map>, IMEInventoryHandler> inventoryHandlers = new Reference2ObjectOpenHashMap<>(); + protected final Map inventoryHandlers = new Reference2ObjectOpenHashMap<>(); - protected EStorageCellHandler cellHandler = null; @Getter - protected ECellDriveWatcher watcher = null; + protected StorageCell cellHandler = null; + @Getter + protected ECellDriveWatcher watcher = null; protected boolean isCached = false; @@ -112,34 +96,29 @@ public static long getMaxBytes(final EStorageCellData data) { }; } - public static DriveStorageType getCellType(final EStorageCell cell) { + public static DriveStorageType getCellType(final EStorageCell cell) { DriveStorageType type; - if (cell instanceof EStorageCellItem) { - type = DriveStorageType.ITEM; - } else if (cell instanceof EStorageCellFluid) { - type = DriveStorageType.FLUID; - } else if (Mods.MEKENG.isPresent() && cell instanceof EStorageCellGas) { - type = DriveStorageType.GAS; - } else { - return null; + switch (cell) { + case EStorageCellItem _ -> type = DriveStorageType.ITEM; + case EStorageCellFluid _ -> type = DriveStorageType.FLUID; + case EStorageCellGas _ when Mods.MEKENG.isPresent() -> type = DriveStorageType.GAS; + case null, default -> { + return null; + } } return type; } - public static DriveStorageCapacity getCapacity(final ICellInventoryHandler cellInvHandler) { - if (cellInvHandler == null) { + public static DriveStorageCapacity getCapacity(final StorageCell cellInventory) { + if (!(cellInventory instanceof StorageCellStatistics statistics)) { return DriveStorageCapacity.EMPTY; } - ICellInventory cellInv = cellInvHandler.getCellInv(); - if (cellInv == null) { - return DriveStorageCapacity.EMPTY; - } - long totalTypes = cellInv.getTotalItemTypes(); - long storedTypes = cellInv.getStoredItemTypes(); + long totalTypes = statistics.getTotalTypes(); + long storedTypes = statistics.getStoredTypes(); if (storedTypes == 0) { return DriveStorageCapacity.EMPTY; } - if (cellInv.getFreeBytes() <= 0) { + if (statistics.getUsedBytes() >= statistics.getTotalBytes()) { return DriveStorageCapacity.FULL; } if (storedTypes >= totalTypes) { @@ -193,28 +172,18 @@ protected void updateHandler(final boolean refreshState) { cellHandler = null; inventoryHandlers.clear(); isCached = true; + driveInv.setHandler(0, null); ItemStack stack = driveInv.getStackInSlot(0); if (stack.isEmpty()) { updateDriveBlockState(); return; } - if ((cellHandler = EStorageCellHandler.getHandler(stack)) == null) { - return; - } - ICellInventoryHandler cellInventory = null; - final Collection>> storageChannels = AEApi.instance().storage().storageChannels(); - for (final IStorageChannel> channel : storageChannels) { - cellInventory = cellHandler.getCellInventory(stack, this, channel); - if (cellInventory == null) { - continue; - } + StorageCell cellInventory = StorageCells.getCellInventory(stack, this); + if (cellInventory != null && stack.getItem() instanceof EStorageCell cell) { + cellHandler = cellInventory; driveInv.setHandler(0, cellInventory); - watcher = new ECellDriveWatcher<>(cellInventory, channel, this); - if (partController != null) { - watcher.setPriority(partController.getChannel().getPriority()); - } - inventoryHandlers.put(channel, watcher); - break; + watcher = new ECellDriveWatcher(cellInventory, this); + inventoryHandlers.put(cell.getKeyType(), watcher); } if (partController != null) { partController.recalculateEnergyUsage(); @@ -252,98 +221,35 @@ public void updateDriveBlockState() { markForUpdate(); } - public > IMEInventoryHandler getHandler(final IStorageChannel channel) { + public ECellDriveWatcher getHandler(final AEKeyType channel) { updateHandler(false); - if (driveInv.getStackInSlot(0).getItem() instanceof EStorageCell cell && isCellSupported(cell.getLevel())) { - IMEInventoryHandler handler = inventoryHandlers.get(channel); - return handler == null ? null : (IMEInventoryHandler) handler; + if (driveInv.getStackInSlot(0).getItem() instanceof EStorageCell cell && isCellSupported(cell.getLevel())) { + return inventoryHandlers.get(channel); } return null; } @Override - public void onChangeInventory(final IItemHandler inv, final int slot, final InvOperation mc, final ItemStack removed, final ItemStack added) { + public void onChangeInventory(final AppEngInternalInventory inv, final int slot) { this.isCached = false; // recalculate the storage cell. this.updateHandler(true); this.markForUpdateSync(); + } - EStorageController controller = getController(); - if (controller == null) { - return; - } - - EStorageMEChannel channel = controller.getChannel(); - AENetworkProxy proxy = channel.getProxy(); - IActionSource source = channel.getSource(); - - try { - if (proxy.isActive()) { - final IStorageGrid gs = proxy.getStorage(); - postChanges(gs, removed, added, source); - } - proxy.getGrid().postEvent(new MENetworkCellArrayUpdate()); - } catch (final GridAccessException ignored) { - } - + @Override + public void saveChangedInventory(final AppEngInternalInventory inv) { + saveChanges(); } @Override - public void onAssembled() { - super.onAssembled(); - if (watcher != null) { - watcher.setPriority(partController.getChannel().getPriority()); - } + public boolean isClientSide() { + return world.isRemote; } @Override public void onDisassembled() { super.onDisassembled(); - EStorageController controller = getController(); - if (controller == null) { - return; - } - EStorageMEChannel channel = controller.getChannel(); - if (channel == null) { - return; - } - AENetworkProxy proxy = channel.getProxy(); - IActionSource source = channel.getSource(); - - try { - if (proxy.isActive()) { - ItemStack removed = driveInv.getStackInSlot(0); - final IStorageGrid gs = proxy.getStorage(); - postChanges(gs, removed, ItemStack.EMPTY, source); - } - proxy.getGrid().postEvent(new MENetworkCellArrayUpdate()); - } catch (final GridAccessException ignored) { - } - } - - public void postChanges(final IStorageGrid gs, final ItemStack removed, final ItemStack added, final IActionSource src) { - if (cellHandler == null) { - return; - } - for (final IStorageChannel chan : AEApi.instance().storage().storageChannels()) { - final IItemList myChanges = chan.createList(); - - if (!removed.isEmpty()) { - final IMEInventory myInv = cellHandler.getCellInventory(removed, null, chan); - if (myInv != null) { - myInv.getAvailableItems(myChanges); - for (final IAEStack is : myChanges) { - is.setStackSize(-is.getStackSize()); - } - } - } - if (!added.isEmpty()) { - final IMEInventory myInv = cellHandler.getCellInventory(added, null, chan); - if (myInv != null) { - myInv.getAvailableItems(myChanges); - } - } - gs.postAlterationOfStoredItems(chan, myChanges, src); - } + driveInv.persist(); } public void onWriting() { @@ -362,7 +268,7 @@ public boolean hasCapability(@Nonnull final Capability capability, @Nullable @Override public T getCapability(@Nonnull final Capability capability, @Nullable final EnumFacing facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(driveInv); + return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(driveInv.toItemHandler()); } return super.getCapability(capability, facing); } @@ -372,9 +278,9 @@ public void readCustomNBT(final NBTTagCompound tag) { super.readCustomNBT(tag); final NBTTagCompound opt = tag.getCompoundTag("driveInv"); - for (int x = 0; x < driveInv.getSlots(); x++) { + for (int x = 0; x < driveInv.size(); x++) { final NBTTagCompound item = opt.getCompoundTag("item" + x); - ItemHandlerUtil.setStackInSlot(driveInv, x, stackFromNBT(item)); + driveInv.setItemDirect(x, item.hasKey("id", 8) ? new ItemStack(item) : ItemStack.EMPTY); } if (FMLCommonHandler.instance().getEffectiveSide().isClient()) { @@ -387,22 +293,17 @@ public void writeCustomNBT(final NBTTagCompound tag) { super.writeCustomNBT(tag); final NBTTagCompound opt = new NBTTagCompound(); - for (int x = 0; x < driveInv.getSlots(); x++) { + for (int x = 0; x < driveInv.size(); x++) { final NBTTagCompound itemNBT = new NBTTagCompound(); final ItemStack is = driveInv.getStackInSlot(x); if (!is.isEmpty()) { - stackWriteToNBT(is, itemNBT); + is.writeToNBT(itemNBT); } opt.setTag("item" + x, itemNBT); } tag.setTag("driveInv", opt); } - @Override - public void saveChanges(@Nullable final ICellInventory cellInventory) { - saveChanges(); - } - @Override public void saveChanges() { markDirty(); @@ -418,13 +319,10 @@ private static class CellInvFilter implements IAEItemFilter { private static final CellInvFilter INSTANCE = new CellInvFilter(); @Override - public boolean allowExtract(IItemHandler inv, int slot, int amount) { - return true; - } - - @Override - public boolean allowInsert(IItemHandler inv, int slot, ItemStack stack) { - return !stack.isEmpty() && EStorageCellHandler.getHandler(stack) != null; + public boolean allowInsert(InternalInventory inv, int slot, ItemStack stack) { + return !stack.isEmpty() + && stack.getItem() instanceof EStorageCell + && StorageCells.isCellHandled(stack); } } diff --git a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/estorage/EStorageController.java b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/estorage/EStorageController.java index f173c950..7b4dacfa 100644 --- a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/estorage/EStorageController.java +++ b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/estorage/EStorageController.java @@ -1,12 +1,10 @@ package github.kasuminova.novaeng.common.tile.ecotech.estorage; -import appeng.api.config.Actionable; -import appeng.api.storage.ICellInventory; -import appeng.api.storage.ICellInventoryHandler; -import appeng.api.storage.data.IAEItemStack; +import ae2.api.config.Actionable; +import ae2.api.storage.IStorageProvider; +import ae2.api.storage.cells.StorageCell; import github.kasuminova.novaeng.client.util.BlockModelHider; import github.kasuminova.novaeng.common.block.ecotech.estorage.BlockEStorageController; -import github.kasuminova.novaeng.common.estorage.ECellDriveWatcher; import github.kasuminova.novaeng.common.tile.ecotech.EPartController; import github.kasuminova.novaeng.common.tile.ecotech.estorage.bus.EStorageBus; import github.kasuminova.novaeng.novaeng_core.Tags; @@ -174,23 +172,15 @@ public double extractPower(final double amt, final Actionable mode) { public void recalculateEnergyUsage() { double newIdleDrain = 64; for (final EStorageCellDrive drive : getCellDrives()) { - ECellDriveWatcher watcher = drive.getWatcher(); - if (watcher == null) { + StorageCell cell = drive.getCellHandler(); + if (cell == null) { continue; } - ICellInventoryHandler cellInventory = (ICellInventoryHandler) watcher.getInternal(); - if (cellInventory == null) { - continue; - } - ICellInventory cellInv = cellInventory.getCellInv(); - if (cellInv == null) { - continue; - } - newIdleDrain += cellInv.getIdleDrain(); + newIdleDrain += cell.getIdleDrain(); } this.idleDrain = newIdleDrain; - if (this.channel != null) { - this.channel.getProxy().setIdlePowerUsage(idleDrain); + if (channel != null) { + IStorageProvider.requestUpdate(channel.getMainNode()); } } diff --git a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/estorage/EStorageEnergyCell.java b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/estorage/EStorageEnergyCell.java index e7f4f4e9..79f6d9c5 100644 --- a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/estorage/EStorageEnergyCell.java +++ b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/estorage/EStorageEnergyCell.java @@ -1,6 +1,6 @@ package github.kasuminova.novaeng.common.tile.ecotech.estorage; -import appeng.api.config.Actionable; +import ae2.api.config.Actionable; import github.kasuminova.novaeng.common.block.ecotech.estorage.BlockEStorageEnergyCell; import github.kasuminova.novaeng.common.block.ecotech.estorage.prop.EnergyCellStatus; import lombok.Getter; diff --git a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/estorage/EStorageMEChannel.java b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/estorage/EStorageMEChannel.java index 1406352e..2a0bf12b 100644 --- a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/estorage/EStorageMEChannel.java +++ b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/estorage/EStorageMEChannel.java @@ -1,53 +1,73 @@ package github.kasuminova.novaeng.common.tile.ecotech.estorage; -import appeng.api.config.AccessRestriction; -import appeng.api.config.Actionable; -import appeng.api.config.PowerMultiplier; -import appeng.api.networking.GridFlags; -import appeng.api.networking.IGridNode; -import appeng.api.networking.energy.IAEPowerStorage; -import appeng.api.networking.events.MENetworkCellArrayUpdate; -import appeng.api.networking.events.MENetworkChannelsChanged; -import appeng.api.networking.events.MENetworkEventSubscribe; -import appeng.api.networking.events.MENetworkPowerStatusChange; -import appeng.api.networking.events.MENetworkPowerStorage; -import appeng.api.networking.security.IActionHost; -import appeng.api.networking.security.IActionSource; -import appeng.api.storage.ICellContainer; -import appeng.api.storage.ICellInventory; -import appeng.api.storage.IMEInventoryHandler; -import appeng.api.storage.IStorageChannel; -import appeng.api.util.AECableType; -import appeng.api.util.AEPartLocation; -import appeng.api.util.DimensionalCoord; -import appeng.me.GridAccessException; -import appeng.me.helpers.AENetworkProxy; -import appeng.me.helpers.IGridProxyable; -import appeng.me.helpers.MachineSource; +import ae2.api.AECapabilities; +import ae2.api.config.AccessRestriction; +import ae2.api.config.Actionable; +import ae2.api.config.PowerMultiplier; +import ae2.api.networking.GridFlags; +import ae2.api.networking.GridHelper; +import ae2.api.networking.IGridNode; +import ae2.api.networking.IGridNodeListener; +import ae2.api.networking.IManagedGridNode; +import ae2.api.networking.events.GridPowerStorageStateChanged; +import ae2.api.networking.energy.IAEPowerStorage; +import ae2.api.networking.security.IActionSource; +import ae2.api.storage.IStorageMounts; +import ae2.api.storage.IStorageProvider; +import ae2.api.storage.MEStorage; +import ae2.api.storage.MEStorageChangeListener; +import ae2.api.storage.MEStorageMonitor; +import ae2.api.storage.cells.StorageCell; +import ae2.api.stacks.AEKey; +import ae2.api.stacks.AEKeyType; +import ae2.api.stacks.AEKeyTypes; +import ae2.api.stacks.KeyCounter; +import ae2.api.util.AECableType; +import ae2.me.helpers.IGridConnectedTile; +import ae2.me.helpers.MachineSource; +import github.kasuminova.novaeng.common.estorage.ECellDriveWatcher; import github.kasuminova.novaeng.common.block.ecotech.efabricator.BlockEFabricatorMEChannel; import hellfirepvp.modularmachinery.ModularMachinery; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; -public class EStorageMEChannel extends EStoragePart implements ICellContainer, IActionHost, IGridProxyable, IAEPowerStorage { +public class EStorageMEChannel extends EStoragePart implements IGridConnectedTile, IStorageProvider, IAEPowerStorage { - protected final AENetworkProxy proxy = new AENetworkProxy(this, "channel", getVisualItemStack(), true); + private static final IGridNodeListener NODE_LISTENER = new IGridNodeListener<>() { + @Override + public void onSaveChanges(final EStorageMEChannel nodeOwner, final IGridNode node) { + nodeOwner.saveChanges(); + } + + @Override + public void onStateChanged(final EStorageMEChannel nodeOwner, + final IGridNode node, + final State state) { + nodeOwner.onMainNodeStateChanged(state); + } + }; + + protected IManagedGridNode mainNode = createMainNode(); protected final IActionSource source = new MachineSource(this); protected int priority = 0; private boolean wasActive = false; - public EStorageMEChannel() { - this.proxy.setIdlePowerUsage(1.0D); - this.proxy.setFlags(GridFlags.REQUIRE_CHANNEL, GridFlags.DENSE_CAPACITY); + private IManagedGridNode createMainNode() { + return GridHelper.createManagedNode(this, NODE_LISTENER) + .setIdlePowerUsage(1.0D) + .setFlags(GridFlags.REQUIRE_CHANNEL, GridFlags.DENSE_CAPACITY) + .setVisualRepresentation(getVisualItemStack()) + .setInWorldNode(true) + .setTagName("channel") + .addService(IStorageProvider.class, this) + .addService(IAEPowerStorage.class, this); } public IActionSource getSource() { @@ -55,15 +75,31 @@ public IActionSource getSource() { } @Override - @SuppressWarnings("rawtypes") - public List getCellArray(final IStorageChannel channel) { - if (partController != null) { - return partController.getCellDrives().stream() - .map(drive -> drive.getHandler(channel)) - .filter(Objects::nonNull) - .collect(Collectors.toList()); + public void mountInventories(final IStorageMounts mounts) { + if (partController == null) { + return; + } + + for (final EStorageCellDrive drive : partController.getCellDrives()) { + for (final AEKeyType keyType : AEKeyTypes.getAll()) { + mountDrive(mounts, drive, keyType); + } } - return Collections.emptyList(); + } + + private void mountDrive(final IStorageMounts mounts, + final EStorageCellDrive drive, + final AEKeyType keyType) { + final ECellDriveWatcher handler = drive.getHandler(keyType); + if (handler == null) { + return; + } + + final StorageCell cell = drive.getCellHandler(); + if (cell == null) { + throw new IllegalStateException("Storage drive returned a handler without a cell"); + } + mounts.mount(new DriveStorageMonitor(handler, cell), priority); } @Override @@ -72,76 +108,61 @@ public int getPriority() { } public ItemStack getVisualItemStack() { - EStorageController controller = getController(); - return new ItemStack(Item.getItemFromBlock(controller == null ? BlockEFabricatorMEChannel.INSTANCE : controller.getParentController()), 1, 0); - } - - @MENetworkEventSubscribe - public void stateChange(final MENetworkPowerStatusChange c) { - postCellArrayUpdateEvent(); + final EStorageController controller = getController(); + return new ItemStack(Item.getItemFromBlock( + controller == null ? BlockEFabricatorMEChannel.INSTANCE : controller.getParentController()), 1, 0); } - @MENetworkEventSubscribe - public void stateChange(final MENetworkChannelsChanged c) { - postCellArrayUpdateEvent(); - } - - protected void postCellArrayUpdateEvent() { - final boolean currentActive = this.proxy.isActive(); - if (this.wasActive != currentActive) { - this.wasActive = currentActive; - try { - this.proxy.getGrid().postEvent(new MENetworkCellArrayUpdate()); - } catch (final GridAccessException ignored) { - } + @Override + public void onMainNodeStateChanged(final IGridNodeListener.State reason) { + final boolean currentActive = mainNode.isActive(); + if (wasActive != currentActive) { + wasActive = currentActive; + IStorageProvider.requestUpdate(mainNode); } } @Override public double injectAEPower(final double amt, @Nonnull final Actionable mode) { - if (partController == null) { - return 0; - } - if (amt < 0.000001) { + if (partController == null || amt < 0.000001D) { return 0; } - if (mode == Actionable.MODULATE && this.getAECurrentPower() < 0.01 && amt > 0) { - this.proxy.getNode().getGrid().postEvent(new MENetworkPowerStorage(this, MENetworkPowerStorage.PowerEventType.PROVIDE_POWER)); + if (mode == Actionable.MODULATE && getAECurrentPower() < 0.01D && amt > 0) { + postPowerStorageStateChanged(GridPowerStorageStateChanged.PowerEventType.PROVIDE_POWER); } return partController.injectPower(amt, mode); } @Override - public double extractAEPower(final double amt, @Nonnull final Actionable mode, @Nonnull final PowerMultiplier multiplier) { + public double extractAEPower(final double amt, + @Nonnull final Actionable mode, + @Nonnull final PowerMultiplier multiplier) { if (partController == null) { return 0; } - if (mode == Actionable.MODULATE) { - final boolean wasFull = this.getAECurrentPower() >= this.getAEMaxPower() - 0.001; - if (wasFull && amt > 0) { - try { - this.proxy.getGrid().postEvent(new MENetworkPowerStorage(this, MENetworkPowerStorage.PowerEventType.REQUEST_POWER)); - } catch (final GridAccessException ignored) { - } - } + if (mode == Actionable.MODULATE + && getAECurrentPower() >= getAEMaxPower() - 0.001D + && amt > 0) { + postPowerStorageStateChanged(GridPowerStorageStateChanged.PowerEventType.RECEIVE_POWER); } return multiplier.divide(partController.extractPower(multiplier.multiply(amt), mode)); } + private void postPowerStorageStateChanged(final GridPowerStorageStateChanged.PowerEventType type) { + final IGridNode node = mainNode.getNode(); + if (node != null) { + node.grid().postEvent(new GridPowerStorageStateChanged(this, type)); + } + } + @Override public double getAEMaxPower() { - if (this.partController == null) { - return 0; - } - return this.partController.getMaxEnergyStore(); + return partController == null ? 0 : partController.getMaxEnergyStore(); } @Override public double getAECurrentPower() { - if (this.partController == null) { - return 0; - } - return this.partController.getEnergyStored(); + return partController == null ? 0 : partController.getEnergyStored(); } @Override @@ -155,101 +176,162 @@ public AccessRestriction getPowerFlow() { return AccessRestriction.READ_WRITE; } - @Nonnull + @Nullable @Override public IGridNode getActionableNode() { - return proxy.getNode(); + return mainNode.getNode(); } - @Nonnull @Override - public AENetworkProxy getProxy() { - return proxy; + public IManagedGridNode getMainNode() { + return mainNode; } - @Nonnull + @Nullable @Override - public DimensionalCoord getLocation() { - return new DimensionalCoord(this); + public IGridNode getGridNode(@Nonnull final EnumFacing dir) { + return mainNode.getNode(); } + @Nonnull @Override - public void gridChanged() { - + public AECableType getCableConnectionType(@Nonnull final EnumFacing dir) { + return AECableType.DENSE_SMART; } - @Nullable @Override - public IGridNode getGridNode(@Nonnull final AEPartLocation dir) { - return proxy.getNode(); + public void saveChanges() { + markDirty(); + } + + public void securityBreak() { + getWorld().destroyBlock(getPos(), true); } - @Nonnull @Override - public AECableType getCableConnectionType(@Nonnull final AEPartLocation dir) { - return AECableType.DENSE_SMART; + public boolean hasCapability(@Nonnull final Capability capability, @Nullable final EnumFacing facing) { + if (capability == AECapabilities.IN_WORLD_GRID_NODE_HOST) { + return true; + } + return super.hasCapability(capability, facing); } + @Nullable @Override - public void securityBreak() { - getWorld().destroyBlock(getPos(), true); + public T getCapability(@Nonnull final Capability capability, @Nullable final EnumFacing facing) { + if (capability == AECapabilities.IN_WORLD_GRID_NODE_HOST) { + return AECapabilities.IN_WORLD_GRID_NODE_HOST.cast(this); + } + return super.getCapability(capability, facing); } @Override public void readCustomNBT(final NBTTagCompound compound) { super.readCustomNBT(compound); - proxy.readFromNBT(compound); + mainNode.loadFromNBT(compound); } @Override public void writeCustomNBT(final NBTTagCompound compound) { super.writeCustomNBT(compound); - proxy.writeToNBT(compound); + mainNode.saveToNBT(compound); } @Override public void onChunkUnload() { super.onChunkUnload(); - proxy.onChunkUnload(); + mainNode.destroy(); } @Override public void invalidate() { super.invalidate(); - proxy.invalidate(); + mainNode.destroy(); } @Override public void onAssembled() { super.onAssembled(); - proxy.setVisualRepresentation(getVisualItemStack()); + mainNode.setVisualRepresentation(getVisualItemStack()); + final IManagedGridNode node = mainNode; ModularMachinery.EXECUTE_MANAGER.addSyncTask(() -> { - proxy.onReady(); - partController.recalculateEnergyUsage(); - List cellDrives = partController.getCellDrives(); - if (!cellDrives.isEmpty()) { - try { - proxy.getGrid().postEvent(new MENetworkCellArrayUpdate()); - } catch (GridAccessException ignored) { - } + if (mainNode == node && !node.isReady() && !getWorld().isRemote) { + node.create(getWorld(), getPos()); } + partController.recalculateEnergyUsage(); }); } @Override public void onDisassembled() { super.onDisassembled(); - proxy.setVisualRepresentation(getVisualItemStack()); - proxy.invalidate(); + int ownerId = -1; + if (mainNode.isReady()) { + final IGridNode node = mainNode.getNode(); + if (node != null) { + ownerId = node.getOwningPlayerId(); + } + } + mainNode.destroy(); + mainNode = createMainNode(); + if (ownerId >= 0) { + mainNode.setOwningPlayerId(ownerId); + } + wasActive = false; } - // noop + private static final class DriveStorageMonitor implements MEStorageMonitor { + private final MEStorage handler; + private final StorageCell monitor; - @Override - public void blinkCell(final int slot) { - } + private DriveStorageMonitor(final MEStorage handler, final StorageCell monitor) { + this.handler = handler; + this.monitor = monitor; + } - @Override - public void saveChanges(@Nullable final ICellInventory cellInventory) { + @Override + public void addListener(final MEStorageChangeListener listener, final Object verificationToken) { + monitor.addListener(listener, verificationToken); + } + + @Override + public void removeListener(final MEStorageChangeListener listener) { + monitor.removeListener(listener); + } + + @Override + public boolean isPreferredStorageFor(final AEKey what, final IActionSource source) { + return handler.isPreferredStorageFor(what, source); + } + + @Override + public boolean isStickyStorageFor(final AEKey what, final IActionSource source) { + return handler.isStickyStorageFor(what, source); + } + + @Override + public long insert(final AEKey what, final long amount, final Actionable mode, final IActionSource source) { + return handler.insert(what, amount, mode, source); + } + + @Override + public long extract(final AEKey what, final long amount, final Actionable mode, final IActionSource source) { + return handler.extract(what, amount, mode, source); + } + + @Override + public void getAvailableStacks(final KeyCounter out) { + handler.getAvailableStacks(out); + } + + @Override + public KeyCounter getAvailableStacks() { + return handler.getAvailableStacks(); + } + + @Override + public net.minecraft.util.text.ITextComponent getDescription() { + return handler.getDescription(); + } } } diff --git a/src/main/java/github/kasuminova/novaeng/common/util/AEItemStackSet.java b/src/main/java/github/kasuminova/novaeng/common/util/AEItemStackSet.java index a9def05c..2925bb70 100644 --- a/src/main/java/github/kasuminova/novaeng/common/util/AEItemStackSet.java +++ b/src/main/java/github/kasuminova/novaeng/common/util/AEItemStackSet.java @@ -1,57 +1,56 @@ package github.kasuminova.novaeng.common.util; -import appeng.api.storage.data.IAEItemStack; -import appeng.util.item.AEItemStack; +import ae2.api.stacks.AEItemKey; import io.netty.buffer.ByteBuf; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import java.util.List; import java.util.Map; +import net.minecraft.network.PacketBuffer; public class AEItemStackSet { private final Map entries = new Object2ObjectOpenHashMap<>(); private final List entryList = new ObjectArrayList<>(); - public int add(IAEItemStack stack) { + public int add(AEItemKey stack) { Entry entry = entries.get(new Entry(stack, -1)); if (entry == null) { - entry = new Entry(stack.copy().setStackSize(1), entryList.size()); + entry = new Entry(stack, entryList.size()); entries.put(entry, entry); entryList.add(entry); } return entry.id(); } - protected void addInternal(IAEItemStack stack) { + protected void addInternal(AEItemKey stack) { Entry entry = new Entry(stack, entryList.size()); entryList.add(entry); entries.put(entry, entry); } - public IAEItemStack get(int id) { - return entryList.get(id).stack().copy(); + public AEItemKey get(int id) { + return entryList.get(id).stack(); } public void writeToBuffer(final ByteBuf buf) { buf.writeInt(entryList.size()); + PacketBuffer packetBuffer = new PacketBuffer(buf); for (Entry entry : entryList) { - try { - entry.stack().writeToPacket(buf); - } catch (Throwable ignored) { - } + entry.stack().writeToPacket(packetBuffer); } } public void fromBuffer(final ByteBuf buf) { int size = buf.readInt(); + PacketBuffer packetBuffer = new PacketBuffer(buf); for (int i = 0; i < size; i++) { - addInternal(AEItemStack.fromPacket(buf)); + addInternal(AEItemKey.fromPacket(packetBuffer)); } } - private record Entry(IAEItemStack stack, int id) { + private record Entry(AEItemKey stack, int id) { @Override public int hashCode() { diff --git a/src/main/java/github/kasuminova/novaeng/common/util/AssemblyBlockArray.kt b/src/main/java/github/kasuminova/novaeng/common/util/AssemblyBlockArray.kt index 2c8d1b74..57ca18a5 100644 --- a/src/main/java/github/kasuminova/novaeng/common/util/AssemblyBlockArray.kt +++ b/src/main/java/github/kasuminova/novaeng/common/util/AssemblyBlockArray.kt @@ -1,16 +1,10 @@ package github.kasuminova.novaeng.common.util -import appeng.api.AEApi -import appeng.api.config.Actionable -import appeng.api.networking.storage.IStorageGrid -import appeng.api.storage.IMEMonitor -import appeng.api.storage.channels.IFluidStorageChannel -import appeng.api.storage.channels.IItemStorageChannel -import appeng.api.storage.data.IAEFluidStack -import appeng.api.storage.data.IAEItemStack -import appeng.helpers.WirelessTerminalGuiObject -import appeng.me.helpers.PlayerSource -import com.circulation.random_complement.common.util.MEHandler +import ae2.api.config.Actionable +import ae2.api.networking.security.IActionHost +import ae2.container.AEBaseContainer +import ae2.api.storage.MEStorage +import ae2.me.helpers.PlayerSource import github.kasuminova.novaeng.common.util.NEWMachineAssemblyManager.Ingredient import github.kasuminova.novaeng.common.util.NEWMachineAssemblyManager.OperatingStatus import hellfirepvp.modularmachinery.common.util.BlockArray @@ -263,22 +257,13 @@ class AssemblyBlockArray : BlockArray { val list = getMaterialList(info) var hasAE = false - var wobj: WirelessTerminalGuiObject? = null - var items: IMEMonitor? = null - var fluids: IMEMonitor? = null + var terminal: IActionHost? = null + var storage: MEStorage? = null if (usingAE) { - wobj = MEHandler.getTerminalGuiObject(player) - wobj?.actionableNode?.grid?.let { - val grid = it.getCache(IStorageGrid::class.java) - items = grid.getInventory( - AEApi.instance().storage() - .getStorageChannel(IItemStorageChannel::class.java) - ) - fluids = grid.getInventory( - AEApi.instance().storage() - .getStorageChannel(IFluidStorageChannel::class.java) - ) + terminal = (player.openContainer as? AEBaseContainer)?.target as? IActionHost + terminal?.actionableNode?.grid()?.let { grid -> + storage = grid.storageService.inventory hasAE = true } } @@ -313,26 +298,17 @@ class AssemblyBlockArray : BlockArray { val ingredient = ingredientAndIBlockState.first if (ingredient.isItem) { if (ingredient.itemStack.isEmpty) continue - val item = items!!.extractItems( - ingredient.aEItemStack, - Actionable.MODULATE, - PlayerSource(player, wobj) - ) - if (item == null || item.stackSize == 0L) continue + val key = ingredient.aeItemKey ?: continue + val item = storage!!.extract(key, ingredient.itemStack.count.toLong(), Actionable.MODULATE, + PlayerSource(player, terminal)) + if (item == 0L) continue placeBlock(player, world, pos, ingredientAndIBlockState.getSecond()) return OperatingStatus.SUCCESS } else { - val fluid = fluids!!.extractItems( - ingredient.aEFluidStack, - Actionable.SIMULATE, - PlayerSource(player, wobj) - ) - if (fluid == null || fluid.stackSize < 1000) continue - fluids.extractItems( - ingredient.aEFluidStack, - Actionable.MODULATE, - PlayerSource(player, wobj) - ) + val key = ingredient.aeFluidKey ?: continue + val fluid = storage!!.extract(key, 1000, Actionable.SIMULATE, PlayerSource(player, terminal)) + if (fluid < 1000) continue + storage.extract(key, 1000, Actionable.MODULATE, PlayerSource(player, terminal)) placeBlock(player, world, pos, ingredientAndIBlockState.getSecond()) return OperatingStatus.SUCCESS } diff --git a/src/main/java/github/kasuminova/novaeng/common/util/AutoCraftingQueue.kt b/src/main/java/github/kasuminova/novaeng/common/util/AutoCraftingQueue.kt deleted file mode 100644 index 0d7c6e18..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/util/AutoCraftingQueue.kt +++ /dev/null @@ -1,89 +0,0 @@ -package github.kasuminova.novaeng.common.util - -import appeng.api.networking.crafting.ICraftingGrid -import appeng.api.networking.crafting.ICraftingJob -import appeng.api.util.AEPartLocation -import appeng.container.ContainerOpenContext -import appeng.core.AELog -import appeng.me.helpers.PlayerSource -import appeng.util.item.AEItemStack -import com.circulation.random_complement.common.util.MEHandler -import github.kasuminova.novaeng.NovaEngineeringCore -import github.kasuminova.novaeng.common.CommonProxy -import github.kasuminova.novaeng.common.container.ContainerNEWCraftConfirm -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap -import net.minecraft.entity.player.EntityPlayer -import net.minecraft.item.ItemStack -import java.util.Queue -import java.util.concurrent.Future - -class AutoCraftingQueue { - - companion object { - private val allQueue = Object2ObjectOpenHashMap() - - fun setQueueAndStrat(itemQueue: Queue, player: EntityPlayer) { - val q: AutoCraftingQueue = allQueue.computeIfAbsent(player) { p -> AutoCraftingQueue() } - q.queue = itemQueue - q.executionQueue(player) - } - - fun getQueue(player: EntityPlayer): AutoCraftingQueue? { - return allQueue[player] - } - } - - private var queue: Queue = EmptyQueue.empty() - - fun clearQueue() { - queue.clear() - } - - fun executionQueue(player: EntityPlayer): Boolean { - queue.poll()?.let { item -> - val obj = MEHandler.getTerminalGuiObject(player) - obj?.actionableNode?.let { node -> - val g = node.grid - var futureJob: Future? = null - - try { - val cg: ICraftingGrid = g.getCache(ICraftingGrid::class.java) - futureJob = cg.beginCraftingJob( - player.world, - g, - PlayerSource(player, obj), - AEItemStack.fromItemStack(item)?.setStackSize(item.count.toLong()), - null - ) - - player.openGui( - NovaEngineeringCore.instance, - CommonProxy.GuiType.AUTO_CRAFTGUI.ordinal, - player.world, - obj.inventorySlot, - if (obj.isBaubleSlot) 1 else 0, - Int.MIN_VALUE - ) - - val ccc = player.openContainer - - if (ccc is ContainerNEWCraftConfirm) { - val ctx = ContainerOpenContext(null) - ctx.side = AEPartLocation.INTERNAL - - ccc.openContext = ctx - ccc.isAutoStart = false - ccc.setJob(futureJob) - ccc.detectAndSendChanges() - } - return true - } catch (e: Throwable) { - futureJob?.cancel(true) - AELog.debug(e) - } - - } - } - return false - } -} \ No newline at end of file diff --git a/src/main/java/github/kasuminova/novaeng/common/util/EmptyQueue.kt b/src/main/java/github/kasuminova/novaeng/common/util/EmptyQueue.kt deleted file mode 100644 index 29cccfec..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/util/EmptyQueue.kt +++ /dev/null @@ -1,81 +0,0 @@ -package github.kasuminova.novaeng.common.util - -import it.unimi.dsi.fastutil.objects.ObjectLists -import java.util.Queue - -class EmptyQueue : Queue { - - companion object { - private val empty: EmptyQueue<*> = EmptyQueue() - - @Suppress("UNCHECKED_CAST") - fun empty(): EmptyQueue { - return empty as EmptyQueue - } - } - - private constructor() - - override fun add(e: E?): Boolean { - return false - } - - override fun offer(e: E?): Boolean { - return false - } - - override fun remove(): E? { - return null - } - - override fun poll(): E? { - return null - } - - override fun element(): E? { - return null - } - - override fun peek(): E? { - return null - } - - override fun iterator(): MutableIterator { - return ObjectLists.emptyList().iterator() - } - - override fun remove(element: E?): Boolean { - return false - } - - override fun addAll(elements: Collection): Boolean { - return false - } - - override fun removeAll(elements: Collection): Boolean { - return false - } - - override fun retainAll(elements: Collection): Boolean { - return false - } - - override fun clear() { - - } - - override val size: Int - get() = 0 - - override fun isEmpty(): Boolean { - return true - } - - override fun contains(element: E?): Boolean { - return false - } - - override fun containsAll(elements: Collection): Boolean { - return false - } -} \ No newline at end of file diff --git a/src/main/java/github/kasuminova/novaeng/common/util/MixinDecisions.java b/src/main/java/github/kasuminova/novaeng/common/util/MixinDecisions.java index cacbfea5..47395c69 100644 --- a/src/main/java/github/kasuminova/novaeng/common/util/MixinDecisions.java +++ b/src/main/java/github/kasuminova/novaeng/common/util/MixinDecisions.java @@ -13,7 +13,6 @@ public final class MixinDecisions { public static final boolean actuallyAdditionsLoaded = isPresent("actuallyadditions"); public static final boolean astralSorceryLoaded = isPresent("astralsorcery"); public static final boolean athenaeumLoaded = isPresent("athenaeum"); - public static final boolean betterP2pLoaded = isPresent("betterp2p"); public static final boolean baseLoaded = isPresent("base"); public static final boolean biomesOPlentyLoaded = isPresent("biomesoplenty"); public static final boolean bibliocraftLoaded = isPresent("bibliocraft"); @@ -48,7 +47,6 @@ public final class MixinDecisions { public static final boolean ctmLoaded = isPresent("ctm"); public static final boolean mmceLoaded = isPresent("modularmachinery"); public static final boolean modularRoutersLoaded = isPresent("modularrouters"); - public static final boolean nae2Loaded = isPresent("nae2"); public static final boolean nuclearcraftLoaded = isPresent("nuclearcraft"); public static final boolean packagedAutoLoaded = isPresent("packagedauto"); public static final boolean packagedAstralLoaded = isPresent("packagedastral"); @@ -96,7 +94,6 @@ public static boolean shouldApply(final String mixinName) { case "actuallyadditions" -> actuallyAdditionsLoaded; case "astralsorcery" -> astralSorceryLoaded; case "athenaeum" -> athenaeumLoaded; - case "betterp2p" -> betterP2pLoaded; case "base" -> baseLoaded && NovaEngCoreConfig.CLIENT.optimizeResourceExistence; case "biomesoplenty" -> biomesOPlentyLoaded && NovaEngCoreConfig.CLIENT.optimizeBopFog; case "bibliocraft" -> bibliocraftLoaded; @@ -122,7 +119,6 @@ public static boolean shouldApply(final String mixinName) { case "ctm" -> ctmLoaded; case "mmce" -> mmceLoaded; case "modularrouters" -> modularRoutersLoaded; - case "nae2" -> nae2Loaded; case "neofontrender" -> neoFontRenderLoaded; case "revoui" -> neoFontRenderUiLoaded && actiniumLoaded; case "nco" -> nuclearcraftLoaded; diff --git a/src/main/java/github/kasuminova/novaeng/common/util/NEWMachineAssemblyManager.kt b/src/main/java/github/kasuminova/novaeng/common/util/NEWMachineAssemblyManager.kt index 3b2df8d2..e7f57bef 100644 --- a/src/main/java/github/kasuminova/novaeng/common/util/NEWMachineAssemblyManager.kt +++ b/src/main/java/github/kasuminova/novaeng/common/util/NEWMachineAssemblyManager.kt @@ -1,19 +1,13 @@ package github.kasuminova.novaeng.common.util -import appeng.api.AEApi -import appeng.api.config.Actionable -import appeng.api.networking.storage.IStorageGrid -import appeng.api.storage.IMEMonitor -import appeng.api.storage.channels.IFluidStorageChannel -import appeng.api.storage.channels.IItemStorageChannel -import appeng.api.storage.data.IAEFluidStack -import appeng.api.storage.data.IAEItemStack -import appeng.api.storage.data.IAEStack -import appeng.fluids.util.AEFluidStack -import appeng.me.helpers.PlayerSource -import appeng.util.item.AEItemStack -import com.circulation.random_complement.common.util.MEHandler -import com.glodblock.github.common.item.fake.FakeFluids +import ae2.api.config.Actionable +import ae2.api.networking.security.IActionHost +import ae2.container.AEBaseContainer +import ae2.api.stacks.AEFluidKey +import ae2.api.stacks.GenericStack +import ae2.api.stacks.AEItemKey +import ae2.api.stacks.AEKey +import ae2.me.helpers.PlayerSource import github.kasuminova.novaeng.NovaEngineeringCore import hellfirepvp.modularmachinery.ModularMachinery import hellfirepvp.modularmachinery.common.integration.ModIntegrationJEI @@ -136,25 +130,16 @@ class NEWMachineAssemblyManager { val fluidStackIngList = getFluidStackIngList(fluidIngredientList) if (usingAE) { - val obj = MEHandler.getTerminalGuiObject(player) - obj?.actionableNode?.grid?.let { - val storage = it.getCache(IStorageGrid::class.java) - val items: IMEMonitor = storage.getInventory( - AEApi.instance().storage().getStorageChannel(IItemStorageChannel::class.java) - ) - val fluids = storage.getInventory( - AEApi.instance().storage().getStorageChannel(IFluidStorageChannel::class.java) - ) - val playerSource = PlayerSource(player, obj) + val host = (player.openContainer as? AEBaseContainer)?.target as? IActionHost + host?.actionableNode?.grid()?.let { grid -> + val storage = grid.storageService.inventory + val playerSource = PlayerSource(player, host) for (stacks in ReferenceArrayList(itemStackIngList)) { for (item in ReferenceArrayList(stacks)) { - val aeItem = items.extractItems( - AEItemStack.fromItemStack(item), - Actionable.SIMULATE, - playerSource - ) - if (aeItem == null) continue - val aeItemSize = aeItem.stackSize.toInt() + val key = AEItemKey.of(item) ?: continue + val aeItemSize = storage.extract(key, item.count.toLong(), Actionable.SIMULATE, playerSource) + .coerceAtMost(Int.MAX_VALUE.toLong()).toInt() + if (aeItemSize == 0) continue if (item.count <= aeItemSize) { itemStackIngList.remove(stacks) break @@ -167,13 +152,10 @@ class NEWMachineAssemblyManager { } for (stacks in ReferenceArrayList(fluidStackIngList)) { for (fluid in ReferenceArrayList(stacks)) { - val aeFluid = fluids.extractItems( - AEFluidStack.fromFluidStack(fluid), - Actionable.SIMULATE, - playerSource - ) - if (aeFluid == null) continue - val aeFluidSize = aeFluid.stackSize.toInt() + val key = AEFluidKey.of(fluid) ?: continue + val aeFluidSize = storage.extract(key, fluid.amount.toLong(), Actionable.SIMULATE, playerSource) + .coerceAtMost(Int.MAX_VALUE.toLong()).toInt() + if (aeFluidSize == 0) continue if (fluid.amount <= aeFluidSize) { fluidStackIngList.remove(stacks) break @@ -214,9 +196,8 @@ class NEWMachineAssemblyManager { for (stacks in fluidStackIngList) { val fs = ObjectArrayList() for (stack in stacks) { - val i = FakeFluids.packFluid2Drops(stack) - i.count = stack.amount - fs.add(i) + val key = AEFluidKey.of(stack) ?: continue + fs.add(GenericStack.wrapInItemStack(key, stack.amount.toLong())) } list.add(fs) } @@ -316,18 +297,18 @@ class NEWMachineAssemblyManager { class Ingredient { val ingredient: Any val isItem: Boolean - val aeStack: IAEStack<*>? + val aeStack: AEKey? constructor(stack: ItemStack) { this.ingredient = stack this.isItem = true - this.aeStack = AEItemStack.fromItemStack(stack) + this.aeStack = AEItemKey.of(stack) } constructor(stack: FluidStack) { this.ingredient = stack this.isItem = false - this.aeStack = AEFluidStack.fromFluidStack(stack) + this.aeStack = AEFluidKey.of(stack) } override fun equals(other: Any?): Boolean { @@ -343,13 +324,13 @@ class NEWMachineAssemblyManager { val itemStack: ItemStack get() = ingredient as ItemStack - val aEItemStack: IAEItemStack? - get() = aeStack as? IAEItemStack + val aeItemKey: AEItemKey? + get() = aeStack as? AEItemKey val fluidStack: FluidStack get() = ingredient as FluidStack - val aEFluidStack: IAEFluidStack? - get() = aeStack as? IAEFluidStack + val aeFluidKey: AEFluidKey? + get() = aeStack as? AEFluidKey } } diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorAbstractCellInventory.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorAbstractCellInventory.java deleted file mode 100644 index d0e45f8e..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorAbstractCellInventory.java +++ /dev/null @@ -1,35 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.me.storage.AbstractCellInventory; -import net.minecraft.nbt.NBTTagCompound; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(value = AbstractCellInventory.class, remap = false) -public interface AccessorAbstractCellInventory { - - @Accessor - NBTTagCompound getTagCompound(); - - @Accessor - int getMaxItemTypes(); - - @Accessor - short getStoredItemTypes(); - - @Accessor - void setStoredItemTypes(short storedItemTypes); - - @Accessor - long getStoredItemCount(); - - @Accessor - void setStoredItemCount(long storedItemCount); - - @Accessor - boolean getIsPersisted(); - - @Accessor - void setIsPersisted(boolean isPersisted); - -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorCellRegistry.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorCellRegistry.java deleted file mode 100644 index e69d6da5..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorCellRegistry.java +++ /dev/null @@ -1,16 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.api.storage.ICellHandler; -import appeng.core.features.registries.cell.CellRegistry; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import java.util.List; - -@Mixin(CellRegistry.class) -public interface AccessorCellRegistry { - - @Accessor(remap = false) - List getHandlers(); - -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorContainerCraftConfirm.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorContainerCraftConfirm.java deleted file mode 100644 index 20246dab..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorContainerCraftConfirm.java +++ /dev/null @@ -1,19 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.api.networking.crafting.ICraftingJob; -import appeng.container.implementations.ContainerCraftConfirm; -import appeng.container.implementations.CraftingCPURecord; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import java.util.ArrayList; - -@Mixin(value = ContainerCraftConfirm.class, remap = false) -public interface AccessorContainerCraftConfirm { - - @Accessor("result") - ICraftingJob getResult(); - - @Accessor("cpus") - ArrayList getCpus(); -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorContainerPatternEncoder.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorContainerPatternEncoder.java deleted file mode 100644 index 471a1d53..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorContainerPatternEncoder.java +++ /dev/null @@ -1,18 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.api.implementations.guiobjects.IGuiItemObject; -import appeng.container.implementations.ContainerPatternEncoder; -import appeng.container.slot.SlotRestrictedInput; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(value = ContainerPatternEncoder.class, remap = false) -public interface AccessorContainerPatternEncoder { - - @Accessor - SlotRestrictedInput getPatternSlotOUT(); - - @Accessor - IGuiItemObject getIGuiItemObject(); - -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorCraftingCPURecord.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorCraftingCPURecord.java deleted file mode 100644 index 7fdd439a..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorCraftingCPURecord.java +++ /dev/null @@ -1,13 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.api.networking.crafting.ICraftingCPU; -import appeng.container.implementations.CraftingCPURecord; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(value = CraftingCPURecord.class, remap = false) -public interface AccessorCraftingCPURecord { - - @Accessor("cpu") - ICraftingCPU getCpu(); -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorGuiCraftConfirm.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorGuiCraftConfirm.java deleted file mode 100644 index 78fe6555..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/AccessorGuiCraftConfirm.java +++ /dev/null @@ -1,16 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.client.gui.implementations.GuiCraftConfirm; -import net.minecraft.client.gui.GuiButton; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(value = GuiCraftConfirm.class, remap = false) -public interface AccessorGuiCraftConfirm { - - @Accessor("cancel") - GuiButton getCancel(); - - @Accessor("start") - GuiButton getStart(); -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinAppEngClientPacketHandler.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinAppEngClientPacketHandler.java deleted file mode 100644 index 5a065d07..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinAppEngClientPacketHandler.java +++ /dev/null @@ -1,29 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.core.sync.AppEngPacket; -import appeng.core.sync.PacketCallState; -import appeng.core.sync.network.AppEngClientPacketHandler; -import github.kasuminova.novaeng.common.profiler.CPacketProfiler; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(AppEngClientPacketHandler.class) -public class MixinAppEngClientPacketHandler { - - @SuppressWarnings("MethodMayBeStatic") - @Redirect( - method = "onPacketData", - at = @At( - value = "INVOKE", - target = "Lappeng/core/sync/AppEngPacket;setCallParam(Lappeng/core/sync/PacketCallState;)V", - remap = false - ), - remap = false - ) - private void redirectParsePacket(AppEngPacket instance, PacketCallState call) { - CPacketProfiler.onPacketReceived(instance, instance.getPacketID()); - instance.setCallParam(call); - } - -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinAppEngServerPacketHandler.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinAppEngServerPacketHandler.java deleted file mode 100644 index 7c641374..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinAppEngServerPacketHandler.java +++ /dev/null @@ -1,34 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.core.sync.AppEngPacket; -import appeng.core.sync.PacketCallState; -import appeng.core.sync.network.AppEngServerPacketHandler; -import com.llamalad7.mixinextras.sugar.Local; -import github.kasuminova.novaeng.common.profiler.SPacketProfiler; -import net.minecraft.entity.player.EntityPlayer; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(AppEngServerPacketHandler.class) -public class MixinAppEngServerPacketHandler { - - @SuppressWarnings("MethodMayBeStatic") - @Redirect( - method = "onPacketData", - at = @At( - value = "INVOKE", - target = "Lappeng/core/sync/AppEngPacket;setCallParam(Lappeng/core/sync/PacketCallState;)V", - remap = false - ), - remap = false - ) - private void redirectParsePacket(AppEngPacket instance, PacketCallState call, - @Local(name = "player") EntityPlayer player) { - if (player != null) { - SPacketProfiler.onPacketReceived(player, instance); - } - instance.setCallParam(call); - } - -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCraftingCPUCluster.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCraftingCPUCluster.java index 04f965e0..ace95949 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCraftingCPUCluster.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCraftingCPUCluster.java @@ -1,19 +1,10 @@ package github.kasuminova.novaeng.mixin.ae2; -import appeng.api.networking.IGrid; -import appeng.api.networking.IGridNode; -import appeng.api.networking.crafting.ICraftingJob; -import appeng.api.networking.crafting.ICraftingLink; -import appeng.api.networking.crafting.ICraftingRequester; -import appeng.api.networking.energy.IEnergyGrid; -import appeng.api.networking.security.IActionSource; -import appeng.crafting.MECraftingInventory; -import appeng.me.cache.CraftingGridCache; -import appeng.me.cluster.implementations.CraftingCPUCluster; -import appeng.me.helpers.MachineSource; -import appeng.tile.crafting.TileCraftingTile; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import ae2.api.networking.IGrid; +import ae2.api.networking.IGridNode; +import ae2.me.cluster.implementations.CraftingCPUCluster; +import ae2.me.helpers.MachineSource; +import ae2.tile.crafting.ICraftingCPUTileEntity; import github.kasuminova.mmce.common.util.TimeRecorder; import github.kasuminova.novaeng.common.block.ecotech.ecalculator.prop.Levels; import github.kasuminova.novaeng.common.ecalculator.ECPUCluster; @@ -21,7 +12,7 @@ import github.kasuminova.novaeng.common.tile.ecotech.ecalculator.ECalculatorMEChannel; import github.kasuminova.novaeng.common.tile.ecotech.ecalculator.ECalculatorThreadCore; import net.minecraft.world.World; -import org.spongepowered.asm.mixin.Final; +import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -30,8 +21,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import javax.annotation.Nullable; - @Mixin(value = CraftingCPUCluster.class, remap = false) public abstract class MixinCraftingCPUCluster implements ECPUCluster { @@ -40,170 +29,72 @@ public abstract class MixinCraftingCPUCluster implements ECPUCluster { @Unique private final TimeRecorder novaeng_ec$parallelismRecorder = new TimeRecorder(); @Unique - private ECalculatorThreadCore novaeng_ec$core = null; + private ECalculatorThreadCore novaeng_ec$core; @Unique - private ECalculatorController novaeng_ec$virtualCPUOwner = null; + private ECalculatorController novaeng_ec$virtualCPUOwner; @Unique - private long novaeng_ec$usedExtraStorage = 0; - @Shadow - private long availableStorage; + private long novaeng_ec$usedExtraStorage; @Shadow - private boolean isDestroyed; - - @Shadow - private int accelerator; - - @Shadow - private MECraftingInventory inventory; - - @Shadow - private boolean isComplete; - + protected long storage; @Shadow - private ICraftingLink myLastLink; - + protected int accelerator; @Shadow - private MachineSource machineSrc; - @Final + protected boolean destroyed; @Shadow - private int[] usedOps; + protected MachineSource machineSrc; @Shadow - public abstract void destroy(); + public abstract IGrid getGrid(); @Shadow - public abstract void cancel(); - - @Inject(method = "submitJob", at = @At(value = "INVOKE", target = "Lappeng/api/networking/crafting/ICraftingJob;getOutput()Lappeng/api/storage/data/IAEItemStack;")) - private void injectSubmitJob(final IGrid g, final ICraftingJob job, final IActionSource src, final ICraftingRequester requestingMachine, final CallbackInfoReturnable cir) { - if (this.novaeng_ec$virtualCPUOwner == null) { - return; - } - this.novaeng_ec$virtualCPUOwner.onVirtualCPUSubmitJob(job.getByteTotal()); - } - - @Inject(method = "cancel", at = @At("RETURN")) - private void injectCancel(final CallbackInfo ci) { - if (this.novaeng_ec$core == null) { - return; - } - // Ensure inventory is empty - if (this.inventory.getItemList().isEmpty()) { - this.destroy(); - } - } - - @Inject(method = "updateCraftingLogic", at = @At("HEAD"), cancellable = true) - private void injectUpdateCraftingLogicStoreItems(final IGrid grid, final IEnergyGrid eg, final CraftingGridCache cc, final CallbackInfo ci) { - if (this.novaeng_ec$core == null) { - return; - } - if (this.myLastLink != null) { - if (this.myLastLink.isCanceled()) { - this.myLastLink = null; - this.cancel(); - } - } - if (this.isComplete) { - // Ensure inventory is empty - if (this.inventory.getItemList().isEmpty()) { - this.destroy(); - ci.cancel(); - } - } - } - - @Inject(method = "updateCraftingLogic", at = @At("TAIL")) - private void injectUpdateCraftingLogicTail(final IGrid grid, final IEnergyGrid eg, final CraftingGridCache cc, final CallbackInfo ci) { - int currentParallelism = this.usedOps[0]; - this.novaeng_ec$parallelismRecorder.addUsedTime(currentParallelism); - } + public abstract World getLevel(); - @WrapOperation( - method = "updateCraftingLogic", - at = @At( - value = "INVOKE", - target = "Lappeng/tile/crafting/TileCraftingTile;isActive()Z" - ) - ) - private boolean redirectUpdateCraftingLogicIsActive(final TileCraftingTile instance, final Operation original) { - if (this.novaeng_ec$core != null) { - ECalculatorController controller = this.novaeng_ec$core.getController(); - return controller != null && controller.getChannel() != null && controller.getChannel().getProxy().isActive(); - } - if (this.novaeng_ec$virtualCPUOwner != null) { - ECalculatorController controller = this.novaeng_ec$virtualCPUOwner; - return controller.getChannel() != null && controller.getChannel().getProxy().isActive(); - } - return original.call(instance); - } - - @Inject(method = "destroy", at = @At("HEAD"), cancellable = true) + @Inject(method = "destroy", at = @At("HEAD")) private void injectDestroy(final CallbackInfo ci) { - if (this.novaeng_ec$core == null) { - return; - } - if (this.isDestroyed) { - ci.cancel(); - return; + if (!this.destroyed && this.novaeng_ec$core != null) { + this.novaeng_ec$core.onCPUDestroyed((CraftingCPUCluster) (Object) this); } - this.novaeng_ec$core.onCPUDestroyed((CraftingCPUCluster) (Object) this); } @Inject(method = "isActive", at = @At("HEAD"), cancellable = true) private void injectIsActive(final CallbackInfoReturnable cir) { - if (this.novaeng_ec$core == null && this.novaeng_ec$virtualCPUOwner == null) { - return; - } - if (this.novaeng_ec$core != null) { - ECalculatorController controller = this.novaeng_ec$core.getController(); - cir.setReturnValue(controller != null && controller.getChannel() != null && controller.getChannel().getProxy().isActive()); - } - if (this.novaeng_ec$virtualCPUOwner != null) { - ECalculatorController controller = this.novaeng_ec$virtualCPUOwner; - cir.setReturnValue(controller.getChannel() != null && controller.getChannel().getProxy().isActive()); + ECalculatorController controller = this.novaeng_ec$getOwner(); + if (controller != null) { + ECalculatorMEChannel channel = controller.getChannel(); + cir.setReturnValue(channel != null && channel.getMainNode().isActive()); } } @Inject(method = "getGrid", at = @At("HEAD"), cancellable = true) private void injectGetGrid(final CallbackInfoReturnable cir) { - if (this.novaeng_ec$core != null) { - final ECalculatorController controller = this.novaeng_ec$core.getController(); - if (controller == null) { - return; - } - final ECalculatorMEChannel channel = controller.getChannel(); - if (channel == null) { - return; - } - IGridNode node = channel.getProxy().getNode(); - cir.setReturnValue(node == null ? null : node.getGrid()); + ECalculatorController controller = this.novaeng_ec$getOwner(); + if (controller == null) { + return; } - if (this.novaeng_ec$virtualCPUOwner != null) { - final ECalculatorMEChannel channel = this.novaeng_ec$virtualCPUOwner.getChannel(); - if (channel == null) { - return; - } - IGridNode node = channel.getProxy().getNode(); - cir.setReturnValue(node == null ? null : node.getGrid()); + + ECalculatorMEChannel channel = controller.getChannel(); + if (channel == null) { + cir.setReturnValue(null); + return; } + + IGridNode node = channel.getMainNode().getNode(); + cir.setReturnValue(node == null ? null : node.grid()); } @Inject(method = "getCore", at = @At("HEAD"), cancellable = true) - private void injectGetCore(final CallbackInfoReturnable cir) { - if (this.novaeng_ec$core != null || this.novaeng_ec$virtualCPUOwner != null) { + private void injectGetCore(final CallbackInfoReturnable cir) { + if (this.novaeng_ec$getOwner() != null) { cir.setReturnValue(null); } } - @Inject(method = "getWorld", at = @At("HEAD"), cancellable = true) - private void injectGetWorld(final CallbackInfoReturnable cir) { - if (this.novaeng_ec$core != null) { - cir.setReturnValue(this.novaeng_ec$core.getWorld()); - } - if (this.novaeng_ec$virtualCPUOwner != null) { - cir.setReturnValue(this.novaeng_ec$virtualCPUOwner.getWorld()); + @Inject(method = "getLevel", at = @At("HEAD"), cancellable = true) + private void injectGetLevel(final CallbackInfoReturnable cir) { + ECalculatorController controller = this.novaeng_ec$getOwner(); + if (controller != null) { + cir.setReturnValue(controller.getWorld()); } } @@ -212,17 +103,24 @@ private void injectMarkDirty(final CallbackInfo ci) { if (this.novaeng_ec$core != null) { this.novaeng_ec$core.markNoUpdateSync(); ci.cancel(); - } - if (this.novaeng_ec$virtualCPUOwner != null) { + } else if (this.novaeng_ec$virtualCPUOwner != null) { this.novaeng_ec$virtualCPUOwner.markNoUpdateSync(); ci.cancel(); } } + @Unique + private ECalculatorController novaeng_ec$getOwner() { + if (this.novaeng_ec$core != null) { + return this.novaeng_ec$core.getController(); + } + return this.novaeng_ec$virtualCPUOwner; + } + @Unique @Override public void novaeng_ec$setAvailableStorage(final long availableStorage) { - this.availableStorage = availableStorage; + this.storage = availableStorage; } @Unique @@ -241,14 +139,9 @@ private void injectMarkDirty(final CallbackInfo ci) { @Override public void novaeng_ec$setThreadCore(final ECalculatorThreadCore threadCore) { this.novaeng_ec$core = threadCore; - - final ECalculatorController controller = threadCore.getController(); - if (controller == null) { - return; - } - final ECalculatorMEChannel channel = controller.getChannel(); - if (channel != null) { - this.machineSrc = new MachineSource(channel); + ECalculatorController controller = threadCore.getController(); + if (controller != null && controller.getChannel() != null) { + this.machineSrc = new MachineSource(controller.getChannel()); } } @@ -256,32 +149,16 @@ private void injectMarkDirty(final CallbackInfo ci) { @Override public void novaeng_ec$setVirtualCPUOwner(@Nullable final ECalculatorController virtualCPUOwner) { this.novaeng_ec$virtualCPUOwner = virtualCPUOwner; - if (virtualCPUOwner == null) { - return; - } - - final ECalculatorMEChannel channel = virtualCPUOwner.getChannel(); - if (channel != null) { - this.machineSrc = new MachineSource(channel); + if (virtualCPUOwner != null && virtualCPUOwner.getChannel() != null) { + this.machineSrc = new MachineSource(virtualCPUOwner.getChannel()); } } @Unique @Override public Levels novaeng_ec$getControllerLevel() { - final ECalculatorController controller; - if (this.novaeng_ec$core != null) { - controller = this.novaeng_ec$core.getController(); - } else if (this.novaeng_ec$virtualCPUOwner != null) { - controller = this.novaeng_ec$virtualCPUOwner; - } else { - return null; - } - - if (controller != null) { - return controller.getLevel(); - } - return null; + ECalculatorController controller = this.novaeng_ec$getOwner(); + return controller == null ? null : controller.getLevel(); } @Unique @@ -299,8 +176,7 @@ private void injectMarkDirty(final CallbackInfo ci) { @Unique @Override public void novaeng_ec$markDestroyed() { - this.isDestroyed = true; - this.isComplete = true; + this.destroyed = true; } @Unique diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCraftingCPUClusterTwo.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCraftingCPUClusterTwo.java deleted file mode 100644 index 43d65468..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCraftingCPUClusterTwo.java +++ /dev/null @@ -1,481 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.api.config.Actionable; -import appeng.api.config.FuzzyMode; -import appeng.api.config.PowerMultiplier; -import appeng.api.config.Settings; -import appeng.api.config.YesNo; -import appeng.api.networking.crafting.ICraftingMedium; -import appeng.api.networking.crafting.ICraftingPatternDetails; -import appeng.api.networking.energy.IEnergyGrid; -import appeng.api.networking.security.IActionSource; -import appeng.api.storage.data.IAEItemStack; -import appeng.api.storage.data.IItemList; -import appeng.container.ContainerNull; -import appeng.crafting.CraftingLink; -import appeng.crafting.MECraftingInventory; -import appeng.helpers.DualityInterface; -import appeng.me.cache.CraftingGridCache; -import appeng.me.cluster.implementations.CraftingCPUCluster; -import appeng.me.helpers.MachineSource; -import appeng.util.Platform; -import appeng.util.item.AEItemStack; -import co.neeve.nae2.common.crafting.patterntransform.PatternTransformWrapper; -import co.neeve.nae2.common.helpers.VirtualPatternDetails; -import co.neeve.nae2.common.interfaces.ICancellingCraftingMedium; -import com.circulation.random_complement.client.RCSettings; -import com.circulation.random_complement.client.buttonsetting.IntelligentBlocking; -import com.circulation.random_complement.common.interfaces.RCIConfigurableObject; -import com.glodblock.github.coremod.CoreModHooks; -import com.glodblock.github.integration.mek.FCGasItems; -import com.glodblock.github.inventory.FluidConvertingInventoryCrafting; -import com.glodblock.github.loader.FCItems; -import com.glodblock.github.util.FluidCraftingPatternDetails; -import com.glodblock.github.util.ModAndClassUtil; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import github.kasuminova.mmce.common.tile.MEPatternProvider; -import github.kasuminova.novaeng.common.tile.MEPatternProviderNova; -import github.kasuminova.novaeng.common.tile.ecotech.efabricator.EFabricatorMEChannel; -import github.kasuminova.novaeng.common.tile.ecotech.efabricator.EFabricatorWorker; -import github.kasuminova.novaeng.common.util.MediumType; -import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import it.unimi.dsi.fastutil.objects.ObjectLists; -import lombok.val; -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import org.jetbrains.annotations.NotNull; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.gen.Accessor; -import org.spongepowered.asm.mixin.injection.At; - -import java.util.ArrayDeque; -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Queue; -import java.util.stream.Collectors; - -@Mixin(value = CraftingCPUCluster.class, remap = false, priority = 0) -public abstract class MixinCraftingCPUClusterTwo { - - @Shadow - private int remainingOperations; - @Shadow - private MachineSource machineSrc; - @Shadow - private MECraftingInventory inventory; - @Shadow - @Final - private Map tasks; - @Shadow - @Final - private Map> visitedMediums; - @Shadow - private boolean somethingChanged; - @Shadow - private IItemList waitingFor; - @Unique - private boolean r$IgnoreParallel = false; - @Unique - private long r$craftingFrequency = 0; - @Unique - private boolean r$nae2$ghostInjecting; - - @Unique - private static double n$getSum(IAEItemStack[] input) { - double sum = 0; - for (IAEItemStack anInput : input) { - if (anInput != null) { - if (anInput.getItem() == FCItems.FLUID_DROP) { - sum += Math.max((double) anInput.getStackSize() / (double) 1000.0F, 1.0F); - continue; - } - - if (ModAndClassUtil.GAS && anInput.getItem() == FCGasItems.GAS_DROP) { - sum += Math.max((double) anInput.getStackSize() / (double) 4000.0F, 1.0F); - continue; - } - sum += anInput.getStackSize(); - } - } - return sum; - } - - @Shadow - protected abstract void postChange(IAEItemStack diff, IActionSource src); - - @Shadow - protected abstract void postCraftingStatusChange(IAEItemStack diff); - - @Shadow - protected abstract boolean canCraft(ICraftingPatternDetails details, IAEItemStack[] condensedInputs); - - @Shadow - protected abstract World getWorld(); - - @Shadow - protected abstract void markDirty(); - - @Shadow - public abstract void cancel(); - - @Shadow - protected abstract void completeJob(); - - @Shadow - public abstract IAEItemStack injectItems(IAEItemStack input, Actionable type, IActionSource src); - - /** - * @author circulation - * @reason 完全覆写样板发配方法 - */ - @Overwrite - private void executeCrafting(IEnergyGrid eg, CraftingGridCache cc) { - val voidSet = new ObjectArrayList(); - Iterator> i = this.tasks.entrySet().iterator(); - - while (i.hasNext()) { - Map.Entry e = i.next(); - val value = e.getValue(); - if (value.getValue() <= 0L) { - i.remove(); - } else { - val key = e.getKey(); - - long max = 0; - val list = (key.isCraftable() || key instanceof FluidCraftingPatternDetails) ? key.getCondensedOutputs() : key.getCondensedInputs(); - for (IAEItemStack stack1 : list) { - long size = stack1.getStackSize(); - if (size > max) max = size; - } - - if (this.canCraft(key, key.getCondensedInputs())) { - if (key instanceof VirtualPatternDetails) { - this.completeJob(); - this.cancel(); - return; - } - - boolean didPatternCraft; - doWhileCraftingLoop: - do { - this.r$craftingFrequency = e.getValue().getValue(); - if (max * this.r$craftingFrequency > Integer.MAX_VALUE) { - this.r$craftingFrequency = Integer.MAX_VALUE / max; - } - - InventoryCrafting ic = null; - didPatternCraft = false; - - if (!this.visitedMediums.containsKey(key) || this.visitedMediums.get(key).isEmpty()) { - this.visitedMediums.put(key, cc.getMediums(key).stream().filter(Objects::nonNull).collect(Collectors.toCollection(ArrayDeque::new))); - } - - while (!this.visitedMediums.get(key).isEmpty()) { - ICraftingMedium m = this.visitedMediums.get(key).poll(); - if (value.getValue() > 0L && m != null && !m.isBusy()) { - MediumType mediumType = this.r$specialMediumTreatment(m, key); - if (ic == null) { - IAEItemStack[] input = key.getInputs(); - final var sum = n$getSum(input); - double energy; - long s = this.r$craftingFrequency; - if (mediumType != MediumType.NULL) { - double sum1 = sum * s; - double o = eg.extractAEPower(sum1, Actionable.SIMULATE, PowerMultiplier.CONFIG); - if (o < sum1 - 0.01) { - this.r$craftingFrequency = (long) (o / sum1 * this.r$craftingFrequency); - s = Math.max(s, this.r$craftingFrequency); - } - } - energy = eg.extractAEPower(sum * s, Actionable.MODULATE, PowerMultiplier.CONFIG); - - if (energy < sum - 0.01) { - continue; - } - - val l = key.isCraftable() ? 3 : 10; - ic = new FluidConvertingInventoryCrafting(new ContainerNull(), l, l); - - boolean found = false; - - for (int x = 0; x < input.length; ++x) { - if (input[x] != null) { - found = false; - if (key.isCraftable()) { - Collection itemList; - if (key.canSubstitute()) { - List substitutes = key.getSubstituteInputs(x); - itemList = new ObjectArrayList<>(substitutes.size()); - - for (IAEItemStack stack : substitutes) { - itemList.addAll(this.inventory.getItemList().findFuzzy(stack, FuzzyMode.IGNORE_ALL)); - } - } else { - IAEItemStack item = this.inventory.getItemList().findPrecise(input[x]); - if (item != null) { - itemList = ObjectLists.singleton(item); - } else if (input[x].getItem().isDamageable()) { - itemList = this.inventory.getItemList().findFuzzy(input[x], FuzzyMode.IGNORE_ALL); - } else { - itemList = ObjectLists.emptyList(); - } - } - - for (IAEItemStack fuzz : itemList) { - fuzz = fuzz.copy(); - fuzz.setStackSize(input[x].getStackSize()); - if (key.isValidItemForSlot(x, fuzz.createItemStack(), this.getWorld())) { - IAEItemStack ais = this.r$extractItemsR(this.inventory, fuzz, Actionable.MODULATE, this.machineSrc, mediumType); - ItemStack is = ais == null ? ItemStack.EMPTY : ais.createItemStack(); - if (!is.isEmpty()) { - IAEItemStack receiver = ais.copy(); - this.postChange(receiver, this.machineSrc); - ic.setInventorySlotContents(x, is); - found = true; - break; - } - } - } - } else { - IAEItemStack ais = this.r$extractItemsR(this.inventory, input[x].copy(), Actionable.MODULATE, this.machineSrc, mediumType); - ItemStack is = ais == null ? ItemStack.EMPTY : ais.createItemStack(); - if (!is.isEmpty()) { - IAEItemStack receiver = input[x]; - if (mediumType != MediumType.NULL) - receiver = receiver.copy().setStackSize(receiver.getStackSize() * this.r$craftingFrequency); - this.postChange(receiver, this.machineSrc); - ic.setInventorySlotContents(x, is); - - var count = is.getCount(); - if (mediumType != MediumType.NULL) - count /= (int) this.r$craftingFrequency; - if (count == input[x].getStackSize()) { - found = true; - continue; - } - } - } - - if (!found) { - break; - } - } - } - - if (!found) { - for (int x = 0; x < ic.getSizeInventory(); ++x) { - ItemStack is = CoreModHooks.removeFluidPackets(ic, x); - if (!is.isEmpty()) { - this.inventory.injectItems( - CoreModHooks.wrapFluidPacketStack( - AEItemStack.fromItemStack(is) - ), - Actionable.MODULATE, - this.machineSrc - ); - } - } - - ic = null; - break; - } - } - - ICraftingPatternDetails newDetails; - if (key instanceof PatternTransformWrapper wrapper) { - newDetails = wrapper.getDelegate(); - } else { - newDetails = key; - } - if (m.pushPattern(newDetails, ic)) { - this.somethingChanged = true; - if (mediumType != MediumType.NULL && !this.r$IgnoreParallel) { - this.remainingOperations -= (int) this.r$craftingFrequency; - } else --this.remainingOperations; - - val outputs = key.getCondensedOutputs(); - if (m instanceof ICancellingCraftingMedium medium) { - if (medium.shouldAutoComplete()) { - Collections.addAll(voidSet, outputs); - } - } - - for (IAEItemStack out : outputs) { - val iaeStack = out.copy(); - if (mediumType != MediumType.NULL) - iaeStack.setStackSize(iaeStack.getStackSize() * this.r$craftingFrequency); - this.r$postProcessing(iaeStack); - } - - if (key.isCraftable()) { - for (int x = 0; x < ic.getSizeInventory(); ++x) { - ItemStack output = Platform.getContainerItem(CoreModHooks.removeFluidPackets(ic, x)); - if (!output.isEmpty()) { - IAEItemStack cItem = AEItemStack.fromItemStack(output); - if (mediumType == MediumType.EF) - cItem.setStackSize(cItem.getStackSize() * this.r$craftingFrequency); - this.r$postProcessing(cItem); - } - } - } - - ic = null; - didPatternCraft = true; - this.markDirty(); - if (mediumType == MediumType.NULL) { - value.setValue(value.getValue() - 1); - } else { - value.setValue(value.getValue() - (this.r$craftingFrequency)); - } - - if (value.getValue() <= 0) { - break doWhileCraftingLoop; - } - - if (value.getValue() > 0L && this.remainingOperations == 0) { - for (IAEItemStack output : voidSet) { - this.r$nae2$ghostInject(output); - } - return; - } - - if (m instanceof DualityInterface di && - (di.getConfigManager().getSetting(Settings.BLOCK) == YesNo.YES && ((RCIConfigurableObject) di).r$getConfigManager().getSetting(RCSettings.IntelligentBlocking) == IntelligentBlocking.CLOSE) - ) - break; - } - } - } - - if (ic != null) { - for (int x = 0; x < ic.getSizeInventory(); ++x) { - ItemStack is = CoreModHooks.removeFluidPackets(ic, x); - if (!is.isEmpty()) { - this.inventory.injectItems(CoreModHooks.wrapFluidPacketStack(AEItemStack.fromItemStack(is)), Actionable.MODULATE, this.machineSrc); - } - } - } - } while (didPatternCraft); - } - } - } - for (IAEItemStack output : voidSet) { - this.r$nae2$ghostInject(output); - } - } - - @Unique - private void r$postProcessing(IAEItemStack cItem) { - this.postChange(cItem, this.machineSrc); - this.waitingFor.add(cItem); - this.postCraftingStatusChange(cItem); - } - - @Unique - @NotNull - private MediumType r$specialMediumTreatment(ICraftingMedium m, ICraftingPatternDetails details) { - if (m instanceof MEPatternProviderNova mep) { - if (mep.getWorkMode() != MEPatternProvider.WorkModeSetting.BLOCKING_MODE - && mep.getWorkMode() != MEPatternProvider.WorkModeSetting.CRAFTING_LOCK_MODE) { - - for (IAEItemStack input : details.getCondensedInputs()) { - long size = input.getStackSize() * this.r$craftingFrequency; - val item = this.inventory.extractItems(input.copy().setStackSize(size), Actionable.SIMULATE, this.machineSrc); - if (item == null) continue; - if (item.getStackSize() < size) { - this.r$craftingFrequency = Math.max(1, item.getStackSize() / input.getStackSize()); - } - } - - if (mep.r$isIgnoreParallel()) { - this.r$IgnoreParallel = true; - } else { - this.r$IgnoreParallel = false; - this.r$craftingFrequency = Math.min(this.remainingOperations, this.r$craftingFrequency); - } - return MediumType.MEPatternProvider; - } else - return MediumType.NULL; - } else if (m instanceof EFabricatorMEChannel ef) { - var max = 0; - for (EFabricatorWorker worker : ef.getController().getWorkers()) { - max += worker.getRemainingSpace(); - } - for (IAEItemStack input : details.getInputs()) { - if (input == null) continue; - long size = this.r$craftingFrequency; - val item = this.inventory.extractItems(input.copy().setStackSize(size), Actionable.SIMULATE, this.machineSrc); - if (item == null) continue; - if (item.getStackSize() < size) { - long size0 = item.getStackSize() / input.getStackSize(); - if (size0 < 2) { - this.r$craftingFrequency = 1; - } else { - this.r$craftingFrequency = size0; - } - } - } - this.r$craftingFrequency = Math.min(max, this.r$craftingFrequency); - return MediumType.EF; - } else - return MediumType.NULL; - } - - @Unique - private IAEItemStack r$extractItemsR(MECraftingInventory instance, IAEItemStack receiver, Actionable mode, IActionSource src, MediumType mediumType) { - if (mediumType != MediumType.NULL) - receiver.setStackSize(receiver.getStackSize() * this.r$craftingFrequency); - return instance.extractItems(receiver, mode, src); - } - - @Unique - protected void r$nae2$ghostInject(IAEItemStack output) { - this.r$nae2$ghostInjecting = true; - try { - this.injectItems(output, Actionable.MODULATE, this.machineSrc); - } finally { - this.r$nae2$ghostInjecting = false; - } - } - - @WrapOperation( - method = "injectItems", - at = @At( - value = "INVOKE", - target = "Lappeng/crafting/CraftingLink;injectItems(Lappeng/api/storage/data/IAEItemStack;Lappeng/api/config/Actionable;)Lappeng/api/storage/data/IAEItemStack;" - ) - ) - protected IAEItemStack wrapInjectItems(CraftingLink link, IAEItemStack input, Actionable mode, Operation operation) { - return this.r$nae2$ghostInjecting ? null : operation.call(link, input, mode); - } - - @WrapOperation( - method = "injectItems", - at = @At( - value = "INVOKE", - target = "Lappeng/crafting/MECraftingInventory;injectItems(Lappeng/api/storage/data/IAEItemStack;Lappeng/api/config/Actionable;Lappeng/api/networking/security/IActionSource;)Lappeng/api/storage/data/IAEItemStack;" - ) - ) - protected IAEItemStack wrapInjectItems(MECraftingInventory link, IAEItemStack input, Actionable mode, IActionSource src, Operation operation) { - return this.r$nae2$ghostInjecting ? null : operation.call(link, input, mode, src); - } - - @Mixin(targets = "appeng.me.cluster.implementations.CraftingCPUCluster$TaskProgress", remap = false) - public interface AccessorTaskProgress { - @Accessor - long getValue(); - - @Accessor - void setValue(long value); - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCraftingCPUStatus.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCraftingCPUStatus.java deleted file mode 100644 index 035b2bfe..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCraftingCPUStatus.java +++ /dev/null @@ -1,48 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.api.networking.crafting.ICraftingCPU; -import appeng.container.implementations.CraftingCPUStatus; -import github.kasuminova.novaeng.common.block.ecotech.ecalculator.prop.Levels; -import github.kasuminova.novaeng.common.ecalculator.ECPUCluster; -import github.kasuminova.novaeng.common.ecalculator.ECPUStatus; -import net.minecraft.nbt.NBTTagCompound; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(value = CraftingCPUStatus.class, remap = false) -public class MixinCraftingCPUStatus implements ECPUStatus { - - @Unique - private Levels novaeng_ec$ecLevel; - - @Inject(method = "(Lappeng/api/networking/crafting/ICraftingCPU;I)V", at = @At("RETURN")) - private void injectInit(final ICraftingCPU cluster, final int serial, final CallbackInfo ci) { - if (cluster instanceof ECPUCluster ecpuCluster) { - this.novaeng_ec$ecLevel = ecpuCluster.novaeng_ec$getControllerLevel(); - } - } - - @Inject(method = "(Lnet/minecraft/nbt/NBTTagCompound;)V", at = @At("RETURN")) - private void injectInit(final NBTTagCompound i, final CallbackInfo ci) { - if (i.hasKey("ecLevel")) { - this.novaeng_ec$ecLevel = Levels.values()[i.getByte("ecLevel")]; - } - } - - @Inject(method = "writeToNBT", at = @At("RETURN")) - private void injectWriteToNBT(final NBTTagCompound i, final CallbackInfo ci) { - if (novaeng_ec$ecLevel == null) { - return; - } - i.setByte("ecLevel", (byte) novaeng_ec$ecLevel.ordinal()); - } - - @Override - public Levels novaeng_ec$getLevel() { - return novaeng_ec$ecLevel; - } - -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCraftingGridCache.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCraftingGridCache.java deleted file mode 100644 index 7807c280..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCraftingGridCache.java +++ /dev/null @@ -1,68 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.api.networking.IGrid; -import appeng.api.networking.IGridNode; -import appeng.api.networking.energy.IEnergyGrid; -import appeng.crafting.CraftingLink; -import appeng.me.cache.CraftingGridCache; -import appeng.me.cluster.implementations.CraftingCPUCluster; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import github.kasuminova.mmce.common.util.TimeRecorder; -import github.kasuminova.novaeng.common.ecalculator.ECPUCluster; -import github.kasuminova.novaeng.common.tile.ecotech.ecalculator.ECalculatorMEChannel; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.util.List; -import java.util.Set; - -@SuppressWarnings("MethodMayBeStatic") -@Mixin(value = CraftingGridCache.class, remap = false) -public abstract class MixinCraftingGridCache { - - @Shadow - @Final - private IGrid grid; - - @Shadow - @Final - private Set craftingCPUClusters; - - @Shadow - public abstract void addLink(final CraftingLink link); - - @Inject(method = "updateCPUClusters()V", at = @At("RETURN")) - private void injectUpdateCPUClusters(final CallbackInfo ci) { - for (final IGridNode ecNode : grid.getMachines(ECalculatorMEChannel.class)) { - final ECalculatorMEChannel ec = (ECalculatorMEChannel) ecNode.getMachine(); - final List cpus = ec.getCPUs(); - - for (CraftingCPUCluster cpu : cpus) { - this.craftingCPUClusters.add(cpu); - - if (cpu.getLastCraftingLink() != null) { - this.addLink((CraftingLink) cpu.getLastCraftingLink()); - } - } - } - } - - @WrapOperation(method = "onUpdateTick", at = @At(value = "INVOKE", target = "Lappeng/me/cluster/implementations/CraftingCPUCluster;updateCraftingLogic(Lappeng/api/networking/IGrid;Lappeng/api/networking/energy/IEnergyGrid;Lappeng/me/cache/CraftingGridCache;)V")) - private void wrapOnUpdateTick(final CraftingCPUCluster instance, final IGrid grid, final IEnergyGrid eg, final CraftingGridCache cc, final Operation original) { - ECPUCluster ec = ECPUCluster.from(instance); - if (ec.novaeng_ec$getController() != null) { - TimeRecorder recorder = ec.novaeng_ec$getTimeRecorder(); - final long start = System.nanoTime() / 1000; - original.call(instance, grid, eg, cc); - recorder.addUsedTime((int) (System.nanoTime() / 1000 - start)); - } else { - original.call(instance, grid, eg, cc); - } - } - -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinGridStorageCache.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinGridStorageCache.java deleted file mode 100644 index 724e48af..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinGridStorageCache.java +++ /dev/null @@ -1,31 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.api.storage.IStorageChannel; -import appeng.api.storage.data.IAEStack; -import appeng.me.cache.GridStorageCache; -import appeng.me.cache.NetworkMonitor; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import java.util.Map; - -@Mixin(value = GridStorageCache.class, remap = false) -public class MixinGridStorageCache { - - @Shadow - @Final - private Map>, NetworkMonitor> storageMonitors; - - @SuppressWarnings({"MixinAnnotationTarget", "rawtypes"}) - @Redirect(method = "*", at = @At(value = "INVOKE", target = "Ljava/util/Map;get(Ljava/lang/Object;)Ljava/lang/Object;")) - private Object fixNPE(Map instance, Object o) { - var i = instance.get(o); - if (instance == storageMonitors && i == null) { - storageMonitors.put((IStorageChannel) o, (NetworkMonitor) (i = new NetworkMonitor((GridStorageCache) (Object) this, (IStorageChannel) o))); - } - return i; - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinGuiCraftConfirm.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinGuiCraftConfirm.java deleted file mode 100644 index 9dd2c224..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinGuiCraftConfirm.java +++ /dev/null @@ -1,10 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.client.gui.implementations.GuiCraftConfirm; -import github.kasuminova.novaeng.client.util.RCGuiCraftConfirm; -import org.spongepowered.asm.mixin.Mixin; - -@Mixin(GuiCraftConfirm.class) -public class MixinGuiCraftConfirm implements RCGuiCraftConfirm { - -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinGuiCraftingStatus.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinGuiCraftingStatus.java deleted file mode 100644 index aa145960..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinGuiCraftingStatus.java +++ /dev/null @@ -1,163 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.api.storage.data.IAEItemStack; -import appeng.client.gui.AEBaseGui; -import appeng.client.gui.implementations.GuiCraftingStatus; -import appeng.client.gui.widgets.GuiScrollbar; -import appeng.container.implementations.ContainerCraftingStatus; -import appeng.container.implementations.CraftingCPUStatus; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.llamalad7.mixinextras.sugar.Local; -import github.kasuminova.mmce.client.gui.util.RenderPos; -import github.kasuminova.mmce.client.gui.util.TextureProperties; -import github.kasuminova.novaeng.common.block.ecotech.ecalculator.prop.Levels; -import github.kasuminova.novaeng.common.ecalculator.ECPUStatus; -import github.kasuminova.novaeng.novaeng_core.Tags; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.text.TextFormatting; -import org.lwjgl.opengl.GL11; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; - -import java.util.List; - -@SuppressWarnings({"StaticVariableMayNotBeInitialized", "NonConstantFieldWithUpperCaseName"}) -@Mixin(value = GuiCraftingStatus.class, remap = false) -public abstract class MixinGuiCraftingStatus extends AEBaseGui { - - @Unique - private static final ResourceLocation novaeng_ec$TEXTURE = new ResourceLocation(Tags.MOD_ID, "textures/gui/ecalculator_gui_2.png"); - @Unique - private static final TextureProperties novaeng_ec$L4 = TextureProperties.of(novaeng_ec$TEXTURE, 1, 1, 67, 22); - @Unique - private static final TextureProperties novaeng_ec$L4_CELL = TextureProperties.of(novaeng_ec$TEXTURE, 0, 124, 16, 16); - @Unique - private static final TextureProperties novaeng_ec$L6 = TextureProperties.of(novaeng_ec$TEXTURE, 1, 26, 67, 22); - @Unique - private static final TextureProperties novaeng_ec$L6_CELL = TextureProperties.of(novaeng_ec$TEXTURE, 34, 124, 16, 16); - @Unique - private static final TextureProperties novaeng_ec$L9 = TextureProperties.of(novaeng_ec$TEXTURE, 1, 51, 67, 22); - @Unique - private static final TextureProperties novaeng_ec$L9_CELL = TextureProperties.of(novaeng_ec$TEXTURE, 17, 124, 16, 16); - @Unique - private static final TextureProperties novaeng_ec$L11 = TextureProperties.of(novaeng_ec$TEXTURE, 1, 76, 67, 22); - @Shadow - @Final - private static int CPU_TABLE_WIDTH; - @Shadow - @Final - private static int CPU_TABLE_SLOT_HEIGHT; - @Shadow - @Final - private static int CPU_TABLE_SLOT_XOFF; - @Shadow - @Final - private static int CPU_TABLE_SLOT_YOFF; - @Shadow - @Final - private static int CPU_TABLE_SLOT_WIDTH; - @Shadow - @Final - private ContainerCraftingStatus status; - @Shadow - private GuiScrollbar cpuScrollbar; - - public MixinGuiCraftingStatus() { - super(null); - } - - @WrapOperation(method = "drawFG", at = @At(value = "INVOKE", target = "Ljava/util/List;get(I)Ljava/lang/Object;")) - private Object redirectDrawFG(final List instance, final int i, final Operation original, @Local(name = "hoveredCpu") final CraftingCPUStatus hoveredCpu) { - CraftingCPUStatus status = original.call(instance, i); - ECPUStatus ecpuStatus = (ECPUStatus) status; - if (ecpuStatus.novaeng_ec$getLevel() != null) { - novaeng_ec$renderECPUStatus(status, ecpuStatus.novaeng_ec$getLevel(), i, this.cpuScrollbar.getCurrentScroll(), hoveredCpu); - return null; - } - return status; - } - - @Unique - @SuppressWarnings({"RedundantCast"}) - private void novaeng_ec$renderECPUStatus(final CraftingCPUStatus cpu, final Levels ecLevel, final int i, final int firstCpu, final CraftingCPUStatus hoveredCpu) { - final FontRenderer font = fontRenderer; - final int textColor = 0x202020; - int x = -CPU_TABLE_WIDTH + 9; - int y = 19 + (i - firstCpu) * CPU_TABLE_SLOT_HEIGHT; - if (cpu.getSerial() == this.status.selectedCpuSerial) { - GL11.glColor4f(0.0F, 0.8352F, 1.0F, 1.0F); - } else if (hoveredCpu != null && hoveredCpu.getSerial() == cpu.getSerial()) { - GL11.glColor4f(0.65F, 0.9F, 1.0F, 1.0F); - } else { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - } - this.bindTexture("guis/cpu_selector.png"); - this.drawTexturedModalRect(x, y, CPU_TABLE_SLOT_XOFF, CPU_TABLE_SLOT_YOFF, CPU_TABLE_SLOT_WIDTH, CPU_TABLE_SLOT_HEIGHT); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - - TextFormatting color = TextFormatting.WHITE; - if (ecLevel == Levels.L4) { - novaeng_ec$L4.render(new RenderPos(x, y), (AEBaseGui) (Object) this); - color = TextFormatting.AQUA; - } else if (ecLevel == Levels.L6) { - novaeng_ec$L6.render(new RenderPos(x, y), (AEBaseGui) (Object) this); - color = TextFormatting.GOLD; - } else if (ecLevel == Levels.L9) { - novaeng_ec$L9.render(new RenderPos(x, y), (AEBaseGui) (Object) this); - color = TextFormatting.DARK_PURPLE; - } else if (ecLevel == Levels.L11) { - novaeng_ec$L11.render(new RenderPos(x, y), (AEBaseGui) (Object) this); - color = TextFormatting.RED; - } - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - - String name = cpu.getName(); - if (name == null || name.isEmpty()) { - name = color + "#" + cpu.getSerial() + TextFormatting.RESET; - } - if (name.replaceAll("§.", "").length() > 8) { - name = name.substring(0, 7) + ".."; - } - GL11.glPushMatrix(); - GL11.glTranslatef(x + (3 + 8), y + 3, 0); - GL11.glScalef(0.8f, 0.8f, 1.0f); - font.drawString(name, 0, 0, textColor); - GL11.glPopMatrix(); - - GL11.glPushMatrix(); - GL11.glTranslatef(x + 3, y + 11, 0); - final IAEItemStack craftingStack = cpu.getCrafting(); - GL11.glScalef(0.5f, 0.5f, 1.0f); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - if (ecLevel == Levels.L4) { - novaeng_ec$L4_CELL.render(new RenderPos(2, 0), (AEBaseGui) (Object) this); - } else if (ecLevel == Levels.L6) { - novaeng_ec$L6_CELL.render(new RenderPos(2, 0), (AEBaseGui) (Object) this); - } else if (ecLevel == Levels.L9) { - novaeng_ec$L9_CELL.render(new RenderPos(2, 0), (AEBaseGui) (Object) this); - } - GL11.glTranslatef(18.0f, 3.5f, 0.0f); - if (craftingStack != null) { - String amount = Long.toString(craftingStack.getStackSize()); - if (amount.length() > 9) { - amount = amount.substring(0, 9) + ".."; - } - GL11.glScalef(1.5f, 1.5f, 1.0f); - font.drawString(amount, 0, 0, 0x009000); - GL11.glPopMatrix(); - GL11.glPushMatrix(); - GL11.glTranslatef(x + CPU_TABLE_SLOT_WIDTH - (19 + 4), y + 3, 0); - this.drawItem(0, 0, craftingStack.createItemStack()); - } else { - GL11.glScalef(1.5f, 1.5f, 1.0f); - font.drawString(cpu.formatStorage(), 0, 0, textColor); - } - GL11.glPopMatrix(); - } - -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinGuiPatternTerm.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinGuiPatternTerm.java deleted file mode 100644 index 17497d83..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinGuiPatternTerm.java +++ /dev/null @@ -1,58 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.client.gui.implementations.GuiMEMonitorable; -import appeng.client.gui.implementations.GuiPatternTerm; -import appeng.client.gui.widgets.GuiTabButton; -import appeng.container.implementations.ContainerPatternEncoder; -import github.kasuminova.novaeng.NovaEngineeringCore; -import github.kasuminova.novaeng.common.block.ecotech.efabricator.BlockEFabricatorController; -import github.kasuminova.novaeng.common.network.PktPatternTermUploadPattern; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.resources.I18n; -import net.minecraft.item.ItemStack; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(GuiPatternTerm.class) -public class MixinGuiPatternTerm extends GuiMEMonitorable { - - @Final - @Shadow(remap = false) - private ContainerPatternEncoder container; - - @Unique - private GuiTabButton novaeng_core$uploadPatternButton; - - @SuppressWarnings("DataFlowIssue") - public MixinGuiPatternTerm() { - super(null, null); - } - - @Inject(method = "initGui", at = @At("RETURN")) - private void injectInitGui(final CallbackInfo ci) { - this.novaeng_core$uploadPatternButton = new GuiTabButton( - this.guiLeft + 173, this.guiTop + this.ySize - 155, - new ItemStack(BlockEFabricatorController.L4), I18n.format("gui.efabricator.button.upload_pattern"), this.itemRender - ); - this.buttonList.add(this.novaeng_core$uploadPatternButton); - } - - @Inject(method = "actionPerformed", at = @At("HEAD"), cancellable = true) - private void injectActionPerformed(final GuiButton btn, final CallbackInfo ci) { - if (btn == this.novaeng_core$uploadPatternButton) { - NovaEngineeringCore.NET_CHANNEL.sendToServer(new PktPatternTermUploadPattern()); - ci.cancel(); - } - } - - @Inject(method = "drawFG", at = @At("HEAD"), remap = false) - private void injectDrawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY, final CallbackInfo ci) { - this.novaeng_core$uploadPatternButton.visible = this.container.isCraftingMode(); - } - -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinNetworkInventoryOutputPreparation.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinNetworkInventoryOutputPreparation.java deleted file mode 100644 index 1f588c4a..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinNetworkInventoryOutputPreparation.java +++ /dev/null @@ -1,19 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.tile.inventory.AppEngNetworkInventory; -import appeng.util.item.AEItemStack; -import github.kasuminova.novaeng.common.performance.AeOutputPreparation; -import github.kasuminova.novaeng.common.performance.AeOutputTarget; -import net.minecraft.item.ItemStack; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(value = AppEngNetworkInventory.class, remap = false) -public abstract class MixinNetworkInventoryOutputPreparation implements AeOutputTarget { - @Redirect(method = "insertItem", at = @At(value = "INVOKE", - target = "Lappeng/util/item/AEItemStack;fromItemStack(Lnet/minecraft/item/ItemStack;)Lappeng/util/item/AEItemStack;"), require = 1) - private AEItemStack nova$reuseConversion(final ItemStack stack) { - return AeOutputPreparation.convert(stack); - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinPacketInventoryAction.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinPacketInventoryAction.java deleted file mode 100644 index 1176c5ab..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinPacketInventoryAction.java +++ /dev/null @@ -1,39 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.container.AEBaseContainer; -import appeng.core.sync.AppEngPacket; -import appeng.core.sync.network.INetworkInfo; -import appeng.core.sync.packets.PacketInventoryAction; -import appeng.helpers.InventoryAction; -import github.kasuminova.novaeng.common.handler.AEPktInvActionSpamHandler; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.util.text.TextComponentString; -import net.minecraft.util.text.TextFormatting; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(PacketInventoryAction.class) -public class MixinPacketInventoryAction { - - @Shadow(remap = false) - @Final - private InventoryAction action; - - @Inject(method = "serverPacketData", at = @At("HEAD"), cancellable = true, remap = false) - private void injectServerPacketData(final INetworkInfo manager, final AppEngPacket packet, final EntityPlayer player, final CallbackInfo ci) { - final EntityPlayerMP sender = (EntityPlayerMP) player; - if (!(sender.openContainer instanceof AEBaseContainer)) { - return; - } - if (this.action == InventoryAction.MOVE_REGION && AEPktInvActionSpamHandler.receivePacketAndCheckSpam(sender)) { - sender.connection.disconnect(new TextComponentString("[NovaEng-Core]" + TextFormatting.RED + " Disconnected by AE2 Packet Spam.")); - ci.cancel(); - } - } - -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinTileChestFilter.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinTileChestFilter.java index 0cd956d3..b7abae5c 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinTileChestFilter.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinTileChestFilter.java @@ -1,23 +1,22 @@ package github.kasuminova.novaeng.mixin.ae2; +import ae2.api.inventories.InternalInventory; import github.kasuminova.novaeng.common.item.estorage.EStorageCell; import net.minecraft.item.ItemStack; -import net.minecraftforge.items.IItemHandler; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@SuppressWarnings("MethodMayBeStatic") -@Mixin(targets = "appeng.tile.storage.TileChest$CellInventoryFilter") +@Mixin(targets = "ae2.tile.storage.TileMEChest$CellInventoryFilter", remap = false) public class MixinTileChestFilter { /** * 不是,那么大个驱动器怎么塞得下那么大个硬盘? */ @Inject(method = "allowInsert", at = @At("HEAD"), cancellable = true, remap = false) - private void injectEStorageCellCheck(final IItemHandler inv, final int slot, final ItemStack stack, final CallbackInfoReturnable cir) { - if (stack.getItem() instanceof EStorageCell) { + private void injectEStorageCellCheck(final InternalInventory inv, final int slot, final ItemStack stack, final CallbackInfoReturnable cir) { + if (stack.getItem() instanceof EStorageCell) { cir.setReturnValue(false); } } diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinTileDriveFilter.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinTileDriveFilter.java index 0caf0269..1fee0120 100644 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinTileDriveFilter.java +++ b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinTileDriveFilter.java @@ -1,23 +1,22 @@ package github.kasuminova.novaeng.mixin.ae2; +import ae2.api.inventories.InternalInventory; import github.kasuminova.novaeng.common.item.estorage.EStorageCell; import net.minecraft.item.ItemStack; -import net.minecraftforge.items.IItemHandler; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@SuppressWarnings("MethodMayBeStatic") -@Mixin(targets = "appeng.tile.storage.TileDrive$CellValidInventoryFilter") +@Mixin(targets = "ae2.tile.storage.TileDrive$CellValidInventoryFilter", remap = false) public class MixinTileDriveFilter { /** * 不是,那么大个驱动器怎么塞得下那么大个硬盘? */ @Inject(method = "allowInsert", at = @At("HEAD"), cancellable = true, remap = false) - private void injectEStorageCellCheck(final IItemHandler inv, final int slot, final ItemStack stack, final CallbackInfoReturnable cir) { - if (stack.getItem() instanceof EStorageCell) { + private void injectEStorageCellCheck(final InternalInventory inv, final int slot, final ItemStack stack, final CallbackInfoReturnable cir) { + if (stack.getItem() instanceof EStorageCell) { cir.setReturnValue(false); } } diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinUVLModelLoader.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinUVLModelLoader.java deleted file mode 100644 index 3fd1cfcb..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinUVLModelLoader.java +++ /dev/null @@ -1,35 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.client.render.model.UVLModelLoader; -import github.kasuminova.novaeng.client.resource.ModelJsonMetadataIndex; -import github.kasuminova.novaeng.client.resource.ModelJsonMetadataIndexImpl; -import net.minecraft.util.ResourceLocation; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -/** - * Answers AE2 UVL marker probes from the same parsed model metadata used by other loaders. - */ -@Mixin(value = UVLModelLoader.class, priority = 2000, remap = false) -public abstract class MixinUVLModelLoader { - - @Inject(method = "accepts", at = @At("HEAD"), cancellable = true, - remap = false, require = 1) - private void nova$readSharedUvlMarker(final ResourceLocation modelLocation, - final CallbackInfoReturnable cir) { - final ModelJsonMetadataIndex metadata = ModelJsonMetadataIndexImpl.instance(); - if (!metadata.isActive()) { - return; - } - - String modelPath = modelLocation.getPath(); - if (modelPath.startsWith("models/")) { - modelPath = modelPath.substring("models/".length()); - } - final ResourceLocation jsonLocation = new ResourceLocation( - modelLocation.getNamespace(), "models/" + modelPath + ".json"); - cir.setReturnValue(metadata.hasUvlMarker(jsonLocation)); - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/betterp2p/MixinServerLinkP2PHandler.java b/src/main/java/github/kasuminova/novaeng/mixin/betterp2p/MixinServerLinkP2PHandler.java deleted file mode 100644 index ee8fd7ba..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/betterp2p/MixinServerLinkP2PHandler.java +++ /dev/null @@ -1,40 +0,0 @@ -package github.kasuminova.novaeng.mixin.betterp2p; - -import com.projecturanus.betterp2p.network.ModNetwork; -import com.projecturanus.betterp2p.network.packet.C2SLinkP2P; -import com.projecturanus.betterp2p.network.packet.ServerLinkP2PHandler; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; - -@Mixin(value = ServerLinkP2PHandler.class, remap = false) -public class MixinServerLinkP2PHandler { - - /** - * @author circulation - * @reason Fix CME caused by updating ME network in non-server thread. - */ - @Overwrite - @Nullable - public IMessage onMessage(C2SLinkP2P message, MessageContext ctx) { - if (message.getInput() == null || message.getOutput() == null) { - return null; - } - - var player = ctx.getServerHandler().player; - var state = ModNetwork.INSTANCE.getPlayerState().get(player.getUniqueID()); - if (state == null) { - return null; - } - player.getServer().addScheduledTask(() -> { - var result = state.getGridCache().linkP2P(message.getInput(), message.getOutput()); - if (result != null) { - ModNetwork.INSTANCE.requestP2PUpdate(player); - } - }); - - return null; - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/betterp2p/MixinServerUnlinkP2PHandler.java b/src/main/java/github/kasuminova/novaeng/mixin/betterp2p/MixinServerUnlinkP2PHandler.java deleted file mode 100644 index 484edcb9..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/betterp2p/MixinServerUnlinkP2PHandler.java +++ /dev/null @@ -1,38 +0,0 @@ -package github.kasuminova.novaeng.mixin.betterp2p; - -import com.projecturanus.betterp2p.network.ModNetwork; -import com.projecturanus.betterp2p.network.packet.C2SUnlinkP2P; -import com.projecturanus.betterp2p.network.packet.S2COpenGui; -import com.projecturanus.betterp2p.network.packet.ServerUnlinkP2PHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; - -@Mixin(value = ServerUnlinkP2PHandler.class, remap = false) -public class MixinServerUnlinkP2PHandler { - - /** - * @author circulation - * @reason Fix CME caused by updating ME network in non-server thread. - */ - @Overwrite - @Nullable - public S2COpenGui onMessage(C2SUnlinkP2P message, MessageContext ctx) { - if (message.getP2p() == null) { - return null; - } - - var player = ctx.getServerHandler().player; - var cache = ModNetwork.INSTANCE.getPlayerState().get(player.getUniqueID()); - if (cache == null) { - return null; - } - player.getServer().addScheduledTask(() -> { - cache.getGridCache().unlinkP2P(message.getP2p()); - ModNetwork.INSTANCE.requestP2PUpdate(player); - }); - - return null; - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinMEPatternProvider.java b/src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinMEPatternProvider.java deleted file mode 100644 index 3b39b48b..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinMEPatternProvider.java +++ /dev/null @@ -1,25 +0,0 @@ -package github.kasuminova.novaeng.mixin.mmce; - -import github.kasuminova.mmce.common.tile.MEPatternProvider; -import github.kasuminova.mmce.common.tile.base.MEMachineComponent; -import github.kasuminova.novaeng.common.tile.MEPatternProviderNova; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; - -@Mixin(value = MEPatternProvider.class, remap = false) -public abstract class MixinMEPatternProvider extends MEMachineComponent implements MEPatternProviderNova { - @Unique - public boolean novaEngineering_Core$ignoreParallel = false; - - @Shadow - public abstract MEPatternProvider.WorkModeSetting getWorkMode(); - - public boolean r$isIgnoreParallel() { - return novaEngineering_Core$ignoreParallel; - } - - public void r$IgnoreParallel() { - novaEngineering_Core$ignoreParallel = true; - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/nae2/MixinJEICellCategory.java b/src/main/java/github/kasuminova/novaeng/mixin/nae2/MixinJEICellCategory.java deleted file mode 100644 index 73868544..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/nae2/MixinJEICellCategory.java +++ /dev/null @@ -1,33 +0,0 @@ -package github.kasuminova.novaeng.mixin.nae2; - -import appeng.api.AEApi; -import appeng.api.storage.ICellHandler; -import appeng.api.storage.ICellRegistry; -import co.neeve.nae2.common.integration.jei.JEICellCategory; -import github.kasuminova.novaeng.common.estorage.EStorageCellHandler; -import net.minecraft.item.ItemStack; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(JEICellCategory.class) -public class MixinJEICellCategory { - - @Redirect( - method = "getCellInfo", - at = @At( - value = "INVOKE", - target = "Lappeng/api/storage/ICellRegistry;getHandler(Lnet/minecraft/item/ItemStack;)Lappeng/api/storage/ICellHandler;", - remap = false - ), - remap = false - ) - private static ICellHandler redirectGetEStorageCellHandler(final ICellRegistry instance, final ItemStack stack) { - EStorageCellHandler handler = EStorageCellHandler.getHandler(stack); - if (handler != null) { - return handler; - } - return AEApi.instance().registries().cell().getHandler(stack); - } - -} diff --git a/src/main/resources/novaeng_core.mixin.json b/src/main/resources/novaeng_core.mixin.json index ceb1eece..77989faa 100644 --- a/src/main/resources/novaeng_core.mixin.json +++ b/src/main/resources/novaeng_core.mixin.json @@ -11,19 +11,7 @@ }, "mixins": [ "actuallyadditions.MixinTileEntityPhantomface", - "ae2.AccessorAbstractCellInventory", - "ae2.AccessorCellRegistry", - "ae2.AccessorContainerCraftConfirm", - "ae2.AccessorContainerPatternEncoder", - "ae2.AccessorCraftingCPURecord", - "ae2.MixinAppEngServerPacketHandler", "ae2.MixinCraftingCPUCluster", - "ae2.MixinCraftingCPUClusterTwo", - "ae2.MixinCraftingCPUClusterTwo$AccessorTaskProgress", - "ae2.MixinCraftingCPUStatus", - "ae2.MixinCraftingGridCache", - "ae2.MixinGridStorageCache", - "ae2.MixinNetworkInventoryOutputPreparation", "ae2.MixinTileChestFilter", "ae2.MixinTileDriveFilter", "ar.MixinDimensionProperties", @@ -35,8 +23,6 @@ "astralsorcery.MixinPlayerAttributeMap", "astralsorcery.MixinTileAccelerationBlacklist", "athenaeum.MixinEnchantmentHelper", - "betterp2p.MixinServerLinkP2PHandler", - "betterp2p.MixinServerUnlinkP2PHandler", "biomesoplenty.MixinTrailManager", "botania.MixinTileRedStringContainer", "botania.MixinTileRuneAltar", @@ -138,7 +124,6 @@ "mmce.MixinTileMultiblockMachineController", "mmce.MixinTileNotificationGeneration", "mmce.MixinWorldSceneRendererWidget", - "nae2.MixinJEICellCategory", "nco.MixinFluidTileWrapper", "nco.MixinITileGui", "nco.MixinNCPFWriter", @@ -175,11 +160,6 @@ "actinium.MixinSortOutputBudgetRelease", "actinium.MixinVintageScratchMemory", "actinium.MixinWorldClient", - "ae2.AccessorGuiCraftConfirm", - "ae2.MixinAppEngClientPacketHandler", - "ae2.MixinGuiCraftConfirm", - "ae2.MixinGuiCraftingStatus", - "ae2.MixinGuiPatternTerm", "alfheim.MixinLightingEngine", "astralsorcery.MixinBindableResourceLazyAllocation", "astralsorcery.MixinTexturePreloader", @@ -262,7 +242,6 @@ "revoui.MixinChatStyleRendererBatch" ], "server": [ - "ae2.MixinPacketInventoryAction", "astralsorcery.AccessorResearchManager", "astralsorcery.InvokerPerkEffectHelper", "astralsorcery.MixinPlayerProgress", From 022de716df330a29a21b80ec7459a90e2a6ce6dd Mon Sep 17 00:00:00 2001 From: vcwdfca <2168409010@qq.com> Date: Mon, 26 Oct 2026 23:54:23 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0ae2s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle/scripts/dependencies.gradle | 2 +- .../kasuminova/novaeng/NovaEngCoreConfig.java | 7 +- .../novaeng/NovaEngineeringCore.java | 2 +- .../integration/ae2/AeNetworkItemHandler.java | 96 +++++++++++++++++++ .../performance/AeOutputPreparation.java | 51 ---------- .../common/performance/AeOutputTarget.java | 5 - .../common/performance/OperationCache.java | 40 -------- .../novaeng/common/util/MixinDecisions.java | 8 +- .../common/util/VintageRendererAccess.java | 2 +- ...ixinNetworkInventoryOutputPreparation.java | 0 .../mixin/mmce/InvokerItemOutputBus.java | 12 --- .../mmce/MixinItemOutputBusNetworkTarget.java | 36 +++++++ .../mmce/MixinItemOutputPreparation.java | 27 ------ src/main/resources/novaeng_core.mixin.json | 4 +- 14 files changed, 140 insertions(+), 152 deletions(-) create mode 100644 src/main/java/github/kasuminova/novaeng/common/integration/ae2/AeNetworkItemHandler.java delete mode 100644 src/main/java/github/kasuminova/novaeng/common/performance/AeOutputPreparation.java delete mode 100644 src/main/java/github/kasuminova/novaeng/common/performance/AeOutputTarget.java delete mode 100644 src/main/java/github/kasuminova/novaeng/common/performance/OperationCache.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinNetworkInventoryOutputPreparation.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/mmce/InvokerItemOutputBus.java create mode 100644 src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinItemOutputBusNetworkTarget.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinItemOutputPreparation.java diff --git a/gradle/scripts/dependencies.gradle b/gradle/scripts/dependencies.gradle index ebfde6b7..4eb8fe1c 100644 --- a/gradle/scripts/dependencies.gradle +++ b/gradle/scripts/dependencies.gradle @@ -94,7 +94,7 @@ dependencies { modImplementation 'curse.maven:the-one-probe-245211:2667280' modCompileOnly 'curse.maven:FTB-Library-237167:2985811' modCompileOnly 'curse.maven:FTBU-237102:3157548' - modImplementation 'com.github.FormlessDragon:Applied-Energistics-2-Supergiant:v1.0.14:dev' + modImplementation 'com.github.FormlessDragon:Applied-Energistics-2-Supergiant:v1.0.17:dev' modCompileOnly 'com.github.FormlessDragon:Applied-Mekanistics:v1.1.1:dev' modImplementation 'curse.maven:codechicken-lib-cre-1328922:6898525' modImplementation 'curse.maven:wanionlib-253043:4623135' diff --git a/src/main/java/github/kasuminova/novaeng/NovaEngCoreConfig.java b/src/main/java/github/kasuminova/novaeng/NovaEngCoreConfig.java index a650568c..8256a6ce 100644 --- a/src/main/java/github/kasuminova/novaeng/NovaEngCoreConfig.java +++ b/src/main/java/github/kasuminova/novaeng/NovaEngCoreConfig.java @@ -65,7 +65,7 @@ public static class Performance { @Config.Comment("Avoid replaying MMCE comparator notifications for an already committed mutation.") public boolean coalesceMmceNotifications = true; @Config.RequiresMcRestart - @Config.Comment("Reuse supported AE interface insertion preparation within an MMCE output operation.") + @Config.Comment("Let an MMCE item output bus insert its products straight into the ME network of a target that exposes AE2 grid storage but no item handler of its own. The AE item key of each stack is reused for the rest of that output operation.") public boolean batchAe2Outputs = true; @Config.RequiresMcRestart @Config.Comment("Release oversized idle VintageFix scratch after two low-use 64-task windows. Actinium mesh scratch is controlled in actinium-options.json.") @@ -461,11 +461,6 @@ public static class Server { @Config.Comment("Walk the known structure starts of a map generator from a cached array instead of probing its open hash map on every position query.") public boolean optimizeStructureLookup = true; - @Config.RequiresMcRestart - @Config.Name("OptimizeAe2ItemListCapacity") - @Config.Comment("Start an AE2 item list with the capacity of the largest list seen so far instead of growing it from the default capacity, which removes a chain of rehashes from every item list built for a crafting job.") - public boolean optimizeAe2ItemListCapacity = true; - @Config.RequiresMcRestart @Config.Name("OptimizeBiomeIdLookup") @Config.Comment("Resolve a biome from a copied id table. A registry keeps its ids in a Guava HashBiMap, so asking it for a biome by id boxes the id and walks a hash bucket, and Forge's wrapper never fills the vanilla array that would answer that in one step; a world generator asks for a biome by id for every chunk it decorates. The table is dropped whenever the registry rewrites its id mapping, including the renumbering done when a world is loaded. Applies on both sides.") diff --git a/src/main/java/github/kasuminova/novaeng/NovaEngineeringCore.java b/src/main/java/github/kasuminova/novaeng/NovaEngineeringCore.java index bae4ed86..1fe83d94 100644 --- a/src/main/java/github/kasuminova/novaeng/NovaEngineeringCore.java +++ b/src/main/java/github/kasuminova/novaeng/NovaEngineeringCore.java @@ -54,7 +54,7 @@ @Mod(modid = Tags.MOD_ID, name = Tags.MOD_NAME, version = Tags.VERSION, dependencies = "required-after:modularmachinery@[2.3.0,);" + "required-after:theoneprobe;" + - "required-after:ae2@[1.0.14,);" + + "required-after:ae2@[1.0.17,);" + "required-after-client:lumenized@[1.0.2,);" + "after:astralsorcery" , diff --git a/src/main/java/github/kasuminova/novaeng/common/integration/ae2/AeNetworkItemHandler.java b/src/main/java/github/kasuminova/novaeng/common/integration/ae2/AeNetworkItemHandler.java new file mode 100644 index 00000000..34fd6217 --- /dev/null +++ b/src/main/java/github/kasuminova/novaeng/common/integration/ae2/AeNetworkItemHandler.java @@ -0,0 +1,96 @@ +package github.kasuminova.novaeng.common.integration.ae2; + +import ae2.api.config.Actionable; +import ae2.api.networking.security.IActionSource; +import ae2.api.stacks.AEItemKey; +import ae2.api.storage.MEStorage; +import github.kasuminova.novaeng.common.performance.PerformanceMetrics; +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.IItemHandler; +import org.jetbrains.annotations.NotNull; + +import java.util.Objects; + +public final class AeNetworkItemHandler implements IItemHandler { + + private static final int SLOTS = 1; + private static final int SLOT_LIMIT = 64; + + private final MEStorage storage; + private final IActionSource source; + private ItemStack lastDefinition; + private AEItemKey lastKey; + + public AeNetworkItemHandler(final MEStorage storage, final IActionSource source) { + this.storage = Objects.requireNonNull(storage, "storage"); + this.source = Objects.requireNonNull(source, "source"); + } + + @Override + public int getSlots() { + return SLOTS; + } + + @Override + public @NotNull ItemStack getStackInSlot(final int slot) { + return ItemStack.EMPTY; + } + + @Override + public @NotNull ItemStack insertItem(final int slot, final @NotNull ItemStack stack, final boolean simulate) { + if (slot != 0 || stack.isEmpty()) { + return stack; + } + + final AEItemKey key = this.keyOf(stack); + if (key == null) { + return stack; + } + + PerformanceMetrics.add(PerformanceMetrics.Counter.AE_OUTPUT_INSERTS, 1); + final long inserted = this.storage.insert(key, stack.getCount(), + simulate ? Actionable.SIMULATE : Actionable.MODULATE, this.source); + if (inserted <= 0) { + return stack; + } + if (inserted >= stack.getCount()) { + return ItemStack.EMPTY; + } + + final ItemStack remainder = stack.copy(); + remainder.setCount(stack.getCount() - (int) inserted); + return remainder; + } + + @Override + public @NotNull ItemStack extractItem(final int slot, final int amount, final boolean simulate) { + return ItemStack.EMPTY; + } + + @Override + public int getSlotLimit(final int slot) { + return SLOT_LIMIT; + } + + @Override + public boolean isItemValid(final int slot, final @NotNull ItemStack stack) { + return slot == 0 && !stack.isEmpty(); + } + + private AEItemKey keyOf(final ItemStack stack) { + final ItemStack last = this.lastDefinition; + if (last != null && ItemStack.areItemsEqual(last, stack) && ItemStack.areItemStackTagsEqual(last, stack)) { + return this.lastKey; + } + + final AEItemKey key = AEItemKey.of(stack); + if (key != null) { + final ItemStack definition = stack.copy(); + definition.setCount(1); + this.lastDefinition = definition; + this.lastKey = key; + } + return key; + } + +} diff --git a/src/main/java/github/kasuminova/novaeng/common/performance/AeOutputPreparation.java b/src/main/java/github/kasuminova/novaeng/common/performance/AeOutputPreparation.java deleted file mode 100644 index 858d2526..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/performance/AeOutputPreparation.java +++ /dev/null @@ -1,51 +0,0 @@ -package github.kasuminova.novaeng.common.performance; - -import appeng.util.item.AEItemStack; -import net.minecraft.item.ItemStack; - -import java.util.Objects; - -/** Reuses item conversion only. Network, permission, slot and notification code still runs for each insert. */ -public final class AeOutputPreparation { - private static final ThreadLocal> SCOPES = new ThreadLocal<>(); - - private AeOutputPreparation() { - } - - public static void enter() { - OperationCache cache = SCOPES.get(); - if (cache == null) { - cache = new OperationCache<>(); - SCOPES.set(cache); - } - cache.enter(); - } - - public static void leave() { - SCOPES.get().leave(); - } - - public static AEItemStack convert(final ItemStack stack) { - PerformanceMetrics.add(PerformanceMetrics.Counter.AE_OUTPUT_INSERTS, 1); - final OperationCache cache = SCOPES.get(); - if (cache == null || !cache.active() || stack.isEmpty()) { - return AEItemStack.fromItemStack(stack); - } - AEItemStack template = cache.get(stack); - if (template != null) { - final ItemStack definition = template.getDefinition(); - if (!ItemStack.areItemsEqual(definition, stack) || !ItemStack.areItemStackTagsEqual(definition, stack) - || !definition.areCapsCompatible(stack)) { - template = null; - } - } - if (template == null) { - template = AEItemStack.fromItemStack(stack); - cache.put(stack, template); - } - // injectItems may mutate its input. The cached canonical definition never escapes. - final AEItemStack converted = (AEItemStack) Objects.requireNonNull(template).copy(); - converted.setStackSize(stack.getCount()); - return converted; - } -} diff --git a/src/main/java/github/kasuminova/novaeng/common/performance/AeOutputTarget.java b/src/main/java/github/kasuminova/novaeng/common/performance/AeOutputTarget.java deleted file mode 100644 index f33d2212..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/performance/AeOutputTarget.java +++ /dev/null @@ -1,5 +0,0 @@ -package github.kasuminova.novaeng.common.performance; - -/** Marker for the supported direct-to-network AE item handler; arbitrary handlers remain unchanged. */ -public interface AeOutputTarget { -} diff --git a/src/main/java/github/kasuminova/novaeng/common/performance/OperationCache.java b/src/main/java/github/kasuminova/novaeng/common/performance/OperationCache.java deleted file mode 100644 index 977c5727..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/performance/OperationCache.java +++ /dev/null @@ -1,40 +0,0 @@ -package github.kasuminova.novaeng.common.performance; - -import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap; - -/** Owner-thread reusable frames; nested callbacks cannot read another operation's preparation. */ -public final class OperationCache { - private final ObjectArrayList> frames = new ObjectArrayList<>(); - private int depth; - - public void enter() { - if (depth == frames.size()) { - frames.add(new Reference2ObjectOpenHashMap<>()); - } - depth++; - } - - public void leave() { - if (depth == 0) { - throw new IllegalStateException("Unbalanced operation scope"); - } - frames.get(--depth).clear(); - } - - public boolean active() { return depth != 0; } - - public V get(final K key) { - return depth == 0 ? null : frames.get(depth - 1).get(key); - } - - public void put(final K key, final V value) { - if (depth == 0) { - throw new IllegalStateException("No active operation"); - } - final Reference2ObjectOpenHashMap frame = frames.get(depth - 1); - if (frame.size() < 512 || frame.containsKey(key)) { - frame.put(key, value); - } - } -} diff --git a/src/main/java/github/kasuminova/novaeng/common/util/MixinDecisions.java b/src/main/java/github/kasuminova/novaeng/common/util/MixinDecisions.java index d039080a..1e596217 100644 --- a/src/main/java/github/kasuminova/novaeng/common/util/MixinDecisions.java +++ b/src/main/java/github/kasuminova/novaeng/common/util/MixinDecisions.java @@ -5,7 +5,7 @@ public final class MixinDecisions { - public static final boolean ae2Loaded = isPresent("appliedenergistics2"); + public static final boolean ae2Loaded = isPresent("ae2"); public static final boolean alfheimLoaded = isPresent("alfheim"); public static final boolean actiniumLoaded = isPresent("actinium"); public static final boolean arLoaded = isPresent("advancedrocketry"); @@ -69,7 +69,7 @@ public static boolean recipeContextPoolEnabled() { return mmceLoaded && NovaEngCoreConfig.PERFORMANCE.boundedRecipeContexts; } - public static boolean aeOutputPreparationEnabled() { + public static boolean aeOutputInsertionEnabled() { return mmceLoaded && ae2Loaded && NovaEngCoreConfig.PERFORMANCE.batchAe2Outputs; } @@ -143,8 +143,7 @@ private static boolean isOptimizationEnabled(final String mixinName) { "actinium.MixinBuildOutputBudgetRelease", "actinium.MixinSortOutputBudgetRelease", "actinium.MixinRenderSectionMemoryBudget" -> NovaEngCoreConfig.PERFORMANCE.chunkBuildMemoryBudget; - case "mmce.InvokerItemOutputBus", "mmce.MixinItemOutputPreparation", - "ae2.MixinNetworkInventoryOutputPreparation" -> aeOutputPreparationEnabled(); + case "mmce.MixinItemOutputBusNetworkTarget" -> aeOutputInsertionEnabled(); case "mmce.MixinTileNotificationGeneration", "mmce.MixinTaskExecutorNotifications" -> NovaEngCoreConfig.PERFORMANCE.coalesceMmceNotifications; case "minecraft.MixinClassInheritanceMultiMapLazy" -> NovaEngCoreConfig.PERFORMANCE.lazyEntityClassIndexes; @@ -265,7 +264,6 @@ private static boolean isOptimizationEnabled(final String mixinName) { case "minecraft.MixinMapGenStructure" -> NovaEngCoreConfig.SERVER.optimizeStructureLookup; case "minecraft.MixinBiome", "minecraft.forge.MixinForgeRegistry" -> NovaEngCoreConfig.SERVER.optimizeBiomeIdLookup; - case "ae2.MixinItemListCapacity" -> NovaEngCoreConfig.SERVER.optimizeAe2ItemListCapacity; case "universaltweaks.MixinUTEntityDesync" -> NovaEngCoreConfig.SERVER.optimizeUniversalTweaksEntityBlacklist; default -> true; }; diff --git a/src/main/java/github/kasuminova/novaeng/common/util/VintageRendererAccess.java b/src/main/java/github/kasuminova/novaeng/common/util/VintageRendererAccess.java index 1448d027..21153283 100644 --- a/src/main/java/github/kasuminova/novaeng/common/util/VintageRendererAccess.java +++ b/src/main/java/github/kasuminova/novaeng/common/util/VintageRendererAccess.java @@ -77,4 +77,4 @@ private static VarHandle find(final String name) { + " on Actinium's vintage build context", e); } } -} \ No newline at end of file +} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinNetworkInventoryOutputPreparation.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinNetworkInventoryOutputPreparation.java deleted file mode 100644 index e69de29b..00000000 diff --git a/src/main/java/github/kasuminova/novaeng/mixin/mmce/InvokerItemOutputBus.java b/src/main/java/github/kasuminova/novaeng/mixin/mmce/InvokerItemOutputBus.java deleted file mode 100644 index e6014302..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/mmce/InvokerItemOutputBus.java +++ /dev/null @@ -1,12 +0,0 @@ -package github.kasuminova.novaeng.mixin.mmce; - -import hellfirepvp.modularmachinery.common.tiles.TileItemOutputBus; -import net.minecraftforge.items.IItemHandler; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Invoker; - -@Mixin(value = TileItemOutputBus.class, remap = false) -public interface InvokerItemOutputBus { - @Invoker("outputToExternal") - void nova$invokeOutput(IItemHandler external); -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinItemOutputBusNetworkTarget.java b/src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinItemOutputBusNetworkTarget.java new file mode 100644 index 00000000..cf88c1ad --- /dev/null +++ b/src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinItemOutputBusNetworkTarget.java @@ -0,0 +1,36 @@ +package github.kasuminova.novaeng.mixin.mmce; + +import ae2.api.AECapabilities; +import ae2.api.networking.security.IActionSource; +import ae2.api.storage.MEStorage; +import github.kasuminova.novaeng.common.integration.ae2.AeNetworkItemHandler; +import hellfirepvp.modularmachinery.common.tiles.TileItemOutputBus; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.items.CapabilityItemHandler; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(value = TileItemOutputBus.class, remap = false) +public abstract class MixinItemOutputBusNetworkTarget { + + @Redirect(method = "doRestrictedTick", at = @At(value = "INVOKE", + target = "Lnet/minecraft/tileentity/TileEntity;getCapability(Lnet/minecraftforge/common/capabilities/Capability;Lnet/minecraft/util/EnumFacing;)Ljava/lang/Object;", + remap = false), require = 1) + private Object nova$resolveNetworkTarget(final TileEntity target, final Capability capability, + final EnumFacing side) { + final Object resolved = target.getCapability(capability, side); + if (resolved != null || capability != CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return resolved; + } + if (AECapabilities.ME_STORAGE == null) { + return null; + } + + final MEStorage storage = target.getCapability(AECapabilities.ME_STORAGE, side); + return storage == null ? null : new AeNetworkItemHandler(storage, IActionSource.empty()); + } + +} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinItemOutputPreparation.java b/src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinItemOutputPreparation.java deleted file mode 100644 index 9dac8a8f..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/mmce/MixinItemOutputPreparation.java +++ /dev/null @@ -1,27 +0,0 @@ -package github.kasuminova.novaeng.mixin.mmce; - -import github.kasuminova.novaeng.common.performance.AeOutputPreparation; -import github.kasuminova.novaeng.common.performance.AeOutputTarget; -import hellfirepvp.modularmachinery.common.tiles.TileItemOutputBus; -import net.minecraftforge.items.IItemHandler; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(value = TileItemOutputBus.class, remap = false) -public abstract class MixinItemOutputPreparation { - @Redirect(method = "doRestrictedTick", at = @At(value = "INVOKE", - target = "Lhellfirepvp/modularmachinery/common/tiles/TileItemOutputBus;outputToExternal(Lnet/minecraftforge/items/IItemHandler;)V"), require = 1) - private void nova$prepareSupportedOutput(final TileItemOutputBus bus, final IItemHandler external) { - if (!(external instanceof AeOutputTarget)) { - ((InvokerItemOutputBus) bus).nova$invokeOutput(external); - return; - } - AeOutputPreparation.enter(); - try { - ((InvokerItemOutputBus) bus).nova$invokeOutput(external); - } finally { - AeOutputPreparation.leave(); - } - } -} diff --git a/src/main/resources/novaeng_core.mixin.json b/src/main/resources/novaeng_core.mixin.json index fd52e1f6..c95585aa 100644 --- a/src/main/resources/novaeng_core.mixin.json +++ b/src/main/resources/novaeng_core.mixin.json @@ -108,17 +108,15 @@ "minecraft.forge.MixinNetworkDispatcherBandwidth", "minecraft.forge.MixinSimpleIndexedCodec", "mmce.AccessorAbstractMachine", - "mmce.InvokerItemOutputBus", "mmce.MixinBlockArrayCache", "mmce.MixinBlockArrayPreviewRenderHelper", "mmce.MixinBlockArrayRenderHelper", "mmce.MixinBlockInformation", "mmce.MixinCommonProxy", "mmce.MixinDynamicMachineRenderContext", - "mmce.MixinItemOutputPreparation", + "mmce.MixinItemOutputBusNetworkTarget", "mmce.MixinMachineRecipe", "mmce.MixinMachineRegistry", - "mmce.MixinMEPatternProvider", "mmce.MixinRecipeAdapterBuilder", "mmce.MixinRecipeCraftingContextMemory", "mmce.MixinRecipeCraftingContextPool", From 0a64c29046fb5f773a437cd17ec073517c3dfe40 Mon Sep 17 00:00:00 2001 From: vcwdfca <2168409010@qq.com> Date: Tue, 3 Nov 2026 23:48:12 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=8E=E4=B8=8A?= =?UTF-8?q?=E6=B8=B8=E5=90=88=E5=B9=B6=E9=81=97=E7=95=99=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 完成 kt→java 合并:删除残留的 Kotlin 源文件,把分支侧的 AE2 Supergiant(ae2.*)迁移移植进上游的 Java 实现 - 恢复分支删除的自动合成子系统(AutoCraftingQueue/ContainerNEWCraftConfirm/GuiNEWCraftConfirm/PktAutoCraftConfirm/EmptyQueue),改用原版 AE2 的 ContainerCraftConfirm - 删除依赖旧版 AE2 内部实现的混入(流星罗盘、元数据命名、SpawnData)及相关测试 - 删除已被移除的 AE2 附属模组(ae2ctl/betterp2p/MekanismEnergistics/NotEnoughEnergistics/threng)对应的 enumcache 混入并清理注册表 - 修复 EFabricatorWorker 中 Math.clamp 在能量不足时抛 IllegalArgumentException 的问题 - 修复 ItemMachineAssemblyTool 建造高度判断条件写反的问题 - 去掉重复的依赖声明,使 advanced-rocketry/modular-routers 的 access transformer 生效 - 还原 build.gradle 的 mod_version 推导(本地临时硬编码不应提交) --- gradle/scripts/dependencies.gradle | 8 +- lib/appcompat-0.0.0+ecf0ef8-dev.jar | Bin 610115 -> 0 bytes .../novaeng/NovaEngineeringCore.java | 2 - .../client/gui/GuiNEWCraftConfirm.java | 65 -- .../novaeng/common/CommonProxy.java | 21 +- .../kasuminova/novaeng/common/CommonProxy.kt | 0 .../container/ContainerNEWCraftConfirm.java | 53 -- .../handler/MachineAssemblyHandler.java | 3 - .../handler/WorldCacheCleanupHandler.java | 2 - .../common/item/ItemMachineAssemblyTool.java | 75 ++- .../common/item/ItemMachineAssemblyTool.kt | 370 ----------- .../machine/BiogenicSimulationComputer.java | 2 +- .../machine/BiogenicSimulationComputer.kt | 296 --------- .../common/network/PktAutoCraftConfirm.java | 33 - .../network/PktPatternTermUploadPattern.java | 72 +-- .../network/PktPatternTermUploadPattern.kt | 75 --- .../common/registry/RegistryAssembly.kt | 0 .../efabricator/EFabricatorController.java | 74 +-- .../efabricator/EFabricatorController.kt | 582 ------------------ .../efabricator/EFabricatorMEChannel.java | 247 ++++---- .../efabricator/EFabricatorMEChannel.kt | 189 ------ .../efabricator/EFabricatorPatternBus.java | 135 ++-- .../efabricator/EFabricatorPatternBus.kt | 164 ----- .../efabricator/EFabricatorWorker.java | 37 +- .../ecotech/efabricator/EFabricatorWorker.kt | 442 ------------- .../common/util/AssemblyBlockArray.java | 50 +- .../novaeng/common/util/AssemblyBlockArray.kt | 385 ------------ .../common/util/AutoCraftingQueue.java | 113 ---- .../novaeng/common/util/EmptyQueue.java | 99 --- .../util/NEWMachineAssemblyManager.java | 79 +-- .../common/util/NEWMachineAssemblyManager.kt | 336 ---------- .../MixinBetterMeteoriteCompassMetadata.java | 84 --- .../mixin/ae2/MixinCompassReaderRegions.java | 59 -- .../mixin/ae2/MixinCraftingCPUStatus.java | 0 .../mixin/ae2/MixinMeteorDataNameEncoder.java | 38 -- .../mixin/ae2/MixinSpawnDataInput.java | 20 - .../betterp2p/MixinServerLinkP2PHandler.java | 0 .../enumcache/ae2ctl/MixinBackground.java | 24 - .../mixin/enumcache/ae2ctl/MixinGuiType.java | 24 - .../betterp2p/MixinBetterMemoryCardModes.java | 24 - .../enumcache/betterp2p/MixinGuiScale.java | 24 - .../mixin/enumcache/mekeng/MixinGuiMode.java | 24 - .../mixin/enumcache/mekeng/MixinPT.java | 24 - .../MixinIngredientMergeMode.java | 24 - .../neenergistics/MixinPlayerAction.java | 24 - .../neenergistics/MixinSyncAction.java | 24 - .../mixin/enumcache/threng/MixinBasicIO.java | 24 - .../threng/MixinBlockBigAssemblerType.java | 24 - .../threng/MixinBlockMachineType.java | 24 - .../threng/MixinItemMaterialType.java | 24 - src/main/resources/novaeng_core.mixin.json | 23 +- .../JavaOptimizationBenchmark.java | 43 -- .../performance/JavaOptimizationTest.java | 109 +--- .../performance/JavaSourceMigrationTest.java | 41 -- .../MeteorCompassMetadataTest.java | 357 ----------- .../performance/MeteorDataFilenameTest.java | 54 -- .../PerformanceMixinRegistrationTest.java | 4 - .../PerformanceMixinTestLoader.java | 281 --------- .../PlayerChunkMapSnapshotMixinTest.java | 196 ------ .../performance/PrivateIdMapsMixinTest.java | 186 ------ .../ServerDimensionIdsMixinTest.java | 138 ----- .../performance/WorldgenHotspotScenarios.java | 55 +- .../WorldgenRoundThreeScenarios.java | 37 -- .../WorldgenRoundTwoScenarios.java | 21 - 64 files changed, 392 insertions(+), 5675 deletions(-) delete mode 100644 lib/appcompat-0.0.0+ecf0ef8-dev.jar delete mode 100644 src/main/java/github/kasuminova/novaeng/client/gui/GuiNEWCraftConfirm.java delete mode 100644 src/main/java/github/kasuminova/novaeng/common/CommonProxy.kt delete mode 100644 src/main/java/github/kasuminova/novaeng/common/container/ContainerNEWCraftConfirm.java delete mode 100644 src/main/java/github/kasuminova/novaeng/common/item/ItemMachineAssemblyTool.kt delete mode 100644 src/main/java/github/kasuminova/novaeng/common/machine/BiogenicSimulationComputer.kt delete mode 100644 src/main/java/github/kasuminova/novaeng/common/network/PktAutoCraftConfirm.java delete mode 100644 src/main/java/github/kasuminova/novaeng/common/network/PktPatternTermUploadPattern.kt delete mode 100644 src/main/java/github/kasuminova/novaeng/common/registry/RegistryAssembly.kt delete mode 100644 src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorController.kt delete mode 100644 src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorMEChannel.kt delete mode 100644 src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorPatternBus.kt delete mode 100644 src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorWorker.kt delete mode 100644 src/main/java/github/kasuminova/novaeng/common/util/AssemblyBlockArray.kt delete mode 100644 src/main/java/github/kasuminova/novaeng/common/util/AutoCraftingQueue.java delete mode 100644 src/main/java/github/kasuminova/novaeng/common/util/EmptyQueue.java delete mode 100644 src/main/java/github/kasuminova/novaeng/common/util/NEWMachineAssemblyManager.kt delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinBetterMeteoriteCompassMetadata.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCompassReaderRegions.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCraftingCPUStatus.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinMeteorDataNameEncoder.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinSpawnDataInput.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/betterp2p/MixinServerLinkP2PHandler.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/enumcache/ae2ctl/MixinBackground.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/enumcache/ae2ctl/MixinGuiType.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/enumcache/betterp2p/MixinBetterMemoryCardModes.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/enumcache/betterp2p/MixinGuiScale.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/enumcache/mekeng/MixinGuiMode.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/enumcache/mekeng/MixinPT.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/enumcache/neenergistics/MixinIngredientMergeMode.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/enumcache/neenergistics/MixinPlayerAction.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/enumcache/neenergistics/MixinSyncAction.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/enumcache/threng/MixinBasicIO.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/enumcache/threng/MixinBlockBigAssemblerType.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/enumcache/threng/MixinBlockMachineType.java delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/enumcache/threng/MixinItemMaterialType.java delete mode 100644 src/test/java/github/kasuminova/novaeng/common/performance/MeteorCompassMetadataTest.java delete mode 100644 src/test/java/github/kasuminova/novaeng/common/performance/MeteorDataFilenameTest.java delete mode 100644 src/test/java/github/kasuminova/novaeng/common/performance/PerformanceMixinTestLoader.java delete mode 100644 src/test/java/github/kasuminova/novaeng/common/performance/PlayerChunkMapSnapshotMixinTest.java delete mode 100644 src/test/java/github/kasuminova/novaeng/common/performance/PrivateIdMapsMixinTest.java delete mode 100644 src/test/java/github/kasuminova/novaeng/common/performance/ServerDimensionIdsMixinTest.java diff --git a/gradle/scripts/dependencies.gradle b/gradle/scripts/dependencies.gradle index 05435d83..1bfe3ba6 100644 --- a/gradle/scripts/dependencies.gradle +++ b/gradle/scripts/dependencies.gradle @@ -80,7 +80,6 @@ dependencies { modCompileOnly 'curse.maven:zettai-psi-537428:3662855' modImplementation("curse.maven:circulation-flow-networks-1519385:8699343") modImplementation name: 'ModularMachinery-CE', version: '2.3.3', classifier: 'dev' - modImplementation name: 'appcompat', version: '0.0.0+ecf0ef8', classifier: 'dev' modImplementation 'curse.maven:lumenized-1234162:6734060' modImplementation 'curse.maven:mantle-74924:2713386' modImplementation 'curse.maven:tinkers-construct-74072:2902483' @@ -96,8 +95,9 @@ dependencies { modImplementation 'curse.maven:the-one-probe-245211:2667280' modCompileOnly 'curse.maven:FTB-Library-237167:2985811' modCompileOnly 'curse.maven:FTBU-237102:3157548' - modImplementation 'com.github.FormlessDragon:Applied-Energistics-2-Supergiant:v1.0.17:dev' - modCompileOnly 'com.github.FormlessDragon:Applied-Mekanistics:v1.1.1:dev' + modImplementation 'com.github.FormlessDragon:AppliedCompatibility:v1.0.1:dev' + modImplementation 'com.github.FormlessDragon:Applied-Energistics-2-Supergiant:v1.1.0:dev' + modCompileOnly 'com.github.FormlessDragon:Applied-Mekanistics:v1.2.1:dev' modImplementation 'curse.maven:codechicken-lib-cre-1328922:6898525' modImplementation 'curse.maven:wanionlib-253043:4623135' modCompileOnly 'curse.maven:avaritia-1-1x-unofficial-1165010:7939693' @@ -145,9 +145,7 @@ dependencies { modCompileOnly 'curse.maven:guide-api-228832:2645992' modCompileOnly 'curse.maven:patchouli-306770:3162874' modCompileOnly 'curse.maven:libvulpes-236541:3801015' - modCompileOnly 'curse.maven:advanced-rocketry-236542:4671856' modCompileOnly 'curse.maven:random-complement-1198138:8828633' - modCompileOnly 'curse.maven:modular-routers-250294:2954953' modCompileOnly 'curse.maven:actually-additions-228404:3117927' modImplementation 'curse.maven:brandons-core-231382:3408276' modImplementation('curse.maven:draconic-evolution-223565:3431261') { diff --git a/lib/appcompat-0.0.0+ecf0ef8-dev.jar b/lib/appcompat-0.0.0+ecf0ef8-dev.jar deleted file mode 100644 index 4f457f5f23f7fd6b6bb92d3c9de3191debbab2a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610115 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

&h548znmzkF#XA@#%6jLuV5bJqAZ#CUUG2 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ʰ%aA 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

#rBdd&4uysCMUuVpG+ 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

R3ZpVL;M{>>F@-sz*txp2Btxb_!nT=tDblCu$w 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 Bb4&mL diff --git a/src/main/java/github/kasuminova/novaeng/NovaEngineeringCore.java b/src/main/java/github/kasuminova/novaeng/NovaEngineeringCore.java index 8438a831..a92921d2 100644 --- a/src/main/java/github/kasuminova/novaeng/NovaEngineeringCore.java +++ b/src/main/java/github/kasuminova/novaeng/NovaEngineeringCore.java @@ -32,7 +32,6 @@ import github.kasuminova.novaeng.common.network.packetprofiler.PktCProfilerRequest; import github.kasuminova.novaeng.common.performance.RecipeContextPool; import github.kasuminova.novaeng.common.profiler.SPacketProfiler; -import github.kasuminova.novaeng.common.util.AutoCraftingQueue; import github.kasuminova.novaeng.common.util.MixinDecisions; import github.kasuminova.novaeng.common.util.NovaBiomeIdCache; import github.kasuminova.novaeng.novaeng_core.Tags; @@ -178,7 +177,6 @@ public void onServerStopping(FMLServerStoppingEvent event) { // that outlived its world's unload would keep that world - and every chunk and // entity in it - for the rest of the process. Nothing survives a server stop. HyperNetCaches.clear(); - AutoCraftingQueue.clearAll(); if (Mods.BM2.isPresent()) { MMAltar.clearCache(); } diff --git a/src/main/java/github/kasuminova/novaeng/client/gui/GuiNEWCraftConfirm.java b/src/main/java/github/kasuminova/novaeng/client/gui/GuiNEWCraftConfirm.java deleted file mode 100644 index 8cd29e8d..00000000 --- a/src/main/java/github/kasuminova/novaeng/client/gui/GuiNEWCraftConfirm.java +++ /dev/null @@ -1,65 +0,0 @@ -package github.kasuminova.novaeng.client.gui; - -import appeng.client.gui.implementations.GuiCraftConfirm; -import appeng.helpers.WirelessTerminalGuiObject; -import github.kasuminova.novaeng.NovaEngineeringCore; -import github.kasuminova.novaeng.client.util.RCGuiCraftConfirm; -import github.kasuminova.novaeng.common.network.PktAutoCraftConfirm; -import github.kasuminova.novaeng.mixin.ae2.AccessorGuiCraftConfirm; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.entity.player.InventoryPlayer; - -import java.io.IOException; - -public class GuiNEWCraftConfirm extends GuiCraftConfirm implements RCGuiCraftConfirm { - private final AccessorGuiCraftConfirm utils = (AccessorGuiCraftConfirm) this; - private GuiButton cancel; - private GuiButton start; - - public GuiNEWCraftConfirm(final InventoryPlayer inventory, final WirelessTerminalGuiObject terminal) { - super(inventory, terminal); - } - - public GuiButton getCancel() { - return this.cancel; - } - - public void setCancel(final GuiButton cancel) { - this.cancel = cancel; - } - - public GuiButton getStart() { - return this.start; - } - - public void setStart(final GuiButton start) { - this.start = start; - } - - public AccessorGuiCraftConfirm getUtils() { - return this.utils; - } - - @Override - public void initGui() { - super.initGui(); - this.cancel = this.utils.getCancel(); - this.start = this.utils.getStart(); - } - - @Override - protected void actionPerformed(final GuiButton button) throws IOException { - if (button == this.cancel) { - if (isShiftKeyDown()) { - this.rc$addMissBookmark(); - } - NovaEngineeringCore.NET_CHANNEL.sendToServer(new PktAutoCraftConfirm()); - this.mc.player.closeScreenAndDropStack(); - return; - } - super.actionPerformed(button); - if (button == this.start) { - this.mc.player.closeScreenAndDropStack(); - } - } -} diff --git a/src/main/java/github/kasuminova/novaeng/common/CommonProxy.java b/src/main/java/github/kasuminova/novaeng/common/CommonProxy.java index 34a68d7b..59a91736 100644 --- a/src/main/java/github/kasuminova/novaeng/common/CommonProxy.java +++ b/src/main/java/github/kasuminova/novaeng/common/CommonProxy.java @@ -1,9 +1,5 @@ package github.kasuminova.novaeng.common; -import appeng.api.AEApi; -import baubles.api.BaublesApi; -import com.circulation.random_complement.common.util.MEHandler; -import github.kasuminova.mmce.common.integration.ModIntegrationAE2; import github.kasuminova.novaeng.NovaEngCoreConfig; import github.kasuminova.novaeng.common.adapter.RecipeAdapterExtended; import github.kasuminova.novaeng.common.container.ContainerECalculatorController; @@ -14,10 +10,8 @@ import github.kasuminova.novaeng.common.container.ContainerGeocentricDrill; import github.kasuminova.novaeng.common.container.ContainerHyperNetTerminal; import github.kasuminova.novaeng.common.container.ContainerModularServerAssembler; -import github.kasuminova.novaeng.common.container.ContainerNEWCraftConfirm; import github.kasuminova.novaeng.common.container.ContainerSingularityCore; import github.kasuminova.novaeng.common.enchantment.MagicBreaking; -import github.kasuminova.novaeng.common.estorage.EStorageCellHandler; import github.kasuminova.novaeng.common.handler.ECalculatorEventHandler; import github.kasuminova.novaeng.common.handler.EFabricatorEventHandler; import github.kasuminova.novaeng.common.handler.EStorageEventHandler; @@ -67,7 +61,6 @@ import github.kasuminova.novaeng.common.trait.Register; import github.kasuminova.novaeng.common.util.MachineCoolants; import github.kasuminova.novaeng.common.util.MixinDecisions; -import github.kasuminova.novaeng.mixin.ae2.AccessorCellRegistry; import github.kasuminova.novaeng.novaeng_core.Tags; import hellfirepvp.modularmachinery.ModularMachinery; import hellfirepvp.modularmachinery.common.base.Mods; @@ -92,7 +85,7 @@ public CommonProxy() { } private static boolean hasDeniedAccess(final EFabricatorController controller, final EntityPlayer player) { - return controller != null && controller.getChannel() != null && ModIntegrationAE2.securityCheck(player, controller.getChannel().getProxy()); + return controller != null && controller.getChannel() != null && !controller.getChannel().getMainNode().isActive(); } public void setColor(final String ore, final int color) { @@ -169,9 +162,6 @@ public void init() { RegistryMachineSpecial.registrySpecialMachine(SmallOreDrill.INSTANCE); } } - if (Mods.AE2.isPresent()) { - ((AccessorCellRegistry) AEApi.instance().registries().cell()).getHandlers().addFirst(EStorageCellHandler.INSTANCE); - } Register.INSTANCE.registerModifiers(); } @@ -219,14 +209,9 @@ public Object getServerGuiElement(final int id, final EntityPlayer player, final new ContainerGeocentricDrill((GeocentricDrillController) present, player); case ECALCULATOR_CONTROLLER -> { final var controller = (ECalculatorController) present; - yield controller != null && controller.getChannel() != null && ModIntegrationAE2.securityCheck(player, controller.getChannel().getProxy()) + yield controller != null && controller.getChannel() != null && !controller.getChannel().getMainNode().isActive() ? null : new ContainerECalculatorController(controller, player); } - case AUTO_CRAFTGUI -> { - final var stack = y == 1 ? BaublesApi.getBaublesHandler(player).getStackInSlot(x) : player.inventory.getStackInSlot(x); - final var terminal = MEHandler.getTerminalGuiObject(stack, player, x, y); - yield terminal == null ? null : new ContainerNEWCraftConfirm(player.inventory, terminal); - } case MACHINE_ASSEMBLY_TOOL -> null; }; } @@ -241,7 +226,7 @@ public enum GuiType { ESTORAGE_CONTROLLER(EStorageController.class), SINGULARITY_CORE(github.kasuminova.novaeng.common.tile.machine.SingularityCore.class), EFABRICATOR_CONTROLLER(EFabricatorController.class), EFABRICATOR_PATTERN_SEARCH(EFabricatorController.class), EFABRICATOR_PATTERN_BUS(EFabricatorPatternBus.class), GEOCENTRIC_DRILL_CONTROLLER(GeocentricDrillController.class), - ECALCULATOR_CONTROLLER(ECalculatorController.class), AUTO_CRAFTGUI(null), MACHINE_ASSEMBLY_TOOL(null); + ECALCULATOR_CONTROLLER(ECalculatorController.class), MACHINE_ASSEMBLY_TOOL(null); public static final GuiType[] VALUES = values(); public final Class requiredTileEntity; diff --git a/src/main/java/github/kasuminova/novaeng/common/CommonProxy.kt b/src/main/java/github/kasuminova/novaeng/common/CommonProxy.kt deleted file mode 100644 index e69de29b..00000000 diff --git a/src/main/java/github/kasuminova/novaeng/common/container/ContainerNEWCraftConfirm.java b/src/main/java/github/kasuminova/novaeng/common/container/ContainerNEWCraftConfirm.java deleted file mode 100644 index 98e51138..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/container/ContainerNEWCraftConfirm.java +++ /dev/null @@ -1,53 +0,0 @@ -package github.kasuminova.novaeng.common.container; - -import appeng.api.networking.crafting.ICraftingCPU; -import appeng.api.networking.crafting.ICraftingGrid; -import appeng.api.networking.security.IActionHost; -import appeng.container.implementations.ContainerCraftConfirm; -import appeng.helpers.WirelessTerminalGuiObject; -import appeng.me.helpers.PlayerSource; -import github.kasuminova.novaeng.common.util.AutoCraftingQueue; -import github.kasuminova.novaeng.mixin.ae2.AccessorContainerCraftConfirm; -import github.kasuminova.novaeng.mixin.ae2.AccessorCraftingCPURecord; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.entity.player.InventoryPlayer; - -public class ContainerNEWCraftConfirm extends ContainerCraftConfirm { - - public ContainerNEWCraftConfirm(final InventoryPlayer inventory, final WirelessTerminalGuiObject terminal) { - super(inventory, terminal); - } - - @Override - public boolean canInteractWith(final EntityPlayer player) { - return true; - } - - @Override - public void startJob() { - if (!((Object) this instanceof AccessorContainerCraftConfirm accessor)) { - return; - } - if (this.getTarget() instanceof IActionHost host && host.getActionableNode() != null) { - final var grid = host.getActionableNode().getGrid(); - if (grid != null && accessor.getResult() != null && !this.isSimulation()) { - final ICraftingGrid crafting = grid.getCache(ICraftingGrid.class); - ICraftingCPU cpu = null; - if (this.getSelectedCpu() != -1) { - final Object record = accessor.getCpus().get(this.getSelectedCpu()); - if (record instanceof AccessorCraftingCPURecord recordAccessor) { - cpu = recordAccessor.getCpu(); - } - } - crafting.submitJob(accessor.getResult(), null, cpu, true, - new PlayerSource(this.getPlayerInv().player, host)); - } - } - final EntityPlayerMP player = (EntityPlayerMP) this.getPlayerInv().player; - final AutoCraftingQueue queue = AutoCraftingQueue.getQueue(player); - if (queue != null && !queue.executionQueue(player)) { - player.closeContainer(); - } - } -} diff --git a/src/main/java/github/kasuminova/novaeng/common/handler/MachineAssemblyHandler.java b/src/main/java/github/kasuminova/novaeng/common/handler/MachineAssemblyHandler.java index fb180e56..39127990 100644 --- a/src/main/java/github/kasuminova/novaeng/common/handler/MachineAssemblyHandler.java +++ b/src/main/java/github/kasuminova/novaeng/common/handler/MachineAssemblyHandler.java @@ -3,7 +3,6 @@ import github.kasuminova.novaeng.NovaEngCoreConfig; import github.kasuminova.novaeng.client.util.NEWBlockArrayPreviewRenderHelper; import github.kasuminova.novaeng.common.item.ItemMachineAssemblyTool; -import github.kasuminova.novaeng.common.util.AutoCraftingQueue; import github.kasuminova.novaeng.common.util.NEWMachineAssemblyManager; import hellfirepvp.modularmachinery.client.ClientScheduler; import hellfirepvp.modularmachinery.client.util.DynamicMachineRenderContext; @@ -129,13 +128,11 @@ public void onPlayerTick(final TickEvent.PlayerTickEvent event) { @SubscribeEvent public void onPlayerLogOut(final PlayerEvent.PlayerLoggedOutEvent event) { - AutoCraftingQueue.removeQueue(event.player); NEWMachineAssemblyManager.removeMachineAssembly(event.player); } @SubscribeEvent public void onPlayerChangeDim(final PlayerEvent.PlayerChangedDimensionEvent event) { - AutoCraftingQueue.removeQueue(event.player); NEWMachineAssemblyManager.removeMachineAssembly(event.player); } } diff --git a/src/main/java/github/kasuminova/novaeng/common/handler/WorldCacheCleanupHandler.java b/src/main/java/github/kasuminova/novaeng/common/handler/WorldCacheCleanupHandler.java index 647251fd..ec20958d 100644 --- a/src/main/java/github/kasuminova/novaeng/common/handler/WorldCacheCleanupHandler.java +++ b/src/main/java/github/kasuminova/novaeng/common/handler/WorldCacheCleanupHandler.java @@ -3,7 +3,6 @@ import github.kasuminova.novaeng.common.hypernet.old.HyperNetCaches; import github.kasuminova.novaeng.common.machine.DreamEnergyCore; import github.kasuminova.novaeng.common.machine.MMAltar; -import github.kasuminova.novaeng.common.util.AutoCraftingQueue; import hellfirepvp.modularmachinery.common.base.Mods; import net.minecraft.world.World; import net.minecraftforge.event.world.WorldEvent; @@ -38,7 +37,6 @@ public void onWorldUnload(final WorldEvent.Unload event) { } HyperNetCaches.removeWorld(world); DreamEnergyCore.removeWorld(world); - AutoCraftingQueue.removeWorld(world); if (Mods.BM2.isPresent()) { MMAltar.removeWorld(world); } diff --git a/src/main/java/github/kasuminova/novaeng/common/item/ItemMachineAssemblyTool.java b/src/main/java/github/kasuminova/novaeng/common/item/ItemMachineAssemblyTool.java index c4e62491..bad3feb2 100644 --- a/src/main/java/github/kasuminova/novaeng/common/item/ItemMachineAssemblyTool.java +++ b/src/main/java/github/kasuminova/novaeng/common/item/ItemMachineAssemblyTool.java @@ -1,20 +1,22 @@ package github.kasuminova.novaeng.common.item; -import appeng.api.networking.crafting.ICraftingGrid; -import appeng.util.item.AEItemStack; +import ae2.api.stacks.AEItemKey; +import ae2.container.implementations.ContainerCraftConfirm; +import ae2.container.interfaces.ICraftingGridContainer; +import ae2.core.gui.locator.GuiHostLocator; +import ae2.core.gui.locator.GuiHostLocators; +import ae2.helpers.WirelessTerminalGuiHost; +import baubles.api.BaublesApi; import com.brandon3055.draconicevolution.api.itemconfig.BooleanConfigField; import com.brandon3055.draconicevolution.api.itemconfig.IConfigurableItem; import com.brandon3055.draconicevolution.api.itemconfig.IItemConfigField; import com.brandon3055.draconicevolution.api.itemconfig.IntegerConfigField; import com.brandon3055.draconicevolution.api.itemconfig.ItemConfigFieldRegistry; import com.brandon3055.draconicevolution.api.itemconfig.ToolConfigHelper; -import com.circulation.random_complement.common.interfaces.RCCraftingGridCache; -import com.circulation.random_complement.common.util.MEHandler; import github.kasuminova.mmce.common.util.DynamicPattern; import github.kasuminova.novaeng.NovaEngineeringCore; import github.kasuminova.novaeng.common.CommonProxy; import github.kasuminova.novaeng.common.util.AssemblyBlockArray; -import github.kasuminova.novaeng.common.util.AutoCraftingQueue; import github.kasuminova.novaeng.common.util.NEWMachineAssemblyManager; import hellfirepvp.modularmachinery.common.block.BlockController; import hellfirepvp.modularmachinery.common.machine.DynamicMachine; @@ -22,9 +24,11 @@ import hellfirepvp.modularmachinery.common.tiles.base.TileMultiblockMachineController; import hellfirepvp.modularmachinery.common.util.BlockArrayCache; import ink.ikx.mmce.common.utils.StructureIngredient; +import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; @@ -34,12 +38,12 @@ import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.util.text.translation.I18n; import net.minecraft.world.World; +import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import org.jspecify.annotations.NonNull; import javax.annotation.Nullable; -import java.util.ArrayDeque; import java.util.List; @SuppressWarnings("deprecation") @@ -193,7 +197,7 @@ public BooleanConfigField getNeedAllIngredientConfig() { } final var ingredients = StructureIngredient.of(player.world, pos, array.copy()); array = array.offset(pos); - if (!world.isOutsideBuildHeight(array.getMin()) || !world.isOutsideBuildHeight(array.getMax())) { + if (array.getMin().getY() < 0 || array.getMax().getY() > 255) { player.sendMessage(new TextComponentTranslation("message.assembly.tip.too_high", "y = " + (array.getMin().getY() < 1 ? array.getMin().getY() : array.getMax().getY()))); return EnumActionResult.FAIL; @@ -202,22 +206,34 @@ public BooleanConfigField getNeedAllIngredientConfig() { final boolean autoCraft = usingAE && isAutoAECrafting(stack); final var missing = NEWMachineAssemblyManager.checkAllItems(player, ingredients, usingAE, autoCraft); final var requests = missing.list(); - if (autoCraft && !requests.isEmpty()) { - final var terminal = MEHandler.getTerminalGuiObject(player); - if (terminal != null && terminal.getActionableNode() != null && terminal.getActionableNode().getGrid() != null) { - final var grid = terminal.getActionableNode().getGrid(); - final RCCraftingGridCache crafting = grid.getCache(ICraftingGrid.class); - final var craftable = crafting.rc$getCraftableItems(); - final var queue = new ArrayDeque(); - for (final var alternatives : requests) { - for (final var item : alternatives) { - if (!item.isEmpty() && craftable.containsKey(AEItemStack.fromItemStack(item))) { - queue.add(item); - break; + if (autoCraft && !requests.isEmpty() && player instanceof EntityPlayerMP serverPlayer) { + final var locator = findWirelessTerminalLocator(player); + final var host = locator == null ? null : locator.locate(player, WirelessTerminalGuiHost.class); + if (locator != null && host != null) { + final var node = host.getActionableNode(); + final var grid = node == null ? null : node.grid(); + if (grid != null) { + final var craftables = grid.getCraftingService().getCraftables(AEItemKey.filter()); + final var toCraft = new ObjectArrayList(); + for (final var stacks : requests) { + for (final var item : stacks) { + if (item.isEmpty()) { + continue; + } + final var key = AEItemKey.of(item); + if (key == null) { + continue; + } + if (craftables.contains(key)) { + toCraft.add(new ICraftingGridContainer.AutoCraftEntry(key, item.getCount(), new IntArrayList())); + break; + } } } + if (!toCraft.isEmpty()) { + ContainerCraftConfirm.openWithCraftingList(host, serverPlayer, locator, toCraft); + } } - AutoCraftingQueue.setQueueAndStrat(queue, player); } } if (requests.isEmpty() || !isNeedAllIngredient(stack)) { @@ -257,6 +273,25 @@ public int getProfileCount(final ItemStack stack) { return 5; } + private static GuiHostLocator findWirelessTerminalLocator(final EntityPlayer player) { + for (int slot = 0; slot < player.inventory.getSizeInventory(); slot++) { + final GuiHostLocator locator = GuiHostLocators.forInventorySlot(slot); + if (locator.locate(player, WirelessTerminalGuiHost.class) != null) { + return locator; + } + } + if (Loader.isModLoaded("baubles")) { + final var handler = BaublesApi.getBaublesHandler(player); + for (int slot = 0; slot < handler.getSlots(); slot++) { + final GuiHostLocator locator = GuiHostLocators.forBaubleSlot(slot); + if (locator.locate(player, WirelessTerminalGuiHost.class) != null) { + return locator; + } + } + } + return null; + } + private static final class Configs { private static final BooleanConfigField USING_AE = new BooleanConfigField("UsingAE", false, description("UsingAE")); private static final BooleanConfigField IGNORE_FLUIDS = new BooleanConfigField("IgnoreFluids", false, description("IgnoreFluids")); diff --git a/src/main/java/github/kasuminova/novaeng/common/item/ItemMachineAssemblyTool.kt b/src/main/java/github/kasuminova/novaeng/common/item/ItemMachineAssemblyTool.kt deleted file mode 100644 index 985f412e..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/item/ItemMachineAssemblyTool.kt +++ /dev/null @@ -1,370 +0,0 @@ -@file:Suppress("DEPRECATION") - -package github.kasuminova.novaeng.common.item - -import ae2.api.stacks.AEItemKey -import ae2.container.implementations.ContainerCraftConfirm -import ae2.container.interfaces.ICraftingGridContainer -import ae2.core.gui.locator.GuiHostLocator -import ae2.core.gui.locator.GuiHostLocators -import ae2.helpers.WirelessTerminalGuiHost -import com.brandon3055.draconicevolution.api.itemconfig.BooleanConfigField -import com.brandon3055.draconicevolution.api.itemconfig.IConfigurableItem -import com.brandon3055.draconicevolution.api.itemconfig.IItemConfigField -import com.brandon3055.draconicevolution.api.itemconfig.IntegerConfigField -import com.brandon3055.draconicevolution.api.itemconfig.ItemConfigFieldRegistry -import com.brandon3055.draconicevolution.api.itemconfig.ToolConfigHelper -import github.kasuminova.novaeng.NovaEngineeringCore -import github.kasuminova.novaeng.common.CommonProxy -import github.kasuminova.novaeng.common.util.AssemblyBlockArray -import github.kasuminova.novaeng.common.util.NEWMachineAssemblyManager -import hellfirepvp.modularmachinery.common.block.BlockController -import hellfirepvp.modularmachinery.common.machine.DynamicMachine -import hellfirepvp.modularmachinery.common.machine.MachineRegistry -import hellfirepvp.modularmachinery.common.tiles.base.TileMultiblockMachineController -import hellfirepvp.modularmachinery.common.util.BlockArrayCache -import ink.ikx.mmce.common.utils.StructureIngredient -import it.unimi.dsi.fastutil.ints.IntArrayList -import it.unimi.dsi.fastutil.objects.ObjectArrayList -import net.minecraft.client.util.ITooltipFlag -import net.minecraft.entity.player.EntityPlayer -import net.minecraft.entity.player.EntityPlayerMP -import net.minecraft.item.ItemStack -import net.minecraft.util.ActionResult -import net.minecraft.util.EnumActionResult -import net.minecraft.util.EnumFacing -import net.minecraft.util.EnumHand -import net.minecraft.util.math.BlockPos -import net.minecraft.util.text.TextComponentTranslation -import net.minecraft.util.text.translation.I18n -import net.minecraft.world.World -import net.minecraftforge.fml.common.Loader -import net.minecraftforge.fml.relauncher.Side -import net.minecraftforge.fml.relauncher.SideOnly -import kotlin.math.max -import kotlin.math.min - -object ItemMachineAssemblyTool : ItemBasic("machine_assembly_tool"), IConfigurableItem { - - override fun onItemRightClick(world: World, player: EntityPlayer, hand: EnumHand): ActionResult { - if (hand != EnumHand.MAIN_HAND || player.isSneaking) return super.onItemRightClick(world, player, hand) - if (world.isRemote) { - player.openGui( - NovaEngineeringCore.instance, - CommonProxy.GuiType.MACHINE_ASSEMBLY_TOOL.ordinal, - world, - 0, - 0, - 0 - ) - } - return ActionResult(EnumActionResult.SUCCESS, player.getHeldItem(hand)) - } - - override fun onItemUse( - player: EntityPlayer, world: World, pos: BlockPos, hand: EnumHand, - facing: EnumFacing, hitX: Float, hitY: Float, hitZ: Float - ): EnumActionResult { - if (hand != EnumHand.MAIN_HAND || world.isRemote) return EnumActionResult.PASS - val tile = world.getTileEntity(pos) - if (tile == null) { - return EnumActionResult.PASS - } else if (player.isSneaking) { - if (!NEWMachineAssemblyManager.checkMachineAssembly(player)) { - var state = world.getBlockState(pos) - val block = state.block - @Suppress("DEPRECATION") - state = block.getActualState(state, world, pos) - val machine: DynamicMachine - val controllerFacing: EnumFacing - if (tile is TileMultiblockMachineController) { - machine = tile.blueprintMachine ?: if (block is BlockController) - block.getParentMachine() - else return EnumActionResult.FAIL - controllerFacing = player.world.getBlockState(pos).getValue(BlockController.FACING) - } else { - val meta = block.getMetaFromState(state) - var m: DynamicMachine? = null - var e: EnumFacing? = null - for (entry in NEWMachineAssemblyManager.getConstructorsIterator()) { - if (entry.key == block && entry.value.containsKey(meta)) { - m = entry.value[meta] - val pf = block.blockState.getProperty("facing") - e = if (pf != null) { - state.getValue(pf) as? EnumFacing ?: facing - } else facing - break - } - } - e = if (e == EnumFacing.UP || e == EnumFacing.DOWN) { - EnumFacing.NORTH - } else e - machine = m ?: return EnumActionResult.FAIL - controllerFacing = e ?: return EnumActionResult.FAIL - } - - val stack = player.getHeldItem(hand) - var array = AssemblyBlockArray( - BlockArrayCache.getBlockArrayCache( - machine.pattern, - controllerFacing - ) - ) - - var dynamicPatternSize = getDynamicPatternSize(stack) - val dynamicPatterns = machine.dynamicPatterns - - for (pattern in dynamicPatterns.values) { - dynamicPatternSize = max(dynamicPatternSize, pattern.minSize) - } - - for (pattern in dynamicPatterns.values) { - pattern.addPatternToBlockArray( - array, - min(max(pattern.minSize, dynamicPatternSize), pattern.maxSize), - pattern.faces.iterator().next(), - controllerFacing - ) - } - - val st = StructureIngredient.of(player.world, pos, array.copy()) - array = array.offset(pos) - if (array.min.y < 0 || array.max.y > 255) { - player.sendMessage( - TextComponentTranslation( - "message.assembly.tip.too_high", - if (array.min.y < 1) { - "y = ${array.min.y}" - } else { - "y = ${array.max.y}" - } - ) - ) - return EnumActionResult.FAIL - } - - val usingAE = isUsingAE(stack) - val autoAECrafting = usingAE && isAutoAECrafting(stack) - val missing = NEWMachineAssemblyManager.checkAllItems(player, st, usingAE, autoAECrafting) - val q = missing.list - val serverPlayer = player as? EntityPlayerMP - if (autoAECrafting && !q.isEmpty() && serverPlayer != null) { - // 用原生 AE2 的合成确认队列:把「缺料且 AE 可合成」的条目交给 - // ContainerCraftConfirm,由它逐个确认、逐个推进,无需自建队列。 - val locator = findWirelessTerminalLocator(player) - val host = locator?.locate(player, WirelessTerminalGuiHost::class.java) - if (locator != null && host != null) { - host.getActionableNode()?.grid()?.let { - val craftables = it.getCraftingService().getCraftables(AEItemKey.filter()) - val toCraft = ObjectArrayList() - for (stacks in q) { - for (item in stacks) { - if (item.isEmpty) continue - val key = AEItemKey.of(item) ?: continue - if (craftables.contains(key)) { - toCraft.add( - ICraftingGridContainer.AutoCraftEntry( - key, - item.count.toLong(), - IntArrayList() - ) - ) - break - } - } - } - if (!toCraft.isEmpty()) { - ContainerCraftConfirm.openWithCraftingList(host, serverPlayer, locator, toCraft) - } - } - } - } - if (q.isEmpty() - || !isNeedAllIngredient(stack) - ) { - array = NEWMachineAssemblyManager.addAssemblyMachine(player, array) - array.missing = missing.miss - array.start(usingAE, isIgnoreFluids(stack)) - player.sendMessage( - TextComponentTranslation( - "message.assembly.tip.already_assembly.start" - ) - ) - return EnumActionResult.SUCCESS - } - } else { - player.sendMessage( - TextComponentTranslation( - "message.assembly.tip.already_assembly" - ) - ) - return EnumActionResult.FAIL - } - } - return EnumActionResult.PASS - } - - @SideOnly(Side.CLIENT) - override fun addInformation(stack: ItemStack, world: World?, lines: MutableList, flagIn: ITooltipFlag) { - super.addInformation(stack, world, lines, flagIn) - lines.add("item.novaeng_core.machine_assembly_tool.config".i18n()) - lines.add(" ${usingAEConfig.unlocalizedName.i18n()} : ${isUsingAE(stack)}") - lines.add(" ${ignoreFluidsConfig.unlocalizedName.i18n()} : ${isIgnoreFluids(stack)}") - lines.add(" ${dynamicPatternSizeConfig.unlocalizedName.i18n()} : ${getDynamicPatternSize(stack)}") - lines.add(" ${autoAECraftingConfig.unlocalizedName.i18n()} : ${isAutoAECrafting(stack)}") - lines.add(" ${needAllIngredientConfig.unlocalizedName.i18n()} : ${isNeedAllIngredient(stack)}") - } - - fun isUsingAE(stack: ItemStack): Boolean { - return ToolConfigHelper.getFieldStorage(stack).getBoolean("UsingAE") - } - - fun isIgnoreFluids(stack: ItemStack): Boolean { - return ToolConfigHelper.getFieldStorage(stack).getBoolean("IgnoreFluids") - } - - fun getDynamicPatternSize(stack: ItemStack): Int { - return ToolConfigHelper.getFieldStorage(stack).getInteger("DynamicPatternSize") - } - - fun isAutoAECrafting(stack: ItemStack): Boolean { - return ToolConfigHelper.getFieldStorage(stack).getBoolean("AutoAECrafting") - } - - fun isNeedAllIngredient(stack: ItemStack): Boolean { - return ToolConfigHelper.getFieldStorage(stack).getBoolean("NeedAllIngredient") - } - - fun setUsingAE(stack: ItemStack, b: Boolean) { - ToolConfigHelper.getFieldStorage(stack).setBoolean("UsingAE", b) - } - - fun setIgnoreFluids(stack: ItemStack, b: Boolean) { - ToolConfigHelper.getFieldStorage(stack).setBoolean("IgnoreFluids", b) - } - - fun setDynamicPatternSize(stack: ItemStack, size: Int) { - ToolConfigHelper.getFieldStorage(stack).setByte("DynamicPatternSize", size.toByte()) - } - - fun setAutoAECrafting(stack: ItemStack, auto: Boolean) { - ToolConfigHelper.getFieldStorage(stack).setBoolean("AutoAECrafting", auto) - } - - fun setNeedAllIngredient(stack: ItemStack, auto: Boolean) { - ToolConfigHelper.getFieldStorage(stack).setBoolean("NeedAllIngredient", auto) - } - - val usingAEConfig by lazy { - BooleanConfigField( - "UsingAE", - false, - "UsingAE".getDescription() - ) - } - - val ignoreFluidsConfig by lazy { - BooleanConfigField( - "IgnoreFluids", - false, - "IgnoreFluids".getDescription() - ) - } - - val dynamicPatternSizeConfig by lazy { - IntegerConfigField( - "DynamicPatternSize", - 0, - 0, - getMaxDynamicPatternSize(), - "DynamicPatternSize".getDescription(), - IItemConfigField.EnumControlType.SELECTIONS - ) - } - - val autoAECraftingConfig by lazy { - BooleanConfigField( - "AutoAECrafting", - false, - "AutoAECrafting".getDescription() - ) - } - - val needAllIngredientConfig by lazy { - BooleanConfigField( - "NeedAllIngredient", - false, - "NeedAllIngredient".getDescription() - ) - } - - override fun getFields( - stack: ItemStack, - registry: ItemConfigFieldRegistry - ): ItemConfigFieldRegistry { - registry.register(stack, usingAEConfig) - registry.register(stack, ignoreFluidsConfig) - registry.register(stack, dynamicPatternSizeConfig) - registry.register(stack, autoAECraftingConfig) - registry.register(stack, needAllIngredientConfig) - - return registry - } - - override fun getProfileCount(stack: ItemStack): Int { - return 5 - } - - private fun String.getDescription(): String { - return "text.machine_assembly_tool.config.$this".i18n() - } - - private fun String.i18n(): String { - return I18n.translateToLocal(this) - } - - private fun String.i18n(vararg objs: Any): String { - return I18n.translateToLocalFormatted(this, objs) - } - - private fun getMaxDynamicPatternSize(): Int { - val list = ObjectArrayList(MachineRegistry.getLoadedMachines()) - list.addAll(NEWMachineAssemblyManager.getAllDynamicMachines()) - - return list.parallelStream() - .mapToInt { - it.dynamicPatterns.values.stream() - .mapToInt { it1 -> it1.maxSize } - .max() - .orElse(1) - } - .max() - .orElse(1) - } - - /** - * 找到装着无线终端的位置。原生 AE2 打开子界面时要的是定位器(它自己会用定位器再定位一次宿主), - * 所以这里返回定位器而不是宿主。 - */ - private fun findWirelessTerminalLocator(player: EntityPlayer): GuiHostLocator? { - for (slot in 0 until player.inventory.sizeInventory) { - val locator = GuiHostLocators.forInventorySlot(slot) - if (locator.locate(player, WirelessTerminalGuiHost::class.java) != null) { - return locator - } - } - - if (Loader.isModLoaded("baubles")) { - val handler = baubles.api.BaublesApi.getBaublesHandler(player) - for (slot in 0 until handler.slots) { - val locator = GuiHostLocators.forBaubleSlot(slot) - if (locator.locate(player, WirelessTerminalGuiHost::class.java) != null) { - return locator - } - } - } - - return null - } - -} diff --git a/src/main/java/github/kasuminova/novaeng/common/machine/BiogenicSimulationComputer.java b/src/main/java/github/kasuminova/novaeng/common/machine/BiogenicSimulationComputer.java index af8d0b45..f9ee1e2c 100644 --- a/src/main/java/github/kasuminova/novaeng/common/machine/BiogenicSimulationComputer.java +++ b/src/main/java/github/kasuminova/novaeng/common/machine/BiogenicSimulationComputer.java @@ -1,6 +1,6 @@ package github.kasuminova.novaeng.common.machine; -import appeng.util.Platform; +import ae2.util.Platform; import crafttweaker.CraftTweakerAPI; import crafttweaker.api.item.IItemStack; import crafttweaker.api.minecraft.CraftTweakerMC; diff --git a/src/main/java/github/kasuminova/novaeng/common/machine/BiogenicSimulationComputer.kt b/src/main/java/github/kasuminova/novaeng/common/machine/BiogenicSimulationComputer.kt deleted file mode 100644 index e191f545..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/machine/BiogenicSimulationComputer.kt +++ /dev/null @@ -1,296 +0,0 @@ -package github.kasuminova.novaeng.common.machine - -import ae2.util.Platform -import crafttweaker.CraftTweakerAPI -import crafttweaker.api.item.IItemStack -import crafttweaker.api.minecraft.CraftTweakerMC -import github.kasuminova.mmce.common.event.client.ControllerGUIRenderEvent -import github.kasuminova.mmce.common.event.recipe.FactoryRecipeFinishEvent -import github.kasuminova.mmce.common.helper.IMachineController -import github.kasuminova.novaeng.common.crafttweaker.expansion.RecipePrimerHyperNet.requireComputationPoint -import github.kasuminova.novaeng.common.crafttweaker.hypernet.HyperNetHelper -import github.kasuminova.novaeng.common.util.RecipePrimerEx.setLore -import hellfirepvp.modularmachinery.ModularMachinery -import hellfirepvp.modularmachinery.common.integration.crafttweaker.MachineModifier -import hellfirepvp.modularmachinery.common.integration.crafttweaker.RecipeBuilder -import hellfirepvp.modularmachinery.common.integration.crafttweaker.RecipeModifierBuilder -import hellfirepvp.modularmachinery.common.machine.DynamicMachine -import hellfirepvp.modularmachinery.common.machine.factory.FactoryRecipeThread -import mustapelto.deepmoblearning.common.DMLRegistry -import mustapelto.deepmoblearning.common.util.DataModelHelper -import net.minecraft.item.ItemStack -import net.minecraft.nbt.NBTTagCompound -import net.minecraft.util.ResourceLocation -import kotlin.math.max - -//TODO:处理硬编码 -object BiogenicSimulationComputer : MachineSpecial { - - private val clay = CraftTweakerMC.getIItemStack(ItemStack(DMLRegistry.ITEM_POLYMER_CLAY)) - private val blank = CraftTweakerMC.getIItemStack(ItemStack(DMLRegistry.ITEM_DATA_MODEL_BLANK)) - private const val MACHINEID = "biogenic_simulation_computer" - val REGISTRY_NAME = ResourceLocation(ModularMachinery.MODID, MACHINEID) - private val inscriberModels = arrayOf( - "数位演算模块-α", - "数位演算模块-β", - "数位演算模块-δ", - "数位演算模块-Ω" - ) - - override fun preInit(machine: DynamicMachine) { - MachineModifier.setMaxThreads(MACHINEID, 0) - for (i in inscriberModels) { - MachineModifier.addCoreThread(MACHINEID, FactoryRecipeThread.createCoreThread(i)) - } - HyperNetHelper.proxyMachineForHyperNet(MACHINEID) - - for (i in inscriberModels.indices) { - val ysqname = "ysqname$i" - val ysqddcs = "ysqddcs$i" - val prepare = "prepare$i" - - RecipeBuilder.newBuilder("moxll$i", MACHINEID, 1, 0) - .addItemInput(CraftTweakerAPI.oreDict.get("dataModel")).setTag("dataModel") - .setNBTChecker { ctrl: IMachineController?, iitem: IItemStack? -> - val item = CraftTweakerMC.getItemStack(iitem) - val data = ctrl!!.controller.customDataTag - - data.setTag(prepare, item.writeToNBT(NBTTagCompound())) - true - } - .addPreCheckHandler { - val ctrl = it.getController() - val data = ctrl.customDataTag - if (data.hasKey(ysqname)) { - it.setFailed("数据模块注入完成,可以开始演算") - - for (ii in inscriberModels.indices) { - data.removeTag("prepare$ii") - } - } - } - .addFactoryStartHandler { - val ctrl = it.getController() - val data = ctrl.customDataTag - if (!data.hasKey(ysqname)) { - val itemData = data.getTag(prepare) as NBTTagCompound - val preItem = ItemStack(itemData) - val tier = DataModelHelper.getTier(preItem) - val dataCount = DataModelHelper.getCurrentTierDataCount(preItem) - val tierend = if (tier <= 1) 32 * tier + dataCount else dataCount + (tier - 1) * 10000 + 32 - - data.setTag(ysqname, itemData) - data.setLong(ysqddcs, tierend.toLong()) - - for (ii in inscriberModels.indices) { - data.removeTag("prepare$ii") - } - } - } - .addOutput(blank) - .setParallelized(false) - .addRecipeTooltip("将数据模型写入数位演算模块", "请将数据模型放入控制器正上方的微型物品输入仓中") - .setThreadName(inscriberModels[i]) - .setLoadJEI(i == 0) - .build() - - RecipeBuilder.newBuilder("moni$i", MACHINEID, 60, 0) - .addEnergyPerTickInput(1000000) - .addItemInput(clay) - .addPreCheckHandler { - val ctrl = it.getController() - val data = ctrl.customDataTag - val parallelism = max(data.getInteger("parallelism"), 1) - - if (!data.hasKey(ysqname)) { - it.setFailed("没有数据模型!") - return@addPreCheckHandler - } - it.activeRecipe.maxParallelism = parallelism - } - .addFactoryStartHandler { - val ctrl = it.getController() - val data = ctrl.customDataTag - val ysqddcss = data.getInteger(ysqddcs) - val bl = it.factoryRecipeThread - if (ysqddcss < 32) { - bl.addModifier( - "duration", - RecipeModifierBuilder.create("modularmachinery:duration", "input", 60f, 1, false).build() - ) - bl.addModifier( - "energy", - RecipeModifierBuilder.create("modularmachinery:energy", "input", 20f, 1, false).build() - ) - } - } - .addItemOutput(CraftTweakerAPI.oreDict.get("pristine")) - .addItemModifier { ctrl: IMachineController?, _: IItemStack? -> - outputPristineMatter( - ctrl!!, - ysqname, - ysqddcs - ) - } - .addItemOutput(CraftTweakerAPI.oreDict.get("livingMatter")) - .addItemModifier { ctrl: IMachineController, _: IItemStack -> - outputLivingMatter( - ctrl, - ysqname - ) - } - .addFactoryFinishHandler { event: FactoryRecipeFinishEvent -> - val ctrl = event.getController() - val data = ctrl.customDataTag - val bx = event.factoryRecipeThread.getActiveRecipe().parallelism - data.setLong(ysqddcs, data.getLong(ysqddcs) + bx) - } - .addRecipeTooltip( - "使用数位演算模块进行模拟,并且输出物质", - "概率继承自模拟室,并且每个等级额外提高2%", - "等级为0的模型需要60倍的时间和20倍能量来进行初步推算" - ) - .setThreadName(inscriberModels[i]) - .setLoadJEI(i == 0) - .requireComputationPoint(100.0f) - .build() - - RecipeBuilder.newBuilder("mxdc$i", MACHINEID, 1) - .addItemInput(blank) - .addPreCheckHandler { - val ctrl = it.getController() - val data = ctrl.customDataTag - if (!data.hasKey(ysqname)) { - it.setFailed("没有可以导出的数据") - } - } - .addOutput(CraftTweakerAPI.oreDict.get("dataModel")) - .setLore("§6提取出写入的模型") - .addItemModifier { ctrl, _ -> - outputdata( - ctrl, - ysqname, - ysqddcs - ) - } - .setParallelized(false) - .addRecipeTooltip( - "将数据模型从数位演算模块导出", - "会先从哪个数据里导出?谁知道呢,试试不就知道了" - ).setThreadName(inscriberModels[i]) - .setLoadJEI(i == 0) - .build() - } - - machine.addMachineEventHandler( - ControllerGUIRenderEvent::class.java - ) { - val ctrl = it.getController() - val data = ctrl.customDataTag - val info = ArrayList() - - for (i in inscriberModels.indices) { - val itemData = data.getTag("ysqname$i") - val ysqname: String? - if (itemData == null) { - ysqname = "暂无" - } else { - val item = ItemStack(itemData as NBTTagCompound) - ysqname = item.item.getItemStackDisplayName(item).replace("[(].*".toRegex(), "") - } - val ysqddcs = data.getLong("ysqddcs$i") - info.add("当前记录模型:$ysqname") - info.add("当前迭代次数:$ysqddcs") - } - @Suppress("UsePropertyAccessSyntax") - it.setExtraInfo(*info.toTypedArray()) - } - } - - override fun getRegistryName(): ResourceLocation { - return REGISTRY_NAME - } - - private fun outputLivingMatter(ctrl: IMachineController, ysqnamess: String): IItemStack? { - val data = ctrl.controller.customDataTag - val name = data.getTag(ysqnamess) - val item = DataModelHelper.getDataModelMetadata(ItemStack(name as NBTTagCompound)) - - return item.map { - CraftTweakerMC.getIItemStack(it.livingMatter) - }.orElse(null) - } - - private fun outputPristineMatter(ctrl: IMachineController, ysqnamess: String, ysqddcss: String): IItemStack? { - val data = ctrl.controller.customDataTag - val name = data.getTag(ysqnamess) ?: return null - val ysqddcs = data.getLong(ysqddcss) - val world = ctrl.controller.getWorld() - val Random = world.rand.nextInt(99) + 1 - val item = DataModelHelper.getDataModelMetadata(ItemStack(name as NBTTagCompound)) - val itemsl: Boolean = if (ysqddcs >= 32) { - if (ysqddcs < 10032) { - 6 >= Random - } else if (ysqddcs < 20032) { - 12 >= Random - } else if (ysqddcs < 30032) { - 14 >= Random - } else { - 20 >= Random - } - } else { - false - } - - return if (item.isPresent) { - if (itemsl) { - CraftTweakerMC.getIItemStack(item.get().pristineMatter) - } else { - null - } - } else { - clay.amount(1) - } - } - - private fun outputdata(ctrl: IMachineController, ysqnamess: String, ysqddcss: String): IItemStack { - val data = ctrl.controller.customDataTag - val name = data.getCompoundTag(ysqnamess) - val ysqddcs = data.getLong(ysqddcss) - - var tiers: Int - var dataCounts: Int - - if (ysqddcs < 32) { - tiers = 0 - dataCounts = ysqddcs.toInt() - } else if (ysqddcs < 10032) { - tiers = 1 - dataCounts = (ysqddcs - 32).toInt() - } else if (ysqddcs < 20032) { - tiers = 2 - dataCounts = (ysqddcs - 10032).toInt() - } else if (ysqddcs < 30032) { - tiers = 3 - dataCounts = (ysqddcs - 20032).toInt() - } else { - tiers = 4 - dataCounts = if (ysqddcs > 2000000000) { - 2000000000 - } else { - ysqddcs.toInt() - } - } - - data.removeTag(ysqnamess) - data.removeTag(ysqddcss) - - val item = ItemStack(name) - val nbt = Platform.openNbtData(item) - nbt.setLong("totalSimulationCount", ysqddcs) - nbt.setInteger("tier", tiers) - nbt.setInteger("dataCount", dataCounts) - - return CraftTweakerMC.getIItemStack(item) - } -} \ No newline at end of file diff --git a/src/main/java/github/kasuminova/novaeng/common/network/PktAutoCraftConfirm.java b/src/main/java/github/kasuminova/novaeng/common/network/PktAutoCraftConfirm.java deleted file mode 100644 index b4071c3a..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/network/PktAutoCraftConfirm.java +++ /dev/null @@ -1,33 +0,0 @@ -package github.kasuminova.novaeng.common.network; - -import github.kasuminova.novaeng.common.container.ContainerNEWCraftConfirm; -import github.kasuminova.novaeng.common.util.AutoCraftingQueue; -import io.netty.buffer.ByteBuf; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; - -public final class PktAutoCraftConfirm implements IMessage, IMessageHandler { - - @Override - public void fromBytes(final ByteBuf buf) { - } - - @Override - public void toBytes(final ByteBuf buf) { - } - - @Override - public IMessage onMessage(final PktAutoCraftConfirm message, final MessageContext ctx) { - final var player = ctx.getServerHandler().player; - player.getServerWorld().addScheduledTask(() -> { - if (player.openContainer instanceof ContainerNEWCraftConfirm) { - final AutoCraftingQueue queue = AutoCraftingQueue.getQueue(player); - if (queue != null && !queue.executionQueue(player)) { - player.closeContainer(); - } - } - }); - return null; - } -} diff --git a/src/main/java/github/kasuminova/novaeng/common/network/PktPatternTermUploadPattern.java b/src/main/java/github/kasuminova/novaeng/common/network/PktPatternTermUploadPattern.java index 9ae5741c..b4a19032 100644 --- a/src/main/java/github/kasuminova/novaeng/common/network/PktPatternTermUploadPattern.java +++ b/src/main/java/github/kasuminova/novaeng/common/network/PktPatternTermUploadPattern.java @@ -1,16 +1,12 @@ package github.kasuminova.novaeng.common.network; -import appeng.api.AEApi; -import appeng.api.networking.IGridNode; -import appeng.api.networking.crafting.ICraftingPatternDetails; -import appeng.api.networking.security.IActionHost; -import appeng.api.storage.data.IAEItemStack; -import appeng.container.implementations.ContainerPatternEncoder; -import appeng.items.misc.ItemEncodedPattern; -import appeng.me.GridAccessException; -import com.glodblock.github.util.FluidCraftingPatternDetails; +import ae2.api.crafting.IPatternDetails; +import ae2.api.crafting.PatternDetailsHelper; +import ae2.api.networking.security.IActionHost; +import ae2.container.SlotSemantics; +import ae2.container.me.patternencode.ContainerPatternEncodingTerm; +import ae2.core.definitions.AEItems; import github.kasuminova.novaeng.common.tile.ecotech.efabricator.EFabricatorMEChannel; -import github.kasuminova.novaeng.mixin.ae2.AccessorContainerPatternEncoder; import hellfirepvp.modularmachinery.ModularMachinery; import io.netty.buffer.ByteBuf; import net.minecraft.item.ItemStack; @@ -33,56 +29,52 @@ public void toBytes(final ByteBuf buffer) { public IMessage onMessage(final PktPatternTermUploadPattern message, final MessageContext context) { final var player = context.getServerHandler().player; ModularMachinery.EXECUTE_MANAGER.addSyncTask(() -> { - if (!(player.openContainer instanceof ContainerPatternEncoder container)) { + if (!(player.openContainer instanceof ContainerPatternEncodingTerm container)) { return; } - final var accessor = (AccessorContainerPatternEncoder) container; - final var slot = accessor.getPatternSlotOUT(); - final ItemStack stack = slot.getStack(); - if (stack.isEmpty()) { + final ItemStack patternStack = container.getSlots(SlotSemantics.ENCODED_PATTERN).stream() + .findFirst().map(net.minecraft.inventory.Slot::getStack).orElse(ItemStack.EMPTY); + if (patternStack.isEmpty()) { return; } - final var part = container.getPart(); - final var itemObject = accessor.getIGuiItemObject(); - final Iterable nodes; - if (part != null) { - try { - nodes = part.getProxy().getGrid().getMachines(EFabricatorMEChannel.class); - } catch (final GridAccessException ignored) { - return; - } - } else if (itemObject instanceof IActionHost host) { - nodes = host.getActionableNode().getGrid().getMachines(EFabricatorMEChannel.class); - } else { + if (!(container.getTarget() instanceof IActionHost itemObject)) { + return; + } + final var node = itemObject.getActionableNode(); + if (node == null) { + return; + } + final var grid = node.grid(); + if (grid == null) { return; } - if (!nodes.iterator().hasNext() || !(stack.getItem() instanceof ItemEncodedPattern item)) { + final var channelNodes = grid.getMachines(EFabricatorMEChannel.class); + if (channelNodes.isEmpty()) { return; } - final ICraftingPatternDetails pattern = item.getPatternForItem(stack, player.world); - if (!pattern.isCraftable() && !(pattern instanceof FluidCraftingPatternDetails)) { + final IPatternDetails pattern = PatternDetailsHelper.decodePattern(patternStack, player.world); + if (pattern == null || pattern.getPrimaryOutput() == null) { return; } - final IAEItemStack output = pattern.getCondensedOutputs()[0]; - for (final IGridNode node : nodes) { - final var channel = (EFabricatorMEChannel) node.getMachine(); + final var out = pattern.getPrimaryOutput().what(); + for (final EFabricatorMEChannel channel : channelNodes) { final var controller = channel.getController(); if (controller == null) { continue; } for (final var bus : controller.getPatternBuses()) { - if (bus.getAePatterns().contains(output)) { + if (bus.getAePatterns().contains(out)) { player.sendMessage(new TextComponentTranslation("novaeng.efabricator_parallel_proc.tooltip.0")); - player.inventory.placeItemBackInInventory(player.world, AEApi.instance().definitions().materials() - .blankPattern().maybeStack(slot.getStack().getCount()).orElse(ItemStack.EMPTY)); - slot.putStack(ItemStack.EMPTY); + player.inventory.placeItemBackInInventory(player.world, + new ItemStack(AEItems.BLANK_PATTERN.item(), patternStack.getCount())); + container.clear(); return; } } } - for (final IGridNode node : nodes) { - if (((EFabricatorMEChannel) node.getMachine()).insertPattern(stack)) { - slot.putStack(ItemStack.EMPTY); + for (final EFabricatorMEChannel channel : channelNodes) { + if (channel.insertPattern(patternStack)) { + container.clear(); break; } } diff --git a/src/main/java/github/kasuminova/novaeng/common/network/PktPatternTermUploadPattern.kt b/src/main/java/github/kasuminova/novaeng/common/network/PktPatternTermUploadPattern.kt deleted file mode 100644 index 9b90ac72..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/network/PktPatternTermUploadPattern.kt +++ /dev/null @@ -1,75 +0,0 @@ -package github.kasuminova.novaeng.common.network - -import ae2.api.crafting.IPatternDetails -import ae2.api.crafting.PatternDetailsHelper -import ae2.api.networking.security.IActionHost -import ae2.container.me.patternencode.ContainerPatternEncodingTerm -import ae2.container.SlotSemantics -import ae2.core.definitions.AEItems -import github.kasuminova.novaeng.common.tile.ecotech.efabricator.EFabricatorMEChannel -import hellfirepvp.modularmachinery.ModularMachinery -import io.netty.buffer.ByteBuf -import net.minecraft.item.ItemStack -import net.minecraft.util.text.TextComponentTranslation -import net.minecraftforge.fml.common.network.simpleimpl.IMessage -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext - -class PktPatternTermUploadPattern : IMessage, IMessageHandler { - override fun fromBytes(buf: ByteBuf) { - } - - override fun toBytes(buf: ByteBuf) { - } - - override fun onMessage(message: PktPatternTermUploadPattern, ctx: MessageContext): IMessage? { - val player = ctx.serverHandler.player - ModularMachinery.EXECUTE_MANAGER.addSyncTask { - val container = player.openContainer - if (container !is ContainerPatternEncodingTerm) { - return@addSyncTask - } - - val patternStack = container.getSlots(SlotSemantics.ENCODED_PATTERN).firstOrNull()?.getStack() - ?: return@addSyncTask - if (patternStack.isEmpty) { - return@addSyncTask - } - - val itemObject = container.getTarget() as? IActionHost ?: return@addSyncTask - val node = itemObject.getActionableNode() ?: return@addSyncTask - val channelNodes = node.grid().getMachines(EFabricatorMEChannel::class.java) - if (channelNodes.isEmpty()) { - return@addSyncTask - } - - val pattern: IPatternDetails = PatternDetailsHelper.decodePattern(patternStack, player.world) - ?: return@addSyncTask - val out = pattern.primaryOutput.what - - for (channel in channelNodes) { - channel.controller?.let { - for (patternBus in it.getPatternBuses()) { - if (patternBus.aePatterns.contains(out)) { - player.sendMessage( - TextComponentTranslation( - "novaeng.efabricator_parallel_proc.tooltip.0" - ) - ) - player.inventory.placeItemBackInInventory(player.world, ItemStack(AEItems.BLANK_PATTERN.item()!!, patternStack.count)) - container.clear() - return@addSyncTask - } - } - } - } - for (channel in channelNodes) { - if (channel.insertPattern(patternStack)) { - container.clear() - break - } - } - } - return null - } -} diff --git a/src/main/java/github/kasuminova/novaeng/common/registry/RegistryAssembly.kt b/src/main/java/github/kasuminova/novaeng/common/registry/RegistryAssembly.kt deleted file mode 100644 index e69de29b..00000000 diff --git a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorController.java b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorController.java index d6624856..f58ad628 100644 --- a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorController.java +++ b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorController.java @@ -1,16 +1,11 @@ package github.kasuminova.novaeng.common.tile.ecotech.efabricator; -import appeng.api.AEApi; -import appeng.api.config.Actionable; -import appeng.api.config.PowerMultiplier; -import appeng.api.networking.energy.IEnergyGrid; -import appeng.api.storage.channels.IItemStorageChannel; -import appeng.api.storage.data.IAEItemStack; -import appeng.api.storage.data.IItemList; -import appeng.me.GridAccessException; -import appeng.util.Platform; -import appeng.util.item.ItemList; -import github.kasuminova.mmce.client.util.ItemStackUtils; +import ae2.api.config.Actionable; +import ae2.api.config.PowerMultiplier; +import ae2.api.networking.energy.IEnergyService; +import ae2.api.storage.StorageHelper; +import ae2.api.stacks.KeyCounter; +import ae2.api.stacks.GenericStack; import github.kasuminova.novaeng.NovaEngineeringCore; import github.kasuminova.novaeng.client.util.BlockModelHider; import github.kasuminova.novaeng.common.block.ecotech.efabricator.BlockEFabricatorController; @@ -48,8 +43,7 @@ public final class EFabricatorController extends EPartController coolantInputHandlers = new ObjectArrayList<>(); private final ObjectArrayList coolantOutputHandlers = new ObjectArrayList<>(); - private final IItemStorageChannel itemChannel = AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class); - private IItemList outputBuffer = new ItemList(); + private KeyCounter outputBuffer = new KeyCounter(); private double energyConsumePerTick = 64.0; private EFabricatorMEChannel channel; private int length; @@ -108,15 +102,11 @@ public ObjectArrayList getCoolantOutputHandlers() { return this.coolantOutputHandlers; } - public IItemStorageChannel getItemChannel() { - return this.itemChannel; - } - - public IItemList getOutputBuffer() { + public KeyCounter getOutputBuffer() { return this.outputBuffer; } - public void setOutputBuffer(final IItemList buffer) { + public void setOutputBuffer(final KeyCounter buffer) { this.outputBuffer = buffer; } @@ -249,7 +239,7 @@ public void setGuiDataDirty(final boolean dirty) { @Override public boolean onSyncTick() { - if (this.channel == null || !this.channel.getProxy().isActive()) { + if (this.channel == null || !this.channel.getMainNode().isActive()) { this.tickExecutor = null; return false; } @@ -331,12 +321,11 @@ public void supplyCoolantCache() { } public void supplyWorkerPower() { - final IEnergyGrid energy; - try { - energy = this.channel.getProxy().getEnergy(); - } catch (final GridAccessException ignored) { + final var node = this.channel.getMainNode().getNode(); + if (node == null) { return; } + final IEnergyService energy = node.grid().getEnergyService(); for (final var worker : this.getWorkers()) { if (worker.getEnergyCache() < worker.getMaxEnergyCache()) { worker.supplyEnergy((int) energy.extractAEPower(worker.getMaxEnergyCache() - worker.getEnergyCache(), @@ -346,14 +335,15 @@ public void supplyWorkerPower() { } public void clearOutputBuffer() { - try { - final var proxy = this.channel.getProxy(); - final var inventory = proxy.getStorage().getInventory(this.itemChannel); - for (final var stack : this.outputBuffer) { - final var remainder = Platform.poweredInsert(proxy.getEnergy(), inventory, stack.copy(), this.channel.getSource()); - stack.setStackSize(remainder == null ? 0 : remainder.getStackSize()); - } - } catch (final GridAccessException ignored) { + final var node = this.channel.getMainNode().getNode(); + if (node == null) { + return; + } + final var energy = node.grid().getEnergyService(); + final var inventory = node.grid().getStorageService().getInventory(); + for (final var stack : this.outputBuffer) { + final var inserted = StorageHelper.poweredInsert(energy, inventory, stack.getKey(), stack.getLongValue(), channel.getSource()); + outputBuffer.set(stack.getKey(), stack.getLongValue() - inserted); } } @@ -454,7 +444,7 @@ public void recalculateEnergyUsage() { if (this.energyConsumePerTick != drain) { this.energyConsumePerTick = drain; if (this.channel != null) { - this.channel.getProxy().setIdlePowerUsage(drain); + this.channel.getMainNode().setIdlePowerUsage(drain); } } } @@ -462,9 +452,9 @@ public void recalculateEnergyUsage() { public boolean insertPattern(final ItemStack stack) { for (final var bus : this.getPatternBuses()) { final var inventory = bus.getPatterns(); - for (int i = 0; i < inventory.getSlots(); i++) { + for (int i = 0; i < inventory.size(); i++) { if (inventory.getStackInSlot(i).isEmpty()) { - inventory.setStackInSlot(i, ItemUtils.copyStackWithSize(stack, 1)); + inventory.setItemDirect(i, ItemUtils.copyStackWithSize(stack, 1)); return true; } } @@ -636,10 +626,12 @@ public void readCustomNBT(final NBTTagCompound tag) { this.setOverclocked(tag.getBoolean("overclock")); this.setActiveCooling(tag.getBoolean("activeCooling")); this.coolantCache = tag.getInteger("coolantCache"); - this.outputBuffer = new ItemList(); + this.outputBuffer = new KeyCounter(); final NBTTagList items = tag.getTagList("outputBuffer", Constants.NBT.TAG_COMPOUND); - for (int i = 0; i < items.tagCount(); i++) { - this.outputBuffer.add(this.itemChannel.createStack(ItemStackUtils.readNBTOversize(items.getCompoundTagAt(i)))); + for (GenericStack stack : GenericStack.readList(items)) { + if (stack != null) { + this.outputBuffer.add(stack.what(), stack.amount()); + } } this.loaded = previouslyLoaded; if (FMLCommonHandler.instance().getEffectiveSide().isClient()) { @@ -654,12 +646,12 @@ public void writeCustomNBT(final NBTTagCompound tag) { tag.setBoolean("overclock", this.overclocked); tag.setBoolean("activeCooling", this.activeCooling); tag.setInteger("coolantCache", this.coolantCache); - final NBTTagList items = new NBTTagList(); synchronized (this.outputBuffer) { + final List stacks = new ObjectArrayList<>(); for (final var stack : this.outputBuffer) { - items.appendTag(ItemStackUtils.writeNBTOversize(stack.getCachedItemStack(stack.getStackSize()))); + stacks.add(new GenericStack(stack.getKey(), stack.getLongValue())); } + tag.setTag("outputBuffer", GenericStack.writeList(stacks)); } - tag.setTag("outputBuffer", items); } } diff --git a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorController.kt b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorController.kt deleted file mode 100644 index d2d58afb..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorController.kt +++ /dev/null @@ -1,582 +0,0 @@ -package github.kasuminova.novaeng.common.tile.ecotech.efabricator - -import ae2.api.config.Actionable -import ae2.api.config.PowerMultiplier -import ae2.api.networking.energy.IEnergyService -import ae2.api.storage.MEStorage -import ae2.api.storage.StorageHelper -import ae2.api.stacks.KeyCounter -import ae2.api.stacks.GenericStack -import github.kasuminova.novaeng.NovaEngineeringCore -import github.kasuminova.novaeng.client.util.BlockModelHider -import github.kasuminova.novaeng.common.block.ecotech.efabricator.BlockEFabricatorController -import github.kasuminova.novaeng.common.block.ecotech.efabricator.prop.Levels -import github.kasuminova.novaeng.common.network.PktEFabricatorGUIData -import github.kasuminova.novaeng.common.tile.ecotech.EPartController -import github.kasuminova.novaeng.common.tile.ecotech.efabricator.EFabricatorWorker.CraftWork -import github.kasuminova.novaeng.common.util.Functions -import github.kasuminova.novaeng.common.util.MachineCoolants -import hellfirepvp.modularmachinery.client.ClientProxy -import hellfirepvp.modularmachinery.common.machine.IOType -import hellfirepvp.modularmachinery.common.machine.MachineRegistry -import hellfirepvp.modularmachinery.common.util.ItemUtils -import it.unimi.dsi.fastutil.objects.ObjectArrayList -import net.minecraft.block.Block -import net.minecraft.item.ItemStack -import net.minecraft.nbt.NBTTagCompound -import net.minecraft.util.ResourceLocation -import net.minecraft.util.math.BlockPos -import net.minecraftforge.common.util.Constants -import net.minecraftforge.fluids.FluidStack -import net.minecraftforge.fluids.capability.IFluidHandler -import net.minecraftforge.fml.common.FMLCommonHandler -import kotlin.concurrent.Volatile -import kotlin.math.max -import kotlin.math.min -import kotlin.math.roundToInt -import kotlin.math.roundToLong - -@Suppress("unused") -class EFabricatorController() : EPartController() { - - companion object { - const val MAX_COOLANT_CACHE: Int = 100000 - const val WORK_DELAY: Int = 20 - - val HIDE_POS_LIST: MutableList = Functions.asList( // Center - BlockPos(0, 1, 0), - BlockPos(0, -1, 0), - - BlockPos(0, 1, 1), - BlockPos(0, 0, 1), - BlockPos(0, -1, 1), // Left - - BlockPos(1, 1, 0), - BlockPos(1, 0, 0), - BlockPos(1, -1, 0), - - BlockPos(1, 1, 1), - BlockPos(1, 0, 1), - BlockPos(1, -1, 1), // Right - - BlockPos(-1, 1, 0), - BlockPos(-1, 0, 0), - BlockPos(-1, -1, 0), - - BlockPos(-1, 1, 1), - BlockPos(-1, 0, 1), - BlockPos(-1, -1, 1) - ) - } - - val coolantInputHandlers = ObjectArrayList() - val coolantOutputHandlers = ObjectArrayList() - - var outputBuffer: KeyCounter = KeyCounter() - - val parentController: BlockEFabricatorController? - get() { - return this.getBlockType() as? BlockEFabricatorController - } - var energyConsumePerTick: Double = 64.0 - - var channel: EFabricatorMEChannel? = null - - var length = 0 - - var workDelay = WORK_DELAY - var maxWorkDelay = WORK_DELAY - - var parallelism = 0 - var consumedParallelism = 0 - - var coolantCache = 0 - - var totalCrafted: Long = 0 - - var speedupApplied = false - - var overclocked = false - set(value) { - field = value - updateParallelism() - updateGUIDataPacket() - } - - var activeCooling = false - set(value) { - field = value - updateParallelism() - updateWorkDelay() - updateGUIDataPacket() - } - - var guiDataPacket: PktEFabricatorGUIData? = null - get() { - if (guiDataDirty || field == null) { - field = PktEFabricatorGUIData(this) - this.guiDataDirty = false - } - return field - } - - @Volatile - var guiDataDirty = false - - constructor(machineRegistryName: ResourceLocation) : this() { - this.parentMachine = MachineRegistry.getRegistry().getMachine(machineRegistryName) - } - - init { - this.workMode = WorkMode.SEMI_SYNC - } - - override fun onSyncTick(): Boolean { - if (channel == null || !channel!!.mainNode.isActive) { - this.tickExecutor = null - return false - } - - workDelay-- - if (workDelay > 0) { - this.tickExecutor = null - return false - } - workDelay = maxWorkDelay - speedupApplied = false - clearOutputBuffer() - supplyWorkerPower() - supplyCoolantCache() - return true - } - - override fun onAsyncTick() { - updateGUIDataPacket() - - val prevTotalCrafted = totalCrafted - val workers = this.getWorkers() - workers.forEach { it.updateStatus(false) } - for (worker in workers) { - if (worker.hasWork()) { - val worked = worker.doWork() - totalCrafted += worked.toLong() - consumedParallelism += if (worked <= 1) 0 else worked - } - } - if (activeCooling && hasWork()) { - convertOverflowParallelismToWorkDelay(parallelism - consumedParallelism) - } - consumedParallelism = 0 - - if (prevTotalCrafted != totalCrafted) { - markNoUpdateSync() - } - } - - fun supplyCoolantCache() { - if (coolantCache >= MAX_COOLANT_CACHE) { - return - } - - // Nova写了一坨大的! - for (inputHandler in coolantInputHandlers) { - for (property in inputHandler.tankProperties) { - val contents = property.contents - if (contents == null || contents.amount == 0) { - continue - } - - val coolant = MachineCoolants.INSTANCE.getCoolant(contents.fluid) ?: continue - - for (outputHandler in coolantOutputHandlers) { - val maxCanConsume = coolant.maxCanConsume(inputHandler, outputHandler) - if (maxCanConsume <= 0) { - continue - } - - val required: Int = MAX_COOLANT_CACHE - coolantCache - var mul = required / coolant.coolantUnit - if (mul * coolant.coolantUnit < required) { - mul++ - } - mul = min(mul, maxCanConsume) - - if (mul > 0) { - val input = coolant.input - inputHandler.drain(FluidStack(input, mul * input.amount), true) - val output = coolant.output - if (output != null) { - outputHandler.fill(FluidStack(output, mul * output.amount), true) - } - coolantCache += mul * coolant.coolantUnit - if (coolantCache >= MAX_COOLANT_CACHE) { - return - } - } - } - } - } - } - - fun supplyWorkerPower() { - val node = channel!!.mainNode.node ?: return - val energy: IEnergyService = node.grid().energyService - - for (worker in this.getWorkers()) { - if (worker.energyCache < worker.getMaxEnergyCache()) { - worker.supplyEnergy( - energy.extractAEPower( - (worker.getMaxEnergyCache() - worker.energyCache).toDouble(), - Actionable.MODULATE, - PowerMultiplier.CONFIG - ).toInt() - ) - } - } - } - - fun clearOutputBuffer() { - val node = this.channel!!.mainNode.node ?: return - val energy = node.grid().energyService - val inventory: MEStorage = node.grid().storageService.inventory - for (entry in outputBuffer) { - val inserted = StorageHelper.poweredInsert( - energy, - inventory, - entry.key, - entry.longValue, - this.channel!!.source - ) - outputBuffer.set(entry.key, entry.longValue - inserted) - } - } - - override fun updateComponents() { - super.updateComponents() - val workers = getDynamicPattern("workers") - this.length = workers?.size ?: 0 - this.foundComponents.values.forEach { - it.values.forEach { component -> - val handler = component.providedComponent() - if (handler is IFluidHandler) { - if (component.getComponent().ioType == IOType.INPUT) coolantInputHandlers.add(handler) - else coolantOutputHandlers.add(handler) - } - } - } - updateParallelism() - updateWorkDelay() - } - - override fun onAddPart(part: EFabricatorPart?) { - if (part is EFabricatorMEChannel) { - this.channel = part - } - } - - override fun clearParts() { - super.clearParts() - this.coolantInputHandlers.clear() - this.coolantOutputHandlers.clear() - this.channel = null - this.length = 0 - } - - fun updateParallelism() { - var parallelism = 0.0 - val modifierList = ObjectArrayList() - this.getParallelProcs().forEach { - for (modifier in it.modifiers) { - if (modifier.isBuff || (!activeCooling && modifier.debuff)) { - if (modifier.type == EFabricatorParallelProc.Type.MULTIPLY) modifierList.add(modifier) - else parallelism = modifier.apply(parallelism) - } - } - if (overclocked) { - for (modifier in it.overclockModifiers) { - if (modifier.isBuff || (!activeCooling && modifier.debuff)) { - if (modifier.type == EFabricatorParallelProc.Type.MULTIPLY) modifierList.add(modifier) - else parallelism = modifier.apply(parallelism) - } - } - } - } - modifierList.forEach { parallelism = it.apply(parallelism) } - - this.parallelism = parallelism.roundToInt() - } - - @Synchronized - fun convertOverflowParallelismToWorkDelay(overflow: Int) { - if (overflow <= 0 || speedupApplied) { - return - } - val ratio = parallelism.toFloat() / overflow - var speedUp = min((ratio / 0.05f).roundToInt(), maxWorkDelay - 1) - - val coolantUsage = parallelism * 0.04 - val maxCanConsume = (coolantCache / coolantUsage).toInt() - speedUp = min(speedUp, maxCanConsume) - coolantCache -= (speedUp * coolantUsage).roundToLong().toInt() - - this.workDelay = maxWorkDelay - speedUp - this.speedupApplied = true - } - - fun updateWorkDelay() { - if (activeCooling) { - this.maxWorkDelay = WORK_DELAY - this.getWorkers().size - } else { - this.maxWorkDelay = WORK_DELAY - } - } - - fun recalculateEnergyUsage() { - var newIdleDrain = 64.0 - val allPatterns = - this.getPatternBuses().stream().mapToInt { it.validPatterns }.sum() - newIdleDrain += allPatterns.toDouble() - if (this.energyConsumePerTick != newIdleDrain) { - this.energyConsumePerTick = newIdleDrain - if (this.channel != null) { - this.channel!!.mainNode.setIdlePowerUsage(this.energyConsumePerTick) - } - } - } - - fun insertPattern(patternStack: ItemStack): Boolean { - for (patternBus in this.getPatternBuses()) { - val patternInv = patternBus.patterns - for (i in 0.. { - return parts.getParts(EFabricatorWorker::class.java) - } - - fun getPatternBuses(): List { - return parts.getParts(EFabricatorPatternBus::class.java) - } - - fun getParallelProcs(): List { - return parts.getParts(EFabricatorParallelProc::class.java) - } - - fun getAvailableParallelism(): Int { - return max(0, parallelism - consumedParallelism) - } - - fun getEnergyStored(): Int { - return this.getWorkers().stream().mapToInt { it.energyCache }.sum() - } - - fun consumeCoolant(amount: Int) { - coolantCache -= amount - } - - fun getCoolantInputCap(): Int { - var total = 0 - for (handler in coolantInputHandlers) { - for (property in handler.tankProperties) { - total += min(property.capacity, Int.MAX_VALUE - total) - if (total == Int.MAX_VALUE) { - return Int.MAX_VALUE - } - } - } - return total - } - - fun getCoolantInputFluids(): Int { - var total = 0 - for (handler in coolantInputHandlers) { - for (property in handler.tankProperties) { - val contents = property.contents - if (contents == null || contents.amount == 0) { - continue - } - if (MachineCoolants.INSTANCE.getCoolant(contents.fluid) != null) { - total += min(contents.amount, Int.MAX_VALUE - total) - if (total >= Int.MAX_VALUE) { - return Int.MAX_VALUE - } - } - } - } - return total - } - - fun getCoolantOutputCap(): Int { - var total = 0 - for (handler in coolantOutputHandlers) { - for (property in handler.tankProperties) { - total += min(property.capacity, Int.MAX_VALUE - total) - if (total == Int.MAX_VALUE) { - return Int.MAX_VALUE - } - } - } - return total - } - - fun getCoolantOutputFluids(): Int { - var total = 0 - for (handler in coolantOutputHandlers) { - for (property in handler.tankProperties) { - val contents = property.contents - if (contents == null || contents.amount == 0) { - continue - } - total += min(contents.amount, Int.MAX_VALUE - total) - if (total == Int.MAX_VALUE) { - return Int.MAX_VALUE - } - } - } - return total - } - - override fun getControllerBlock(): Class { - return BlockEFabricatorController::class.java - } - - override fun validate() { - if (!FMLCommonHandler.instance().effectiveSide.isClient) { - return - } - - ClientProxy.clientScheduler.addRunnable({ - BlockModelHider.hideOrShowBlocks(HIDE_POS_LIST, this) - notifyStructureFormedState(isStructureFormed) - }, 0) - } - - override fun invalidate() { - super.invalidate() - if (FMLCommonHandler.instance().effectiveSide.isClient) { - BlockModelHider.hideOrShowBlocks(HIDE_POS_LIST, this) - } - } - - override fun onLoad() { - super.onLoad() - if (!FMLCommonHandler.instance().effectiveSide.isClient) { - return - } - ClientProxy.clientScheduler.addRunnable({ - BlockModelHider.hideOrShowBlocks(HIDE_POS_LIST, this) - notifyStructureFormedState(isStructureFormed) - }, 0) - } - - override fun readCustomNBT(compound: NBTTagCompound) { - val prevLoaded = loaded - loaded = false - - super.readCustomNBT(compound) - totalCrafted = compound.getLong("totalCrafted") - overclocked = compound.getBoolean("overclock") - activeCooling = compound.getBoolean("activeCooling") - coolantCache = compound.getInteger("coolantCache") - - outputBuffer = KeyCounter() - val list = compound.getTagList("outputBuffer", Constants.NBT.TAG_COMPOUND) - for (stack in GenericStack.readList(list)) { - if (stack != null) { - outputBuffer.add(stack.what(), stack.amount()) - } - } - - loaded = prevLoaded - - if (FMLCommonHandler.instance().effectiveSide.isClient) { - ClientProxy.clientScheduler.addRunnable({ - BlockModelHider.hideOrShowBlocks(HIDE_POS_LIST, this) - notifyStructureFormedState(isStructureFormed) - }, 0) - } - } - - override fun writeCustomNBT(compound: NBTTagCompound) { - super.writeCustomNBT(compound) - compound.setLong("totalCrafted", totalCrafted) - compound.setBoolean("overclock", overclocked) - compound.setBoolean("activeCooling", activeCooling) - compound.setInteger("coolantCache", coolantCache) - - synchronized(outputBuffer) { - val stacks = ObjectArrayList() - for (entry in outputBuffer) { - stacks.add(GenericStack(entry.key, entry.longValue)) - } - compound.setTag("outputBuffer", GenericStack.writeList(stacks)) - } - } - - override fun readMachineNBT(compound: NBTTagCompound) { - super.readMachineNBT(compound) - } -} \ No newline at end of file diff --git a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorMEChannel.java b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorMEChannel.java index 25dbd79b..b299a678 100644 --- a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorMEChannel.java +++ b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorMEChannel.java @@ -1,49 +1,64 @@ package github.kasuminova.novaeng.common.tile.ecotech.efabricator; -import appeng.api.networking.GridFlags; -import appeng.api.networking.IGridNode; -import appeng.api.networking.crafting.ICraftingPatternDetails; -import appeng.api.networking.crafting.ICraftingProvider; -import appeng.api.networking.crafting.ICraftingProviderHelper; -import appeng.api.networking.events.MENetworkChannelsChanged; -import appeng.api.networking.events.MENetworkCraftingPatternChange; -import appeng.api.networking.events.MENetworkEventSubscribe; -import appeng.api.networking.events.MENetworkPowerStatusChange; -import appeng.api.networking.security.IActionHost; -import appeng.api.networking.security.IActionSource; -import appeng.api.util.AECableType; -import appeng.api.util.AEPartLocation; -import appeng.api.util.DimensionalCoord; -import appeng.me.GridAccessException; -import appeng.me.helpers.AENetworkProxy; -import appeng.me.helpers.IGridProxyable; -import appeng.me.helpers.MachineSource; -import com.glodblock.github.common.item.ItemFluidPacket; -import com.glodblock.github.common.item.fake.FakeItemRegister; -import com.glodblock.github.util.FluidCraftingPatternDetails; -import github.kasuminova.mmce.common.util.PatternItemFilter; +import ae2.api.AECapabilities; +import ae2.api.crafting.IPatternDetails; +import ae2.api.crafting.PatternDetailsHelper; +import ae2.api.networking.GridFlags; +import ae2.api.networking.IGridNode; +import ae2.api.networking.IGridNodeListener; +import ae2.api.networking.IManagedGridNode; +import ae2.api.networking.crafting.ICraftingProvider; +import ae2.api.stacks.AEItemKey; +import ae2.api.stacks.KeyCounter; +import ae2.api.networking.security.IActionSource; +import ae2.api.util.AECableType; +import ae2.me.ManagedGridNode; +import ae2.me.helpers.IGridConnectedTile; +import ae2.me.helpers.MachineSource; +import com.google.common.primitives.Ints; import github.kasuminova.novaeng.common.block.ecotech.efabricator.BlockEFabricatorMEChannel; import github.kasuminova.novaeng.common.tile.ecotech.efabricator.EFabricatorWorker.CraftWork; import hellfirepvp.modularmachinery.ModularMachinery; -import net.minecraft.inventory.InventoryCrafting; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fluids.FluidStack; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import org.jetbrains.annotations.NotNull; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Arrays; +import java.util.Collections; +import java.util.List; import java.util.Objects; -public final class EFabricatorMEChannel extends EFabricatorPart implements ICraftingProvider, IActionHost, IGridProxyable { +public final class EFabricatorMEChannel extends EFabricatorPart implements ICraftingProvider, IGridConnectedTile { - private final AENetworkProxy aEProxy = new AENetworkProxy(this, "channel", this.getVisualItemStack(), true); + private final IGridNodeListener nodeListener = new IGridNodeListener<>() { + @Override + public void onSaveChanges(EFabricatorMEChannel nodeOwner, IGridNode node) { + nodeOwner.saveChanges(); + } + + @Override + public void onStateChanged(EFabricatorMEChannel nodeOwner, IGridNode node, State state) { + nodeOwner.postPatternChangeEvent(); + } + }; + private final ItemStack visualItemStack; + private final IManagedGridNode mainNode = new ManagedGridNode(this, nodeListener); private final IActionSource source = new MachineSource(this); private boolean wasActive; public EFabricatorMEChannel() { - this.aEProxy.setIdlePowerUsage(1.0); - this.aEProxy.setFlags(GridFlags.REQUIRE_CHANNEL, GridFlags.DENSE_CAPACITY); + var controller = getController(); + visualItemStack = controller == null ? new ItemStack(BlockEFabricatorMEChannel.INSTANCE) : new ItemStack(Objects.requireNonNull(controller.getParentController())); + mainNode.setIdlePowerUsage(1.0) + .setFlags(GridFlags.REQUIRE_CHANNEL, GridFlags.DENSE_CAPACITY) + .setVisualRepresentation(this.visualItemStack) + .setInWorldNode(true) + .setTagName("channel"); } private static ItemStack getContainerItem(@Nullable final ItemStack stack) { @@ -76,96 +91,74 @@ public ItemStack getVisualItemStack() { : new ItemStack(Objects.requireNonNull(controller.getParentController())); } - @MENetworkEventSubscribe - public void stateChange(final MENetworkPowerStatusChange event) { - this.postPatternChangeEvent(); - } - - @MENetworkEventSubscribe - public void stateChange(final MENetworkChannelsChanged event) { - this.postPatternChangeEvent(); - } - private void postPatternChangeEvent() { - final boolean active = this.aEProxy.isActive(); + final boolean active = this.mainNode.isActive(); if (this.wasActive != active) { this.wasActive = active; - try { - this.aEProxy.getGrid().postEvent(new MENetworkCraftingPatternChange(this, this.aEProxy.getNode())); - } catch (final GridAccessException ignored) { - } + ICraftingProvider.requestUpdate(mainNode); } } @Override - public void provideCrafting(final ICraftingProviderHelper tracker) { + public List getAvailablePatterns() { final EFabricatorController controller = this.getController(); if (controller == null) { - return; + return Collections.emptyList(); } + + final var patternBuses = controller.getPatternBuses(); + if (patternBuses == null) { + return Collections.emptyList(); + } + + final List details = new ObjectArrayList<>(); for (final var bus : controller.getPatternBuses()) { - bus.provideCrafting(this, tracker); + details.addAll(bus.getDetails()); } + return details; } @Override - public boolean pushPattern(final ICraftingPatternDetails pattern, final InventoryCrafting table) { + public boolean pushPattern(final IPatternDetails pattern, final KeyCounter[] inputHolder, final int multiplier) { if (this.isBusy()) { return false; } - if (!pattern.isCraftable()) { - return pattern instanceof FluidCraftingPatternDetails fluid && this.pushFluidPattern(fluid, table); + + if (!(pattern.getPrimaryOutput().what() instanceof AEItemKey outputKey)) { + return false; } - final ItemStack output = pattern.getOutput(table, this.getWorld()); - if (output.isEmpty()) { + if (inputHolder.length > 9 || multiplier <= 0) { return false; } + final ItemStack[] remaining = new ItemStack[9]; Arrays.fill(remaining, ItemStack.EMPTY); - int size = 0; - for (int i = 0; i < Math.min(table.getSizeInventory(), 9); i++) { - final ItemStack item = table.getStackInSlot(i); - if (!item.isEmpty()) { - if (size == 0) { - size = item.getCount(); - } - remaining[i] = getContainerItem(item); + for (int i = 0; i < inputHolder.length; i++) { + final var entry = inputHolder[i].getFirstEntry(); + if (entry == null) { + return false; } + final long value = entry.getLongValue(); + if (!(entry.getKey() instanceof AEItemKey key)) { + return false; + } + remaining[i] = getContainerItem(key.toStack(Ints.saturatedCast(value))); } - output.setCount(output.getCount() * size); - return this.partController.offerWork(new CraftWork(remaining, output, size)); - } - - private boolean pushFluidPattern(final FluidCraftingPatternDetails pattern, final InventoryCrafting table) { - final var outputs = pattern.getOutputs(); - final ItemStack output = outputs[0] == null ? ItemStack.EMPTY : outputs[0].getCachedItemStack(outputs[0].getStackSize()); - if (output.isEmpty()) { + final var outputAmount = Math.multiplyExact(pattern.getPrimaryOutput().amount(), multiplier); + if (outputAmount > Integer.MAX_VALUE) { return false; } - final ItemStack[] remaining = new ItemStack[9]; - Arrays.fill(remaining, ItemStack.EMPTY); - int size = 0; - for (int i = 0; i < Math.min(table.getSizeInventory(), 9); i++) { - final ItemStack item = table.getStackInSlot(i); - if (!item.isEmpty()) { - if (size == 0) { - size = item.getCount(); - if (item.getItem() instanceof ItemFluidPacket) { - final int amount = ((FluidStack) FakeItemRegister.getStack(item)).amount; - final int patternAmount = ((FluidStack) FakeItemRegister.getStack(pattern.getInputs()[i])).amount; - size = amount / patternAmount; - } - } - remaining[i] = getContainerItem(item); - } - } - output.setCount(output.getCount() * size); - return this.partController.offerWork(new CraftWork(remaining, output, size)); + return this.partController.offerWork(new CraftWork(remaining, outputKey.toStack(Ints.saturatedCast(outputAmount)), multiplier)); } public boolean insertPattern(final ItemStack stack) { - return PatternItemFilter.INSTANCE.allowInsert(null, -1, stack) - && this.partController != null && this.partController.insertPattern(stack); + if (!PatternDetailsHelper.isEncodedPattern(stack)) { + return false; + } + if (partController != null) { + return partController.insertPattern(stack); + } + return false; } @Override @@ -175,73 +168,42 @@ public boolean isBusy() { @Override @Nonnull - public IGridNode getActionableNode() { - return this.aEProxy.getNode(); - } - - @Override - @Nonnull - public AENetworkProxy getProxy() { - return this.aEProxy; - } - - @Override - @Nonnull - public DimensionalCoord getLocation() { - return new DimensionalCoord(this); - } - - @Override - public void gridChanged() { - } - - @Override - @Nullable - public IGridNode getGridNode(@Nonnull final AEPartLocation direction) { - return this.aEProxy.getNode(); - } - - @Override - @Nonnull - public AECableType getCableConnectionType(@Nonnull final AEPartLocation direction) { - return AECableType.DENSE_SMART; - } - - @Override - public void securityBreak() { - this.getWorld().destroyBlock(this.getPos(), true); + public IManagedGridNode getMainNode() { + return this.mainNode; } @Override public void readCustomNBT(final NBTTagCompound tag) { super.readCustomNBT(tag); - this.aEProxy.readFromNBT(tag); + this.mainNode.loadFromNBT(tag); } @Override public void writeCustomNBT(final NBTTagCompound tag) { super.writeCustomNBT(tag); - this.aEProxy.writeToNBT(tag); + this.mainNode.saveToNBT(tag); } @Override public void onChunkUnload() { super.onChunkUnload(); - this.aEProxy.onChunkUnload(); + this.mainNode.destroy(); } @Override public void invalidate() { super.invalidate(); - this.aEProxy.invalidate(); + this.mainNode.destroy(); } @Override public void onAssembled() { super.onAssembled(); - this.aEProxy.setVisualRepresentation(this.getVisualItemStack()); + this.mainNode.setVisualRepresentation(this.getVisualItemStack()); ModularMachinery.EXECUTE_MANAGER.addSyncTask(() -> { - this.aEProxy.onReady(); + if (!mainNode.isReady() && !getWorld().isRemote) { + this.mainNode.create(getWorld(), getPos()); + } this.partController.recalculateEnergyUsage(); }); } @@ -249,7 +211,30 @@ public void onAssembled() { @Override public void onDisassembled() { super.onDisassembled(); - this.aEProxy.setVisualRepresentation(this.getVisualItemStack()); - this.aEProxy.invalidate(); + this.mainNode.setVisualRepresentation(this.getVisualItemStack()); + this.mainNode.destroy(); + } + + @Override + public void saveChanges() { + this.markDirty(); + } + + @Override + public AECableType getCableConnectionType(EnumFacing dir) { + return AECableType.DENSE_SMART; + } + + @Override + public boolean hasCapability(@NotNull Capability capability, @Nullable EnumFacing facing) { + return capability == AECapabilities.IN_WORLD_GRID_NODE_HOST || super.hasCapability(capability, facing); + } + + @Override + public @Nullable T getCapability(@NotNull Capability capability, @Nullable EnumFacing facing) { + if (capability == AECapabilities.IN_WORLD_GRID_NODE_HOST) { + return AECapabilities.IN_WORLD_GRID_NODE_HOST.cast(this); + } + return super.getCapability(capability, facing); } } diff --git a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorMEChannel.kt b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorMEChannel.kt deleted file mode 100644 index 10ce5952..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorMEChannel.kt +++ /dev/null @@ -1,189 +0,0 @@ -package github.kasuminova.novaeng.common.tile.ecotech.efabricator - -import ae2.api.AECapabilities -import ae2.api.crafting.IPatternDetails -import ae2.api.crafting.PatternDetailsHelper -import ae2.api.networking.GridFlags -import ae2.api.networking.IGridNode -import ae2.api.networking.IGridNodeListener -import ae2.api.networking.IManagedGridNode -import ae2.api.networking.crafting.ICraftingProvider -import ae2.api.stacks.AEItemKey -import ae2.api.stacks.KeyCounter -import ae2.api.networking.security.IActionSource -import ae2.api.util.AECableType -import ae2.me.ManagedGridNode -import ae2.me.helpers.IGridConnectedTile -import ae2.me.helpers.MachineSource -import github.kasuminova.novaeng.common.block.ecotech.efabricator.BlockEFabricatorMEChannel -import github.kasuminova.novaeng.common.tile.ecotech.efabricator.EFabricatorWorker.CraftWork -import hellfirepvp.modularmachinery.ModularMachinery -import net.minecraft.item.ItemStack -import net.minecraft.nbt.NBTTagCompound -import net.minecraft.util.EnumFacing -import net.minecraftforge.common.capabilities.Capability - -class EFabricatorMEChannel : EFabricatorPart(), ICraftingProvider, IGridConnectedTile { - - companion object { - private fun getContainerItem(stackInSlot: ItemStack?): ItemStack { - if (stackInSlot == null) { - return ItemStack.EMPTY - } else { - val i = stackInSlot.item - if (i != null && i.hasContainerItem(stackInSlot)) { - var ci = i.getContainerItem(stackInSlot) - if (!ci.isEmpty && ci.isItemStackDamageable && ci.getItemDamage() == ci.maxDamage) { - ci = ItemStack.EMPTY - } - - ci.count = stackInSlot.count - return ci - } else if (!stackInSlot.isEmpty) { - stackInSlot.count = 0 - return stackInSlot - } else return ItemStack.EMPTY - } - } - } - - private val nodeListener = object : IGridNodeListener { - override fun onSaveChanges(nodeOwner: EFabricatorMEChannel, node: IGridNode) { - nodeOwner.saveChanges() - } - - override fun onStateChanged(nodeOwner: EFabricatorMEChannel, node: IGridNode, state: IGridNodeListener.State) { - nodeOwner.postPatternChange() - } - } - - @JvmField - val mainNode: IManagedGridNode = ManagedGridNode(this, nodeListener) - .setIdlePowerUsage(1.0) - .setFlags(GridFlags.REQUIRE_CHANNEL, GridFlags.DENSE_CAPACITY) - .setVisualRepresentation(this.visualItemStack) - .setInWorldNode(true) - .setTagName("channel") - val source: IActionSource = MachineSource(this) - - private var wasActive = false - - val visualItemStack: ItemStack - get() { - val controller: EFabricatorController? = getController() - return if (controller == null) ItemStack(BlockEFabricatorMEChannel.INSTANCE) - else ItemStack(controller.parentController!!) - } - - private fun postPatternChange() { - val currentActive = this.mainNode.isActive - if (this.wasActive != currentActive) { - this.wasActive = currentActive - ICraftingProvider.requestUpdate(mainNode) - } - } - - override fun getAvailablePatterns(): List { - return controller?.getPatternBuses()?.flatMap { it.getDetails() } ?: emptyList() - } - - override fun pushPattern(pattern: IPatternDetails, inputHolder: Array, multiplier: Int): Boolean { - if (isBusy()) { - return false - } - - val outputKey = pattern.primaryOutput.what as? AEItemKey ?: return false - if (inputHolder.size > 9 || multiplier <= 0) { - return false - } - - val remaining = Array(9) { i -> ItemStack.EMPTY } - for (i in inputHolder.indices) { - val entries = inputHolder[i].toList() - if (entries.size != 1 || entries[0].longValue > Int.MAX_VALUE) { - return false - } - val key = entries[0].key as? AEItemKey ?: return false - remaining[i] = getContainerItem(key.toStack(entries[0].longValue.toInt())) - } - - val outputAmount = Math.multiplyExact(pattern.primaryOutput.amount, multiplier.toLong()) - if (outputAmount > Int.MAX_VALUE) { - return false - } - return partController?.offerWork(CraftWork(remaining, outputKey.toStack(outputAmount.toInt()), multiplier)) ?: false - } - - fun insertPattern(patternStack: ItemStack): Boolean { - if (!PatternDetailsHelper.isEncodedPattern(patternStack)) { - return false - } - if (partController != null) { - return partController.insertPattern(patternStack) - } - return false - } - - override fun isBusy(): Boolean { - if (partController != null) { - return partController.isQueueFull() - } - return true - } - - override fun readCustomNBT(compound: NBTTagCompound?) { - super.readCustomNBT(compound) - mainNode.loadFromNBT(compound) - } - - override fun writeCustomNBT(compound: NBTTagCompound?) { - super.writeCustomNBT(compound) - mainNode.saveToNBT(compound) - } - - override fun onChunkUnload() { - super.onChunkUnload() - mainNode.destroy() - } - - override fun invalidate() { - super.invalidate() - mainNode.destroy() - } - - override fun onAssembled() { - super.onAssembled() - mainNode.setVisualRepresentation(this.visualItemStack) - ModularMachinery.EXECUTE_MANAGER.addSyncTask { - if (!mainNode.isReady() && !getWorld().isRemote) { - mainNode.create(getWorld(), getPos()) - } - partController?.recalculateEnergyUsage() - } - } - - override fun onDisassembled() { - super.onDisassembled() - mainNode.setVisualRepresentation(this.visualItemStack) - mainNode.destroy() - } - - override fun getMainNode(): IManagedGridNode = mainNode - - override fun saveChanges() { - markDirty() - } - - override fun getCableConnectionType(dir: EnumFacing): AECableType = AECableType.DENSE_SMART - - override fun hasCapability(capability: Capability<*>, facing: EnumFacing?): Boolean { - return capability === AECapabilities.IN_WORLD_GRID_NODE_HOST || super.hasCapability(capability, facing) - } - - override fun getCapability(capability: Capability, facing: EnumFacing?): T? { - if (capability === AECapabilities.IN_WORLD_GRID_NODE_HOST) { - return AECapabilities.IN_WORLD_GRID_NODE_HOST.cast(this) - } - return super.getCapability(capability, facing) - } -} \ No newline at end of file diff --git a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorPatternBus.java b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorPatternBus.java index e94f0147..fe591f09 100644 --- a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorPatternBus.java +++ b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorPatternBus.java @@ -1,19 +1,12 @@ package github.kasuminova.novaeng.common.tile.ecotech.efabricator; -import appeng.api.implementations.ICraftingPatternItem; -import appeng.api.networking.crafting.ICraftingPatternDetails; -import appeng.api.networking.crafting.ICraftingProvider; -import appeng.api.networking.crafting.ICraftingProviderHelper; -import appeng.api.networking.events.MENetworkCraftingPatternChange; -import appeng.api.storage.data.IAEItemStack; -import appeng.items.misc.ItemEncodedPattern; -import appeng.me.GridAccessException; -import appeng.tile.inventory.AppEngInternalInventory; -import appeng.util.inv.IAEAppEngInventory; -import appeng.util.inv.InvOperation; -import com.glodblock.github.util.FluidCraftingPatternDetails; -import com.glodblock.github.util.FluidPatternDetails; -import github.kasuminova.mmce.common.util.PatternItemFilter; +import ae2.api.crafting.IPatternDetails; +import ae2.api.crafting.PatternDetailsHelper; +import ae2.api.networking.crafting.ICraftingProvider; +import ae2.api.stacks.AEKey; +import ae2.api.stacks.GenericStack; +import ae2.util.inv.AppEngInternalInventory; +import ae2.util.inv.InternalInventoryHost; import github.kasuminova.novaeng.NovaEngineeringCore; import github.kasuminova.novaeng.common.container.ContainerEFabricatorPatternSearch; import github.kasuminova.novaeng.common.container.data.EFabricatorPatternData; @@ -29,27 +22,25 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.List; import java.util.Set; -public final class EFabricatorPatternBus extends EFabricatorPart implements IAEAppEngInventory { +public final class EFabricatorPatternBus extends EFabricatorPart implements InternalInventoryHost { public static final int PATTERN_SLOTS = 72; - private final Set aePatterns = new ObjectOpenHashSet<>(); - private final AppEngInternalInventory patterns = new AppEngInternalInventory(this, PATTERN_SLOTS, 1, PatternItemFilter.INSTANCE); - private final ObjectArrayList details = new ObjectArrayList<>(PATTERN_SLOTS); + private final Set aePatterns = new ObjectOpenHashSet<>(); + private final AppEngInternalInventory patterns = new AppEngInternalInventory(this, PATTERN_SLOTS, 1); + private final ObjectArrayList details = new ObjectArrayList<>(PATTERN_SLOTS); private int validPatterns; - private ICraftingPatternDetails[] detailsSnapshot; public EFabricatorPatternBus() { this.details.size(PATTERN_SLOTS); } - public Set getAePatterns() { + public Set getAePatterns() { return this.aePatterns; } @@ -61,28 +52,21 @@ private void refreshPatterns() { for (int i = 0; i < PATTERN_SLOTS; i++) { this.refreshPattern(i); } + this.refreshPatternOutputs(); this.notifyPatternChanged(); } private void refreshPattern(final int slot) { - this.detailsSnapshot = null; - if (this.details.set(slot, null) != null) { - this.validPatterns--; - } + details.set(slot, null); final ItemStack pattern = this.patterns.getStackInSlot(slot); - if (pattern.isEmpty() || !(pattern.getItem() instanceof ICraftingPatternItem item)) { + if (pattern.isEmpty()) { return; } - final var detail = item.getPatternForItem(pattern, this.getWorld()); - if (detail != null && (detail.isCraftable() || detail instanceof FluidCraftingPatternDetails)) { - this.details.set(slot, detail); - this.validPatterns++; - this.detailsSnapshot = null; - } + this.details.set(slot, PatternDetailsHelper.decodePattern(pattern, getWorld())); } - public List getDetails() { - final List result = new ObjectArrayList<>(this.validPatterns); + public List getDetails() { + final List result = new ObjectArrayList<>(this.validPatterns); for (final var detail : this.details) { if (detail != null) { result.add(detail); @@ -95,61 +79,39 @@ public int getValidPatterns() { return this.validPatterns; } - void provideCrafting(final ICraftingProvider provider, final ICraftingProviderHelper tracker) { - ICraftingPatternDetails[] snapshot = this.detailsSnapshot; - if (snapshot == null) { - snapshot = new ICraftingPatternDetails[this.validPatterns]; - int index = 0; - for (final ICraftingPatternDetails detail : this.details) { - if (detail != null) { - snapshot[index++] = detail; - } - } - this.detailsSnapshot = snapshot; - } - for (final ICraftingPatternDetails detail : snapshot) { - if (detail.isCraftable() || detail instanceof FluidCraftingPatternDetails) { - tracker.addCraftingOption(provider, detail); - } - } - } - @Override - public void saveChanges() { + public void saveChangedInventory(AppEngInternalInventory inv) { this.markNoUpdateSync(); } @Override - public void onChangeInventory(final IItemHandler inventory, final int slot, final InvOperation operation, - final ItemStack removed, final ItemStack added) { + public void onChangeInventory(final AppEngInternalInventory inventory, final int slot) { this.refreshPattern(slot); - this.notifyPatternChanged(); this.sendPatternSearchGUIUpdateToClient(slot); - switch (operation) { - case EXTRACT -> this.removePattern(removed); - case INSERT -> this.addPattern(added); - case SET -> { - this.removePattern(removed); - this.addPattern(added); - } - } + this.refreshPatternOutputs(); + this.notifyPatternChanged(); } - private void addPattern(final ItemStack stack) { - if (stack.getItem() instanceof ItemEncodedPattern item) { - final var pattern = item.getPatternForItem(stack, this.world); - if (pattern != null && (pattern.isCraftable() || pattern instanceof FluidPatternDetails)) { - this.aePatterns.add(pattern.getCondensedOutputs()[0]); - } - } + @Override + public boolean isClientSide() { + return world != null && world.isRemote; } - private void removePattern(final ItemStack stack) { - if (stack.getItem() instanceof ItemEncodedPattern item) { - final var pattern = item.getPatternForItem(stack, this.world); - if (pattern != null && (pattern.isCraftable() || pattern instanceof FluidPatternDetails)) { - this.aePatterns.remove(pattern.getCondensedOutputs()[0]); + private void refreshPatternOutputs() { + aePatterns.clear(); + for (IPatternDetails detail : details) { + if (detail == null) { + return; + } + final GenericStack stack = detail.getPrimaryOutput(); + if (stack == null) { + return; } + final AEKey key = stack.what(); + if (key == null) { + return; + } + aePatterns.add(key); } } @@ -157,12 +119,13 @@ private void notifyPatternChanged() { if (this.partController == null) { return; } - try { - final var channel = this.partController.getChannel(); - if (channel != null && channel.getProxy().isActive()) { - channel.getProxy().getGrid().postEvent(new MENetworkCraftingPatternChange(channel, channel.getProxy().getNode())); - } - } catch (final GridAccessException ignored) { + final var channel = this.partController.getChannel(); + if (channel == null) { + return; + } + final var mainNode = channel.getMainNode(); + if (mainNode.isActive()) { + ICraftingProvider.requestUpdate(mainNode); } this.partController.recalculateEnergyUsage(); } @@ -213,10 +176,8 @@ public T getCapability(@Nonnull final Capability capability, @Nullable fi @Override public void readCustomNBT(final NBTTagCompound tag) { super.readCustomNBT(tag); - this.patterns.readFromNBT(tag.getCompoundTag("patterns")); - for (final ItemStack stack : this.patterns) { - this.addPattern(stack); - } + this.patterns.readFromNBT(tag, "patterns"); + refreshPatterns(); } @Override diff --git a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorPatternBus.kt b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorPatternBus.kt deleted file mode 100644 index afc1ffba..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorPatternBus.kt +++ /dev/null @@ -1,164 +0,0 @@ -package github.kasuminova.novaeng.common.tile.ecotech.efabricator - -import ae2.api.crafting.IPatternDetails -import ae2.api.crafting.PatternDetailsHelper -import ae2.api.networking.crafting.ICraftingProvider -import ae2.api.stacks.AEKey -import ae2.util.inv.AppEngInternalInventory -import ae2.util.inv.InternalInventoryHost -import github.kasuminova.novaeng.NovaEngineeringCore -import github.kasuminova.novaeng.common.container.ContainerEFabricatorPatternSearch -import github.kasuminova.novaeng.common.container.data.EFabricatorPatternData -import github.kasuminova.novaeng.common.network.PktEFabricatorPatternSearchGUIUpdate -import hellfirepvp.modularmachinery.ModularMachinery -import it.unimi.dsi.fastutil.objects.ObjectArrayList -import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet -import net.minecraft.entity.player.EntityPlayer -import net.minecraft.entity.player.EntityPlayerMP -import net.minecraft.nbt.NBTTagCompound -import net.minecraft.util.EnumFacing -import net.minecraftforge.common.capabilities.Capability -import net.minecraftforge.fml.common.FMLCommonHandler -import net.minecraftforge.items.CapabilityItemHandler -import java.util.function.Consumer -import javax.annotation.Nonnull - -class EFabricatorPatternBus : EFabricatorPart(), InternalInventoryHost { - - companion object { - const val PATTERN_SLOTS = 12 * 6 - } - - val aePatterns = ObjectOpenHashSet() - val patterns = AppEngInternalInventory(this, PATTERN_SLOTS, 1) - private val details = ObjectArrayList(PATTERN_SLOTS) - - init { - // Initialize details... - repeat(PATTERN_SLOTS) { details.add(null) } - } - - private fun refreshPatterns() { - for (i in 0.. { - return details.filterNotNull() - } - - val validPatterns: Int - get() = details.count { it != null } - - override fun saveChangedInventory(inv: AppEngInternalInventory) { - markNoUpdateSync() - } - - override fun isClientSide(): Boolean { - return world != null && world.isRemote - } - - override fun onChangeInventory(inv: AppEngInternalInventory, slot: Int) { - refreshPattern(slot) - sendPatternSearchGUIUpdateToClient(slot) - refreshPatternOutputs() - notifyPatternChanged() - } - - private fun refreshPatternOutputs() { - aePatterns.clear() - for (detail in details) { - detail?.primaryOutput?.what?.let(aePatterns::add) - } - } - - private fun notifyPatternChanged() { - if (this.partController == null) { - return - } - val channel: EFabricatorMEChannel? = this.partController.channel - if (channel != null && channel.mainNode.isActive) { - ICraftingProvider.requestUpdate(channel.mainNode) - } - this.partController.recalculateEnergyUsage() - } - - private fun sendPatternSearchGUIUpdateToClient(slot: Int) { - if (this.partController == null) { - return - } - - val players = ObjectArrayList() - world.playerEntities.stream() - .filter { obj: EntityPlayer -> EntityPlayerMP::class.java.isInstance(obj) } - .map { obj: EntityPlayer -> EntityPlayerMP::class.java.cast(obj) } - .forEach { playerMP: EntityPlayerMP -> - val openContainer = playerMP.openContainer - if (openContainer is ContainerEFabricatorPatternSearch) { - if (openContainer.getOwner() === this.partController) { - players.add(playerMP) - } - } - } - - if (!players.isEmpty) { - val pktUpdate = PktEFabricatorPatternSearchGUIUpdate( - PktEFabricatorPatternSearchGUIUpdate.UpdateType.SINGLE, - EFabricatorPatternData.of( - EFabricatorPatternData.PatternData(getPos(), slot, patterns.getStackInSlot(slot)) - ) - ) - players.forEach(Consumer { player: EntityPlayerMP? -> - NovaEngineeringCore.NET_CHANNEL.sendTo( - pktUpdate, - player - ) - }) - } - } - - override fun validate() { - super.validate() - if (FMLCommonHandler.instance().effectiveSide.isServer) { - ModularMachinery.EXECUTE_MANAGER.addSyncTask { this.refreshPatterns() } - } - } - - override fun hasCapability(@Nonnull capability: Capability<*>, facing: EnumFacing?): Boolean { - return capability === CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing) - } - - override fun getCapability(@Nonnull capability: Capability, facing: EnumFacing?): T? { - val cap = CapabilityItemHandler.ITEM_HANDLER_CAPABILITY - if (capability === cap) { - return cap.cast(patterns.toItemHandler()) - } - return super.getCapability(capability, facing) - } - - override fun readCustomNBT(compound: NBTTagCompound) { - super.readCustomNBT(compound) - patterns.readFromNBT(compound, "patterns") - refreshPatterns() - } - - override fun writeCustomNBT(compound: NBTTagCompound?) { - super.writeCustomNBT(compound) - patterns.writeToNBT(compound, "patterns") - } -} diff --git a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorWorker.java b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorWorker.java index 0d57a431..1899e9bf 100644 --- a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorWorker.java +++ b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorWorker.java @@ -1,11 +1,11 @@ package github.kasuminova.novaeng.common.tile.ecotech.efabricator; -import appeng.api.config.Actionable; -import appeng.api.networking.energy.IEnergyGrid; -import appeng.api.storage.data.IAEItemStack; -import appeng.api.storage.data.IItemList; -import appeng.me.GridAccessException; -import appeng.util.item.AEItemStack; +import ae2.api.config.Actionable; +import ae2.api.networking.IGrid; +import ae2.api.networking.IGridNode; +import ae2.api.networking.energy.IEnergyService; +import ae2.api.stacks.AEItemKey; +import ae2.api.stacks.KeyCounter; import github.kasuminova.novaeng.NovaEngineeringCore; import github.kasuminova.novaeng.common.block.ecotech.efabricator.prop.WorkerStatus; import github.kasuminova.novaeng.common.network.PktEFabricatorWorkerStatusUpdate; @@ -92,13 +92,16 @@ public synchronized int doWork() { final int usage = controller.getOverclocked() && !controller.getActiveCooling() ? controller.getLevel().applyOverclockEnergyUsage(ENERGY_USAGE) : ENERGY_USAGE; double energy = this.energyCache; - IEnergyGrid grid = null; + IEnergyService grid = null; final var channel = controller.getChannel(); if (channel != null) { - try { - grid = channel.getProxy().getGrid().getCache(IEnergyGrid.class); - energy += grid.getStoredPower(); - } catch (final GridAccessException ignored) { + IGridNode node = channel.getMainNode().getNode(); + if (node != null) { + IGrid igrid = node.grid(); + if (igrid != null) { + grid = igrid.getEnergyService(); + energy += grid.getStoredPower(); + } } } int parallelism = (int) Math.min(Math.max(controller.getAvailableParallelism(), 1), energy / usage); @@ -106,7 +109,7 @@ public synchronized int doWork() { parallelism = Math.min(parallelism, coolant / COOLANT_USAGE); } int completed = 0; - final IItemList output = controller.getOutputBuffer(); + final KeyCounter output = controller.getOutputBuffer(); synchronized (output) { while (parallelism > completed && !this.queue.isEmpty()) { final CraftWork work = this.queue.poll(); @@ -120,10 +123,16 @@ public synchronized int doWork() { } for (final ItemStack remaining : finished.remaining) { if (!remaining.isEmpty()) { - output.add(AEItemStack.fromItemStack(remaining)); + final var key = AEItemKey.of(remaining); + if (key != null) { + output.add(key, remaining.getCount()); + } } } - output.add(AEItemStack.fromItemStack(finished.output)); + final var key = AEItemKey.of(finished.output); + if (key != null) { + output.add(key, finished.output.getCount()); + } completed += finished.size; } } diff --git a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorWorker.kt b/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorWorker.kt deleted file mode 100644 index 24dacb92..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/tile/ecotech/efabricator/EFabricatorWorker.kt +++ /dev/null @@ -1,442 +0,0 @@ -package github.kasuminova.novaeng.common.tile.ecotech.efabricator - -import ae2.api.config.Actionable -import ae2.api.networking.energy.IEnergyService -import ae2.api.stacks.AEItemKey -import ae2.api.stacks.KeyCounter -import github.kasuminova.novaeng.NovaEngineeringCore -import github.kasuminova.novaeng.common.block.ecotech.efabricator.prop.WorkerStatus -import github.kasuminova.novaeng.common.network.PktEFabricatorWorkerStatusUpdate -import hellfirepvp.modularmachinery.common.util.ItemUtils -import it.unimi.dsi.fastutil.objects.ObjectArrayList -import net.minecraft.item.ItemStack -import net.minecraft.nbt.NBTTagCompound -import net.minecraft.nbt.NBTTagList -import net.minecraftforge.common.util.Constants -import net.minecraftforge.fml.common.FMLCommonHandler -import net.minecraftforge.fml.common.network.NetworkRegistry -import java.util.ArrayDeque -import java.util.Arrays -import java.util.Deque -import kotlin.math.max -import kotlin.math.min - -class EFabricatorWorker : EFabricatorPart() { - - companion object { - const val MAX_ENERGY_CACHE: Int = 500000 - const val MAX_QUEUE_DEPTH: Int = 32 - - const val ENERGY_USAGE: Int = 100 - const val COOLANT_USAGE: Int = 5 - } - - val queue = CraftingQueue() - - var status = WorkerStatus.OFF - set(value) { - field = value - if (FMLCommonHandler.instance().getEffectiveSide().isServer) { - markNoUpdateSync() - } - } - var queueDepth = MAX_QUEUE_DEPTH - get() { - val controller = getController() - if (controller != null && controller.overclocked) { - return controller.getLevel().applyOverclockQueueDepth(field) - } - return field - } - - var energyCache = 0 - - var updateTick = 0L - - val remainingSpace: Int - get() = this.queueDepth - this.queue.size() - - fun getMaxEnergyCache(): Int { - return MAX_ENERGY_CACHE - } - - @Synchronized - fun doWork(): Int { - val controller = partController - val coolantCache = controller.coolantCache - val energyUsage: Int = if (controller.overclocked && !controller.activeCooling) { - controller.getLevel().applyOverclockEnergyUsage(ENERGY_USAGE) - } else { - ENERGY_USAGE - } - var energy = this.energyCache.toDouble() - val c = controller.channel - val energyService: IEnergyService? = c?.mainNode?.node?.grid()?.energyService - if (energyService != null) { - energy += energyService.getStoredPower() - } - var parallelism = min(max(controller.getAvailableParallelism(), 1).toDouble(), energy / energyUsage).toInt() - if (controller.activeCooling) { - parallelism = min(parallelism, coolantCache / COOLANT_USAGE) - } - - var completed = 0 - val outputBuffer: KeyCounter = controller.outputBuffer - var craftWork: CraftWork - synchronized(outputBuffer) { - while ((parallelism > completed) && !queue.isEmpty) { - craftWork = queue.poll() - val workSize = parallelism - completed - val size = craftWork.size - val out: CraftWork - if (size > workSize) { - out = craftWork.split(workSize) - queue.add(craftWork) - } else { - out = craftWork - } - for (remain in out.remaining) { - if (!remain.isEmpty) { - val key = AEItemKey.of(remain) - if (key != null) { - outputBuffer.add(key, remain.count.toLong()) - } - } - } - val key = AEItemKey.of(out.output) - if (key != null) { - outputBuffer.add(key, out.output.count.toLong()) - } - - completed += out.size - } - } - - if (completed > 0) { - var `in` = energyUsage * completed - if (`in` > energyCache) { - `in` -= energyCache - energyCache = 0 - if (energyService != null) { - synchronized(energyService) { - energyService.injectPower(`in`.toDouble(), Actionable.MODULATE) - } - } - } else { - energyCache -= `in` - } - if (controller.activeCooling) { - controller.consumeCoolant(COOLANT_USAGE * completed) - } - } - return completed - } - - fun supplyEnergy(energy: Int) { - energyCache += energy - } - - fun offerWork(craftWork: CraftWork) { - queue.add(craftWork) - } - - fun hasWork(): Boolean { - return !queue.isEmpty - } - - val isFull: Boolean - get() = queue.size() >= queueDepth - - override fun onAssembled() { - updateStatus(true) - super.onAssembled() - } - - override fun onDisassembled() { - updateStatus(true) - super.onDisassembled() - } - - fun updateStatus(force: Boolean) { - val prevUpdateTick = updateTick - val updateTick = getWorld().totalWorldTime - - if (!force && status == WorkerStatus.RUN && prevUpdateTick + 20 >= updateTick) { - if (hasWork()) { - this@EFabricatorWorker.updateTick = updateTick - } - return - } - - if (controller == null) { - if (status != WorkerStatus.OFF) { - status = WorkerStatus.OFF - } - } else if (hasWork()) { - if (status != WorkerStatus.RUN) { - status = WorkerStatus.RUN - } - } else { - if (status != WorkerStatus.ON) { - status = WorkerStatus.ON - } - } - this@EFabricatorWorker.updateTick = updateTick - } - - override fun markNoUpdate() { - if (FMLCommonHandler.instance().getEffectiveSide().isServer) { - NovaEngineeringCore.NET_CHANNEL.sendToAllTracking( - PktEFabricatorWorkerStatusUpdate(getPos(), status), - NetworkRegistry.TargetPoint( - world.provider.dimension, - pos.x.toDouble(), pos.y.toDouble(), pos.z.toDouble(), - -1.0 - ) - ) - } - super.markNoUpdate() - } - - override fun readCustomNBT(compound: NBTTagCompound) { - queue.readFromNBT(compound) - energyCache = compound.getInteger("energyCache") - status = WorkerStatus.entries[compound.getByte("status").toInt()] - super.readCustomNBT(compound) - } - - override fun writeCustomNBT(compound: NBTTagCompound) { - queue.writeToNBT(compound) - compound.setInteger("energyCache", energyCache) - compound.setByte("status", status.ordinal.toByte()) - super.writeCustomNBT(compound) - } - - class CraftingQueue { - val queue: Deque = ArrayDeque() - private var size = 0 - - fun size(): Int { - return size - } - - val isEmpty: Boolean - get() = queue.isEmpty() - - fun add(craftWork: CraftWork) { - queue.add(craftWork) - size += craftWork.size - } - - fun poll(): CraftWork { - val i = queue.poll() - if (i != null) { - size -= i.size - } else { - size = 0 - } - return i - } - - fun peek(): CraftWork? { - return queue.peek() - } - - fun writeToNBT(nbt: NBTTagCompound): NBTTagCompound { - if (queue.isEmpty()) { - return nbt - } - - val stackSet = ObjectArrayList() - - // Queue - val queueTag = NBTTagList() - var prev: CraftWork? = null - var repeat = 0 - for (craftWork in queue) { - if (prev != null && prev == craftWork) { - repeat++ - continue - } - if (repeat > 0) { - queueTag.getCompoundTagAt(queueTag.tagCount() - 1).setShort(REPEAT_TAG, repeat.toShort()) - repeat = 0 - } - queueTag.appendTag(craftWork.writeToNBT(stackSet)) - prev = craftWork - } - if (repeat > 0) { - queueTag.getCompoundTagAt(queueTag.tagCount() - 1).setShort(REPEAT_TAG, repeat.toShort()) - } - nbt.setTag(QUEUE_TAG, queueTag) - - // StackSet - val stackSetTag = NBTTagCompound() - for (i in stackSet.indices) { - val stack = stackSet[i] - if (!stack.isEmpty) { - stackSetTag.setTag(STACK_SET_TAG_ID_PREFIX + i, stack.serializeNBT()) - } - } - nbt.setTag(STACK_SET_TAG, stackSetTag) - nbt.setInteger(STACK_SET_SIZE_TAG, stackSet.size) - - return nbt - } - - fun readFromNBT(nbt: NBTTagCompound) { - queue.clear() - val stackSet = ObjectArrayList() - - // StackSet - val stackSetTag = nbt.getCompoundTag(STACK_SET_TAG) - for (i in 0.. - val output: ItemStack - internal var size: Int - - constructor(remaining: Array, output: ItemStack, size: Int) { - this.remaining = remaining - this.output = output - this.size = max(1, size) - } - - constructor(nbt: NBTTagCompound, stackSet: MutableList) { - remaining = Array( - nbt.getByte(REMAIN_SIZE_TAG).toInt() - ) { i -> ItemStack.EMPTY } - for (remainIdx in remaining.indices) { - val setIdx = - if (nbt.hasKey(REMAIN_TAG_PREFIX + remainIdx)) nbt.getInteger(REMAIN_TAG_PREFIX + remainIdx) else -1 - remaining[remainIdx] = if (setIdx == -1) ItemStack.EMPTY else stackSet[setIdx] - } - output = stackSet[nbt.getInteger(OUTPUT_TAG)] - size = max(1, nbt.getInteger(SIZE)) - } - - fun split(amount: Int): CraftWork { - val i = min(amount, this.size) - if (i > 0) { - val inputs: Array = Array( - this.remaining.size - ) { i -> ItemStack.EMPTY } - for (ii in remaining.indices) { - inputs[ii] = remaining[ii].splitStack(i) - } - val output = this.output.copy() - val eachOutput = this.output.count / size - val outCount = i * eachOutput - output.setCount(outCount) - this.output.shrink(outCount) - size -= i - return CraftWork(inputs, output, i) - } else { - val inputs = Array(this.remaining.size) { i -> ItemStack.EMPTY } - return CraftWork(inputs, ItemStack.EMPTY, 0) - } - } - - fun writeToNBT(stackSet: MutableList): NBTTagCompound { - val nbt = NBTTagCompound() - - // Input. - nbt.setByte(REMAIN_SIZE_TAG, remaining.size.toByte()) - remain@ for (remainIdx in remaining.indices) { - val remain = remaining[remainIdx] - if (remain.isEmpty) { - continue - } - - for (setIdx in stackSet.indices) { - if (matchStacksStrict(remain, stackSet[setIdx])) { - nbt.setShort(REMAIN_TAG_PREFIX + remainIdx, setIdx.toShort()) - continue@remain - } - } - - stackSet.add(remain) - nbt.setShort(REMAIN_TAG_PREFIX + remainIdx, (stackSet.size - 1).toShort()) - } - - // Output - for (setIdx in stackSet.indices) { - if (matchStacksStrict(output, stackSet[setIdx])) { - nbt.setShort(OUTPUT_TAG, setIdx.toShort()) - return nbt - } - } - - stackSet.add(output) - nbt.setShort(OUTPUT_TAG, (stackSet.size - 1).toShort()) - nbt.setInteger(SIZE, size) - return nbt - } - - fun copy(): CraftWork { - val remaining = Arrays.stream(this.remaining) - .map { obj: ItemStack -> obj.copy() } - .toArray { - Array( - 0 - ) { ItemStack.EMPTY } - } - return CraftWork(remaining, output.copy(), this.size) - } - - override fun equals(other: Any?): Boolean { - if (other is CraftWork) { - for (i in remaining.indices) { - if (!matchStacksStrict(remaining[i], other.remaining[i])) { - return false - } - } - return matchStacksStrict(output, other.output) - } - return false - } - - companion object { - private const val REMAIN_TAG_PREFIX = "R#" - private val REMAIN_SIZE_TAG = REMAIN_TAG_PREFIX + "S" - private const val OUTPUT_TAG = "O" - private const val SIZE = "Z" - - private fun matchStacksStrict(stack1: ItemStack, stack2: ItemStack): Boolean { - return ItemUtils.matchStacks(stack1, stack2) && stack1.count == stack2.count - } - } - - override fun hashCode(): Int { - var result = size - result = 31 * result + remaining.contentHashCode() - result = 31 * result + output.hashCode() - return result - } - } -} \ No newline at end of file diff --git a/src/main/java/github/kasuminova/novaeng/common/util/AssemblyBlockArray.java b/src/main/java/github/kasuminova/novaeng/common/util/AssemblyBlockArray.java index 8fb775ae..1b1fb1eb 100644 --- a/src/main/java/github/kasuminova/novaeng/common/util/AssemblyBlockArray.java +++ b/src/main/java/github/kasuminova/novaeng/common/util/AssemblyBlockArray.java @@ -1,16 +1,10 @@ package github.kasuminova.novaeng.common.util; -import appeng.api.AEApi; -import appeng.api.config.Actionable; -import appeng.api.networking.storage.IStorageGrid; -import appeng.api.storage.IMEMonitor; -import appeng.api.storage.channels.IFluidStorageChannel; -import appeng.api.storage.channels.IItemStorageChannel; -import appeng.api.storage.data.IAEFluidStack; -import appeng.api.storage.data.IAEItemStack; -import appeng.helpers.WirelessTerminalGuiObject; -import appeng.me.helpers.PlayerSource; -import com.circulation.random_complement.common.util.MEHandler; +import ae2.api.config.Actionable; +import ae2.api.networking.security.IActionHost; +import ae2.container.AEBaseContainer; +import ae2.api.storage.MEStorage; +import ae2.me.helpers.PlayerSource; import github.kasuminova.novaeng.common.util.NEWMachineAssemblyManager.Ingredient; import github.kasuminova.novaeng.common.util.NEWMachineAssemblyManager.OperatingStatus; import hellfirepvp.modularmachinery.common.util.BlockArray; @@ -256,15 +250,16 @@ public OperatingStatus assemblyBlock(final World world, final EntityPlayerMP pla return OperatingStatus.FAILURE; } final var materials = getMaterialList(info); - WirelessTerminalGuiObject terminal = null; - IMEMonitor items = null; - IMEMonitor fluids = null; + boolean hasAE = false; + IActionHost terminal = null; + MEStorage storage = null; if (this.usingAE) { - terminal = MEHandler.getTerminalGuiObject(player); - if (terminal != null && terminal.getActionableNode() != null && terminal.getActionableNode().getGrid() != null) { - final IStorageGrid storage = terminal.getActionableNode().getGrid().getCache(IStorageGrid.class); - items = storage.getInventory(AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class)); - fluids = storage.getInventory(AEApi.instance().storage().getStorageChannel(IFluidStorageChannel.class)); + if (player.openContainer instanceof AEBaseContainer c) { + terminal = (IActionHost) c.getTarget(); + } + if (terminal != null && terminal.getActionableNode() != null && terminal.getActionableNode().grid() != null) { + storage = terminal.getActionableNode().grid().getStorageService().getInventory(); + hasAE = true; } } final var inventory = player.inventory.mainInventory; @@ -284,23 +279,28 @@ public OperatingStatus assemblyBlock(final World world, final EntityPlayerMP pla return OperatingStatus.SUCCESS; } } - if (items != null) { + if (hasAE) { for (final var pair : materials) { final var ingredient = pair.getFirst(); if (ingredient.isItem()) { if (ingredient.getItemStack().isEmpty()) { continue; } - final var extracted = items.extractItems(ingredient.getAEItemStack(), Actionable.MODULATE, new PlayerSource(player, terminal)); - if (extracted == null || extracted.getStackSize() == 0) { + final var key = ingredient.getAEItemStack(); + if (key == null) { + continue; + } + final var extracted = storage.extract(key, ingredient.getItemStack().getCount(), Actionable.MODULATE, new PlayerSource(player, terminal)); + if (extracted == 0) { continue; } } else { - final var extracted = fluids.extractItems(ingredient.getAEFluidStack(), Actionable.SIMULATE, new PlayerSource(player, terminal)); - if (extracted == null || extracted.getStackSize() < 1000) { + final var key = ingredient.getAEFluidStack(); + final var extracted = storage.extract(key, 1000, Actionable.SIMULATE, new PlayerSource(player, terminal)); + if (extracted < 1000) { continue; } - fluids.extractItems(ingredient.getAEFluidStack(), Actionable.MODULATE, new PlayerSource(player, terminal)); + storage.extract(key, 1000, Actionable.MODULATE, new PlayerSource(player, terminal)); } this.placeBlock(player, world, pos, pair.getSecond()); return OperatingStatus.SUCCESS; diff --git a/src/main/java/github/kasuminova/novaeng/common/util/AssemblyBlockArray.kt b/src/main/java/github/kasuminova/novaeng/common/util/AssemblyBlockArray.kt deleted file mode 100644 index 57ca18a5..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/util/AssemblyBlockArray.kt +++ /dev/null @@ -1,385 +0,0 @@ -package github.kasuminova.novaeng.common.util - -import ae2.api.config.Actionable -import ae2.api.networking.security.IActionHost -import ae2.container.AEBaseContainer -import ae2.api.storage.MEStorage -import ae2.me.helpers.PlayerSource -import github.kasuminova.novaeng.common.util.NEWMachineAssemblyManager.Ingredient -import github.kasuminova.novaeng.common.util.NEWMachineAssemblyManager.OperatingStatus -import hellfirepvp.modularmachinery.common.util.BlockArray -import hellfirepvp.modularmachinery.common.util.MiscUtils -import ink.ikx.mmce.common.assembly.MachineAssembly -import ink.ikx.mmce.common.utils.FluidUtils -import ink.ikx.mmce.common.utils.StackUtils -import ink.ikx.mmce.common.utils.StructureIngredient -import it.unimi.dsi.fastutil.objects.Object2ReferenceOpenHashMap -import it.unimi.dsi.fastutil.objects.ObjectArrayList -import net.minecraft.block.BlockLiquid -import net.minecraft.block.material.Material -import net.minecraft.block.state.IBlockState -import net.minecraft.entity.player.EntityPlayerMP -import net.minecraft.entity.player.InventoryPlayer -import net.minecraft.init.Blocks -import net.minecraft.item.ItemStack -import net.minecraft.util.EnumFacing -import net.minecraft.util.Tuple -import net.minecraft.util.math.BlockPos -import net.minecraft.util.text.TextComponentTranslation -import net.minecraft.world.World -import net.minecraftforge.common.util.BlockSnapshot -import net.minecraftforge.event.ForgeEventFactory -import net.minecraftforge.fluids.BlockFluidBase -import net.minecraftforge.fluids.FluidRegistry -import net.minecraftforge.fluids.FluidStack -import net.minecraftforge.fluids.FluidUtil -import net.minecraftforge.fluids.capability.IFluidHandlerItem -import java.util.ArrayDeque -import java.util.Queue - -class AssemblyBlockArray : BlockArray { - - enum class PlacementStage { - SOLID, - FLUID - } - - data class QueuedPlacement( - val pos: BlockPos, - val info: BlockInformation, - val stage: PlacementStage - ) - - private data class FluidInventory(val slot: Int, val fluid: IFluidHandlerItem) - - companion object { - private val material = - Object2ReferenceOpenHashMap>>() - private val placementStages = - Object2ReferenceOpenHashMap() - - /** - * MachineAssembly#getFluidHandlerItems(List) - */ - private fun getFluidHandlerItems(inventory: List): List { - val fluidHandlers = ObjectArrayList() - for ((index, invStack) in inventory.withIndex()) { - if (!FluidUtils.isFluidHandler(invStack)) { - continue - } - val fluidHandler = FluidUtil.getFluidHandler(invStack) - if (fluidHandler != null) { - fluidHandlers.add(FluidInventory(index, fluidHandler)) - } - } - return fluidHandlers - } - - private fun consumeInventoryFluid( - required: FluidStack, - fluidHandlers: List, - player: InventoryPlayer? - ): Boolean { - for ((slot, fluidHandler) in fluidHandlers) { - val drained = fluidHandler.drain(required.copy(), false) ?: continue - if (drained.containsFluid(required)) { - fluidHandler.drain(required.copy(), true) - player?.setInventorySlotContents(slot, fluidHandler.container) - return true - } - } - - return false - } - - fun searchAndRemoveContainFluid( - inventory: MutableList, - fluidIngredients: MutableList - ) { - val fluidHandlers = getFluidHandlerItems(inventory) - val fluidIngredientIter: MutableIterator = fluidIngredients.iterator() - - while (fluidIngredientIter.hasNext()) { - val fluidIngredient = fluidIngredientIter.next() - - for (tuple in fluidIngredient.ingredientList()) { - val required = tuple.getFirst() as FluidStack - if (consumeInventoryFluid(required, fluidHandlers, null)) { - fluidIngredientIter.remove() - break - } - } - } - } - - private fun buildMaterialList(info: BlockInformation): ObjectArrayList> { - val resolved = ObjectArrayList>() - var fluidOnly = true - - for (stateDescriptor in info.matchingStates) { - for (state in stateDescriptor.applicable) { - val block = state.block - val ingredient = if (block is BlockFluidBase) { - Ingredient(FluidStack(block.fluid, 1000)) - } else if (block is BlockLiquid) { - val material = state.material - if (material === Material.LAVA) { - Ingredient(FluidStack(FluidRegistry.LAVA, 1000)) - } else { - Ingredient(FluidStack(FluidRegistry.WATER, 1000)) - } - } else { - fluidOnly = false - Ingredient(StackUtils.getStackFromBlockState(state)) - } - if (ingredient.isItem) { - fluidOnly = false - } - resolved.add(Tuple(ingredient, state)) - } - } - - material[info] = resolved - placementStages[info] = if (resolved.isNotEmpty() && fluidOnly) { - PlacementStage.FLUID - } else { - PlacementStage.SOLID - } - return resolved - } - - fun getMaterialList(info: BlockInformation): ObjectArrayList> { - return material[info] ?: buildMaterialList(info) - } - - fun getPlacementStage(info: BlockInformation): PlacementStage { - return placementStages[info] ?: run { - buildMaterialList(info) - placementStages[info] ?: PlacementStage.SOLID - } - } - } - - var usingAE = false - var ignoreFluids = false - var missing = 0 - private var queue: Queue? = null - - constructor() : super() - - constructor(uid: Long) : super(uid) - - constructor(other: BlockArray) : super(other) - - constructor(other: BlockArray, offset: BlockPos) : super(other, offset) - - fun copy(): AssemblyBlockArray { - return AssemblyBlockArray(this) - } - - fun offset(offset: BlockPos): AssemblyBlockArray { - return AssemblyBlockArray(this, offset) - } - - fun end() { - this.pattern.clear() - queue = null - } - - fun start(usingAE: Boolean = true, ignoreFluids: Boolean = true) { - this.usingAE = usingAE - this.ignoreFluids = ignoreFluids - - val solidQueue = ArrayDeque() - val fluidQueue = ArrayDeque() - for ((pos, info) in this.pattern.entries) { - getMaterialList(info) - val stage = getPlacementStage(info) - if (ignoreFluids && stage == PlacementStage.FLUID) { - continue - } - val placement = QueuedPlacement(pos, info, stage) - if (stage == PlacementStage.FLUID) { - fluidQueue.add(placement) - } else { - solidQueue.add(placement) - } - } - - queue = ArrayDeque(solidQueue.size + fluidQueue.size).also { - it.addAll(solidQueue) - it.addAll(fluidQueue) - } - } - - private fun pollPlacement(): QueuedPlacement? { - while (true) { - val next = queue?.poll() ?: return null - if (synchronized(pattern) { this.pattern.remove(next.pos) } != null) { - return next - } - } - } - - private fun isFluid(state: IBlockState): Boolean { - val block = state.getBlock() - return block is BlockLiquid || block is BlockFluidBase - } - - fun assemblyBlock(world: World, player: EntityPlayerMP): OperatingStatus { - val placement = pollPlacement() ?: return OperatingStatus.COMPLETE - val pos = placement.pos - val info = placement.info - - if (player.isCreative) { - placeBlock(player, world, pos, info.sampleState) - return OperatingStatus.SUCCESS - } - - val oldState = world.getBlockState(pos) - if (oldState != null && - (oldState.getBlock() !== Blocks.AIR - && !(ignoreFluids && isFluid(oldState))) - ) { - return if (matchesState(info, oldState)) { - OperatingStatus.ALREADY_EXISTS - } else { - player.sendMessage( - TextComponentTranslation( - "message.assembly.tip.cannot_replace", - MiscUtils.posToString(pos) - ) - ) - OperatingStatus.FAILURE - } - } - - val list = getMaterialList(info) - - var hasAE = false - var terminal: IActionHost? = null - var storage: MEStorage? = null - - if (usingAE) { - terminal = (player.openContainer as? AEBaseContainer)?.target as? IActionHost - terminal?.actionableNode?.grid()?.let { grid -> - storage = grid.storageService.inventory - hasAE = true - } - } - val itemInventory = player.inventory.mainInventory - val fluidInventory = getFluidHandlerItems(itemInventory) - for (ingredientAndIBlockState in list) { - val ingredient = ingredientAndIBlockState.first - if (ingredient.isItem) { - if (ingredient.itemStack.isEmpty) continue - if (MachineAssembly.consumeInventoryItem( - ingredient.itemStack, - itemInventory - ) - ) { - placeBlock(player, world, pos, ingredientAndIBlockState.getSecond()) - return OperatingStatus.SUCCESS - } - } else { - if (consumeInventoryFluid( - ingredient.fluidStack, - fluidInventory, - player.inventory - ) - ) { - placeBlock(player, world, pos, ingredientAndIBlockState.getSecond()) - return OperatingStatus.SUCCESS - } - } - } - if (hasAE) { - for (ingredientAndIBlockState in list) { - val ingredient = ingredientAndIBlockState.first - if (ingredient.isItem) { - if (ingredient.itemStack.isEmpty) continue - val key = ingredient.aeItemKey ?: continue - val item = storage!!.extract(key, ingredient.itemStack.count.toLong(), Actionable.MODULATE, - PlayerSource(player, terminal)) - if (item == 0L) continue - placeBlock(player, world, pos, ingredientAndIBlockState.getSecond()) - return OperatingStatus.SUCCESS - } else { - val key = ingredient.aeFluidKey ?: continue - val fluid = storage!!.extract(key, 1000, Actionable.SIMULATE, PlayerSource(player, terminal)) - if (fluid < 1000) continue - storage.extract(key, 1000, Actionable.MODULATE, PlayerSource(player, terminal)) - placeBlock(player, world, pos, ingredientAndIBlockState.getSecond()) - return OperatingStatus.SUCCESS - } - } - } - if (oldState.block == Blocks.AIR && matchesState(info, oldState)) { - return OperatingStatus.ALREADY_EXISTS - } - if (missing > 0) { - --missing - return OperatingStatus.SUCCESS - } - player.sendMessage( - TextComponentTranslation( - "message.assembly.tip.missing", - MiscUtils.posToString(pos) - ) - ) - return OperatingStatus.FAILURE - } - - private fun placeBlock(player: EntityPlayerMP, world: World, pos: BlockPos, state: IBlockState) { - player.getServer()!!.addScheduledTask { - if (!player.isCreative && ForgeEventFactory.onBlockPlace( - player, - BlockSnapshot(world, pos, state), - EnumFacing.UP - ).isCanceled - ) { - player.sendMessage( - TextComponentTranslation( - "message.assembly.tip.missing", - MiscUtils.posToString(pos) - ) - ) - player.inventory.placeItemBackInInventory( - world, - StackUtils.getStackFromBlockState(state) - ) - } else { - val flags = 0b10011 - val chunk = world.getChunk(pos) - var blockSnapshot: BlockSnapshot? = null - if (world.captureBlockSnapshots) - blockSnapshot = BlockSnapshot.getBlockSnapshot(world, pos, flags) - val iblockstate = chunk.setBlockState(pos, state) - - if (iblockstate != null) { - if (blockSnapshot == null) { - world.markAndNotifyBlock(pos, chunk, iblockstate, state, flags) - } else { - world.capturedBlockSnapshots.add(blockSnapshot) - } - } - } - } - } - - fun matchesState(info: BlockInformation, state: IBlockState): Boolean { - val atBlock = state.getBlock() - val atMeta = atBlock.getMetaFromState(state) - - for (descriptor in info.matchingStates) { - for (applicable in descriptor.applicable) { - val type = applicable.getBlock() - val meta = type.getMetaFromState(applicable) - if (type == atBlock && meta == atMeta) { - return true - } - } - } - return false - } -} diff --git a/src/main/java/github/kasuminova/novaeng/common/util/AutoCraftingQueue.java b/src/main/java/github/kasuminova/novaeng/common/util/AutoCraftingQueue.java deleted file mode 100644 index d78acb83..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/util/AutoCraftingQueue.java +++ /dev/null @@ -1,113 +0,0 @@ -package github.kasuminova.novaeng.common.util; - -import appeng.api.networking.crafting.ICraftingGrid; -import appeng.api.networking.crafting.ICraftingJob; -import appeng.api.util.AEPartLocation; -import appeng.container.ContainerOpenContext; -import appeng.core.AELog; -import appeng.me.helpers.PlayerSource; -import appeng.util.item.AEItemStack; -import com.circulation.random_complement.common.util.MEHandler; -import github.kasuminova.novaeng.NovaEngineeringCore; -import github.kasuminova.novaeng.common.CommonProxy; -import github.kasuminova.novaeng.common.container.ContainerNEWCraftConfirm; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -import javax.annotation.Nullable; -import java.util.Map; -import java.util.Queue; -import java.util.concurrent.Future; - -public final class AutoCraftingQueue { - - private static final Map QUEUES = new Object2ObjectOpenHashMap<>(); - private Queue queue = EmptyQueue.empty(); - - public static void setQueueAndStrat(final Queue items, final EntityPlayer player) { - final AutoCraftingQueue queue = QUEUES.computeIfAbsent(player, ignored -> new AutoCraftingQueue()); - queue.queue = items; - queue.executionQueue(player); - } - - @Nullable - public static AutoCraftingQueue getQueue(final EntityPlayer player) { - return QUEUES.get(player); - } - - public static void removeQueue(final EntityPlayer player) { - final AutoCraftingQueue queue = QUEUES.remove(player); - if (queue != null) { - queue.queue.clear(); - queue.queue = EmptyQueue.empty(); - } - } - - public static void removeWorld(final World world) { - final var entries = QUEUES.entrySet().iterator(); - while (entries.hasNext()) { - final var entry = entries.next(); - if (entry.getKey().world == world) { - entry.getValue().queue.clear(); - entry.getValue().queue = EmptyQueue.empty(); - entries.remove(); - } - } - } - - public static void clearAll() { - for (final AutoCraftingQueue queue : QUEUES.values()) { - queue.queue.clear(); - queue.queue = EmptyQueue.empty(); - } - QUEUES.clear(); - } - - public void clearQueue() { - this.queue.clear(); - this.queue = EmptyQueue.empty(); - QUEUES.values().removeIf(existing -> existing == this); - } - - public boolean executionQueue(final EntityPlayer player) { - final ItemStack item = this.queue.poll(); - if (item == null) { - this.clearQueue(); - return false; - } - Future future = null; - try { - final var terminal = MEHandler.getTerminalGuiObject(player); - final var node = terminal == null ? null : terminal.getActionableNode(); - final var grid = node == null ? null : node.getGrid(); - if (grid == null) { - this.clearQueue(); - return false; - } - final ICraftingGrid crafting = grid.getCache(ICraftingGrid.class); - final AEItemStack request = AEItemStack.fromItemStack(item); - future = crafting.beginCraftingJob(player.world, grid, new PlayerSource(player, terminal), - request == null ? null : request.setStackSize(item.getCount()), null); - player.openGui(NovaEngineeringCore.instance, CommonProxy.GuiType.AUTO_CRAFTGUI.ordinal(), player.world, - terminal.getInventorySlot(), terminal.isBaubleSlot() ? 1 : 0, Integer.MIN_VALUE); - if (player.openContainer instanceof ContainerNEWCraftConfirm confirm) { - final ContainerOpenContext context = new ContainerOpenContext(null); - context.setSide(AEPartLocation.INTERNAL); - confirm.setOpenContext(context); - confirm.setAutoStart(false); - confirm.setJob(future); - confirm.detectAndSendChanges(); - } - return true; - } catch (final Throwable failure) { - if (future != null) { - future.cancel(true); - } - this.clearQueue(); - AELog.debug(failure); - return false; - } - } -} diff --git a/src/main/java/github/kasuminova/novaeng/common/util/EmptyQueue.java b/src/main/java/github/kasuminova/novaeng/common/util/EmptyQueue.java deleted file mode 100644 index 32b00090..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/util/EmptyQueue.java +++ /dev/null @@ -1,99 +0,0 @@ -package github.kasuminova.novaeng.common.util; - -import it.unimi.dsi.fastutil.objects.ObjectIterators; - -import java.util.AbstractQueue; -import java.util.Collection; -import java.util.Iterator; - -public final class EmptyQueue extends AbstractQueue { - - private static final EmptyQueue EMPTY = new EmptyQueue<>(); - - private EmptyQueue() { - } - - @SuppressWarnings("unchecked") - public static EmptyQueue empty() { - return (EmptyQueue) EMPTY; - } - - @Override - public boolean add(final E value) { - return false; - } - - @Override - public boolean offer(final E value) { - return false; - } - - @Override - public E remove() { - return null; - } - - @Override - public E poll() { - return null; - } - - @Override - public E element() { - return null; - } - - @Override - public E peek() { - return null; - } - - @Override - public Iterator iterator() { - return ObjectIterators.emptyIterator(); - } - - @Override - public boolean remove(final Object value) { - return false; - } - - @Override - public boolean addAll(final Collection values) { - return false; - } - - @Override - public boolean removeAll(final Collection values) { - return false; - } - - @Override - public boolean retainAll(final Collection values) { - return false; - } - - @Override - public void clear() { - } - - @Override - public int size() { - return 0; - } - - @Override - public boolean isEmpty() { - return true; - } - - @Override - public boolean contains(final Object value) { - return false; - } - - @Override - public boolean containsAll(final Collection values) { - return false; - } -} diff --git a/src/main/java/github/kasuminova/novaeng/common/util/NEWMachineAssemblyManager.java b/src/main/java/github/kasuminova/novaeng/common/util/NEWMachineAssemblyManager.java index 1ae68417..a93c5ebc 100644 --- a/src/main/java/github/kasuminova/novaeng/common/util/NEWMachineAssemblyManager.java +++ b/src/main/java/github/kasuminova/novaeng/common/util/NEWMachineAssemblyManager.java @@ -1,18 +1,15 @@ package github.kasuminova.novaeng.common.util; -import appeng.api.AEApi; -import appeng.api.config.Actionable; -import appeng.api.networking.storage.IStorageGrid; -import appeng.api.storage.channels.IFluidStorageChannel; -import appeng.api.storage.channels.IItemStorageChannel; -import appeng.api.storage.data.IAEFluidStack; -import appeng.api.storage.data.IAEItemStack; -import appeng.api.storage.data.IAEStack; -import appeng.fluids.util.AEFluidStack; -import appeng.me.helpers.PlayerSource; -import appeng.util.item.AEItemStack; -import com.circulation.random_complement.common.util.MEHandler; -import com.glodblock.github.common.item.fake.FakeFluids; +import ae2.api.config.Actionable; +import ae2.api.networking.security.IActionHost; +import ae2.api.storage.MEStorage; +import ae2.container.AEBaseContainer; +import ae2.api.stacks.AEFluidKey; +import ae2.api.stacks.GenericStack; +import ae2.api.stacks.AEItemKey; +import ae2.api.stacks.AEKey; +import ae2.me.helpers.PlayerSource; +import com.google.common.primitives.Ints; import github.kasuminova.novaeng.NovaEngineeringCore; import hellfirepvp.modularmachinery.ModularMachinery; import hellfirepvp.modularmachinery.common.integration.ModIntegrationJEI; @@ -116,43 +113,47 @@ public static Miss2ListPair checkAllItems(final EntityPlayer player, final Struc final var items = getItemStackIngList(itemIngredients); final var fluids = getFluidStackIngList(fluidIngredients); if (usingAE) { - final var terminal = MEHandler.getTerminalGuiObject(player); + final IActionHost terminal = player.openContainer instanceof AEBaseContainer c ? (IActionHost) c.getTarget() : null; if (terminal != null && terminal.getActionableNode() != null) { - final var grid = terminal.getActionableNode().getGrid(); + final var grid = terminal.getActionableNode().grid(); if (grid != null) { - final IStorageGrid storage = grid.getCache(IStorageGrid.class); - final var itemInventory = storage.getInventory(AEApi.instance().storage().getStorageChannel(IItemStorageChannel.class)); - final var fluidInventory = storage.getInventory(AEApi.instance().storage().getStorageChannel(IFluidStorageChannel.class)); + final MEStorage storage = grid.getStorageService().getInventory(); final var source = new PlayerSource(player, terminal); for (final var stacks : new ReferenceArrayList<>(items)) { for (final var stack : stacks) { - final var extracted = itemInventory.extractItems(AEItemStack.fromItemStack(stack), Actionable.SIMULATE, source); - if (extracted == null) { + var key = AEItemKey.of(stack); + if (key == null) { continue; } - final int size = (int) extracted.getStackSize(); - if (stack.getCount() <= size) { + final var extracted = storage.extract(key, stack.getCount(), Actionable.SIMULATE, source); + if (extracted == 0) { + continue; + } + if (stack.getCount() <= extracted) { items.remove(stacks); break; } for (final var alternative : stacks) { - alternative.shrink(size); + alternative.shrink(Ints.saturatedCast(extracted)); } } } for (final var stacks : new ReferenceArrayList<>(fluids)) { for (final var stack : stacks) { - final var extracted = fluidInventory.extractItems(AEFluidStack.fromFluidStack(stack), Actionable.SIMULATE, source); - if (extracted == null) { + var key = AEFluidKey.of(stack); + if (key == null) { + continue; + } + final var extracted = storage.extract(key, stack.amount, Actionable.SIMULATE, source); + if (extracted == 0) { continue; } - final int size = (int) extracted.getStackSize(); - if (stack.amount <= size) { + if (stack.amount <= extracted) { fluids.remove(stacks); break; } for (final var alternative : stacks) { - alternative.amount -= size; + alternative.amount -= Ints.saturatedCast(extracted); } } } @@ -184,9 +185,9 @@ public static Miss2ListPair checkAllItems(final EntityPlayer player, final Struc for (final var stacks : fluids) { final List packed = new ObjectArrayList<>(); for (final var stack : stacks) { - final var drops = FakeFluids.packFluid2Drops(stack); - drops.setCount(stack.amount); - packed.add(drops); + var key = AEFluidKey.of(stack); + if (key == null) continue; + packed.add(GenericStack.wrapInItemStack(key, stack.amount)); } result.add(packed); } @@ -288,18 +289,18 @@ public List> getList() { public static final class Ingredient { private final Object ingredient; private final boolean item; - private final IAEStack aeStack; + private final AEKey aeStack; public Ingredient(final ItemStack stack) { this.ingredient = stack; this.item = true; - this.aeStack = AEItemStack.fromItemStack(stack); + this.aeStack = AEItemKey.of(stack); } public Ingredient(final FluidStack stack) { this.ingredient = stack; this.item = false; - this.aeStack = AEFluidStack.fromFluidStack(stack); + this.aeStack = AEFluidKey.of(stack); } public Object getIngredient() { @@ -310,7 +311,7 @@ public boolean isItem() { return this.item; } - public IAEStack getAeStack() { + public AEKey getAeStack() { return this.aeStack; } @@ -318,16 +319,16 @@ public ItemStack getItemStack() { return (ItemStack) this.ingredient; } - public IAEItemStack getAEItemStack() { - return this.aeStack instanceof IAEItemStack stack ? stack : null; + public AEItemKey getAEItemStack() { + return this.aeStack instanceof AEItemKey stack ? stack : null; } public FluidStack getFluidStack() { return (FluidStack) this.ingredient; } - public IAEFluidStack getAEFluidStack() { - return this.aeStack instanceof IAEFluidStack stack ? stack : null; + public AEFluidKey getAEFluidStack() { + return this.aeStack instanceof AEFluidKey stack ? stack : null; } @Override diff --git a/src/main/java/github/kasuminova/novaeng/common/util/NEWMachineAssemblyManager.kt b/src/main/java/github/kasuminova/novaeng/common/util/NEWMachineAssemblyManager.kt deleted file mode 100644 index e7f57bef..00000000 --- a/src/main/java/github/kasuminova/novaeng/common/util/NEWMachineAssemblyManager.kt +++ /dev/null @@ -1,336 +0,0 @@ -package github.kasuminova.novaeng.common.util - -import ae2.api.config.Actionable -import ae2.api.networking.security.IActionHost -import ae2.container.AEBaseContainer -import ae2.api.stacks.AEFluidKey -import ae2.api.stacks.GenericStack -import ae2.api.stacks.AEItemKey -import ae2.api.stacks.AEKey -import ae2.me.helpers.PlayerSource -import github.kasuminova.novaeng.NovaEngineeringCore -import hellfirepvp.modularmachinery.ModularMachinery -import hellfirepvp.modularmachinery.common.integration.ModIntegrationJEI -import hellfirepvp.modularmachinery.common.integration.preview.StructurePreviewWrapper -import hellfirepvp.modularmachinery.common.machine.DynamicMachine -import hellfirepvp.modularmachinery.common.network.PktAssemblyReport -import hellfirepvp.modularmachinery.common.util.BlockArray -import hellfirepvp.modularmachinery.common.util.ItemUtils -import ink.ikx.mmce.common.assembly.MachineAssembly -import ink.ikx.mmce.common.utils.StructureIngredient -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap -import it.unimi.dsi.fastutil.objects.ObjectArrayList -import it.unimi.dsi.fastutil.objects.ObjectIterator -import it.unimi.dsi.fastutil.objects.ObjectLists -import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap -import it.unimi.dsi.fastutil.objects.ReferenceArrayList -import net.minecraft.block.Block -import net.minecraft.block.state.IBlockState -import net.minecraft.entity.player.EntityPlayer -import net.minecraft.entity.player.EntityPlayerMP -import net.minecraft.item.ItemStack -import net.minecraft.util.Tuple -import net.minecraftforge.fluids.FluidStack -import java.util.stream.Collectors - -class NEWMachineAssemblyManager { - - data class BlockPair(val block: Block, val meta: Int) { - val blockState: IBlockState - get() : IBlockState { - @Suppress("DEPRECATION") - return block.getStateFromMeta(meta) - } - } - - companion object { - private val ADDITIONAL_CONSTRUCTORS by lazy { - Reference2ObjectOpenHashMap>() - } - private val MACHINE_ASSEMBLY_CACHE by lazy { - Object2ObjectOpenHashMap() - } - private val CheckAllItemComplete by lazy { - ObjectLists.singleton( - ObjectLists.singleton(ItemStack.EMPTY) - ) - } - private val emptyMiss2ListPair by lazy { - Miss2ListPair(0, ObjectLists.emptyList()) - } - - private data class IngredientStages( - val itemIngredients: MutableList, - val fluidIngredients: MutableList - ) - - fun getAllDynamicMachines(): Collection { - val i = ObjectArrayList() - for (map in ADDITIONAL_CONSTRUCTORS.values) { - i.addAll(map.values) - } - return i - } - - fun getDynamicMachine(state: IBlockState): DynamicMachine? { - return getDynamicMachine(state.block, state.block.getMetaFromState(state)) - } - - fun getDynamicMachine(block: Block, meta: Int): DynamicMachine? { - return ADDITIONAL_CONSTRUCTORS[block]?.let { it[meta] } - } - - fun getConstructorsIterator(): ObjectIterator>> { - return ADDITIONAL_CONSTRUCTORS.entries.iterator() - } - - fun setConstructors(block: BlockPair, machine: NEWDynamicMachine) { - ADDITIONAL_CONSTRUCTORS.computeIfAbsent(block.block) { Int2ObjectOpenHashMap() }[block.meta] = machine - if (NovaEngineeringCore.proxy.isClient) - ModIntegrationJEI.PREVIEW_WRAPPERS.add(StructurePreviewWrapper(machine)) - } - - fun addAssemblyMachine(player: EntityPlayer, array: BlockArray): AssemblyBlockArray { - val newArray = AssemblyBlockArray(array) - MACHINE_ASSEMBLY_CACHE[player] = newArray - return newArray - } - - fun getMachineAssembly(player: EntityPlayer): AssemblyBlockArray? { - return MACHINE_ASSEMBLY_CACHE[player] - } - - fun checkMachineAssembly(player: EntityPlayer): Boolean { - return MACHINE_ASSEMBLY_CACHE.containsKey(player) - } - - fun removeMachineAssembly(player: EntityPlayer) { - MACHINE_ASSEMBLY_CACHE.remove(player)?.end() - } - - fun checkAllItems( - player: EntityPlayer, - ingredient: StructureIngredient, - usingAE: Boolean, - autoAECrafting: Boolean - ): Miss2ListPair { - if (player.isCreative) return emptyMiss2ListPair - val inventory = player.inventory.mainInventory.stream().map { it.copy() } - .collect(Collectors.toCollection { ObjectArrayList() }) - val stages = splitIngredientStages(ingredient) - val itemIngredientList = stages.itemIngredients - val fluidIngredientList = stages.fluidIngredients - MachineAssembly.searchAndRemoveContainItem(inventory, itemIngredientList) - AssemblyBlockArray.searchAndRemoveContainFluid(inventory, fluidIngredientList) - if (itemIngredientList.isEmpty() && fluidIngredientList.isEmpty()) { - return emptyMiss2ListPair - } else { - val itemStackIngList = getItemStackIngList(itemIngredientList) - val fluidStackIngList = getFluidStackIngList(fluidIngredientList) - - if (usingAE) { - val host = (player.openContainer as? AEBaseContainer)?.target as? IActionHost - host?.actionableNode?.grid()?.let { grid -> - val storage = grid.storageService.inventory - val playerSource = PlayerSource(player, host) - for (stacks in ReferenceArrayList(itemStackIngList)) { - for (item in ReferenceArrayList(stacks)) { - val key = AEItemKey.of(item) ?: continue - val aeItemSize = storage.extract(key, item.count.toLong(), Actionable.SIMULATE, playerSource) - .coerceAtMost(Int.MAX_VALUE.toLong()).toInt() - if (aeItemSize == 0) continue - if (item.count <= aeItemSize) { - itemStackIngList.remove(stacks) - break - } else { - for (stack in stacks) { - stack.shrink(aeItemSize) - } - } - } - } - for (stacks in ReferenceArrayList(fluidStackIngList)) { - for (fluid in ReferenceArrayList(stacks)) { - val key = AEFluidKey.of(fluid) ?: continue - val aeFluidSize = storage.extract(key, fluid.amount.toLong(), Actionable.SIMULATE, playerSource) - .coerceAtMost(Int.MAX_VALUE.toLong()).toInt() - if (aeFluidSize == 0) continue - if (fluid.amount <= aeFluidSize) { - fluidStackIngList.remove(stacks) - break - } else { - for (stack in stacks) { - stack.amount -= aeFluidSize - } - } - } - } - } - if (itemStackIngList.isEmpty() && fluidStackIngList.isEmpty()) { - return emptyMiss2ListPair - } - } - - var miss = 0 - for (stacks in itemStackIngList) { - for (stack in stacks) { - miss += stack.count - break - } - } - for (stacks in fluidStackIngList) { - for (stack in stacks) { - miss += (stack.amount + 999) / 1000 - break - } - } - - val pkt = PktAssemblyReport(itemStackIngList, fluidStackIngList) - if (player is EntityPlayerMP) { - ModularMachinery.NET_CHANNEL.sendTo(pkt, player) - } - - return if (autoAECrafting) { - val list = ObjectArrayList(itemStackIngList) - for (stacks in fluidStackIngList) { - val fs = ObjectArrayList() - for (stack in stacks) { - val key = AEFluidKey.of(stack) ?: continue - fs.add(GenericStack.wrapInItemStack(key, stack.amount.toLong())) - } - list.add(fs) - } - - Miss2ListPair(miss, list) - } else Miss2ListPair(miss, CheckAllItemComplete) - } - } - - class Miss2ListPair(val miss: Int, val list: List>) - - private fun splitIngredientStages(ingredient: StructureIngredient): IngredientStages { - return IngredientStages( - ingredient.itemIngredient(), - ingredient.fluidIngredient() - ) - } - - private fun getFluidStackIngList(fluidIngredientList: List): MutableList> { - val fluidStackIngList: MutableList> = ObjectArrayList() - - label36@ for (ingredient in fluidIngredientList) { - if (!ingredient.ingredientList().isEmpty()) { - val stackIngList = ingredient.ingredientList().stream() - .map { obj: Tuple -> obj.getFirst() } - .collect(Collectors.toCollection { ObjectArrayList() }) - if (stackIngList.size == 1) { - val ing = stackIngList[0] - - for (fluidStackList in fluidStackIngList) { - if (fluidStackList.size == 1) { - val another = fluidStackList[0] - if (ing.isFluidEqual(another)) { - another.amount += 1000 - continue@label36 - } - } - } - } - - fluidStackIngList.add(stackIngList) - } - } - - return fluidStackIngList - } - - private fun getItemStackIngList(itemIngredientList: List): MutableList> { - val stackList: MutableList> = ObjectArrayList() - - label56@ for (itemIng in itemIngredientList) { - if (!itemIng.ingredientList().isEmpty()) { - val stackIngList: MutableList = itemIng.ingredientList().stream() - .map { obj: Tuple -> obj.getFirst() } - .collect(Collectors.toCollection { ObjectArrayList() }) - if (stackIngList.size == 1) { - val ing = stackIngList[0] - - for (itemStackList in stackList) { - if (itemStackList.size == 1) { - val anotherInput = itemStackList[0] - if (ItemUtils.matchStacks(ing, anotherInput)) { - anotherInput.grow(1) - continue@label56 - } - } - } - } - - val filteredStackIngList: MutableList = ObjectArrayList() - - label44@ for (stack in stackIngList) { - for (filtered in filteredStackIngList) { - if (ItemUtils.matchStacks(stack, filtered)) { - continue@label44 - } - } - - filteredStackIngList.add(stack) - } - - stackList.add(filteredStackIngList) - } - } - - return stackList - } - } - - enum class OperatingStatus { - SUCCESS, - ALREADY_EXISTS, - FAILURE, - COMPLETE - } - - class Ingredient { - val ingredient: Any - val isItem: Boolean - val aeStack: AEKey? - - constructor(stack: ItemStack) { - this.ingredient = stack - this.isItem = true - this.aeStack = AEItemKey.of(stack) - } - - constructor(stack: FluidStack) { - this.ingredient = stack - this.isItem = false - this.aeStack = AEFluidKey.of(stack) - } - - override fun equals(other: Any?): Boolean { - if (other == null || javaClass != other.javaClass) return false - val that = other as Ingredient - return isItem == that.isItem && aeStack == that.aeStack - } - - override fun hashCode(): Int { - return aeStack.hashCode() - } - - val itemStack: ItemStack - get() = ingredient as ItemStack - - val aeItemKey: AEItemKey? - get() = aeStack as? AEItemKey - - val fluidStack: FluidStack - get() = ingredient as FluidStack - - val aeFluidKey: AEFluidKey? - get() = aeStack as? AEFluidKey - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinBetterMeteoriteCompassMetadata.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinBetterMeteoriteCompassMetadata.java deleted file mode 100644 index 16c694c9..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinBetterMeteoriteCompassMetadata.java +++ /dev/null @@ -1,84 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import github.kasuminova.novaeng.common.performance.MeteorCompassMetadata; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; -import org.spongepowered.asm.mixin.Dynamic; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.gen.Accessor; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Future; - -// The target accessors and callback method resolve members contributed by BetterMeteorite at runtime. -@Pseudo -@Mixin(targets = "appeng.services.CompassService", priority = 1100, remap = false) -public abstract class MixinBetterMeteoriteCompassMetadata { - - @Shadow - @Final - private static int CHUNK_SIZE; - - @Shadow - @Final - private ExecutorService executor; - - @Accessor("randomComplement$MeteoriteCompassTarget") - public static List nova$targets() { - throw new AssertionError(); - } - - @Accessor("randomComplement$meta") - public static List nova$metadata() { - throw new AssertionError(); - } - - @Accessor("randomComplement$constructor") - public static Constructor nova$updateConstructor() { - throw new AssertionError(); - } - - @Dynamic("Callback merged by BetterMeteorite's MixinCompassService") - @WrapMethod(method = "(Lnet/minecraft/world/World;IIILorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V") - private void nova$scanArea(final World world, final int x, final int y, final int z, - final CallbackInfoReturnable> result, final Operation original) - throws InvocationTargetException, InstantiationException, IllegalAccessException { - if (nova$updateConstructor() == null || nova$targets() == null || nova$targets().isEmpty()) { - original.call(world, x, y, z, result); - return; - } - final int chunkX = x >> 4; - final int band = y >> 5; - final int chunkZ = z >> 4; - final int lowY = band << 5; - final int highY = lowY + 32; - final Chunk chunk = world.getChunk(chunkX, chunkZ); - final List targets = nova$targets(); - final List metadata = nova$metadata(); - for (int blockX = 0; blockX < CHUNK_SIZE; blockX++) { - for (int blockZ = 0; blockZ < CHUNK_SIZE; blockZ++) { - for (int blockY = lowY; blockY < highY; blockY++) { - final IBlockState state = chunk.getBlockState(blockX, blockY, blockZ); - if (MeteorCompassMetadata.matches(state, targets, metadata)) { - result.setReturnValue(this.executor.submit((Runnable) nova$updateConstructor() - .newInstance(this, world, chunkX, chunkZ, band, true))); - return; - } - } - } - } - result.setReturnValue(this.executor.submit((Runnable) nova$updateConstructor() - .newInstance(this, world, chunkX, chunkZ, band, false))); - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCompassReaderRegions.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCompassReaderRegions.java deleted file mode 100644 index 25724dc7..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCompassReaderRegions.java +++ /dev/null @@ -1,59 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.services.compass.CompassReader; -import appeng.services.compass.CompassRegion; -import it.unimi.dsi.fastutil.longs.Long2ObjectMap; -import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.io.File; -import java.util.Map; - -@Mixin(value = CompassReader.class, remap = false) -public abstract class MixinCompassReaderRegions { - - @Shadow - @Final - @Mutable - private Map regions; - - @Shadow - @Final - private int dimensionId; - - @Shadow - @Final - private File worldCompassFolder; - - @Inject(method = "(ILjava/io/File;)V", at = @At("RETURN"), require = 1) - private void nova$primitiveRegions(final int dimensionId, final File worldCompassFolder, final CallbackInfo ci) { - final Long2ObjectMap primitive = new Long2ObjectOpenHashMap<>(Math.max(4, this.regions.size())); - primitive.putAll(this.regions); - this.regions = primitive; - } - - /** - * @author circulation - * @reason Use the region coordinate directly as a long key without changing the original signed packing. - */ - @Overwrite - private CompassRegion getRegion(final int chunkX, final int chunkZ) { - long key = chunkX >> 10; - key <<= 32; - key |= chunkZ >> 10; - final Long2ObjectMap regions = (Long2ObjectMap) this.regions; - CompassRegion region = regions.get(key); - if (region == null) { - region = new CompassRegion(chunkX, chunkZ, this.dimensionId, this.worldCompassFolder); - regions.put(key, region); - } - return region; - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCraftingCPUStatus.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinCraftingCPUStatus.java deleted file mode 100644 index e69de29b..00000000 diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinMeteorDataNameEncoder.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinMeteorDataNameEncoder.java deleted file mode 100644 index 60cf6598..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinMeteorDataNameEncoder.java +++ /dev/null @@ -1,38 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.core.worlddata.MeteorDataNameEncoder; -import github.kasuminova.novaeng.common.performance.MeteorDataFilename; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(value = MeteorDataNameEncoder.class, remap = false) -public abstract class MixinMeteorDataNameEncoder { - - @Shadow - @Final - private char dataSeparator; - - @Shadow - @Final - private String fileExtension; - - @Shadow - @Final - private char baseExtSeparator; - - @Shadow - @Final - private int bitScale; - - /** - * @author circulation - * @reason Build decimal region filenames without Formatter's parsing and varargs on ASCII-digit locales. - */ - @Overwrite - public String encode(final int dimension, final int chunkX, final int chunkZ) { - return MeteorDataFilename.encode(dimension, chunkX, chunkZ, this.bitScale, - this.dataSeparator, this.baseExtSeparator, this.fileExtension); - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinSpawnDataInput.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinSpawnDataInput.java deleted file mode 100644 index 67f1a122..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinSpawnDataInput.java +++ /dev/null @@ -1,20 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import github.kasuminova.novaeng.common.performance.MeteorSpawnDataInput; -import net.minecraft.nbt.NBTTagCompound; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import java.io.IOException; -import java.io.InputStream; - -@Mixin(targets = "appeng.core.worlddata.SpawnData", remap = false) -public abstract class MixinSpawnDataInput { - - @Redirect(method = "loadSpawnData", at = @At(value = "INVOKE", - target = "Lnet/minecraft/nbt/CompressedStreamTools;readCompressed(Ljava/io/InputStream;)Lnet/minecraft/nbt/NBTTagCompound;", remap = true), require = 1) - private NBTTagCompound nova$bufferCompressedFile(final InputStream is) throws IOException { - return MeteorSpawnDataInput.read(is); - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/betterp2p/MixinServerLinkP2PHandler.java b/src/main/java/github/kasuminova/novaeng/mixin/betterp2p/MixinServerLinkP2PHandler.java deleted file mode 100644 index e69de29b..00000000 diff --git a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/ae2ctl/MixinBackground.java b/src/main/java/github/kasuminova/novaeng/mixin/enumcache/ae2ctl/MixinBackground.java deleted file mode 100644 index 48d4cfcd..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/ae2ctl/MixinBackground.java +++ /dev/null @@ -1,24 +0,0 @@ -package github.kasuminova.novaeng.mixin.enumcache.ae2ctl; - -import github.kasuminova.ae2ctl.client.gui.widget.impl.craftingtree.Background; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(value = Background.class, remap = false) -public abstract class MixinBackground { - - @Shadow - @Final - private static Background[] $VALUES; - - /** - * @author circulation - * @reason Return $VALUES instead of its clone. - */ - @Overwrite(remap = false) - public static Background[] values() { - return $VALUES; - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/ae2ctl/MixinGuiType.java b/src/main/java/github/kasuminova/novaeng/mixin/enumcache/ae2ctl/MixinGuiType.java deleted file mode 100644 index 8bfcf5ad..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/ae2ctl/MixinGuiType.java +++ /dev/null @@ -1,24 +0,0 @@ -package github.kasuminova.novaeng.mixin.enumcache.ae2ctl; - -import github.kasuminova.ae2ctl.common.CommonProxy.GuiType; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(value = GuiType.class, remap = false) -public abstract class MixinGuiType { - - @Shadow - @Final - private static GuiType[] $VALUES; - - /** - * @author circulation - * @reason Return $VALUES instead of its clone. - */ - @Overwrite(remap = false) - public static GuiType[] values() { - return $VALUES; - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/betterp2p/MixinBetterMemoryCardModes.java b/src/main/java/github/kasuminova/novaeng/mixin/enumcache/betterp2p/MixinBetterMemoryCardModes.java deleted file mode 100644 index d9e1bb4a..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/betterp2p/MixinBetterMemoryCardModes.java +++ /dev/null @@ -1,24 +0,0 @@ -package github.kasuminova.novaeng.mixin.enumcache.betterp2p; - -import com.projecturanus.betterp2p.item.BetterMemoryCardModes; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(value = BetterMemoryCardModes.class, remap = false) -public abstract class MixinBetterMemoryCardModes { - - @Shadow - @Final - private static BetterMemoryCardModes[] $VALUES; - - /** - * @author circulation - * @reason Return $VALUES instead of its clone. - */ - @Overwrite(remap = false) - public static BetterMemoryCardModes[] values() { - return $VALUES; - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/betterp2p/MixinGuiScale.java b/src/main/java/github/kasuminova/novaeng/mixin/enumcache/betterp2p/MixinGuiScale.java deleted file mode 100644 index f2b31147..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/betterp2p/MixinGuiScale.java +++ /dev/null @@ -1,24 +0,0 @@ -package github.kasuminova.novaeng.mixin.enumcache.betterp2p; - -import com.projecturanus.betterp2p.client.gui.widget.GuiScale; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(value = GuiScale.class, remap = false) -public abstract class MixinGuiScale { - - @Shadow - @Final - private static GuiScale[] $VALUES; - - /** - * @author circulation - * @reason Return $VALUES instead of its clone. - */ - @Overwrite(remap = false) - public static GuiScale[] values() { - return $VALUES; - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/mekeng/MixinGuiMode.java b/src/main/java/github/kasuminova/novaeng/mixin/enumcache/mekeng/MixinGuiMode.java deleted file mode 100644 index dfcfc7e6..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/mekeng/MixinGuiMode.java +++ /dev/null @@ -1,24 +0,0 @@ -package github.kasuminova.novaeng.mixin.enumcache.mekeng; - -import com.mekeng.github.common.container.handler.GuiFactory.GuiMode; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(value = GuiMode.class, remap = false) -public abstract class MixinGuiMode { - - @Shadow - @Final - private static GuiMode[] $VALUES; - - /** - * @author circulation - * @reason Return $VALUES instead of its clone. - */ - @Overwrite(remap = false) - public static GuiMode[] values() { - return $VALUES; - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/mekeng/MixinPT.java b/src/main/java/github/kasuminova/novaeng/mixin/enumcache/mekeng/MixinPT.java deleted file mode 100644 index cd986b39..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/mekeng/MixinPT.java +++ /dev/null @@ -1,24 +0,0 @@ -package github.kasuminova.novaeng.mixin.enumcache.mekeng; - -import com.mekeng.github.network.packet.sync.ParaSerializer.PT; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(value = PT.class, remap = false) -public abstract class MixinPT { - - @Shadow - @Final - private static PT[] $VALUES; - - /** - * @author circulation - * @reason Return $VALUES instead of its clone. - */ - @Overwrite(remap = false) - public static PT[] values() { - return $VALUES; - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/neenergistics/MixinIngredientMergeMode.java b/src/main/java/github/kasuminova/novaeng/mixin/enumcache/neenergistics/MixinIngredientMergeMode.java deleted file mode 100644 index 2faa2612..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/neenergistics/MixinIngredientMergeMode.java +++ /dev/null @@ -1,24 +0,0 @@ -package github.kasuminova.novaeng.mixin.enumcache.neenergistics; - -import com.github.vfyjxf.nee.config.IngredientMergeMode; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(value = IngredientMergeMode.class, remap = false) -public abstract class MixinIngredientMergeMode { - - @Shadow - @Final - private static IngredientMergeMode[] $VALUES; - - /** - * @author circulation - * @reason Return $VALUES instead of its clone. - */ - @Overwrite(remap = false) - public static IngredientMergeMode[] values() { - return $VALUES; - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/neenergistics/MixinPlayerAction.java b/src/main/java/github/kasuminova/novaeng/mixin/enumcache/neenergistics/MixinPlayerAction.java deleted file mode 100644 index b7271c6f..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/neenergistics/MixinPlayerAction.java +++ /dev/null @@ -1,24 +0,0 @@ -package github.kasuminova.novaeng.mixin.enumcache.neenergistics; - -import com.github.vfyjxf.nee.network.PlayerAction; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(value = PlayerAction.class, remap = false) -public abstract class MixinPlayerAction { - - @Shadow - @Final - private static PlayerAction[] $VALUES; - - /** - * @author circulation - * @reason Return $VALUES instead of its clone. - */ - @Overwrite(remap = false) - public static PlayerAction[] values() { - return $VALUES; - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/neenergistics/MixinSyncAction.java b/src/main/java/github/kasuminova/novaeng/mixin/enumcache/neenergistics/MixinSyncAction.java deleted file mode 100644 index b0968cf7..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/neenergistics/MixinSyncAction.java +++ /dev/null @@ -1,24 +0,0 @@ -package github.kasuminova.novaeng.mixin.enumcache.neenergistics; - -import com.github.vfyjxf.nee.network.SyncAction; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(value = SyncAction.class, remap = false) -public abstract class MixinSyncAction { - - @Shadow - @Final - private static SyncAction[] $VALUES; - - /** - * @author circulation - * @reason Return $VALUES instead of its clone. - */ - @Overwrite(remap = false) - public static SyncAction[] values() { - return $VALUES; - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/threng/MixinBasicIO.java b/src/main/java/github/kasuminova/novaeng/mixin/enumcache/threng/MixinBasicIO.java deleted file mode 100644 index c3407816..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/threng/MixinBasicIO.java +++ /dev/null @@ -1,24 +0,0 @@ -package github.kasuminova.novaeng.mixin.enumcache.threng; - -import io.github.phantamanta44.threng.util.SlotType.BasicIO; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(value = BasicIO.class, remap = false) -public abstract class MixinBasicIO { - - @Shadow - @Final - private static BasicIO[] $VALUES; - - /** - * @author circulation - * @reason Return $VALUES instead of its clone. - */ - @Overwrite(remap = false) - public static BasicIO[] values() { - return $VALUES; - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/threng/MixinBlockBigAssemblerType.java b/src/main/java/github/kasuminova/novaeng/mixin/enumcache/threng/MixinBlockBigAssemblerType.java deleted file mode 100644 index 44438232..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/threng/MixinBlockBigAssemblerType.java +++ /dev/null @@ -1,24 +0,0 @@ -package github.kasuminova.novaeng.mixin.enumcache.threng; - -import io.github.phantamanta44.threng.block.BlockBigAssembler.Type; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(value = Type.class, remap = false) -public abstract class MixinBlockBigAssemblerType { - - @Shadow - @Final - private static Type[] $VALUES; - - /** - * @author circulation - * @reason Return $VALUES instead of its clone. - */ - @Overwrite(remap = false) - public static Type[] values() { - return $VALUES; - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/threng/MixinBlockMachineType.java b/src/main/java/github/kasuminova/novaeng/mixin/enumcache/threng/MixinBlockMachineType.java deleted file mode 100644 index 92bc181b..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/threng/MixinBlockMachineType.java +++ /dev/null @@ -1,24 +0,0 @@ -package github.kasuminova.novaeng.mixin.enumcache.threng; - -import io.github.phantamanta44.threng.block.BlockMachine.Type; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(value = Type.class, remap = false) -public abstract class MixinBlockMachineType { - - @Shadow - @Final - private static Type[] $VALUES; - - /** - * @author circulation - * @reason Return $VALUES instead of its clone. - */ - @Overwrite(remap = false) - public static Type[] values() { - return $VALUES; - } -} diff --git a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/threng/MixinItemMaterialType.java b/src/main/java/github/kasuminova/novaeng/mixin/enumcache/threng/MixinItemMaterialType.java deleted file mode 100644 index 8b17141c..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/enumcache/threng/MixinItemMaterialType.java +++ /dev/null @@ -1,24 +0,0 @@ -package github.kasuminova.novaeng.mixin.enumcache.threng; - -import io.github.phantamanta44.threng.item.ItemMaterial.Type; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; - -@Mixin(value = Type.class, remap = false) -public abstract class MixinItemMaterialType { - - @Shadow - @Final - private static Type[] $VALUES; - - /** - * @author circulation - * @reason Return $VALUES instead of its clone. - */ - @Overwrite(remap = false) - public static Type[] values() { - return $VALUES; - } -} diff --git a/src/main/resources/novaeng_core.mixin.json b/src/main/resources/novaeng_core.mixin.json index 335f8b32..3333d0cc 100644 --- a/src/main/resources/novaeng_core.mixin.json +++ b/src/main/resources/novaeng_core.mixin.json @@ -28,6 +28,7 @@ "astralsorcery.MixinPlayerAttributeMap", "astralsorcery.MixinTileAccelerationBlacklist", "athenaeum.MixinEnchantmentHelper", + "biomesoplenty.MixinAIWaspRandomFly", "biomesoplenty.MixinTrailManager", "botania.MixinTilePoolManaBatch", "botania.MixinTileRedStringContainer", @@ -88,8 +89,6 @@ "enumcache.advancedrocketry.MixinMODES", "enumcache.advancedrocketry.MixinTemps", "enumcache.advancedrocketry.MixinType", - "enumcache.ae2ctl.MixinBackground", - "enumcache.ae2ctl.MixinGuiType", "enumcache.ae2exttable.MixinAE2ExtendedGUIs", "enumcache.ae2exttable.MixinKeyBindings", "enumcache.ae2exttable.MixinPacketTypes", @@ -202,8 +201,6 @@ "enumcache.betterbuilderswands.MixinEnumLock", "enumcache.bettermineshafts.MixinOreType", "enumcache.bettermineshafts.MixinTurnDirection", - "enumcache.betterp2p.MixinBetterMemoryCardModes", - "enumcache.betterp2p.MixinGuiScale", "enumcache.bibliocraft.MixinEnumBiblioPaintings", "enumcache.bibliocraft.MixinEnumColor", "enumcache.bibliocraft.MixinEnumMetalType", @@ -653,8 +650,6 @@ "enumcache.mekanism.MixinTubeTier", "enumcache.mekanism.MixinUpgrade", "enumcache.mekanism.MixinWrenches", - "enumcache.mekeng.MixinGuiMode", - "enumcache.mekeng.MixinPT", "enumcache.mets.MixinFabricatorType", "enumcache.mets.MixinMetsBlockWithTileEntity", "enumcache.minecraft.MixinASMInfoValueType", @@ -923,9 +918,6 @@ "enumcache.modularui.MixinScreenOrientation", "enumcache.more_flux_storage.MixinFluxGuiActionType", "enumcache.moreoverlays.MixinRenderMode", - "enumcache.neenergistics.MixinIngredientMergeMode", - "enumcache.neenergistics.MixinPlayerAction", - "enumcache.neenergistics.MixinSyncAction", "enumcache.nuclearcraft.MixinBasicType", "enumcache.nuclearcraft.MixinBlockQuantumComputerCodeGeneratorType", "enumcache.nuclearcraft.MixinControlType", @@ -1096,10 +1088,6 @@ "enumcache.thermalfoundation.MixinPacketTypes", "enumcache.thermalfoundation.MixinToolSet", "enumcache.thermalfoundation.MixinToolSetVanilla", - "enumcache.threng.MixinBasicIO", - "enumcache.threng.MixinBlockBigAssemblerType", - "enumcache.threng.MixinBlockMachineType", - "enumcache.threng.MixinItemMaterialType", "enumcache.tinymobfarm.MixinEnumMobFarm", "enumcache.topalldependents.MixinEnumChip", "enumcache.torchmaster.MixinGuiType", @@ -1169,7 +1157,16 @@ "minecraft.MixinWorldEntitySpawner", "minecraft.MixinWorldGenMinableGeometry", "minecraft.forge.AccessorDimensionManagerWorlds", + "minecraft.forge.MixinASMEventHandler", + "minecraft.forge.MixinChunkIOProviderNbt", "minecraft.forge.MixinDimensionManagerLeakCheck", + "minecraft.forge.MixinEventBus", + "minecraft.forge.MixinEventBusPost", + "minecraft.forge.MixinFMLOutboundHandlerReply", + "minecraft.forge.MixinFMLProxyPacket", + "minecraft.forge.MixinForgeRegistry", + "minecraft.forge.MixinNetworkDispatcherBandwidth", + "minecraft.forge.MixinSimpleIndexedCodec", "mmce.AccessorAbstractMachine", "mmce.MixinBlockArrayCache", "mmce.MixinBlockArrayPreviewRenderHelper", diff --git a/src/test/java/github/kasuminova/novaeng/common/performance/JavaOptimizationBenchmark.java b/src/test/java/github/kasuminova/novaeng/common/performance/JavaOptimizationBenchmark.java index 10e25e59..fbb9ee74 100644 --- a/src/test/java/github/kasuminova/novaeng/common/performance/JavaOptimizationBenchmark.java +++ b/src/test/java/github/kasuminova/novaeng/common/performance/JavaOptimizationBenchmark.java @@ -1,10 +1,6 @@ package github.kasuminova.novaeng.common.performance; -import appeng.api.networking.crafting.ICraftingPatternDetails; -import appeng.api.networking.crafting.ICraftingProvider; -import appeng.api.networking.crafting.ICraftingProviderHelper; import com.sun.management.ThreadMXBean; -import github.kasuminova.novaeng.common.tile.ecotech.efabricator.EFabricatorPatternBus; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import net.minecraft.init.Bootstrap; import net.minecraft.init.Items; @@ -12,11 +8,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import java.lang.invoke.MethodHandle; -import java.lang.invoke.MethodHandles; -import java.lang.invoke.MethodType; import java.lang.management.ManagementFactory; -import java.lang.reflect.Proxy; import java.nio.file.Files; import java.nio.file.Path; import java.util.Arrays; @@ -45,34 +37,6 @@ static void main(final String[] args) throws Throwable { values[i] = (byte) i; } compare(report, "drill_pow_256", () -> powers(values, false), () -> powers(values, true)); - final EFabricatorPatternBus bus = WorldgenTestBlocks.allocate(EFabricatorPatternBus.class); - final ObjectArrayList details = new ObjectArrayList<>(); - details.size(72); - for (int i = 0; i < 72; i++) { - details.set(i, pattern()); - } - JavaOptimizationTest.set(EFabricatorPatternBus.class, bus, "details", details); - JavaOptimizationTest.set(EFabricatorPatternBus.class, bus, "validPatterns", 72); - final MethodHandles.Lookup lookup = MethodHandles.privateLookupIn(EFabricatorPatternBus.class, MethodHandles.lookup()); - final MethodHandle provide = lookup.findVirtual(EFabricatorPatternBus.class, "provideCrafting", - MethodType.methodType(void.class, ICraftingProvider.class, ICraftingProviderHelper.class)); - final ICraftingProviderHelper tracker = (ICraftingProviderHelper) Proxy.newProxyInstance( - JavaOptimizationBenchmark.class.getClassLoader(), new Class[]{ICraftingProviderHelper.class}, - JavaOptimizationTest::objectMethod); - provide.invoke(bus, (ICraftingProvider) null, tracker); - compare(report, "pattern_register_72", () -> { - long count = 0; - for (final ICraftingPatternDetails detail : bus.getDetails()) { - if (detail.isCraftable()) { - tracker.addCraftingOption(null, detail); - count++; - } - } - return count; - }, () -> { - provide.invoke(bus, (ICraftingProvider) null, tracker); - return 72; - }); Files.writeString(Path.of(args[0]), report); System.out.print(report); System.out.println("checksum=" + sink); @@ -144,13 +108,6 @@ private static long powers(final byte[] values, final boolean indexed) { return Double.doubleToLongBits(sum); } - private static ICraftingPatternDetails pattern() { - return (ICraftingPatternDetails) Proxy.newProxyInstance( - JavaOptimizationBenchmark.class.getClassLoader(), new Class[]{ICraftingPatternDetails.class}, - (proxy, method, arguments) -> method.getName().equals("isCraftable") ? true - : JavaOptimizationTest.objectMethod(proxy, method, arguments)); - } - private static void compare(final StringBuilder out, final String name, final Task original, final Task optimized) throws Throwable { if (original.run() != optimized.run()) { throw new IllegalStateException("Benchmark results differ: " + name); diff --git a/src/test/java/github/kasuminova/novaeng/common/performance/JavaOptimizationTest.java b/src/test/java/github/kasuminova/novaeng/common/performance/JavaOptimizationTest.java index 9e6f11ea..795af641 100644 --- a/src/test/java/github/kasuminova/novaeng/common/performance/JavaOptimizationTest.java +++ b/src/test/java/github/kasuminova/novaeng/common/performance/JavaOptimizationTest.java @@ -1,17 +1,11 @@ package github.kasuminova.novaeng.common.performance; import WayofTime.bloodmagic.tile.TileAltar; -import appeng.api.networking.crafting.ICraftingPatternDetails; -import appeng.api.networking.crafting.ICraftingProvider; -import appeng.api.networking.crafting.ICraftingProviderHelper; -import appeng.api.storage.data.IAEItemStack; -import appeng.api.storage.data.IItemList; -import appeng.tile.inventory.AppEngInternalInventory; +import ae2.api.stacks.KeyCounter; import github.kasuminova.novaeng.common.machine.MMAltar; import github.kasuminova.novaeng.common.tile.ecotech.efabricator.EFabricatorController; import github.kasuminova.novaeng.common.tile.ecotech.efabricator.EFabricatorPatternBus; import github.kasuminova.novaeng.common.tile.ecotech.efabricator.EFabricatorWorker; -import github.kasuminova.novaeng.common.util.AutoCraftingQueue; import github.kasuminova.novaeng.common.util.NEWMachineAssemblyManager; import github.kasuminova.novaeng.common.util.TileItemHandler; import hellfirepvp.modularmachinery.common.tiles.base.TileMultiblockMachineController; @@ -133,17 +127,6 @@ static void set(final Class type, final Object object, final String name, fin field.set(object, value); } - private static ICraftingPatternDetails pattern(final String name) { - return (ICraftingPatternDetails) Proxy.newProxyInstance(JavaOptimizationTest.class.getClassLoader(), - new Class[]{ICraftingPatternDetails.class}, (proxy, method, args) -> switch (method.getName()) { - case "isCraftable" -> true; - case "equals" -> proxy == args[0]; - case "hashCode" -> System.identityHashCode(proxy); - case "toString" -> name; - default -> null; - }); - } - static Object objectMethod(final Object proxy, final Method method, final Object[] args) { return switch (method.getName()) { case "equals" -> proxy == args[0]; @@ -266,101 +249,13 @@ public void setStackInSlot(final int slot, @Nonnull final ItemStack stack) { } } - @Test - void queuesReleaseOnlyTheRequestedPlayerOrWorldAndEmptyExecutionReleasesEntry() throws Exception { - final Field mapField = AutoCraftingQueue.class.getDeclaredField("QUEUES"); - mapField.setAccessible(true); - @SuppressWarnings("unchecked") final Map queues = - (Map) mapField.get(null); - AutoCraftingQueue.clearAll(); - final WorldServer firstWorld = WorldgenTestBlocks.allocate(WorldServer.class); - final WorldServer secondWorld = WorldgenTestBlocks.allocate(WorldServer.class); - final EntityPlayerMP first = WorldgenTestBlocks.allocate(EntityPlayerMP.class); - final EntityPlayerMP second = WorldgenTestBlocks.allocate(EntityPlayerMP.class); - first.world = firstWorld; - second.world = secondWorld; - final Field entityId = Entity.class.getDeclaredField("entityId"); - entityId.setAccessible(true); - entityId.setInt(first, 1); - entityId.setInt(second, 2); - final AutoCraftingQueue firstQueue = new AutoCraftingQueue(); - final AutoCraftingQueue secondQueue = new AutoCraftingQueue(); - final ArrayDeque firstItems = new ArrayDeque<>(List.of(ItemStack.EMPTY)); - final ArrayDeque secondItems = new ArrayDeque<>(List.of(ItemStack.EMPTY)); - set(AutoCraftingQueue.class, firstQueue, "queue", firstItems); - set(AutoCraftingQueue.class, secondQueue, "queue", secondItems); - queues.put(first, firstQueue); - queues.put(second, secondQueue); - try { - AutoCraftingQueue.removeWorld(firstWorld); - assertNull(AutoCraftingQueue.getQueue(first)); - assertTrue(firstItems.isEmpty()); - assertSame(secondQueue, AutoCraftingQueue.getQueue(second)); - AutoCraftingQueue.removeQueue(second); - assertTrue(secondItems.isEmpty()); - queues.put(first, firstQueue); - assertFalse(firstQueue.executionQueue(first)); - assertTrue(queues.isEmpty()); - queues.put(second, secondQueue); - secondQueue.clearQueue(); - assertTrue(queues.isEmpty()); - } finally { - AutoCraftingQueue.clearAll(); - } - } - - @Test - void patternSnapshotStaysStableWhenRegistrationReentersAndCountTracksRefresh() throws Exception { - final EFabricatorPatternBus bus = WorldgenTestBlocks.allocate(EFabricatorPatternBus.class); - final ObjectArrayList details = new ObjectArrayList<>(); - details.size(72); - set(EFabricatorPatternBus.class, bus, "details", details); - final AppEngInternalInventory inventory = new AppEngInternalInventory(null, 72); - set(EFabricatorPatternBus.class, bus, "patterns", inventory); - final ICraftingPatternDetails first = pattern("first"); - final ICraftingPatternDetails second = pattern("second"); - details.set(0, first); - details.set(1, second); - set(EFabricatorPatternBus.class, bus, "validPatterns", 2); - final List publicSnapshot = bus.getDetails(); - publicSnapshot.clear(); - assertEquals(2, bus.getValidPatterns()); - final Method refresh = EFabricatorPatternBus.class.getDeclaredMethod("refreshPattern", int.class); - refresh.setAccessible(true); - final Method provide = EFabricatorPatternBus.class.getDeclaredMethod("provideCrafting", - ICraftingProvider.class, ICraftingProviderHelper.class); - provide.setAccessible(true); - final List registered = new ObjectArrayList<>(); - final ICraftingProviderHelper tracker = (ICraftingProviderHelper) Proxy.newProxyInstance( - getClass().getClassLoader(), new Class[]{ICraftingProviderHelper.class}, (proxy, method, args) -> { - if (method.getName().equals("addCraftingOption")) { - registered.add((ICraftingPatternDetails) args[1]); - if (registered.size() == 1) { - refresh.invoke(bus, 1); - } - } - return objectMethod(proxy, method, args); - }); - provide.invoke(bus, null, tracker); - assertEquals(List.of(first, second), registered); - assertEquals(1, bus.getValidPatterns()); - assertEquals(List.of(first), bus.getDetails()); - registered.clear(); - provide.invoke(bus, null, tracker); - assertEquals(List.of(first), registered); - refresh.invoke(bus, 0); - assertEquals(0, bus.getValidPatterns()); - } - @Test @SuppressWarnings("unchecked") void workerAllowsSubUnitEnergyWithoutClampingExceptionOrConsumingWork() throws Exception { final var controller = WorldgenTestBlocks.allocate( EFabricatorController.class); controller.setParallelism(4); - controller.setOutputBuffer((IItemList) - Proxy.newProxyInstance(getClass().getClassLoader(), new Class[]{IItemList.class}, - JavaOptimizationTest::objectMethod)); + controller.setOutputBuffer(new KeyCounter()); final EFabricatorWorker worker = WorldgenTestBlocks.allocate(EFabricatorWorker.class); set(EFabricatorWorker.class, worker, "queue", new EFabricatorWorker.CraftingQueue()); worker.setController(controller); diff --git a/src/test/java/github/kasuminova/novaeng/common/performance/JavaSourceMigrationTest.java b/src/test/java/github/kasuminova/novaeng/common/performance/JavaSourceMigrationTest.java index 9f12e931..1cfdf4f7 100644 --- a/src/test/java/github/kasuminova/novaeng/common/performance/JavaSourceMigrationTest.java +++ b/src/test/java/github/kasuminova/novaeng/common/performance/JavaSourceMigrationTest.java @@ -1,6 +1,5 @@ package github.kasuminova.novaeng.common.performance; -import github.kasuminova.novaeng.common.util.EmptyQueue; import github.kasuminova.novaeng.common.util.IBlockPosEx; import github.kasuminova.novaeng.common.util.OnlyWriteEnergyContainer; import net.minecraft.util.EnumFacing; @@ -53,23 +52,6 @@ void receiveOnlyEnergyWrapperPreservesSimulationAndStorageReplacement() { assertEquals(5, first.stored); } - @Test - void emptyQueueStillDiscardsWritesAndReturnsNullForEmptyReads() { - final EmptyQueue queue = EmptyQueue.empty(); - assertSame(queue, EmptyQueue.empty()); - assertFalse(queue.add("ignored")); - assertFalse(queue.offer("ignored")); - assertFalse(queue.add("ignored")); - assertFalse(queue.containsAll(List.of())); - assertNull(queue.remove()); - assertNull(queue.element()); - assertNull(queue.poll()); - assertNull(queue.peek()); - assertFalse(queue.iterator().hasNext()); - assertEquals(0, queue.size()); - assertTrue(queue.isEmpty()); - } - @Test void relativePositionTransformsPreserveAllSixFacingsAndIntegerOverflow() { for (final int x : new int[]{2, Integer.MIN_VALUE, Integer.MAX_VALUE}) { @@ -83,29 +65,6 @@ void relativePositionTransformsPreserveAllSixFacingsAndIntegerOverflow() { } } - @Test - void betterP2PThreadWrapperAppliesWithoutCompilingAgainstKotlinPair() throws Exception { - final ClassNode target = new ClassNode(); - new ClassReader(PerformanceMixinTestLoader.transformed( - "com.projecturanus.betterp2p.network.packet.ServerLinkP2PHandler")).accept(target, 0); - final var handler = target.methods.stream().filter(method -> method.name.contains("linkOnServerThread")) - .findFirst().orElseThrow(); - new Analyzer<>(new BasicVerifier()).analyze(target.name, handler); - assertTrue(target.methods.stream().flatMap(method -> Stream.of(method.instructions.toArray())) - .anyMatch(instruction -> instruction instanceof MethodInsnNode call - && call.name.contains("linkOnServerThread"))); - final ClassNode original = new ClassNode(); - new ClassReader(PerformanceMixinTestLoader.resource( - "com.projecturanus.betterp2p.network.packet.ServerLinkP2PHandler")).accept(original, 0); - final var originalHandler = original.methods.stream().filter(method -> method.name.equals("onMessage") - && method.desc.startsWith("(Lcom/projecturanus/betterp2p/network/packet/C2SLinkP2P;")) - .findFirst().orElseThrow(); - final var originalCalls = calls(originalHandler); - assertFalse(originalCalls.isEmpty()); - assertTrue(target.methods.stream().anyMatch(method -> calls(method).equals(originalCalls)), - "The wrapper must retain the original handler, including versions that link inside a nested Runnable"); - } - private static final class EnergyStorage implements IEnergyStorage { private int stored; private int extractions; diff --git a/src/test/java/github/kasuminova/novaeng/common/performance/MeteorCompassMetadataTest.java b/src/test/java/github/kasuminova/novaeng/common/performance/MeteorCompassMetadataTest.java deleted file mode 100644 index 46f9d34f..00000000 --- a/src/test/java/github/kasuminova/novaeng/common/performance/MeteorCompassMetadataTest.java +++ /dev/null @@ -1,357 +0,0 @@ -package github.kasuminova.novaeng.common.performance; - -import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.block.properties.PropertyInteger; -import net.minecraft.block.state.IBlockState; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.chunk.IChunkProvider; -import net.minecraftforge.registries.IForgeRegistryEntry; -import org.junit.jupiter.api.Test; -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.Opcodes; -import org.objectweb.asm.commons.ClassRemapper; -import org.objectweb.asm.commons.SimpleRemapper; -import org.objectweb.asm.tree.ClassNode; -import org.objectweb.asm.tree.MethodNode; -import org.objectweb.asm.tree.analysis.Analyzer; -import org.objectweb.asm.tree.analysis.BasicVerifier; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.AbstractExecutorService; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertInstanceOf; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNotSame; -import static org.junit.jupiter.api.Assertions.assertSame; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; - -class MeteorCompassMetadataTest { - - static final PropertyInteger META = PropertyInteger.create("metadata", 0, 15); - private static final String ORIGINAL = "com.circulation.better_meteorite.mixin.ae2.MixinCompassService"; - - static Scan scan(final boolean optimized, final int match, final boolean recording) throws Exception { - final ClassNode node = optimized ? optimizedScanner() : original(); - final byte[] bytes = bytes(node); - final Class type = new ClassLoader(MeteorCompassMetadataTest.class.getClassLoader()) { - Class define() { - return this.defineClass(ORIGINAL, bytes, 0, bytes.length); - } - }.define(); - final Object instance = type.getConstructor().newInstance(); - final MetadataBlock background = block("background"); - final MetadataBlock target = block("target"); - final ScanChunk chunk = WorldgenTestBlocks.allocate(ScanChunk.class); - chunk.states = new IBlockState[8192]; - Arrays.fill(chunk.states, background.getDefaultState()); - if (match >= 0) { - chunk.states[match] = target.getDefaultState().withProperty(META, 3); - } - chunk.recording = recording; - chunk.visits = new ObjectArrayList<>(); - final ScanWorld world = WorldgenTestBlocks.allocate(ScanWorld.class); - world.chunk = chunk; - final CaptureExecutor executor = new CaptureExecutor(); - set(type, null, "CHUNK_SIZE", 16); - set(type, instance, "executor", executor); - final Constructor post = Post.class.getConstructor(Object.class, World.class, int.class, int.class, int.class, boolean.class); - post.setAccessible(true); - set(type, null, "randomComplement$constructor", post); - final Scan result = new Scan(type, instance, type.getMethod("updateAreaMixin", World.class, int.class, int.class, - int.class, CallbackInfoReturnable.class), world, executor, background, target); - result.targets(List.of(target.getRegistryName()), List.of(3)); - return result; - } - - private static MetadataBlock block(final String name) throws Exception { - final MetadataBlock block = WorldgenTestBlocks.states(WorldgenTestBlocks.allocate(MetadataBlock.class), META); - return registered(block, new ResourceLocation("nova", name)); - } - - static T registered(final T block, final ResourceLocation name) throws Exception { - final Class delegateType = Class.forName("net.minecraftforge.registries.RegistryDelegate"); - final Constructor constructor = delegateType.getDeclaredConstructor(Object.class, Class.class); - constructor.setAccessible(true); - final Object delegate = constructor.newInstance(block, Block.class); - final Method setName = delegateType.getDeclaredMethod("setName", ResourceLocation.class); - setName.setAccessible(true); - setName.invoke(delegate, name); - final Field field = IForgeRegistryEntry.Impl.class.getField("delegate"); - field.setAccessible(true); - field.set(block, delegate); - return block; - } - - private static ClassNode original() throws Exception { - try (final var stream = MeteorCompassMetadataTest.class.getClassLoader() - .getResourceAsStream(ORIGINAL.replace('.', '/') + ".class")) { - assertNotNull(stream, "Missing actual BetterMeteorite dependency"); - final ClassNode node = new ClassNode(); - new ClassReader(stream).accept(node, 0); - return node; - } - } - - private static ClassNode optimizedScanner() throws Exception { - final ClassNode fixture = new ClassNode(); - new ClassReader(PerformanceMixinTestLoader.transformed("appeng.services.CompassService")) - .accept(new ClassRemapper(fixture, new SimpleRemapper("appeng/services/CompassService", ORIGINAL.replace('.', '/'))), 0); - fixture.methods.removeIf(method -> method.name.equals("") || method.name.equals("")); - for (final MethodNode method : original().methods) { - if (method.name.equals("") || method.name.equals("")) { - fixture.methods.add(method); - } - } - for (final var field : fixture.fields) { - field.access &= ~Opcodes.ACC_FINAL; - } - final MethodNode handler = fixture.methods.stream().filter(method -> method.name.contains("updateAreaMixin") - && method.desc.equals("(Lnet/minecraft/world/World;IIILorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)V")) - .findFirst().orElseThrow(); - handler.access = (handler.access & ~(Opcodes.ACC_PRIVATE | Opcodes.ACC_PROTECTED)) | Opcodes.ACC_PUBLIC; - handler.name = "updateAreaMixin"; - return fixture; - } - - private static byte[] bytes(final ClassNode node) { - final ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS); - node.accept(writer); - return writer.toByteArray(); - } - - private static void set(final Class type, final Object instance, final String name, final Object value) throws Exception { - final Field field = type.getDeclaredField(name); - field.setAccessible(true); - field.set(instance, value); - } - - @Test - void actualScannerRetainsRegistryIdentityMetadataVisitsAndSubmissions() throws Exception { - for (final int match : new int[]{-1, 0, 31, 1024, 8191}) { - final Scan before = scan(false, match, true); - final Scan after = scan(true, match, true); - for (final int y : new int[]{-1, 0, 31, 32, 127, 255, 256}) { - before.invoke(-33, y, 1000); - after.invoke(-33, y, 1000); - assertEquals(before.world.chunk.visits, after.world.chunk.visits); - assertEquals(before.world.chunk.checksum, after.world.chunk.checksum); - assertEquals(before.executor.last.found, after.executor.last.found); - assertEquals(match >= 0, after.executor.last.found); - assertEquals(-3, after.executor.last.chunkX); - assertEquals(62, after.executor.last.chunkZ); - assertEquals(y >> 5, after.executor.last.band); - assertSame(after.world, after.executor.last.world); - assertEquals(before.executor.submissions, after.executor.submissions); - } - assertEquals(0, after.background.metadataCalls); - if (match != 0) { - assertTrue(before.background.metadataCalls > 0); - } - } - } - - @Test - void equalButDistinctRegistryNamesAreNotMatchedAndNoStateResultIsCached() throws Exception { - final Scan before = scan(false, 8191, true); - final Scan after = scan(true, 8191, true); - final ResourceLocation equalName = new ResourceLocation(after.target.getRegistryName().toString()); - assertNotSame(after.target.getRegistryName(), equalName); - assertEquals(after.target.getRegistryName(), equalName); - after.targets(List.of(equalName), List.of(3)); - before.targets(List.of(new ResourceLocation(before.target.getRegistryName().toString())), List.of(3)); - before.invoke(0, 32, 0); - after.invoke(0, 32, 0); - assertFalse(before.executor.last.found); - assertFalse(after.executor.last.found); - after.targets(List.of(after.target.getRegistryName(), after.target.getRegistryName()), List.of(2, 3)); - final int previousCalls = after.target.metadataCalls; - after.invoke(0, 32, 0); - assertTrue(after.executor.last.found); - assertEquals(previousCalls + 1, after.target.metadataCalls); - after.world.chunk.states[8191] = after.background.getDefaultState(); - after.invoke(0, 32, 0); - assertFalse(after.executor.last.found); - after.world.chunk.states[0] = after.target.getDefaultState().withProperty(META, 2); - after.invoke(0, 32, 0); - assertTrue(after.executor.last.found); - } - - @Test - void uninitializedTargetsStillUseTheOriginalCallbackPath() throws Exception { - for (final boolean optimized : new boolean[]{false, true}) { - final Scan scan = scan(optimized, -1, true); - set(scan.type, null, "randomComplement$MeteoriteCompassTarget", null); - final var failure = assertThrows(InvocationTargetException.class, () -> scan.invoke(0, 32, 0)); - assertInstanceOf(NullPointerException.class, failure.getCause()); - assertTrue(scan.world.chunk.visits.isEmpty()); - } - } - - @Test - void ordinaryMixinWrapsTheRealMergedScannerWithoutAPluginPatch() throws Exception { - final ClassNode target = new ClassNode(); - new ClassReader(PerformanceMixinTestLoader.transformed("appeng.services.CompassService")).accept(target, 0); - assertTrue(target.methods.stream().anyMatch(method -> method.name.contains("nova$scanArea"))); - for (final MethodNode method : target.methods) { - if ((method.access & (Opcodes.ACC_ABSTRACT | Opcodes.ACC_NATIVE)) == 0) { - new Analyzer<>(new BasicVerifier()).analyze(target.name, method); - } - } - } - - record Scan(Class type, Object instance, Method method, ScanWorld world, CaptureExecutor executor, - MetadataBlock background, MetadataBlock target) { - @SuppressWarnings("unchecked") - void targets(final List names, final List values) throws Exception { - set(this.type, null, "randomComplement$MeteoriteCompassTarget", new ObjectArrayList<>(names)); - final Field field = this.type.getDeclaredField("randomComplement$meta"); - field.setAccessible(true); - final List metadata = (List) field.get(null); - metadata.clear(); - metadata.addAll(values); - } - - void invoke(final int x, final int y, final int z) throws Exception { - final CallbackInfoReturnable> callback = new CallbackInfoReturnable<>("test", true); - this.method.invoke(this.instance, this.world, x, y, z, callback); - assertNotNull(callback.getReturnValue()); - assertTrue(callback.isCancelled()); - } - } - - static final class MetadataBlock extends Block { - int metadataCalls; - - private MetadataBlock() { - super(Material.ROCK); - } - - @Override - public int getMetaFromState(final IBlockState state) { - this.metadataCalls++; - return state.getValue(META); - } - } - - static final class ScanChunk extends Chunk { - IBlockState[] states; - List visits; - boolean recording; - long checksum; - - private ScanChunk() { - super(null, 0, 0); - } - - @Override - public IBlockState getBlockState(final int x, final int y, final int z) { - if (this.recording) { - this.visits.add(new BlockPos(x, y, z)); - } - this.checksum = this.checksum * 31 + x * 8192L + z * 512L + y; - return this.states[(x * 16 + z) * 32 + (y & 31)]; - } - } - - static final class ScanWorld extends World { - ScanChunk chunk; - - private ScanWorld() { - super(null, null, null, null, false); - } - - @Override - public Chunk getChunk(final int x, final int z) { - return this.chunk; - } - - @Override - protected IChunkProvider createChunkProvider() { - throw new AssertionError(); - } - - @Override - protected boolean isChunkLoaded(final int x, final int z, final boolean allowEmpty) { - throw new AssertionError(); - } - } - - public static final class Post implements Runnable { - final World world; - final int chunkX; - final int chunkZ; - final int band; - final boolean found; - - public Post(final Object service, final World world, final int chunkX, final int chunkZ, final int band, final boolean found) { - this.world = world; - this.chunkX = chunkX; - this.chunkZ = chunkZ; - this.band = band; - this.found = found; - } - - @Override - public void run() { - } - } - - static final class CaptureExecutor extends AbstractExecutorService { - Post last; - int submissions; - - @Override - public Future submit(final Runnable task) { - this.last = (Post) task; - this.submissions++; - return CompletableFuture.completedFuture(null); - } - - @Override - public void shutdown() { - } - - @Override - public List shutdownNow() { - return List.of(); - } - - @Override - public boolean isShutdown() { - return false; - } - - @Override - public boolean isTerminated() { - return false; - } - - @Override - public boolean awaitTermination(final long timeout, final TimeUnit unit) { - return false; - } - - @Override - public void execute(final Runnable command) { - throw new AssertionError(); - } - } -} diff --git a/src/test/java/github/kasuminova/novaeng/common/performance/MeteorDataFilenameTest.java b/src/test/java/github/kasuminova/novaeng/common/performance/MeteorDataFilenameTest.java deleted file mode 100644 index a9fe2aca..00000000 --- a/src/test/java/github/kasuminova/novaeng/common/performance/MeteorDataFilenameTest.java +++ /dev/null @@ -1,54 +0,0 @@ -package github.kasuminova.novaeng.common.performance; - -import appeng.core.worlddata.MeteorDataNameEncoder; -import org.junit.jupiter.api.Test; - -import java.util.Locale; -import java.util.Random; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -class MeteorDataFilenameTest { - - @Test - void matchesActualEncoderAcrossLocalesSignedCoordinatesAndScaleBoundaries() { - final Locale saved = Locale.getDefault(Locale.Category.FORMAT); - final Random random = new Random(0xAE2F11EL); - try { - for (final Locale locale : new Locale[]{Locale.ROOT, Locale.US, Locale.CHINA, Locale.FRANCE, - Locale.forLanguageTag("ar-EG"), Locale.forLanguageTag("fa-IR"), Locale.forLanguageTag("th-TH-u-nu-thai"), Locale.US}) { - Locale.setDefault(Locale.Category.FORMAT, locale); - for (final int scale : new int[]{0, 1, 4, 16, 31, 32, 63}) { - final MeteorDataNameEncoder original = new MeteorDataNameEncoder(scale); - for (int i = 0; i < 120; i++) { - final int dimension = i == 0 ? Integer.MIN_VALUE : random.nextInt(); - final int x = i == 1 ? Integer.MAX_VALUE : random.nextInt(); - final int z = i == 2 ? -1 : random.nextInt(); - assertEquals(original.encode(dimension, x, z), - MeteorDataFilename.encode(dimension, x, z, scale, '_', '.', "dat")); - } - } - } - } finally { - Locale.setDefault(Locale.Category.FORMAT, saved); - } - } - - @Test - void preservesSeparatorsExtensionsAndLocaleChangesWithoutCachingNames() { - final Locale saved = Locale.getDefault(Locale.Category.FORMAT); - try { - for (final Locale locale : new Locale[]{Locale.US, Locale.forLanguageTag("ar"), Locale.US}) { - Locale.setDefault(Locale.Category.FORMAT, locale); - for (final char separator : new char[]{'_', '-', '%', '\uFF0F'}) { - for (final String extension : new String[]{"dat", "meta.gz", "百分比%"}) { - final String expected = String.format("%d%c%d%c%d%c%s", -300, separator, -2, separator, 3, '.', extension); - assertEquals(expected, MeteorDataFilename.encode(-300, -17, 63, 4, separator, '.', extension)); - } - } - } - } finally { - Locale.setDefault(Locale.Category.FORMAT, saved); - } - } -} diff --git a/src/test/java/github/kasuminova/novaeng/common/performance/PerformanceMixinRegistrationTest.java b/src/test/java/github/kasuminova/novaeng/common/performance/PerformanceMixinRegistrationTest.java index a9102639..1ea24ea6 100644 --- a/src/test/java/github/kasuminova/novaeng/common/performance/PerformanceMixinRegistrationTest.java +++ b/src/test/java/github/kasuminova/novaeng/common/performance/PerformanceMixinRegistrationTest.java @@ -21,10 +21,6 @@ class PerformanceMixinRegistrationTest { private static final List MIXINS = List.of( - "ae2.MixinBetterMeteoriteCompassMetadata", - "ae2.MixinCompassReaderRegions", - "ae2.MixinMeteorDataNameEncoder", - "ae2.MixinSpawnDataInput", "ar.MixinAtmosphereDimensionMap", "ar.MixinAtmosphereHandler", "ar.MixinAtmosphereTemperature", diff --git a/src/test/java/github/kasuminova/novaeng/common/performance/PerformanceMixinTestLoader.java b/src/test/java/github/kasuminova/novaeng/common/performance/PerformanceMixinTestLoader.java deleted file mode 100644 index fc9a0959..00000000 --- a/src/test/java/github/kasuminova/novaeng/common/performance/PerformanceMixinTestLoader.java +++ /dev/null @@ -1,281 +0,0 @@ -package github.kasuminova.novaeng.common.performance; - -import com.google.gson.JsonParser; -import com.llamalad7.mixinextras.MixinExtrasBootstrap; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.tree.ClassNode; -import org.spongepowered.asm.launch.MixinBootstrap; -import org.spongepowered.asm.launch.platform.container.ContainerHandleVirtual; -import org.spongepowered.asm.launch.platform.container.IContainerHandle; -import org.spongepowered.asm.mixin.MixinEnvironment; -import org.spongepowered.asm.mixin.Mixins; -import org.spongepowered.asm.mixin.transformer.IMixinTransformer; -import org.spongepowered.asm.service.IAdviceProvider; -import org.spongepowered.asm.service.IClassBytecodeProvider; -import org.spongepowered.asm.service.IClassProvider; -import org.spongepowered.asm.service.IClassTracker; -import org.spongepowered.asm.service.IFeatureValidator; -import org.spongepowered.asm.service.IGlobalPropertyService; -import org.spongepowered.asm.service.IMixinAuditTrail; -import org.spongepowered.asm.service.IPropertyKey; -import org.spongepowered.asm.service.ITransformerProvider; -import org.spongepowered.asm.service.MixinService; -import org.spongepowered.asm.service.MixinServiceAbstract; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Field; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -final class PerformanceMixinTestLoader extends ClassLoader { - - private static final Map TRANSFORMED = new Object2ObjectOpenHashMap<>(); - private static IMixinTransformer transformer; - - PerformanceMixinTestLoader() { - super(PerformanceMixinTestLoader.class.getClassLoader()); - } - - static synchronized byte[] transformed(final String name) throws Exception { - if (transformer == null) { - System.setProperty("mixin.service", Service.class.getName()); - final var instance = MixinService.class.getDeclaredMethod("getInstance"); - instance.setAccessible(true); - final Field propertyService = MixinService.class.getDeclaredField("propertyService"); - propertyService.setAccessible(true); - propertyService.set(instance.invoke(null), new Properties()); - MixinBootstrap.init(); - Mixins.addConfiguration("nova-performance-test.json"); - Mixins.addConfiguration("better-meteorite-performance-test.json"); - Mixins.addConfiguration("stellarcore-performance-test.json"); - final var constructor = Class.forName("org.spongepowered.asm.mixin.transformer.MixinTransformer").getDeclaredConstructor(); - constructor.setAccessible(true); - transformer = (IMixinTransformer) constructor.newInstance(); - MixinExtrasBootstrap.init(); - } - byte[] result = TRANSFORMED.get(name); - if (result == null) { - result = transformer.transformClassBytes(name, name, resource(name)); - TRANSFORMED.put(name, result); - } - return result; - } - - static byte[] resource(final String name) throws IOException { - try (final InputStream stream = PerformanceMixinTestLoader.class.getClassLoader() - .getResourceAsStream(name.replace('.', '/') + ".class")) { - if (stream == null) { - throw new IOException("Missing performance fixture: " + name); - } - return stream.readAllBytes(); - } - } - - @Override - protected synchronized Class loadClass(final String name, final boolean resolve) throws ClassNotFoundException { - final boolean chunkMap = name.equals("net.minecraft.server.management.PlayerChunkMap") - || name.startsWith("net.minecraft.server.management.PlayerChunkMap$"); - if (!name.startsWith("appeng.services.compass.") && !chunkMap - && !name.equals("net.minecraft.world.WorldEntitySpawner")) { - return super.loadClass(name, resolve); - } - Class type = this.findLoadedClass(name); - if (type == null) { - try { - final byte[] bytes = name.equals("appeng.services.compass.CompassReader") - || name.equals("net.minecraft.server.management.PlayerChunkMap") - || name.equals("net.minecraft.world.WorldEntitySpawner") ? transformed(name) : resource(name); - type = this.defineClass(name, bytes, 0, bytes.length); - } catch (final Exception failure) { - throw new ClassNotFoundException(name, failure); - } - } - if (resolve) { - this.resolveClass(type); - } - return type; - } - - public static final class Service extends MixinServiceAbstract implements IClassProvider, IClassBytecodeProvider { - @Override - public String getName() { - return "Nova performance Mixin test"; - } - - @Override - public boolean isValid() { - return true; - } - - @Override - public MixinEnvironment.Phase getInitialPhase() { - return MixinEnvironment.Phase.DEFAULT; - } - - @Override - public IClassProvider getClassProvider() { - return this; - } - - @Override - public IClassBytecodeProvider getBytecodeProvider() { - return this; - } - - @Override - public ITransformerProvider getTransformerProvider() { - return null; - } - - @Override - public IClassTracker getClassTracker() { - return null; - } - - @Override - public IMixinAuditTrail getAuditTrail() { - return null; - } - - @Override - public IFeatureValidator getFeatureValidator() { - return IFeatureValidator.ALLOW_ALL; - } - - @Override - public IAdviceProvider getAdviceProvider() { - return IAdviceProvider.GENERIC; - } - - @Override - public Collection getPlatformAgents() { - return List.of(); - } - - @Override - public IContainerHandle getPrimaryContainer() { - return new ContainerHandleVirtual("nova-performance-test"); - } - - @Override - public String getSideName() { - return "SERVER"; - } - - @Override - public InputStream getResourceAsStream(final String name) { - final String configuration = switch (name) { - case "nova-performance-test.json" -> """ - {"required":true,"minVersion":"0.8","compatibilityLevel":"JAVA_25", - "package":"github.kasuminova.novaeng.mixin", - "mixins":["ae2.MixinCompassReaderRegions","ar.MixinAtmosphereDimensionMap", - "minecraft.MixinMinecraftServerDimensionIds","ae2.MixinBetterMeteoriteCompassMetadata", - "minecraft.MixinPlayerChunkMapCache","stellarcore.MixinPlayerChunkMapSnapshot", - "minecraft.MixinWorldEntitySpawner","minecraft.MixinBlockStoneMetadata", - "betterp2p.MixinServerLinkP2PHandler"], - "injectors":{"defaultRequire":1}} - """; - case "better-meteorite-performance-test.json" -> """ - {"required":true,"minVersion":"0.8","compatibilityLevel":"JAVA_25", - "package":"com.circulation.better_meteorite.mixin","mixins":["ae2.MixinCompassService"]} - """; - case "stellarcore-performance-test.json" -> """ - {"required":true,"minVersion":"0.8","compatibilityLevel":"JAVA_25", - "package":"github.kasuminova.stellarcore.mixin", - "mixins":["minecraft.forge.chunkmanager.MixinPlayerChunkMap"]} - """; - default -> null; - }; - if (configuration == null) { - return PerformanceMixinTestLoader.class.getClassLoader().getResourceAsStream(name); - } - final var parsed = JsonParser.parseString(configuration).getAsJsonObject(); - final String root = parsed.get("package").getAsString(); - for (final var entry : parsed.getAsJsonArray("mixins")) { - final String mixin = root + '.' + entry.getAsString(); - if (PerformanceMixinTestLoader.class.getClassLoader().getResource(mixin.replace('.', '/') + ".class") == null) { - throw new IllegalStateException("Missing registered test Mixin: " + mixin + " in " + name); - } - } - return new ByteArrayInputStream(configuration.getBytes(StandardCharsets.UTF_8)); - } - - @Override - public URL[] getClassPath() { - return new URL[0]; - } - - @Override - public Class findClass(final String name) throws ClassNotFoundException { - return this.findClass(name, false); - } - - @Override - public Class findClass(final String name, final boolean initialize) throws ClassNotFoundException { - return Class.forName(name, initialize, PerformanceMixinTestLoader.class.getClassLoader()); - } - - @Override - public Class findAgentClass(final String name, final boolean initialize) throws ClassNotFoundException { - return this.findClass(name, initialize); - } - - @Override - public ClassNode getClassNode(final String name) throws ClassNotFoundException, IOException { - return this.getClassNode(name, false, 0); - } - - @Override - public ClassNode getClassNode(final String name, final boolean runTransformers) throws ClassNotFoundException, IOException { - return this.getClassNode(name, runTransformers, 0); - } - - @Override - public ClassNode getClassNode(final String name, final boolean runTransformers, final int flags) throws ClassNotFoundException, IOException { - final ClassNode node = new ClassNode(); - new ClassReader(resource(name)).accept(node, flags); - return node; - } - } - - private static final class Properties implements IGlobalPropertyService { - private final Map values = new Object2ObjectOpenHashMap<>(); - - @Override - public IPropertyKey resolveKey(final String name) { - return new Key(name); - } - - @Override - @SuppressWarnings("unchecked") - public T getProperty(final IPropertyKey key) { - return (T) this.values.get(key); - } - - @Override - public void setProperty(final IPropertyKey key, final Object value) { - this.values.put(key, value); - } - - @Override - public T getProperty(final IPropertyKey key, final T fallback) { - final T value = this.getProperty(key); - return value == null ? fallback : value; - } - - @Override - public String getPropertyString(final IPropertyKey key, final String fallback) { - final Object value = this.values.get(key); - return value == null ? fallback : value.toString(); - } - - private record Key(String name) implements IPropertyKey { - } - } -} diff --git a/src/test/java/github/kasuminova/novaeng/common/performance/PlayerChunkMapSnapshotMixinTest.java b/src/test/java/github/kasuminova/novaeng/common/performance/PlayerChunkMapSnapshotMixinTest.java deleted file mode 100644 index 7b94d731..00000000 --- a/src/test/java/github/kasuminova/novaeng/common/performance/PlayerChunkMapSnapshotMixinTest.java +++ /dev/null @@ -1,196 +0,0 @@ -package github.kasuminova.novaeng.common.performance; - -import com.google.common.base.Predicate; -import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.server.dedicated.DedicatedPlayerList; -import net.minecraft.server.dedicated.DedicatedServer; -import net.minecraft.server.management.PlayerChunkMapEntry; -import net.minecraft.world.WorldServer; -import net.minecraft.world.chunk.Chunk; -import org.junit.jupiter.api.Test; -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.Opcodes; -import org.objectweb.asm.tree.ClassNode; -import org.objectweb.asm.tree.FieldInsnNode; -import org.objectweb.asm.tree.MethodInsnNode; -import org.objectweb.asm.tree.MethodNode; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import java.lang.reflect.Field; -import java.util.Iterator; -import java.util.List; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertInstanceOf; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNotSame; -import static org.junit.jupiter.api.Assertions.assertSame; -import static org.junit.jupiter.api.Assertions.assertTrue; - -class PlayerChunkMapSnapshotMixinTest { - - private static Iterator iterator(final Class type, final Object instance) throws Exception { - return (Iterator) type.getMethod("getChunkIterator").invoke(instance); - } - - private static WorldServer world() throws Exception { - final DedicatedServer server = WorldgenTestBlocks.allocate(DedicatedServer.class); - server.setPlayerList(WorldgenTestBlocks.allocate(DedicatedPlayerList.class)); - final WorldServer world = WorldgenTestBlocks.allocate(WorldServer.class); - final Field field = WorldServer.class.getDeclaredField("server"); - field.setAccessible(true); - field.set(world, server); - return world; - } - - private static TestChunk chunk(final boolean light, final boolean terrain, final boolean ticked) throws Exception { - final TestChunk chunk = WorldgenTestBlocks.allocate(TestChunk.class); - chunk.light = light; - chunk.terrain = terrain; - chunk.ticked = ticked; - return chunk; - } - - private static TestEntry entry(@Nullable final Chunk chunk, final boolean nearPlayer) throws Exception { - final TestEntry entry = WorldgenTestBlocks.allocate(TestEntry.class); - entry.chunk = chunk; - entry.nearPlayer = nearPlayer; - return entry; - } - - @Test - void actualPlayerChunkMapConstructorCreatesIndependentPoolsWithBothCompanionMixins() throws Exception { - final Class type = new PerformanceMixinTestLoader().loadClass("net.minecraft.server.management.PlayerChunkMap"); - final Object first = type.getConstructor(WorldServer.class).newInstance(world()); - final Object second = type.getConstructor(WorldServer.class).newInstance(world()); - final Field storage = type.getDeclaredField("nova$chunkSnapshots"); - storage.setAccessible(true); - assertInstanceOf(TickSnapshotPool.class, storage.get(first)); - assertInstanceOf(TickSnapshotPool.class, storage.get(second)); - assertNotSame(storage.get(first), storage.get(second)); - final Field other = type.getDeclaredField("novaeng$chunkCaches"); - other.setAccessible(true); - assertNotNull(other.get(first)); - assertFalse(iterator(type, first).hasNext()); - assertFalse(iterator(type, second).hasNext()); - } - - @Test - void realCombinedMixinsUseTheSnapshotPoolAndKeepOutstandingSnapshotsIndependent() throws Exception { - final Class type = new PerformanceMixinTestLoader().loadClass("net.minecraft.server.management.PlayerChunkMap"); - final Object instance = type.getConstructor(WorldServer.class).newInstance(world()); - final List entries = new ObjectArrayList<>(); - entries.add(entry(null, false)); - final TestChunk unlit = chunk(false, true, true); - final TestChunk unticked = chunk(true, true, false); - final TestChunk nearPlayer = chunk(true, true, true); - entries.add(entry(unlit, false)); - entries.add(entry(unticked, false)); - entries.add(entry(nearPlayer, true)); - entries.add(entry(chunk(true, true, true), false)); - entries.add(entry(chunk(false, false, true), false)); - final Field field = type.getDeclaredField("entries"); - field.setAccessible(true); - field.set(instance, entries); - final Iterator first = iterator(type, instance); - assertEquals(TickSnapshotPool.class, first.getClass().getEnclosingClass(), - "StellarCore's HEAD injector must not replace the pool with its old stream snapshot"); - assertSame(unlit, first.next()); - entries.clear(); - final TestChunk nested = chunk(false, true, true); - entries.add(entry(nested, false)); - final Iterator second = iterator(type, instance); - assertSame(nested, second.next()); - assertFalse(second.hasNext()); - assertSame(unticked, first.next()); - assertSame(nearPlayer, first.next()); - assertFalse(first.hasNext()); - final Iterator reused = iterator(type, instance); - assertSame(nested, reused.next()); - assertFalse(reused.hasNext()); - } - - @Test - void otherNewInstanceStateIsAssignedInTheActualTransformedTargets() throws Exception { - final Class spawner = new PerformanceMixinTestLoader().loadClass("net.minecraft.world.WorldEntitySpawner"); - final Object instance = spawner.getConstructor().newInstance(); - for (final String name : new String[]{"nova$candidates", "nova$shuffleRandom"}) { - final Field field = spawner.getDeclaredField(name); - field.setAccessible(true); - assertNotNull(field.get(instance), name); - } - final ClassNode stone = new ClassNode(); - new ClassReader(PerformanceMixinTestLoader.transformed("net.minecraft.block.BlockStone")).accept(stone, 0); - assertTrue(stone.methods.stream().filter(method -> method.name.equals("")) - .anyMatch(method -> Stream.of(method.instructions.toArray()).anyMatch(instruction -> - instruction instanceof FieldInsnNode field && field.getOpcode() == Opcodes.PUTFIELD - && field.name.equals("nova$metadataStates")))); - } - - @Test - void realConstructorCallsTheExplicitPoolInitializerBeforeReturning() throws Exception { - final ClassNode target = new ClassNode(); - new ClassReader(PerformanceMixinTestLoader.transformed("net.minecraft.server.management.PlayerChunkMap")).accept(target, 0); - final MethodNode constructor = target.methods.stream().filter(method -> method.name.equals("") - && method.desc.equals("(Lnet/minecraft/world/WorldServer;)V")).findFirst().orElseThrow(); - boolean initialized = false; - for (final var instruction : constructor.instructions) { - if (instruction instanceof MethodInsnNode call && call.owner.equals(target.name) - && call.name.contains("initializeSnapshotPool")) { - initialized = true; - } - if (instruction.getOpcode() == Opcodes.RETURN) { - assertTrue(initialized, "Every successful constructor exit must initialize the pool"); - } - } - } - - private static final class TestEntry extends PlayerChunkMapEntry { - private Chunk chunk; - private boolean nearPlayer; - - private TestEntry() { - super(null, 0, 0); - } - - @Override - @Nullable - public Chunk getChunk() { - return this.chunk; - } - - @Override - public boolean hasPlayerMatchingInRange(final double range, @Nonnull final Predicate predicate) { - return this.nearPlayer; - } - } - - private static final class TestChunk extends Chunk { - private boolean light; - private boolean terrain; - private boolean ticked; - - private TestChunk() { - super(null, 0, 0); - } - - @Override - public boolean isLightPopulated() { - return this.light; - } - - @Override - public boolean isTerrainPopulated() { - return this.terrain; - } - - @Override - public boolean wasTicked() { - return this.ticked; - } - } -} diff --git a/src/test/java/github/kasuminova/novaeng/common/performance/PrivateIdMapsMixinTest.java b/src/test/java/github/kasuminova/novaeng/common/performance/PrivateIdMapsMixinTest.java deleted file mode 100644 index c3369500..00000000 --- a/src/test/java/github/kasuminova/novaeng/common/performance/PrivateIdMapsMixinTest.java +++ /dev/null @@ -1,186 +0,0 @@ -package github.kasuminova.novaeng.common.performance; - -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; -import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.Opcodes; -import org.objectweb.asm.tree.ClassNode; -import org.objectweb.asm.tree.FieldInsnNode; -import org.objectweb.asm.tree.InsnNode; -import org.objectweb.asm.tree.MethodInsnNode; -import org.objectweb.asm.tree.MethodNode; -import org.objectweb.asm.tree.TypeInsnNode; -import org.objectweb.asm.tree.analysis.Analyzer; -import org.objectweb.asm.tree.analysis.BasicVerifier; - -import java.io.File; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.nio.file.Path; -import java.util.HashMap; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertInstanceOf; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertSame; -import static org.junit.jupiter.api.Assertions.assertTrue; - -class PrivateIdMapsMixinTest { - - @TempDir - Path folder; - - private static ClassNode transformed(final String name) throws Exception { - final ClassNode node = new ClassNode(); - new ClassReader(PerformanceMixinTestLoader.transformed(name)).accept(node, 0); - return node; - } - - @Test - void actualCompassMixinUsesTheOriginalFieldWithPrimitiveLookupsAndSignedPacking() throws Exception { - final Class type = new PerformanceMixinTestLoader().loadClass("appeng.services.compass.CompassReader"); - final Object reader = type.getConstructor(int.class, File.class).newInstance(1000, this.folder.toFile()); - final Field field = type.getDeclaredField("regions"); - field.setAccessible(true); - assertEquals(Map.class, field.getType()); - assertInstanceOf(Long2ObjectOpenHashMap.class, field.get(reader)); - final Method get = type.getDeclaredMethod("getRegion", int.class, int.class); - get.setAccessible(true); - final Map expected = new HashMap<>(); - for (final int x : new int[]{0, -1, 1, 1024, -1025, Integer.MIN_VALUE, Integer.MAX_VALUE}) { - for (final int z : new int[]{0, -1, 1024, Integer.MIN_VALUE, Integer.MAX_VALUE}) { - long key = x >> 10; - key <<= 32; - key |= z >> 10; - final Object region = get.invoke(reader, x, z); - if (expected.containsKey(key)) { - assertSame(expected.get(key), region); - } else { - expected.put(key, region); - } - assertSame(region, get.invoke(reader, x, z)); - } - } - assertEquals(expected.size(), ((Map) field.get(reader)).size()); - type.getMethod("close").invoke(reader); - assertTrue(((Map) field.get(reader)).isEmpty()); - } - - @Test - void actualAtmosphereMixinKeepsItsFieldLayoutAndGeneratesTheConstructorInvoker() throws Exception { - final String name = "zmaster587.advancedRocketry.atmosphere.AtmosphereHandler"; - final ClassNode node = transformed(name); - assertEquals("Ljava/util/HashMap;", node.fields.stream().filter(field -> field.name.equals("dimensionOxygen")) - .findFirst().orElseThrow().desc); - final String primitive = node.fields.stream().filter(field -> field.desc.equals("Lit/unimi/dsi/fastutil/ints/Int2ObjectMap;")) - .findFirst().orElseThrow().name; - // Only the numerical map and actual merged methods are needed; unrelated AR static game setup is not booted. - node.methods.removeIf(method -> method.name.equals("")); - final MethodNode init = new MethodNode(Opcodes.ACC_STATIC, "", "()V", null, null); - init.instructions.add(new TypeInsnNode(Opcodes.NEW, "it/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap")); - init.instructions.add(new InsnNode(Opcodes.DUP)); - init.instructions.add(new MethodInsnNode(Opcodes.INVOKESPECIAL, "it/unimi/dsi/fastutil/ints/Int2ObjectOpenHashMap", "", "()V", false)); - init.instructions.add(new FieldInsnNode(Opcodes.PUTSTATIC, node.name, primitive, "Lit/unimi/dsi/fastutil/ints/Int2ObjectMap;")); - init.instructions.add(new InsnNode(Opcodes.RETURN)); - node.methods.add(init); - final ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS); - node.accept(writer); - final byte[] bytes = writer.toByteArray(); - final Class type = new ClassLoader(this.getClass().getClassLoader()) { - Class define() { - return this.defineClass(name, bytes, 0, bytes.length); - } - }.define(); - final Field mapField = type.getDeclaredField(primitive); - mapField.setAccessible(true); - @SuppressWarnings("unchecked") final Int2ObjectOpenHashMap map = (Int2ObjectOpenHashMap) mapField.get(null); - final MethodNode factory = node.methods.stream().filter(method -> method.name.contains("createHandler") - && method.desc.equals("(I)Lzmaster587/advancedRocketry/atmosphere/AtmosphereHandler;")).findFirst().orElseThrow(); - final Method create = type.getDeclaredMethod(factory.name, int.class); - create.setAccessible(true); - for (final int id : new int[]{0, -1, 1, 1000, Integer.MIN_VALUE, Integer.MAX_VALUE}) { - final Object handler = create.invoke(null, id); - map.put(id, handler); - assertEquals(true, type.getMethod("hasAtmosphereHandler", int.class).invoke(null, id)); - assertSame(handler, type.getMethod("getOxygenHandler", int.class).invoke(null, id)); - map.remove(id); - assertEquals(false, type.getMethod("hasAtmosphereHandler", int.class).invoke(null, id)); - assertNull(type.getMethod("getOxygenHandler", int.class).invoke(null, id)); - } - } - - @Test - void realMixinTransformedMethodsVerifyAndDoNotBoxMapKeys() throws Exception { - for (final String name : new String[]{"appeng.services.compass.CompassReader", - "zmaster587.advancedRocketry.atmosphere.AtmosphereHandler"}) { - final ClassNode node = transformed(name); - for (final MethodNode method : node.methods) { - if ((method.access & (Opcodes.ACC_ABSTRACT | Opcodes.ACC_NATIVE)) == 0) { - new Analyzer<>(new BasicVerifier()).analyze(node.name, method); - } - if (method.name.equals("getRegion") || method.name.equals("registerWorld") || method.name.equals("unregisterWorld") - || method.name.equals("getOxygenHandler") || method.name.equals("hasAtmosphereHandler")) { - for (final var instruction : method.instructions) { - if (instruction instanceof MethodInsnNode call) { - assertFalse(call.name.equals("valueOf") && (call.owner.equals("java/lang/Integer") || call.owner.equals("java/lang/Long")), - method.name + ": boxed map key"); - } - } - } - } - } - } - - public static class IntFixture { - private static final Map VALUES = new HashMap<>(); - - public static Object put(final int key, final Object value) { - return VALUES.put(key, value); - } - - public static Object get(final int key) { - return VALUES.get(key); - } - } - - public static class PrimitiveIntFixture { - private static final Int2ObjectOpenHashMap VALUES = new Int2ObjectOpenHashMap<>(4); - - public static Object put(final int key, final Object value) { - return VALUES.put(key, value); - } - - public static Object get(final int key) { - return VALUES.get(key); - } - } - - public static class LongFixture { - private final Map values = new HashMap<>(100); - - public Object put(final long key, final Object value) { - return this.values.put(key, value); - } - - public Object get(final long key) { - return this.values.get(key); - } - } - - public static class PrimitiveLongFixture { - private final Long2ObjectOpenHashMap values = new Long2ObjectOpenHashMap<>(4); - - public Object put(final long key, final Object value) { - return this.values.put(key, value); - } - - public Object get(final long key) { - return this.values.get(key); - } - } -} diff --git a/src/test/java/github/kasuminova/novaeng/common/performance/ServerDimensionIdsMixinTest.java b/src/test/java/github/kasuminova/novaeng/common/performance/ServerDimensionIdsMixinTest.java deleted file mode 100644 index 77ad9df5..00000000 --- a/src/test/java/github/kasuminova/novaeng/common/performance/ServerDimensionIdsMixinTest.java +++ /dev/null @@ -1,138 +0,0 @@ -package github.kasuminova.novaeng.common.performance; - -import org.junit.jupiter.api.Test; -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.Opcodes; -import org.objectweb.asm.tree.AbstractInsnNode; -import org.objectweb.asm.tree.ClassNode; -import org.objectweb.asm.tree.FieldInsnNode; -import org.objectweb.asm.tree.InsnNode; -import org.objectweb.asm.tree.LabelNode; -import org.objectweb.asm.tree.MethodInsnNode; -import org.objectweb.asm.tree.MethodNode; -import org.objectweb.asm.tree.analysis.Analyzer; -import org.objectweb.asm.tree.analysis.BasicVerifier; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; - -class ServerDimensionIdsMixinTest { - - private static final String SERVER = "net.minecraft.server.MinecraftServer"; - private static final String IDS = "github/kasuminova/novaeng/common/performance/DimensionTickIds"; - - private static List calls(final MethodNode method) { - final List result = new ArrayList<>(); - for (final var instruction : method.instructions) { - if (!(instruction instanceof MethodInsnNode call)) { - continue; - } - if (call.owner.equals("java/lang/Integer") && call.name.equals("intValue")) { - continue; - } - result.add(call.owner.equals(IDS) && call.name.equals("get") - || call.owner.equals("net/minecraftforge/common/DimensionManager") && call.name.equals("getIDs") - ? "dimensionIds" : call.owner + "." + call.name + call.desc); - } - return result; - } - - private static ClassNode read(final byte[] bytes) { - final ClassNode node = new ClassNode(); - new ClassReader(bytes).accept(node, 0); - return node; - } - - private static MethodNode tick(final ClassNode node) { - return node.methods.stream().filter(method -> method.name.equals("updateTimeLightAndEntities")).findFirst().orElseThrow(); - } - - @Test - void actualMixinAppliesAndPreservesTheLifecycleCallOrder() throws Exception { - final ClassNode before = read(PerformanceMixinTestLoader.resource(SERVER)); - final ClassNode after = read(PerformanceMixinTestLoader.transformed(SERVER)); - final MethodNode original = tick(before); - final MethodNode optimized = tick(after); - assertEquals(calls(original), calls(optimized)); - new Analyzer<>(new BasicVerifier()).analyze(after.name, optimized); - assertTrue(Stream.of(optimized.instructions.toArray()).anyMatch(instruction -> instruction.getOpcode() == Opcodes.IALOAD)); - for (final var instruction : optimized.instructions) { - if (instruction instanceof MethodInsnNode call) { - assertFalse(call.owner.equals("net/minecraftforge/common/DimensionManager") && call.name.equals("getIDs")); - assertFalse(call.owner.equals("java/lang/Integer") && call.name.equals("intValue")); - } - } - } - - @Test - void actualOverwriteRetainsTheTwoHundredTickLeakCheckExpression() throws Exception { - final MethodNode tick = tick(read(PerformanceMixinTestLoader.transformed(SERVER))); - final MethodInsnNode fetch = (MethodInsnNode) Stream.of(tick.instructions.toArray()) - .filter(instruction -> instruction instanceof MethodInsnNode call && call.owner.equals(IDS) && call.name.equals("get")) - .findFirst().orElseThrow(); - AbstractInsnNode start = fetch.getPrevious(); - while (!(start instanceof FieldInsnNode field && field.name.equals("tickCounter"))) { - start = start.getPrevious(); - } - start = start.getPrevious(); - while (start.getOpcode() < 0) { - start = start.getPrevious(); - } - final ClassNode fixture = read(PerformanceMixinTestLoader.resource(Fixture.class.getName())); - final MethodNode method = new MethodNode(Opcodes.ACC_PUBLIC, "check", "()V", null, null); - final Map labels = new HashMap<>(); - for (AbstractInsnNode instruction = start; instruction != fetch.getNext(); instruction = instruction.getNext()) { - if (instruction instanceof LabelNode label) { - labels.put(label, new LabelNode()); - } - } - for (AbstractInsnNode instruction = start; instruction != fetch.getNext(); instruction = instruction.getNext()) { - if (instruction.getType() == AbstractInsnNode.FRAME || instruction.getType() == AbstractInsnNode.LINE) { - continue; - } - final AbstractInsnNode copy = instruction.clone(labels); - if (copy instanceof FieldInsnNode copiedField) { - copiedField.owner = fixture.name; - } else if (copy instanceof MethodInsnNode call) { - call.owner = fixture.name; - call.name = "primitiveIds"; - } - method.instructions.add(copy); - } - method.instructions.add(new InsnNode(Opcodes.POP)); - method.instructions.add(new InsnNode(Opcodes.RETURN)); - fixture.methods.add(method); - final ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); - fixture.accept(writer); - final byte[] bytes = writer.toByteArray(); - final Class type = new ClassLoader(this.getClass().getClassLoader()) { - Class define() { - return this.defineClass(Fixture.class.getName(), bytes, 0, bytes.length); - } - }.define(); - final Object instance = type.getConstructor().newInstance(); - for (final int counter : new int[]{0, 1, 199, 200, 201, 400, Integer.MIN_VALUE, Integer.MAX_VALUE}) { - type.getField("tickCounter").setInt(instance, counter); - type.getMethod("check").invoke(instance); - assertEquals(counter % 200 == 0, type.getField("lastCheck").getBoolean(null)); - } - } - - public static class Fixture { - public static boolean lastCheck; - public int tickCounter; - - public static int[] primitiveIds(final boolean check) { - lastCheck = check; - return new int[0]; - } - } -} diff --git a/src/test/java/github/kasuminova/novaeng/common/performance/WorldgenHotspotScenarios.java b/src/test/java/github/kasuminova/novaeng/common/performance/WorldgenHotspotScenarios.java index 4055024e..77e461ef 100644 --- a/src/test/java/github/kasuminova/novaeng/common/performance/WorldgenHotspotScenarios.java +++ b/src/test/java/github/kasuminova/novaeng/common/performance/WorldgenHotspotScenarios.java @@ -28,8 +28,7 @@ private WorldgenHotspotScenarios() { static List create() { try { return List.of(temperature(false), temperature(true), classification("AtmosphereTypes", "getAtmosphereTypeFromValue"), - classification("Temps", "getTempFromValue"), orePredicate(), emptyAtmosphere(), radius(0), radius(8), - privateMap(false, false), privateMap(false, true), privateMap(true, false), privateMap(true, true)); + classification("Temps", "getTempFromValue"), orePredicate(), emptyAtmosphere(), radius(0), radius(8)); } catch (final Exception exception) { throw new IllegalStateException(exception); } @@ -164,58 +163,6 @@ public HashedBlockPosition getRootPosition() { }; } - private static Scenario privateMap(final boolean longs, final boolean replace) throws Exception { - final Class fixture = longs ? PrivateIdMapsMixinTest.LongFixture.class : PrivateIdMapsMixinTest.IntFixture.class; - final Class specialized = longs ? PrivateIdMapsMixinTest.PrimitiveLongFixture.class : PrivateIdMapsMixinTest.PrimitiveIntFixture.class; - return checked("private_" + (longs ? "long" : "int") + "_map_" + (replace ? "replace" : "lookup"), - mapWork(fixture, longs, replace), mapWork(specialized, longs, replace)); - } - - private static Workload mapWork(final Class type, final boolean longs, final boolean replace) throws Exception { - final Class key = longs ? long.class : int.class; - MethodHandle put = MethodHandles.publicLookup().unreflect(type.getMethod("put", key, Object.class)); - MethodHandle get = MethodHandles.publicLookup().unreflect(type.getMethod("get", key)); - if (longs) { - final Object instance = type.getConstructor().newInstance(); - put = put.bindTo(instance); - get = get.bindTo(instance); - } - final Integer value = 42; - try { - for (int i = 0; i < 64; i++) { - if (longs) { - final Object ignored = (Object) put.invokeExact(0x100000000L + i, (Object) value); - } else { - final Object ignored = (Object) put.invokeExact(1000 + i, (Object) value); - } - } - } catch (final Throwable failure) { - throw new IllegalStateException(failure); - } - final MethodHandle operation = replace ? put : get; - return new Workload() { - private int index; - - @Override - public long step() { - try { - final int offset = this.index++ & 63; - final Object result; - if (longs) { - result = replace ? (Object) operation.invokeExact(0x100000000L + offset, (Object) value) - : (Object) operation.invokeExact(0x100000000L + offset); - } else { - result = replace ? (Object) operation.invokeExact(1000 + offset, (Object) value) - : (Object) operation.invokeExact(1000 + offset); - } - return ((Integer) result).longValue(); - } catch (final Throwable failure) { - throw new IllegalStateException(failure); - } - } - }; - } - private static Scenario checked(final String name, final Workload original, final Workload optimized) { return new Scenario(name, original, optimized, () -> { if (original.step() != optimized.step()) { diff --git a/src/test/java/github/kasuminova/novaeng/common/performance/WorldgenRoundThreeScenarios.java b/src/test/java/github/kasuminova/novaeng/common/performance/WorldgenRoundThreeScenarios.java index aa26f299..33156654 100644 --- a/src/test/java/github/kasuminova/novaeng/common/performance/WorldgenRoundThreeScenarios.java +++ b/src/test/java/github/kasuminova/novaeng/common/performance/WorldgenRoundThreeScenarios.java @@ -33,10 +33,6 @@ private WorldgenRoundThreeScenarios() { static List create() { try { final List cases = new ObjectArrayList<>(); - cases.add(compass("compass_missing_one_target", -1, 1)); - cases.add(compass("compass_missing_sixteen_targets", -1, 16)); - cases.add(compass("compass_late_target", 8191, 1)); - cases.add(compass("compass_first_target", 0, 1)); for (final int size : new int[]{8, 24, 64}) { cases.add(checked("vanilla_ore_geometry_" + size, vein(false, size), vein(true, size))); } @@ -53,39 +49,6 @@ static List create() { } } - private static Scenario compass(final String name, final int match, final int targets) throws Exception { - return checked(name, compassWork(false, match, targets), compassWork(true, match, targets)); - } - - private static Workload compassWork(final boolean optimized, final int match, final int targetCount) throws Exception { - final MeteorCompassMetadataTest.Scan scan = MeteorCompassMetadataTest.scan(optimized, match, false); - final BlockStone stone = MeteorCompassMetadataTest.registered(WorldgenTestBlocks.stone(), new ResourceLocation("nova", "stone")); - final IBlockState[] states = scan.world().chunk.states; - Arrays.fill(states, stone.getDefaultState()); - if (match >= 0) { - states[match] = scan.target().getDefaultState().withProperty(MeteorCompassMetadataTest.META, 3); - } - final List names = new ObjectArrayList<>(); - final List metadata = new ObjectArrayList<>(); - for (int i = 1; i < targetCount; i++) { - names.add(new ResourceLocation("nova", "absent_" + i)); - metadata.add(3); - } - names.add(scan.target().getRegistryName()); - metadata.add(3); - scan.targets(names, metadata); - final MethodHandle call = MethodHandles.lookup().unreflect(scan.method()).bindTo(scan.instance()); - return () -> { - try { - final CallbackInfoReturnable> callback = new CallbackInfoReturnable<>("benchmark", true); - call.invokeExact((World) scan.world(), 0, 32, 0, (CallbackInfoReturnable) callback); - return scan.world().chunk.checksum + (scan.executor().last.found ? 1 : 0); - } catch (final Throwable failure) { - throw new IllegalStateException(failure); - } - }; - } - private static Workload vein(final boolean optimized, final int size) throws Exception { final VanillaOreGeometryTest.Generator generator = VanillaOreGeometryTest.factory(optimized).create(size, state -> true); final MethodHandle call = MethodHandles.lookup().unreflect(generator.generate()).bindTo(generator.instance()); diff --git a/src/test/java/github/kasuminova/novaeng/common/performance/WorldgenRoundTwoScenarios.java b/src/test/java/github/kasuminova/novaeng/common/performance/WorldgenRoundTwoScenarios.java index 1255feef..23777b1c 100644 --- a/src/test/java/github/kasuminova/novaeng/common/performance/WorldgenRoundTwoScenarios.java +++ b/src/test/java/github/kasuminova/novaeng/common/performance/WorldgenRoundTwoScenarios.java @@ -1,6 +1,5 @@ package github.kasuminova.novaeng.common.performance; -import appeng.core.worlddata.MeteorDataNameEncoder; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import github.kasuminova.novaeng.common.performance.SpawnPerformanceBenchmark.Scenario; import github.kasuminova.novaeng.common.performance.SpawnPerformanceBenchmark.Workload; @@ -30,7 +29,6 @@ private WorldgenRoundTwoScenarios() { static List create() { try { final List cases = new ObjectArrayList<>(WorldgenHotspotScenarios.create().subList(0, 2)); - cases.add(filename()); cases.add(fileRead(256)); cases.add(fileRead(16384)); cases.add(stoneStates()); @@ -44,25 +42,6 @@ static List create() { } } - private static Scenario filename() { - final MeteorDataNameEncoder encoder = new MeteorDataNameEncoder(4); - final Workload before = new Workload() { - private int coordinate; - - public long step() { - return encoder.encode(-300, this.coordinate++, -60000).hashCode(); - } - }; - final Workload after = new Workload() { - private int coordinate; - - public long step() { - return MeteorDataFilename.encode(-300, this.coordinate++, -60000, 4, '_', '.', "dat").hashCode(); - } - }; - return checked("meteor_region_filename", before, after); - } - private static Scenario fileRead(final int payloadSize) throws Exception { final Path file = Files.createTempFile("nova-meteor-benchmark-", ".dat"); file.toFile().deleteOnExit(); From d2af5796183e43118b5a1644565c12ab20fd1e6d Mon Sep 17 00:00:00 2001 From: vcwdfca <2168409010@qq.com> Date: Wed, 4 Nov 2026 13:04:46 +0800 Subject: [PATCH 5/6] fix --- .../novaeng/mixin/ae2/MixinAEBaseGui.java | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinAEBaseGui.java diff --git a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinAEBaseGui.java b/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinAEBaseGui.java deleted file mode 100644 index 9879f369..00000000 --- a/src/main/java/github/kasuminova/novaeng/mixin/ae2/MixinAEBaseGui.java +++ /dev/null @@ -1,15 +0,0 @@ -package github.kasuminova.novaeng.mixin.ae2; - -import appeng.client.gui.AEBaseGui; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(AEBaseGui.class) -public class MixinAEBaseGui { - - @Redirect(method = "drawScreen", at = @At(value = "INVOKE", target = "Lappeng/util/Platform;isModLoaded(Ljava/lang/String;)Z", remap = false)) - private boolean hei(String modid) { - return false; - } -} From e59b0307d1fe45be8abed1b7a9aa9ab5de2b18e5 Mon Sep 17 00:00:00 2001 From: vcwdfca <2168409010@qq.com> Date: Wed, 4 Nov 2026 14:05:44 +0800 Subject: [PATCH 6/6] fix --- src/main/resources/novaeng_core.mixin.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/resources/novaeng_core.mixin.json b/src/main/resources/novaeng_core.mixin.json index 55bcdd3b..3a84ff11 100644 --- a/src/main/resources/novaeng_core.mixin.json +++ b/src/main/resources/novaeng_core.mixin.json @@ -13,7 +13,6 @@ "actuallyadditions.MixinLushCaveAllocation", "actuallyadditions.MixinTileEntityPhantomface", "actuallyadditions.MixinWorldgenOreFactory", - "ae2.AccessorAbstractCellInventory", "ae2.MixinCraftingCPUCluster", "ae2.MixinTileChestFilter", "ae2.MixinTileDriveFilter", @@ -1274,7 +1273,6 @@ "mmce.MixinItemOutputBusNetworkTarget", "mmce.MixinMachineRecipe", "mmce.MixinMachineRegistry", - "mmce.MixinMEPatternProvider", "mmce.MixinOredictCache", "mmce.MixinRecipeAdapterBuilder", "mmce.MixinRecipeCraftingContextMemory",

R3ZpVL;M{>>F@-sz*txp2Btxb_!nT=tDblCu$w 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