diff --git a/.gitignore b/.gitignore index 6018bab..c0d60b4 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ build # other eclipse run +runs run-data design/ @@ -27,6 +28,3 @@ libs/ logs/ /src/generated/resources - -# Files from Forge MDK -forge*changelog.txt diff --git a/build.gradle b/build.gradle index fb32035..052087e 100644 --- a/build.gradle +++ b/build.gradle @@ -1,10 +1,15 @@ plugins { + id 'java-library' id 'eclipse' id 'idea' id 'maven-publish' - id 'net.minecraftforge.gradle' version '[6.0,6.2)' - id 'org.jetbrains.kotlin.jvm' version '1.9.20' - id 'org.jetbrains.kotlin.plugin.serialization' version '1.9.20' + id 'net.neoforged.gradle.userdev' version '7.0.145' + id 'org.jetbrains.kotlin.jvm' version '1.9.22' + id 'org.jetbrains.kotlin.plugin.serialization' version '1.9.22' +} + +tasks.named('wrapper', Wrapper).configure { + distributionType = Wrapper.DistributionType.BIN } version = "${minecraft_version}-${mod_version}" @@ -14,119 +19,88 @@ base { archivesName = mod_id } -java.toolchain.languageVersion = JavaLanguageVersion.of(17) +java.toolchain.languageVersion = JavaLanguageVersion.of(21) -minecraft { - mappings channel: 'official', version: minecraft_version +runs { + configureEach { + systemProperty 'forge.logging.markers', 'REGISTRIES' + systemProperty 'forge.logging.console.level', 'debug' - copyIdeResources = true + modSource project.sourceSets.main + } - runs { - configureEach { - workingDirectory project.file('run') + client { + systemProperty 'forge.enabledGameTestNamespaces', project.mod_id + } - property 'forge.logging.markers', 'REGISTRIES' - property 'forge.logging.console.level', 'debug' + server { + systemProperty 'forge.enabledGameTestNamespaces', project.mod_id + programArgument '--nogui' + } - property 'mixin.env.remapRefMap', 'true' - property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" + gameTestServer { + systemProperty 'forge.enabledGameTestNamespaces', project.mod_id + } - mods { - "${mod_id}" { - source sourceSets.main - } - } - } - - client { - property 'forge.enabledGameTestNamespaces', mod_id - } - - server { - property 'forge.enabledGameTestNamespaces', mod_id - args '--nogui' - } - - data { - workingDirectory project.file('run-data') - - args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/') - } + data { + programArguments.addAll '--mod', project.mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath() } } sourceSets.main.resources { srcDir 'src/generated/resources' } +configurations { + runtimeClasspath.extendsFrom localRuntime +} + repositories { + mavenLocal() maven { name = 'Kotlin for Forge' url = 'https://thedarkcolour.github.io/KotlinForForge/' } - maven { - name = 'Jared\'s maven' - url = 'https://maven.blamejared.com/' - content { - includeGroup 'mezz.jei' - } - } maven { name = 'Modmaven' url = 'https://modmaven.dev/' content { includeGroup 'appeng' + includeGroup 'mezz.jei' } } } dependencies { - minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" - implementation "thedarkcolour:kotlinforforge:${kff_version}" + implementation "net.neoforged:neoforge:${neo_version}" + implementation "thedarkcolour:kotlinforforge-neoforge:${kff_version}" - implementation fg.deobf("appeng:appliedenergistics2-forge:${ae2_version}") - - runtimeOnly(fg.deobf("mezz.jei:jei-${minecraft_version}-forge:${jei_version}")) + implementation "appeng:appliedenergistics2-neoforge:${ae2_version}" + runtimeOnly "mezz.jei:jei-${minecraft_version}-neoforge:${jei_version}" } -tasks.named('processResources', ProcessResources).configure { +tasks.withType(ProcessResources).configureEach { var replaceProperties = [ loader_name: loader_name, loader_version_range: loader_version_range, mod_id: mod_id, mod_version: mod_version, - forge_version_range: forge_version_range, + neo_version: neo_version, neo_version_range: neo_version_range, minecraft_version_range: minecraft_version_range, ae2_version_range: ae2_version_range, ] inputs.properties replaceProperties - filesMatching(['META-INF/mods.toml', 'pack.mcmeta']) { - expand replaceProperties + [project: project] + filesMatching(['META-INF/neoforge.mods.toml']) { + expand replaceProperties } } -tasks.named('jar', Jar).configure { - manifest { - attributes([ - 'Specification-Title' : mod_id, - 'Specification-Vendor' : "YuRaNnNzZZ", - 'Specification-Version' : '1', - 'Implementation-Title' : project.name, - 'Implementation-Version' : project.jar.archiveVersion, - 'Implementation-Vendor' : "YuRaNnNzZZ", - 'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") - ]) - } - - finalizedBy 'reobfJar' -} - publishing { publications { register('mavenJava', MavenPublication) { - artifact jar + from components.java } } repositories { maven { - url "file://${project.projectDir}/mcmodsrepo" + url "file://${project.projectDir}/repo" } } } @@ -134,3 +108,10 @@ publishing { tasks.withType(JavaCompile).configureEach { options.encoding = 'UTF-8' } + +idea { + module { + downloadSources = true + downloadJavadoc = true + } +} diff --git a/gradle.properties b/gradle.properties index 6849f83..6e30269 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,18 +4,18 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false mod_id=ae2quartz -mod_version=1.0.0 +mod_version=1.1.0 -minecraft_version=1.20.1 -minecraft_version_range=[1.20.1,1.21) -forge_version=47.2.0 -forge_version_range=[47,) +minecraft_version=1.21 +minecraft_version_range=[1.21,1.22) +neo_version=21.0.167 +neo_version_range=[21.0.0-beta,) loader_name=kotlinforforge -loader_version_range=[4.10,) -kff_version=4.10.0 +loader_version_range=[5.5,) +kff_version=5.5.0 -ae2_version=15.0.20 -ae2_version_range=[15,) +ae2_version=19.0.4-alpha +ae2_version_range=[19,) -jei_version=15.2.0.27 \ No newline at end of file +jei_version=19.8.2.99 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 943f0cb..2c35211 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 37aef8d..09523c0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 65dcd68..f5feea6 100644 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -83,10 +85,9 @@ done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -# 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 +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,10 +134,13 @@ 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. @@ -144,7 +148,7 @@ 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=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -152,7 +156,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -197,11 +201,15 @@ 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, 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" \ diff --git a/gradlew.bat b/gradlew.bat index 93e3f59..9d21a21 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -43,11 +45,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +59,11 @@ 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. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail diff --git a/settings.gradle b/settings.gradle index 291d399..ada876e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,13 +1,11 @@ pluginManagement { repositories { + mavenLocal() gradlePluginPortal() - maven { - name = 'MinecraftForge' - url = 'https://maven.minecraftforge.net/' - } + maven { url = 'https://maven.neoforged.net/releases' } } } plugins { - id 'org.gradle.toolchains.foojay-resolver-convention' version '0.5.0' -} \ No newline at end of file + id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0' +} diff --git a/src/main/kotlin/ru/yurannnzzz/ae2quartz/AE2QuartzMod.kt b/src/main/kotlin/ru/yurannnzzz/ae2quartz/AE2QuartzMod.kt index 7204858..9afb069 100644 --- a/src/main/kotlin/ru/yurannnzzz/ae2quartz/AE2QuartzMod.kt +++ b/src/main/kotlin/ru/yurannnzzz/ae2quartz/AE2QuartzMod.kt @@ -1,16 +1,19 @@ package ru.yurannnzzz.ae2quartz -import net.minecraftforge.fml.common.Mod +import net.minecraft.resources.ResourceLocation +import net.neoforged.fml.common.Mod import ru.yurannnzzz.ae2quartz.data.onDataGather import ru.yurannnzzz.ae2quartz.event.addCreativeTabItems import ru.yurannnzzz.ae2quartz.registry.ModBlocks import ru.yurannnzzz.ae2quartz.registry.ModItems -import thedarkcolour.kotlinforforge.forge.MOD_BUS +import thedarkcolour.kotlinforforge.neoforge.forge.MOD_BUS @Mod(AE2QuartzMod.MOD_ID) object AE2QuartzMod { const val MOD_ID = "ae2quartz" + fun loc(id: String): ResourceLocation = ResourceLocation.fromNamespaceAndPath(MOD_ID, id) + init { ModBlocks.registry.register(MOD_BUS) ModItems.registry.register(MOD_BUS) diff --git a/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/DataGen.kt b/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/DataGen.kt index 548537c..0a63e1f 100644 --- a/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/DataGen.kt +++ b/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/DataGen.kt @@ -4,12 +4,11 @@ import net.minecraft.core.RegistrySetBuilder import net.minecraft.core.registries.Registries import net.minecraft.data.loot.LootTableProvider import net.minecraft.data.loot.LootTableProvider.SubProviderEntry -import net.minecraft.resources.ResourceLocation import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets -import net.minecraftforge.common.data.BlockTagsProvider -import net.minecraftforge.common.data.DatapackBuiltinEntriesProvider -import net.minecraftforge.data.event.GatherDataEvent -import net.minecraftforge.registries.ForgeRegistries +import net.neoforged.neoforge.common.data.BlockTagsProvider +import net.neoforged.neoforge.common.data.DatapackBuiltinEntriesProvider +import net.neoforged.neoforge.data.event.GatherDataEvent +import net.neoforged.neoforge.registries.NeoForgeRegistries import ru.yurannnzzz.ae2quartz.AE2QuartzMod.MOD_ID import ru.yurannnzzz.ae2quartz.data.client.English import ru.yurannnzzz.ae2quartz.data.client.ModBlockStateProvider @@ -25,39 +24,38 @@ import ru.yurannnzzz.ae2quartz.data.server.registerPlacedFeatures fun onDataGather(event: GatherDataEvent) { val gen = event.generator - val efh = event.existingFileHelper - val out = gen.packOutput - gen.addProvider(event.includeClient(), ModBlockStateProvider(out, MOD_ID, efh)) - gen.addProvider(event.includeClient(), ModItemModelProvider(out, MOD_ID, efh)) - gen.addProvider(event.includeClient(), English(out, MOD_ID)) - gen.addProvider(event.includeClient(), Russian(out, MOD_ID)) + gen.addProvider(event.includeClient(), ModBlockStateProvider(gen.packOutput, MOD_ID, event.existingFileHelper)) + gen.addProvider(event.includeClient(), ModItemModelProvider(gen.packOutput, MOD_ID, event.existingFileHelper)) + gen.addProvider(event.includeClient(), English(gen.packOutput, MOD_ID)) + gen.addProvider(event.includeClient(), Russian(gen.packOutput, MOD_ID)) gen.addProvider( event.includeServer(), - ModRecipeProvider(out) + ModRecipeProvider(gen.packOutput, event.lookupProvider) ) val blockTagsProvider: BlockTagsProvider = gen.addProvider( event.includeServer(), - ModBlockTagsProvider(out, event.lookupProvider, MOD_ID, efh) + ModBlockTagsProvider(gen.packOutput, event.lookupProvider, MOD_ID, event.existingFileHelper) ) gen.addProvider( event.includeServer(), - ModItemTagsProvider(out, event.lookupProvider, blockTagsProvider.contentsGetter(), MOD_ID, efh) + ModItemTagsProvider(gen.packOutput, event.lookupProvider, blockTagsProvider.contentsGetter(), MOD_ID, event.existingFileHelper) ) gen.addProvider( event.includeServer(), LootTableProvider( - out, - emptySet(), - listOf(SubProviderEntry({ ModBlockLootProvider() }, LootContextParamSets.BLOCK)) + gen.packOutput, + mutableSetOf(), + listOf(SubProviderEntry({ ModBlockLootProvider(event.lookupProvider) }, LootContextParamSets.BLOCK)), + event.lookupProvider ) ) val registrySetBuilder = RegistrySetBuilder() .add(Registries.CONFIGURED_FEATURE, ::registerConfiguredFeatures) .add(Registries.PLACED_FEATURE, ::registerPlacedFeatures) - .add(ForgeRegistries.Keys.BIOME_MODIFIERS, ::registerBiomeModifiers) + .add(NeoForgeRegistries.Keys.BIOME_MODIFIERS, ::registerBiomeModifiers) event.generator.addProvider( event.includeServer(), DatapackBuiltinEntriesProvider( diff --git a/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/client/ModBlockStateProvider.kt b/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/client/ModBlockStateProvider.kt index bda1e19..1ec2285 100644 --- a/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/client/ModBlockStateProvider.kt +++ b/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/client/ModBlockStateProvider.kt @@ -1,9 +1,9 @@ package ru.yurannnzzz.ae2quartz.data.client import net.minecraft.data.PackOutput -import net.minecraftforge.client.model.generators.BlockStateProvider -import net.minecraftforge.client.model.generators.ConfiguredModel -import net.minecraftforge.common.data.ExistingFileHelper +import net.neoforged.neoforge.client.model.generators.BlockStateProvider +import net.neoforged.neoforge.client.model.generators.ConfiguredModel +import net.neoforged.neoforge.common.data.ExistingFileHelper import ru.yurannnzzz.ae2quartz.registry.ModBlocks class ModBlockStateProvider(output: PackOutput?, modid: String?, exFileHelper: ExistingFileHelper?) : diff --git a/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/client/ModItemModelProvider.kt b/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/client/ModItemModelProvider.kt index 179b260..2a7351f 100644 --- a/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/client/ModItemModelProvider.kt +++ b/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/client/ModItemModelProvider.kt @@ -2,18 +2,18 @@ package ru.yurannnzzz.ae2quartz.data.client import net.minecraft.data.PackOutput import net.minecraft.resources.ResourceLocation -import net.minecraftforge.client.model.generators.ItemModelProvider -import net.minecraftforge.client.model.generators.ModelFile.UncheckedModelFile -import net.minecraftforge.common.data.ExistingFileHelper +import net.neoforged.neoforge.client.model.generators.ItemModelProvider +import net.neoforged.neoforge.client.model.generators.ModelFile +import net.neoforged.neoforge.common.data.ExistingFileHelper class ModItemModelProvider(output: PackOutput?, modid: String?, existingFileHelper: ExistingFileHelper?) : ItemModelProvider(output, modid, existingFileHelper) { override fun registerModels() { - val netherQuartzDustTexture = ResourceLocation("ae2", "item/nether_quartz_dust") + val netherQuartzDustTexture = ResourceLocation.fromNamespaceAndPath("ae2", "item/nether_quartz_dust") existingFileHelper.trackGenerated(netherQuartzDustTexture, TEXTURE) getBuilder(modLoc("item/nether_quartz_dust").toString()) - .parent(UncheckedModelFile("item/generated")) + .parent(ModelFile.UncheckedModelFile("item/generated")) .texture("layer0", netherQuartzDustTexture) withExistingParent( diff --git a/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/client/ModLanguageProvider.kt b/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/client/ModLanguageProvider.kt index 9a13b82..f145885 100644 --- a/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/client/ModLanguageProvider.kt +++ b/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/client/ModLanguageProvider.kt @@ -1,7 +1,7 @@ package ru.yurannnzzz.ae2quartz.data.client import net.minecraft.data.PackOutput -import net.minecraftforge.common.data.LanguageProvider +import net.neoforged.neoforge.common.data.LanguageProvider import ru.yurannnzzz.ae2quartz.registry.ModBlocks import ru.yurannnzzz.ae2quartz.registry.ModItems diff --git a/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/ModBlockLootProvider.kt b/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/ModBlockLootProvider.kt index e6b21e9..332021b 100644 --- a/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/ModBlockLootProvider.kt +++ b/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/ModBlockLootProvider.kt @@ -1,6 +1,8 @@ package ru.yurannnzzz.ae2quartz.data.server import appeng.core.definitions.AEItems +import net.minecraft.core.HolderLookup +import net.minecraft.core.registries.Registries import net.minecraft.data.loot.BlockLootSubProvider import net.minecraft.world.flag.FeatureFlags import net.minecraft.world.item.enchantment.Enchantments @@ -10,24 +12,21 @@ import net.minecraft.world.level.storage.loot.entries.LootItem import net.minecraft.world.level.storage.loot.functions.ApplyBonusCount import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator -import net.minecraftforge.registries.RegistryObject import ru.yurannnzzz.ae2quartz.registry.ModBlocks +import java.util.concurrent.CompletableFuture -class ModBlockLootProvider : BlockLootSubProvider(emptySet(), FeatureFlags.REGISTRY.allFlags()) { +class ModBlockLootProvider(provider: CompletableFuture) + : BlockLootSubProvider(emptySet(), FeatureFlags.REGISTRY.allFlags(), provider.get()) { override fun generate() { add(ModBlocks.QUARTZ_ORE.get(), this::createCertusQuartsOreDrops) add(ModBlocks.DEEPSLATE_QUARTZ_ORE.get(), this::createCertusQuartsOreDrops) } override fun getKnownBlocks(): Iterable { - return Iterable { - ModBlocks.registry.entries - .stream() - .flatMap { obj: RegistryObject -> obj.stream() } - .iterator() - } + return ModBlocks.registry.entries.stream().map { it.get() }.toList() } + private val enchantments = registries.lookupOrThrow(Registries.ENCHANTMENT) private fun createCertusQuartsOreDrops(block: Block): LootTable.Builder { return createSilkTouchDispatchTable( block, @@ -35,7 +34,7 @@ class ModBlockLootProvider : BlockLootSubProvider(emptySet(), FeatureFlags.REGIS block, LootItem.lootTableItem(AEItems.CERTUS_QUARTZ_CRYSTAL) .apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0f, 3.0f))) - .apply(ApplyBonusCount.addOreBonusCount(Enchantments.BLOCK_FORTUNE)) + .apply(ApplyBonusCount.addOreBonusCount(enchantments.getOrThrow(Enchantments.FORTUNE))) ) ) } diff --git a/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/ModBlockTagsProvider.kt b/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/ModBlockTagsProvider.kt index 84e9036..c8e8b02 100644 --- a/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/ModBlockTagsProvider.kt +++ b/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/ModBlockTagsProvider.kt @@ -3,9 +3,9 @@ package ru.yurannnzzz.ae2quartz.data.server import net.minecraft.core.HolderLookup import net.minecraft.data.PackOutput import net.minecraft.tags.BlockTags -import net.minecraftforge.common.Tags -import net.minecraftforge.common.data.BlockTagsProvider -import net.minecraftforge.common.data.ExistingFileHelper +import net.neoforged.neoforge.common.Tags +import net.neoforged.neoforge.common.data.BlockTagsProvider +import net.neoforged.neoforge.common.data.ExistingFileHelper import ru.yurannnzzz.ae2quartz.registry.ModBlocks import java.util.concurrent.CompletableFuture diff --git a/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/ModItemTagsProvider.kt b/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/ModItemTagsProvider.kt index 16d240d..0f94ca8 100644 --- a/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/ModItemTagsProvider.kt +++ b/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/ModItemTagsProvider.kt @@ -5,8 +5,8 @@ import net.minecraft.core.HolderLookup import net.minecraft.data.PackOutput import net.minecraft.data.tags.ItemTagsProvider import net.minecraft.world.level.block.Block -import net.minecraftforge.common.Tags -import net.minecraftforge.common.data.ExistingFileHelper +import net.neoforged.neoforge.common.Tags +import net.neoforged.neoforge.common.data.ExistingFileHelper import ru.yurannnzzz.ae2quartz.registry.ModItems import java.util.concurrent.CompletableFuture diff --git a/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/ModRecipeProvider.kt b/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/ModRecipeProvider.kt index 418ade1..8db8630 100644 --- a/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/ModRecipeProvider.kt +++ b/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/ModRecipeProvider.kt @@ -4,35 +4,31 @@ import appeng.core.definitions.AEItems import appeng.datagen.providers.tags.ConventionTags import appeng.recipes.handlers.InscriberProcessType import appeng.recipes.handlers.InscriberRecipeBuilder +import net.minecraft.core.HolderLookup import net.minecraft.data.PackOutput -import net.minecraft.data.recipes.FinishedRecipe import net.minecraft.data.recipes.RecipeCategory +import net.minecraft.data.recipes.RecipeOutput import net.minecraft.data.recipes.RecipeProvider import net.minecraft.data.recipes.SimpleCookingRecipeBuilder -import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.crafting.Ingredient -import ru.yurannnzzz.ae2quartz.AE2QuartzMod +import ru.yurannnzzz.ae2quartz.AE2QuartzMod.loc import ru.yurannnzzz.ae2quartz.registry.ModItems -import java.util.function.Consumer +import java.util.concurrent.CompletableFuture -class ModRecipeProvider(output: PackOutput?) : RecipeProvider(output) { - override fun buildRecipes(consumer: Consumer) { +class ModRecipeProvider(output: PackOutput, provider: CompletableFuture) : RecipeProvider(output, provider) { + override fun buildRecipes(recipeOutput: RecipeOutput) { InscriberRecipeBuilder .inscribe(ConventionTags.ALL_NETHER_QUARTZ, ModItems.NETHER_QUARTZ_DUST.get(), 1) .setMode(InscriberProcessType.INSCRIBE) - .save(consumer, modLoc("inscriber/nether_quartz_dust")) + .save(recipeOutput, loc("inscriber/nether_quartz_dust")) SimpleCookingRecipeBuilder .smelting(Ingredient.of(ModTags.NETHER_QUARTZ_DUST), RecipeCategory.MISC, AEItems.SILICON, .35f, 200) .unlockedBy("has_nether_quartz_dust", has(ModTags.NETHER_QUARTZ_DUST)) - .save(consumer, modLoc("smelting/silicon_from_nether_quartz_dust")) + .save(recipeOutput, loc("smelting/silicon_from_nether_quartz_dust")) SimpleCookingRecipeBuilder .blasting(Ingredient.of(ModTags.NETHER_QUARTZ_DUST), RecipeCategory.MISC, AEItems.SILICON, .35f, 100) .unlockedBy("has_nether_quartz_dust", has(ModTags.NETHER_QUARTZ_DUST)) - .save(consumer, modLoc("blasting/silicon_from_nether_quartz_dust")) - } - - fun modLoc(path: String): ResourceLocation { - return ResourceLocation(AE2QuartzMod.MOD_ID, path) + .save(recipeOutput, loc("blasting/silicon_from_nether_quartz_dust")) } } diff --git a/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/ModTags.kt b/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/ModTags.kt index f0d6783..9798d3a 100644 --- a/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/ModTags.kt +++ b/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/ModTags.kt @@ -8,8 +8,8 @@ import net.minecraft.world.level.block.Block object ModTags { val CERTUS_QUARTZ_ORE_BLOCK: TagKey = - TagKey.create(Registries.BLOCK, ResourceLocation("forge", "ores/certus_quartz")) + TagKey.create(Registries.BLOCK, ResourceLocation.fromNamespaceAndPath("c", "ores/certus_quartz")) val CERTUS_QUARTZ_ORE: TagKey = - TagKey.create(Registries.ITEM, ResourceLocation("forge", "ores/certus_quartz")) - val NETHER_QUARTZ_DUST: TagKey = TagKey.create(Registries.ITEM, ResourceLocation("forge", "dusts/quartz")) + TagKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath("c", "ores/certus_quartz")) + val NETHER_QUARTZ_DUST: TagKey = TagKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath("c", "dusts/quartz")) } diff --git a/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/OreGen.kt b/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/OreGen.kt index fba815c..1043f0f 100644 --- a/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/OreGen.kt +++ b/src/main/kotlin/ru/yurannnzzz/ae2quartz/data/server/OreGen.kt @@ -2,9 +2,8 @@ package ru.yurannnzzz.ae2quartz.data.server import net.minecraft.core.HolderSet import net.minecraft.core.registries.Registries -import net.minecraft.data.worldgen.BootstapContext +import net.minecraft.data.worldgen.BootstrapContext import net.minecraft.resources.ResourceKey -import net.minecraft.resources.ResourceLocation import net.minecraft.tags.BiomeTags import net.minecraft.tags.BlockTags import net.minecraft.world.level.levelgen.GenerationStep @@ -17,10 +16,9 @@ import net.minecraft.world.level.levelgen.placement.HeightRangePlacement import net.minecraft.world.level.levelgen.placement.InSquarePlacement import net.minecraft.world.level.levelgen.placement.PlacedFeature import net.minecraft.world.level.levelgen.structure.templatesystem.TagMatchTest -import net.minecraftforge.common.world.BiomeModifier -import net.minecraftforge.common.world.ForgeBiomeModifiers.AddFeaturesBiomeModifier -import net.minecraftforge.registries.ForgeRegistries -import ru.yurannnzzz.ae2quartz.AE2QuartzMod.MOD_ID +import net.neoforged.neoforge.common.world.BiomeModifier +import net.neoforged.neoforge.registries.NeoForgeRegistries +import ru.yurannnzzz.ae2quartz.AE2QuartzMod.loc import ru.yurannnzzz.ae2quartz.registry.ModBlocks /* @@ -32,11 +30,11 @@ private object ConfiguredFeatures { val QUARTZ_ORE = key("quartz_ore") private fun key(name: String): ResourceKey> { - return ResourceKey.create(Registries.CONFIGURED_FEATURE, ResourceLocation(MOD_ID, name)) + return ResourceKey.create(Registries.CONFIGURED_FEATURE, loc(name)) } } -fun registerConfiguredFeatures(context: BootstapContext>) { +fun registerConfiguredFeatures(context: BootstrapContext>) { val target = listOf( OreConfiguration.target( TagMatchTest(BlockTags.STONE_ORE_REPLACEABLES), @@ -58,11 +56,11 @@ private object PlacedFeatures { val QUARTZ_ORE = key("quartz_ore") private fun key(name: String): ResourceKey { - return ResourceKey.create(Registries.PLACED_FEATURE, ResourceLocation(MOD_ID, name)) + return ResourceKey.create(Registries.PLACED_FEATURE, loc(name)) } } -fun registerPlacedFeatures(context: BootstapContext) { +fun registerPlacedFeatures(context: BootstrapContext) { val configured = context.lookup(Registries.CONFIGURED_FEATURE) context.register( @@ -81,17 +79,17 @@ private object BiomeModifiers { val QUARTZ_ORE = key("quartz_ore") private fun key(name: String): ResourceKey { - return ResourceKey.create(ForgeRegistries.Keys.BIOME_MODIFIERS, ResourceLocation(MOD_ID, name)) + return ResourceKey.create(NeoForgeRegistries.Keys.BIOME_MODIFIERS, loc(name)) } } -fun registerBiomeModifiers(context: BootstapContext) { +fun registerBiomeModifiers(context: BootstrapContext) { val placed = context.lookup(Registries.PLACED_FEATURE) val biomes = context.lookup(Registries.BIOME) context.register( BiomeModifiers.QUARTZ_ORE, - AddFeaturesBiomeModifier( + net.neoforged.neoforge.common.world.BiomeModifiers.AddFeaturesBiomeModifier( biomes.getOrThrow(BiomeTags.IS_OVERWORLD), HolderSet.direct(placed.getOrThrow(PlacedFeatures.QUARTZ_ORE)), GenerationStep.Decoration.UNDERGROUND_ORES diff --git a/src/main/kotlin/ru/yurannnzzz/ae2quartz/event/CreativeTabEventHandler.kt b/src/main/kotlin/ru/yurannnzzz/ae2quartz/event/CreativeTabEventHandler.kt index 96422f2..ed4a52e 100644 --- a/src/main/kotlin/ru/yurannnzzz/ae2quartz/event/CreativeTabEventHandler.kt +++ b/src/main/kotlin/ru/yurannnzzz/ae2quartz/event/CreativeTabEventHandler.kt @@ -1,13 +1,13 @@ package ru.yurannnzzz.ae2quartz.event import appeng.api.ids.AECreativeTabIds -import net.minecraftforge.event.BuildCreativeModeTabContentsEvent +import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent import ru.yurannnzzz.ae2quartz.registry.ModItems fun addCreativeTabItems(event: BuildCreativeModeTabContentsEvent) { if (event.tabKey === AECreativeTabIds.MAIN) { - event.accept(ModItems.QUARTZ_ORE) - event.accept(ModItems.DEEPSLATE_QUARTZ_ORE) - event.accept(ModItems.NETHER_QUARTZ_DUST) + event.accept(ModItems.QUARTZ_ORE.get()) + event.accept(ModItems.DEEPSLATE_QUARTZ_ORE.get()) + event.accept(ModItems.NETHER_QUARTZ_DUST.get()) } } diff --git a/src/main/kotlin/ru/yurannnzzz/ae2quartz/registry/ModBlocks.kt b/src/main/kotlin/ru/yurannnzzz/ae2quartz/registry/ModBlocks.kt index ce745b6..ed0c86d 100644 --- a/src/main/kotlin/ru/yurannnzzz/ae2quartz/registry/ModBlocks.kt +++ b/src/main/kotlin/ru/yurannnzzz/ae2quartz/registry/ModBlocks.kt @@ -1,19 +1,17 @@ package ru.yurannnzzz.ae2quartz.registry import net.minecraft.util.valueproviders.UniformInt -import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.DropExperienceBlock import net.minecraft.world.level.block.SoundType import net.minecraft.world.level.block.state.BlockBehaviour import net.minecraft.world.level.block.state.properties.NoteBlockInstrument import net.minecraft.world.level.material.MapColor -import net.minecraftforge.registries.DeferredRegister -import net.minecraftforge.registries.ForgeRegistries -import net.minecraftforge.registries.RegistryObject +import net.neoforged.neoforge.registries.DeferredRegister import ru.yurannnzzz.ae2quartz.AE2QuartzMod +import java.util.function.Supplier object ModBlocks { - val registry: DeferredRegister = DeferredRegister.create(ForgeRegistries.BLOCKS, AE2QuartzMod.MOD_ID) + val registry = DeferredRegister.createBlocks(AE2QuartzMod.MOD_ID) private val quartsOreBlockBehavior = BlockBehaviour.Properties.of() .mapColor(MapColor.STONE) @@ -21,19 +19,20 @@ object ModBlocks { .requiresCorrectToolForDrops() .strength(3.0f, 3.0f) - val QUARTZ_ORE: RegistryObject = registry.register("quartz_ore") { + val QUARTZ_ORE = registry.register("quartz_ore", Supplier { DropExperienceBlock( - quartsOreBlockBehavior, - UniformInt.of(2, 5) + UniformInt.of(2, 5), + quartsOreBlockBehavior ) - } - val DEEPSLATE_QUARTZ_ORE: RegistryObject = registry.register("deepslate_quartz_ore") { + }) + + val DEEPSLATE_QUARTZ_ORE = registry.register("deepslate_quartz_ore", Supplier { DropExperienceBlock( + UniformInt.of(2, 5), quartsOreBlockBehavior .mapColor(MapColor.DEEPSLATE) .strength(4.5f, 3.0f) - .sound(SoundType.DEEPSLATE), - UniformInt.of(2, 5) + .sound(SoundType.DEEPSLATE) ) - } + }) } diff --git a/src/main/kotlin/ru/yurannnzzz/ae2quartz/registry/ModItems.kt b/src/main/kotlin/ru/yurannnzzz/ae2quartz/registry/ModItems.kt index 9aa9cac..cdb199f 100644 --- a/src/main/kotlin/ru/yurannnzzz/ae2quartz/registry/ModItems.kt +++ b/src/main/kotlin/ru/yurannnzzz/ae2quartz/registry/ModItems.kt @@ -1,24 +1,18 @@ package ru.yurannnzzz.ae2quartz.registry import appeng.items.materials.MaterialItem +import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.world.item.BlockItem import net.minecraft.world.item.Item -import net.minecraftforge.registries.DeferredRegister -import net.minecraftforge.registries.ForgeRegistries -import net.minecraftforge.registries.RegistryObject +import net.neoforged.neoforge.registries.DeferredRegister import ru.yurannnzzz.ae2quartz.AE2QuartzMod +import java.util.function.Supplier object ModItems { - val registry: DeferredRegister = DeferredRegister.create(ForgeRegistries.ITEMS, AE2QuartzMod.MOD_ID) + val registry = DeferredRegister.create(BuiltInRegistries.ITEM, AE2QuartzMod.MOD_ID) - val NETHER_QUARTZ_DUST: RegistryObject = registry.register("nether_quartz_dust") { - MaterialItem(Item.Properties()) - } + val NETHER_QUARTZ_DUST= registry.register("nether_quartz_dust", Supplier { MaterialItem(Item.Properties()) }) - val QUARTZ_ORE: RegistryObject = registry.register("quartz_ore") { - BlockItem(ModBlocks.QUARTZ_ORE.get(), Item.Properties()) - } - val DEEPSLATE_QUARTZ_ORE: RegistryObject = registry.register("deepslate_quartz_ore") { - BlockItem(ModBlocks.DEEPSLATE_QUARTZ_ORE.get(), Item.Properties()) - } + val QUARTZ_ORE = registry.register("quartz_ore", Supplier { BlockItem(ModBlocks.QUARTZ_ORE.get(), Item.Properties()) }) + val DEEPSLATE_QUARTZ_ORE = registry.register("deepslate_quartz_ore", Supplier { BlockItem(ModBlocks.DEEPSLATE_QUARTZ_ORE.get(), Item.Properties()) }) } diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/neoforge.mods.toml similarity index 84% rename from src/main/resources/META-INF/mods.toml rename to src/main/resources/META-INF/neoforge.mods.toml index d9ba1e5..ff29af2 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/neoforge.mods.toml @@ -11,20 +11,20 @@ authors="YuRaNnNzZZ" description="This mod adds Certus Quartz Ore and Nether Quartz Dust from earlier versions of AE2." [[dependencies.${mod_id}]] - modId="forge" + modId="neoforge" mandatory=true - versionRange="${forge_version_range}" + versionRange="${neo_version_range}" ordering="NONE" side="BOTH" [[dependencies.${mod_id}]] modId="minecraft" - mandatory=true + type="required" versionRange="${minecraft_version_range}" ordering="NONE" side="BOTH" [[dependencies.${mod_id}]] modId="ae2" - mandatory=true + type="required" versionRange="${ae2_version_range}" ordering="NONE" side="BOTH" \ No newline at end of file