diff --git a/assets/images/web/logo.png b/assets/images/web/logo.png new file mode 100644 index 0000000..72e23d8 --- /dev/null +++ b/assets/images/web/logo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d5d002aa88f4bbd76ff2e9579ed39c0d025273f2bab98ab58b8ebfc4be1febb +size 198514 diff --git a/build.gradle b/build.gradle index 9ce4280..19ee3b5 100644 --- a/build.gradle +++ b/build.gradle @@ -1,134 +1,191 @@ -buildscript { - repositories { - // These repositories are only for Gradle plugins, put any other repositories in the repository block further below - maven { url = 'https://repo.spongepowered.org/repository/maven-public/' } - mavenCentral() - } - dependencies { - classpath 'org.spongepowered:mixingradle:0.7-SNAPSHOT' - } -} - plugins { - id 'eclipse' + id 'java-library' + id 'maven-publish' + id 'net.neoforged.moddev' version '2.0.137' id 'idea' - id 'net.minecraftforge.gradle' version '[6.0.16,6.2)' - id 'org.parchmentmc.librarian.forgegradle' version '1.+' } -apply plugin: 'org.spongepowered.mixin' +tasks.named('wrapper', Wrapper).configure { + // Define wrapper values here so as to not have to always do so when updating gradlew.properties. + // Switching this to Wrapper.DistributionType.ALL will download the full gradle sources that comes with + // documentation attached on cursor hover of gradle classes and methods. However, this comes with increased + // file size for Gradle. If you do switch this to ALL, run the Gradle wrapper task twice afterwards. + // (Verify by checking gradle/wrapper/gradle-wrapper.properties to see if distributionUrl now points to `-all`) + distributionType = Wrapper.DistributionType.BIN +} group = mod_group_id version = mod_version +repositories { + // Add here additional repositories if required by some of the dependencies below. +} + base { archivesName = "${mod_id}-${minecraft_version}" } java { - toolchain.languageVersion = JavaLanguageVersion.of(17) + toolchain.languageVersion = JavaLanguageVersion.of(21) } -minecraft { - mappings channel: mapping_channel, version: "$mapping_version-$minecraft_version" +neoForge { + // Specify the version of NeoForge to use. + version = project.neo_version - copyIdeResources = true - // generateRunFolders = true - // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') // https://docs.minecraftforge.net/en/latest/advanced/accesstransformers/ + parchment { + mappingsVersion = project.parchment_mappings_version + minecraftVersion = project.parchment_minecraft_version + } + // This line is optional. Access Transformers are automatically detected + // accessTransformers = project.files('src/main/resources/META-INF/accesstransformer.cfg') + + // Default run configurations. + // These can be tweaked, removed, or duplicated as needed. runs { - // applies to all the run configs below - configureEach { - workingDirectory project.file('run') - - property 'forge.logging.markers', 'REGISTRIES' - property 'forge.logging.console.level', 'debug' - - mods { - "${mod_id}" { - source sourceSets.main - } - } - } - client { - property 'forge.enabledGameTestNamespaces', mod_id + client() + + // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. + systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id } server { - property 'forge.enabledGameTestNamespaces', mod_id - args '--nogui' + server() + programArgument '--nogui' + systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id } + // This run config launches GameTestServer and runs all registered gametests, then exits. + // By default, the server will crash when no gametests are provided. + // The gametest system is also enabled by default for other run configs under the /test command. gameTestServer { - property 'forge.enabledGameTestNamespaces', mod_id + type = "gameTestServer" + systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id } data { - workingDirectory project.file('run-data') - args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/') + data() + + // example of overriding the workingDirectory set in configureEach above, uncomment if you want to use it + // gameDirectory = project.file('run-data') + + // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources. + programArguments.addAll '--mod', project.mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath() + } + + // applies to all the run configs above + configureEach { + // Recommended logging data for a userdev environment + // The markers can be added/remove as needed separated by commas. + // "SCAN": For mods scan. + // "REGISTRIES": For firing of registry events. + // "REGISTRYDUMP": For getting the contents of all registries. + systemProperty 'forge.logging.markers', 'REGISTRIES' + + // Recommended logging level for the console + // You can set various levels here. + // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels + logLevel = org.slf4j.event.Level.DEBUG + } + } + + mods { + // define mod <-> source bindings + // these are used to tell the game which sources are for which mod + // multi mod projects should define one per mod + "${mod_id}" { + sourceSet(sourceSets.main) } } } -mixin { - add sourceSets.main, "${mod_id}.refmap.json" - - config "${mod_id}.mixins.json" -} - +// Include resources generated by data generators. sourceSets.main.resources { srcDir 'src/generated/resources' } -repositories { - exclusiveContent { - forRepository { - maven { - name = "Modrinth" - url = "https://api.modrinth.com/maven" - } - } - forRepositories(fg.repository) // Only add this if you're using ForgeGradle, otherwise remove this line - filter { - includeGroup "maven.modrinth" - } - } +// Sets up a dependency configuration called 'localRuntime'. +// This configuration should be used instead of 'runtimeOnly' to declare +// a dependency that will be present for runtime testing but that is +// "optional", meaning it will not be pulled by dependents of this mod. +configurations { + runtimeClasspath.extendsFrom localRuntime } dependencies { - minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" - annotationProcessor 'org.spongepowered:mixin:0.8.5:processor' + // Example optional mod dependency with JEI + // The JEI API is declared for compile time use, while the full JEI artifact is used at runtime + // compileOnly "mezz.jei:jei-${mc_version}-common-api:${jei_version}" + // compileOnly "mezz.jei:jei-${mc_version}-neoforge-api:${jei_version}" + // We add the full version to localRuntime, not runtimeOnly, so that we do not publish a dependency on it + // localRuntime "mezz.jei:jei-${mc_version}-neoforge:${jei_version}" + + // Example mod dependency using a mod jar from ./libs with a flat dir repository + // This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar + // The group id is ignored when searching -- in this case, it is "blank" + // implementation "blank:coolmod-${mc_version}:${coolmod_version}" + + // Example mod dependency using a file as dependency + // implementation files("libs/coolmod-${mc_version}-${coolmod_version}.jar") + + // Example project dependency using a sister or child project: + // implementation project(":myproject") + + // For more info: + // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html + // http://www.gradle.org/docs/current/userguide/dependency_management.html } -tasks.named('processResources', ProcessResources).configure { - var replaceProperties = [minecraft_version : minecraft_version, minecraft_version_range: minecraft_version_range, - forge_version : forge_version, forge_version_range: forge_version_range, - loader_version_range: loader_version_range, - mod_id : mod_id, mod_name: mod_name, mod_license: mod_license, mod_version: mod_version, - mod_authors : mod_authors, mod_description: mod_description] +// This block of code expands all declared replace properties in the specified resource targets. +// A missing property will result in an error. Properties are expanded using ${} Groovy notation. +// When "copyIdeResources" is enabled, this will also run before the game launches in IDE environments. +// See https://docs.gradle.org/current/dsl/org.gradle.language.jvm.tasks.ProcessResources.html +tasks.withType(ProcessResources).configureEach { + var replaceProperties = [ + minecraft_version : minecraft_version, + minecraft_version_range: minecraft_version_range, + neo_version : neo_version, + neo_version_range : neo_version_range, + loader_version_range : loader_version_range, + mod_id : mod_id, + mod_name : mod_name, + mod_license : mod_license, + mod_version : mod_version, + mod_authors : mod_authors, + mod_description : mod_description + ] 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" : mod_authors, - "Specification-Version" : "1", - "Implementation-Title" : project.name, - "Implementation-Version" : project.jar.archiveVersion, - "Implementation-Vendor" : mod_authors, - "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")]) +// Example configuration to allow publishing using the maven-publish plugin +publishing { + publications { + register('mavenJava', MavenPublication) { + from components.java + } + } + repositories { + maven { + url "file://${project.projectDir}/repo" + } } - - finalizedBy 'reobfJar' } tasks.withType(JavaCompile).configureEach { - options.encoding = 'UTF-8' + options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation +} + +// IDEA no longer automatically downloads sources/javadoc jars for dependencies, so we need to explicitly enable the behavior. +idea { + module { + downloadSources = true + downloadJavadoc = true + } } diff --git a/gradle.properties b/gradle.properties index e2110b7..b0c4e75 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,20 +1,23 @@ org.gradle.jvmargs=-Xmx3G -org.gradle.daemon=false +org.gradle.daemon=true +org.gradle.parallel=true +org.gradle.caching=true +org.gradle.configuration-cache=true mod_id=firefly_bush_backport mod_name=Firefly Bush Backport mod_license=All Rights Reserved -mod_version=1.0.0 +mod_version=1.1.0 mod_group_id=dev.micle mod_authors=Micle mod_description=Firefly bush backport from 1.21.5. -minecraft_version=1.20.1 -minecraft_version_range=[1.20.1,1.21) +minecraft_version=1.21.1 +minecraft_version_range=[1.21.1,1.22) -forge_version=47.4.0 -forge_version_range=[47,) -loader_version_range=[47,) +neo_version=21.1.228 +neo_version_range=[21.1.228,21.2) +loader_version_range=[1,) -mapping_channel=parchment -mapping_version=2023.09.03 +parchment_minecraft_version=1.21.1 +parchment_mappings_version=2024.11.17 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0d8ab51..d205b54 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1 +1,7 @@ -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 45fe14b..d10c313 100644 --- a/settings.gradle +++ b/settings.gradle @@ -10,7 +10,7 @@ pluginManagement { } plugins { - id 'org.gradle.toolchains.foojay-resolver-convention' version '0.7.0' + id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0' } rootProject.name = "${mod_id}-${minecraft_version}" diff --git a/src/generated/resources/data/firefly_bush_backport/loot_tables/blocks/firefly_bush.json b/src/generated/resources/data/firefly_bush_backport/loot_table/blocks/firefly_bush.json similarity index 100% rename from src/generated/resources/data/firefly_bush_backport/loot_tables/blocks/firefly_bush.json rename to src/generated/resources/data/firefly_bush_backport/loot_table/blocks/firefly_bush.json diff --git a/src/generated/resources/data/firefly_bush_backport/forge/biome_modifier/add_patch_firefly_bush_near_water.json b/src/generated/resources/data/firefly_bush_backport/neoforge/biome_modifier/add_patch_firefly_bush_near_water.json similarity index 80% rename from src/generated/resources/data/firefly_bush_backport/forge/biome_modifier/add_patch_firefly_bush_near_water.json rename to src/generated/resources/data/firefly_bush_backport/neoforge/biome_modifier/add_patch_firefly_bush_near_water.json index 06ebf67..f539a77 100644 --- a/src/generated/resources/data/firefly_bush_backport/forge/biome_modifier/add_patch_firefly_bush_near_water.json +++ b/src/generated/resources/data/firefly_bush_backport/neoforge/biome_modifier/add_patch_firefly_bush_near_water.json @@ -1,5 +1,5 @@ { - "type": "forge:add_features", + "type": "neoforge:add_features", "biomes": "#minecraft:is_overworld", "features": "firefly_bush_backport:patch_firefly_bush_near_water", "step": "vegetal_decoration" diff --git a/src/generated/resources/data/firefly_bush_backport/forge/biome_modifier/add_patch_firefly_bush_near_water_swamp.json b/src/generated/resources/data/firefly_bush_backport/neoforge/biome_modifier/add_patch_firefly_bush_near_water_swamp.json similarity index 63% rename from src/generated/resources/data/firefly_bush_backport/forge/biome_modifier/add_patch_firefly_bush_near_water_swamp.json rename to src/generated/resources/data/firefly_bush_backport/neoforge/biome_modifier/add_patch_firefly_bush_near_water_swamp.json index fe5ccb4..8b7209a 100644 --- a/src/generated/resources/data/firefly_bush_backport/forge/biome_modifier/add_patch_firefly_bush_near_water_swamp.json +++ b/src/generated/resources/data/firefly_bush_backport/neoforge/biome_modifier/add_patch_firefly_bush_near_water_swamp.json @@ -1,6 +1,6 @@ { - "type": "forge:add_features", - "biomes": "#forge:is_swamp", + "type": "neoforge:add_features", + "biomes": "#c:is_swamp", "features": "firefly_bush_backport:patch_firefly_bush_near_water_swamp", "step": "vegetal_decoration" } \ No newline at end of file diff --git a/src/generated/resources/data/firefly_bush_backport/forge/biome_modifier/add_patch_firefly_bush_swamp.json b/src/generated/resources/data/firefly_bush_backport/neoforge/biome_modifier/add_patch_firefly_bush_swamp.json similarity index 60% rename from src/generated/resources/data/firefly_bush_backport/forge/biome_modifier/add_patch_firefly_bush_swamp.json rename to src/generated/resources/data/firefly_bush_backport/neoforge/biome_modifier/add_patch_firefly_bush_swamp.json index 6591b04..0da8759 100644 --- a/src/generated/resources/data/firefly_bush_backport/forge/biome_modifier/add_patch_firefly_bush_swamp.json +++ b/src/generated/resources/data/firefly_bush_backport/neoforge/biome_modifier/add_patch_firefly_bush_swamp.json @@ -1,6 +1,6 @@ { - "type": "forge:add_features", - "biomes": "#forge:is_swamp", + "type": "neoforge:add_features", + "biomes": "#c:is_swamp", "features": "firefly_bush_backport:patch_firefly_bush_swamp", "step": "vegetal_decoration" } \ No newline at end of file diff --git a/src/generated/resources/data/firefly_bush_backport/forge/biome_modifier/remove_patch_firefly_bush_near_water.json b/src/generated/resources/data/firefly_bush_backport/neoforge/biome_modifier/remove_patch_firefly_bush_near_water.json similarity index 61% rename from src/generated/resources/data/firefly_bush_backport/forge/biome_modifier/remove_patch_firefly_bush_near_water.json rename to src/generated/resources/data/firefly_bush_backport/neoforge/biome_modifier/remove_patch_firefly_bush_near_water.json index 3969f80..15c75d9 100644 --- a/src/generated/resources/data/firefly_bush_backport/forge/biome_modifier/remove_patch_firefly_bush_near_water.json +++ b/src/generated/resources/data/firefly_bush_backport/neoforge/biome_modifier/remove_patch_firefly_bush_near_water.json @@ -1,6 +1,6 @@ { - "type": "forge:remove_features", - "biomes": "#forge:is_swamp", + "type": "neoforge:remove_features", + "biomes": "#c:is_swamp", "features": "firefly_bush_backport:patch_firefly_bush_near_water", "steps": "vegetal_decoration" } \ No newline at end of file diff --git a/src/generated/resources/data/neoforge/data_maps/item/compostables.json b/src/generated/resources/data/neoforge/data_maps/item/compostables.json new file mode 100644 index 0000000..161f7c2 --- /dev/null +++ b/src/generated/resources/data/neoforge/data_maps/item/compostables.json @@ -0,0 +1,7 @@ +{ + "values": { + "firefly_bush_backport:firefly_bush": { + "chance": 0.3 + } + } +} \ No newline at end of file diff --git a/src/main/java/dev/micle/firefly_bush_backport/FireflyBushBackport.java b/src/main/java/dev/micle/firefly_bush_backport/FireflyBushBackport.java index 2f7d666..c82e999 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/FireflyBushBackport.java +++ b/src/main/java/dev/micle/firefly_bush_backport/FireflyBushBackport.java @@ -3,28 +3,46 @@ package dev.micle.firefly_bush_backport; import com.mojang.logging.LogUtils; import dev.micle.firefly_bush_backport.proxy.IProxy; import dev.micle.firefly_bush_backport.proxy.Proxy; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraft.resources.ResourceLocation; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.ModList; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.loading.FMLEnvironment; import org.slf4j.Logger; +import java.util.Optional; + @Mod(FireflyBushBackport.MOD_ID) public class FireflyBushBackport { public static final String MOD_ID = "firefly_bush_backport"; public static final Logger LOGGER = LogUtils.getLogger(); - private static FMLJavaModLoadingContext fmlJavaModLoadingContext; + private static IProxy proxy; - public FireflyBushBackport(FMLJavaModLoadingContext context) { - fmlJavaModLoadingContext = context; - - proxy = DistExecutor.safeRunForDist( - () -> Proxy.Client::new, - () -> Proxy.Server::new - ); + public FireflyBushBackport(IEventBus modEventBus, ModContainer modContainer) { + proxy = FMLEnvironment.dist == Dist.CLIENT + ? new Proxy.Client(modEventBus, modContainer) + : new Proxy.Server(modEventBus, modContainer); } - public static FMLJavaModLoadingContext getFMLJavaModLoadingContext() { - return fmlJavaModLoadingContext; + public static ResourceLocation createResourceLocation(String name) { + if (name.contains(":")) { + throw new IllegalArgumentException("Name contains namespace"); + } + return ResourceLocation.fromNamespaceAndPath(MOD_ID, name); + } + + public static String getVersion() { + Optional optional = ModList.get().getModContainerById(MOD_ID); + if (optional.isPresent()) { + return optional.get().getModInfo().getVersion().toString(); + } + return "0.0.0"; + } + + public static IProxy getProxy() { + return proxy; } } diff --git a/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java b/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java index 4ba0ded..25415a8 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java +++ b/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java @@ -1,5 +1,6 @@ package dev.micle.firefly_bush_backport.block; +import com.mojang.serialization.MapCodec; import dev.micle.firefly_bush_backport.config.Config; import dev.micle.firefly_bush_backport.particle.ModParticles; import dev.micle.firefly_bush_backport.sound.ModSounds; @@ -14,16 +15,25 @@ import net.minecraft.world.level.block.BonemealableBlock; import net.minecraft.world.level.block.BushBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.Heightmap; +import org.jetbrains.annotations.NotNull; import javax.annotation.ParametersAreNonnullByDefault; import java.util.List; import java.util.Optional; public class FireflyBushBlock extends BushBlock implements BonemealableBlock { + public static final MapCodec CODEC = simpleCodec(FireflyBushBlock::new); + public FireflyBushBlock(Properties properties) { super(properties); } + @Override + @NotNull + protected MapCodec codec() { + return CODEC; + } + @Override @ParametersAreNonnullByDefault public void animateTick(BlockState blockState, Level level, BlockPos blockPos, RandomSource randomSource) { @@ -58,7 +68,7 @@ public class FireflyBushBlock extends BushBlock implements BonemealableBlock { @Override @ParametersAreNonnullByDefault - public boolean isValidBonemealTarget(LevelReader level, BlockPos blockPos, BlockState blockState, boolean isClient) { + public boolean isValidBonemealTarget(LevelReader level, BlockPos blockPos, BlockState blockState) { return hasSpreadableNeighbourPos(level, blockPos, blockState); } diff --git a/src/main/java/dev/micle/firefly_bush_backport/block/ModBlocks.java b/src/main/java/dev/micle/firefly_bush_backport/block/ModBlocks.java index 2ab4c4b..3640480 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/block/ModBlocks.java +++ b/src/main/java/dev/micle/firefly_bush_backport/block/ModBlocks.java @@ -1,25 +1,19 @@ package dev.micle.firefly_bush_backport.block; import dev.micle.firefly_bush_backport.FireflyBushBackport; -import dev.micle.firefly_bush_backport.item.ModItems; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.material.MapColor; import net.minecraft.world.level.material.PushReaction; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; - -import java.util.function.Supplier; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; public class ModBlocks { - public static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, FireflyBushBackport.MOD_ID); + public static final DeferredRegister BLOCKS = DeferredRegister.createBlocks(FireflyBushBackport.MOD_ID); - public static RegistryObject FIREFLY_BUSH = registerBlock("firefly_bush", + public static DeferredHolder FIREFLY_BUSH = BLOCKS.register("firefly_bush", () -> new FireflyBushBlock(BlockBehaviour.Properties.of() .mapColor(MapColor.PLANT) .ignitedByLava() @@ -33,14 +27,4 @@ public class ModBlocks { public static void register(IEventBus modEventBus) { BLOCKS.register(modEventBus); } - - private static RegistryObject registerBlockItem(String name, RegistryObject block) { - return ModItems.ITEMS.register(name, () -> new BlockItem(block.get(), new Item.Properties())); - } - - private static RegistryObject registerBlock(String name, Supplier block) { - RegistryObject ret = BLOCKS.register(name, block); - registerBlockItem(name, ret); - return ret; - } } diff --git a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java index 3ec34fa..809799b 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java +++ b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java @@ -1,45 +1,46 @@ package dev.micle.firefly_bush_backport.config; -import dev.micle.firefly_bush_backport.FireflyBushBackport; import net.minecraft.util.random.SimpleWeightedRandomList; import net.minecraft.world.level.Level; -import net.minecraftforge.common.ForgeConfigSpec; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.config.ModConfig; -import net.minecraftforge.fml.event.config.ModConfigEvent; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.config.ModConfig; +import net.neoforged.fml.event.config.ModConfigEvent; +import net.neoforged.neoforge.common.ModConfigSpec; import org.apache.commons.lang3.tuple.Pair; import java.awt.*; import java.util.List; -@Mod.EventBusSubscriber(modid = FireflyBushBackport.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) public final class Config { public static final Client CLIENT; - public static final ForgeConfigSpec CLIENT_SPEC; + public static final ModConfigSpec CLIENT_SPEC; public static final Common COMMON; - public static final ForgeConfigSpec COMMON_SPEC; + public static final ModConfigSpec COMMON_SPEC; public static final Server SERVER; - public static final ForgeConfigSpec SERVER_SPEC; + public static final ModConfigSpec SERVER_SPEC; static { - Pair clientSpecPair = new ForgeConfigSpec.Builder().configure(Client::new); + Pair clientSpecPair = new ModConfigSpec.Builder().configure(Client::new); CLIENT = clientSpecPair.getLeft(); CLIENT_SPEC = clientSpecPair.getRight(); - Pair commonSpecPair = new ForgeConfigSpec.Builder().configure(Common::new); + Pair commonSpecPair = new ModConfigSpec.Builder().configure(Common::new); COMMON = commonSpecPair.getLeft(); COMMON_SPEC = commonSpecPair.getRight(); - Pair serverSpecPair = new ForgeConfigSpec.Builder().configure(Server::new); + Pair serverSpecPair = new ModConfigSpec.Builder().configure(Server::new); SERVER = serverSpecPair.getLeft(); SERVER_SPEC = serverSpecPair.getRight(); } - public static void register() { - FireflyBushBackport.getFMLJavaModLoadingContext().registerConfig(ModConfig.Type.CLIENT, CLIENT_SPEC); - FireflyBushBackport.getFMLJavaModLoadingContext().registerConfig(ModConfig.Type.COMMON, COMMON_SPEC); - FireflyBushBackport.getFMLJavaModLoadingContext().registerConfig(ModConfig.Type.SERVER, SERVER_SPEC); + public static void register(IEventBus modEventBus, ModContainer modContainer) { + modContainer.registerConfig(ModConfig.Type.CLIENT, CLIENT_SPEC); + modContainer.registerConfig(ModConfig.Type.COMMON, COMMON_SPEC); + modContainer.registerConfig(ModConfig.Type.SERVER, SERVER_SPEC); + + modEventBus.addListener(Config::onConfigReloadEvent); } @SubscribeEvent @@ -54,29 +55,29 @@ public final class Config { } public static class Client { - public static ForgeConfigSpec.DoubleValue bushFireflyChancePerTick; - public static ForgeConfigSpec.DoubleValue bushFireflyHorizontalRange; - public static ForgeConfigSpec.DoubleValue bushFireflyVerticalRange; - public static ForgeConfigSpec.IntValue bushFireflySpawnMaxBrightnessLevel; - public static ForgeConfigSpec.IntValue bushFireflyAmbientSoundChanceOneIn; + public static ModConfigSpec.DoubleValue bushFireflyChancePerTick; + public static ModConfigSpec.DoubleValue bushFireflyHorizontalRange; + public static ModConfigSpec.DoubleValue bushFireflyVerticalRange; + public static ModConfigSpec.IntValue bushFireflySpawnMaxBrightnessLevel; + public static ModConfigSpec.IntValue bushFireflyAmbientSoundChanceOneIn; - public static ForgeConfigSpec.BooleanValue bushExtraAlwaysPlayAmbientSound; - public static ForgeConfigSpec.BooleanValue bushExtraAlwaysSpawnParticles; + public static ModConfigSpec.BooleanValue bushExtraAlwaysPlayAmbientSound; + public static ModConfigSpec.BooleanValue bushExtraAlwaysSpawnParticles; - public static ForgeConfigSpec.DoubleValue particleFadeOutLightTime; - public static ForgeConfigSpec.DoubleValue particleFadeInLightTime; - public static ForgeConfigSpec.DoubleValue particleFadeOutAlphaTime; - public static ForgeConfigSpec.DoubleValue particleFadeInAlphaTime; - public static ForgeConfigSpec.IntValue particleMinLifetime; - public static ForgeConfigSpec.IntValue particleMaxLifetime; + public static ModConfigSpec.DoubleValue particleFadeOutLightTime; + public static ModConfigSpec.DoubleValue particleFadeInLightTime; + public static ModConfigSpec.DoubleValue particleFadeOutAlphaTime; + public static ModConfigSpec.DoubleValue particleFadeInAlphaTime; + public static ModConfigSpec.IntValue particleMinLifetime; + public static ModConfigSpec.IntValue particleMaxLifetime; - public static ForgeConfigSpec.DoubleValue particleExtraFriction; - public static ForgeConfigSpec.DoubleValue particleExtraScale; - public static ForgeConfigSpec.DoubleValue particleExtraBrightness; - private static ForgeConfigSpec.ConfigValue> particleExtraColors; + public static ModConfigSpec.DoubleValue particleExtraFriction; + public static ModConfigSpec.DoubleValue particleExtraScale; + public static ModConfigSpec.DoubleValue particleExtraBrightness; + private static ModConfigSpec.ConfigValue> particleExtraColors; public static SimpleWeightedRandomList particleExtraColorsWeightedList; - Client(ForgeConfigSpec.Builder builder) { + Client(ModConfigSpec.Builder builder) { builder.comment("Settings for the firefly bush.").push("bush"); bushFireflyChancePerTick = builder .defineInRange("bushFireflyChancePerTick", 0.7, 0, 1); @@ -120,7 +121,7 @@ public final class Config { .defineInRange("particleExtraBrightness", 255.0, 0, 255); particleExtraColors = builder .comment("List of color hex values and their weight. Format: ','") - .defineList("particleExtraColors", List.of("#ffffff,1"), Client::isValidColorEntry); + .defineList("particleExtraColors", List.of(getDefaultColorEntry()), Client::getDefaultColorEntry, Client::isValidColorEntry); builder.pop(); builder.pop(); } @@ -137,16 +138,20 @@ public final class Config { private static boolean isValidColorEntry(Object entry) { return entry instanceof String && ((String) entry).matches("#\\w{6},\\d+$"); } + + private static String getDefaultColorEntry() { + return "#ffffff,1"; + } } public static class Common { - Common(ForgeConfigSpec.Builder builder) {} + Common(ModConfigSpec.Builder builder) {} private static void onConfigReload() {} } public static class Server { - Server(ForgeConfigSpec.Builder builder) {} + Server(ModConfigSpec.Builder builder) {} private static void onConfigReload() {} } diff --git a/src/main/java/dev/micle/firefly_bush_backport/data/DataGenerators.java b/src/main/java/dev/micle/firefly_bush_backport/data/DataGenerators.java index 054df3e..b6dd1e9 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/data/DataGenerators.java +++ b/src/main/java/dev/micle/firefly_bush_backport/data/DataGenerators.java @@ -1,21 +1,21 @@ package dev.micle.firefly_bush_backport.data; -import dev.micle.firefly_bush_backport.FireflyBushBackport; import dev.micle.firefly_bush_backport.data.client.ModBlockStateProvider; +import dev.micle.firefly_bush_backport.data.client.ModDataMapProvider; import dev.micle.firefly_bush_backport.data.client.ModItemModelProvider; import dev.micle.firefly_bush_backport.data.client.ModSoundDefinitionsProvider; import dev.micle.firefly_bush_backport.data.server.ModLootTableProvider; import dev.micle.firefly_bush_backport.data.server.ModWorldGenProvider; import net.minecraft.core.HolderLookup; import net.minecraft.data.DataGenerator; -import net.minecraftforge.common.data.ExistingFileHelper; -import net.minecraftforge.data.event.GatherDataEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.common.data.ExistingFileHelper; +import net.neoforged.neoforge.data.event.GatherDataEvent; import java.util.concurrent.CompletableFuture; -@Mod.EventBusSubscriber(modid = FireflyBushBackport.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) +@EventBusSubscriber public class DataGenerators { @SubscribeEvent public static void gatherData(GatherDataEvent event) { @@ -26,8 +26,9 @@ public class DataGenerators { generator.addProvider(event.includeClient(), new ModBlockStateProvider(generator, existingFileHelper)); generator.addProvider(event.includeClient(), new ModItemModelProvider(generator, existingFileHelper)); generator.addProvider(event.includeClient(), new ModSoundDefinitionsProvider(generator, existingFileHelper)); + generator.addProvider(event.includeClient(), new ModDataMapProvider(generator, lookupProvider)); - generator.addProvider(event.includeServer(), new ModLootTableProvider(generator)); + generator.addProvider(event.includeServer(), new ModLootTableProvider(generator, lookupProvider)); generator.addProvider(event.includeServer(), new ModWorldGenProvider(generator, lookupProvider)); } } diff --git a/src/main/java/dev/micle/firefly_bush_backport/data/client/ModBlockStateProvider.java b/src/main/java/dev/micle/firefly_bush_backport/data/client/ModBlockStateProvider.java index d1e883c..f387a99 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/data/client/ModBlockStateProvider.java +++ b/src/main/java/dev/micle/firefly_bush_backport/data/client/ModBlockStateProvider.java @@ -5,9 +5,9 @@ import dev.micle.firefly_bush_backport.block.ModBlocks; import net.minecraft.data.DataGenerator; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; -import net.minecraftforge.client.model.generators.BlockStateProvider; -import net.minecraftforge.common.data.ExistingFileHelper; -import net.minecraftforge.registries.RegistryObject; +import net.neoforged.neoforge.client.model.generators.BlockStateProvider; +import net.neoforged.neoforge.common.data.ExistingFileHelper; +import net.neoforged.neoforge.registries.DeferredHolder; import java.util.Objects; @@ -21,7 +21,7 @@ public class ModBlockStateProvider extends BlockStateProvider { crossEmissiveBlock(ModBlocks.FIREFLY_BUSH); } - private void crossEmissiveBlock(RegistryObject block) { + private void crossEmissiveBlock(DeferredHolder block) { String name = Objects.requireNonNull(block.getId()).getPath(); simpleBlock(block.get(), models() .withExistingParent(name, ResourceLocation.fromNamespaceAndPath(FireflyBushBackport.MOD_ID, "block/cross_emissive")) diff --git a/src/main/java/dev/micle/firefly_bush_backport/data/client/ModDataMapProvider.java b/src/main/java/dev/micle/firefly_bush_backport/data/client/ModDataMapProvider.java new file mode 100644 index 0000000..ddef081 --- /dev/null +++ b/src/main/java/dev/micle/firefly_bush_backport/data/client/ModDataMapProvider.java @@ -0,0 +1,24 @@ +package dev.micle.firefly_bush_backport.data.client; + +import dev.micle.firefly_bush_backport.item.ModItems; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.DataGenerator; +import net.neoforged.neoforge.common.data.DataMapProvider; +import net.neoforged.neoforge.registries.datamaps.builtin.Compostable; +import net.neoforged.neoforge.registries.datamaps.builtin.NeoForgeDataMaps; + +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.concurrent.CompletableFuture; + +public class ModDataMapProvider extends DataMapProvider { + public ModDataMapProvider(DataGenerator generator, CompletableFuture lookupProvider) { + super(generator.getPackOutput(), lookupProvider); + } + + @Override + @ParametersAreNonnullByDefault + protected void gather(HolderLookup.Provider provider) { + this.builder(NeoForgeDataMaps.COMPOSTABLES) + .add(ModItems.FIREFLY_BUSH, new Compostable(0.3F), false); + } +} diff --git a/src/main/java/dev/micle/firefly_bush_backport/data/client/ModItemModelProvider.java b/src/main/java/dev/micle/firefly_bush_backport/data/client/ModItemModelProvider.java index 2277e06..1fa531f 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/data/client/ModItemModelProvider.java +++ b/src/main/java/dev/micle/firefly_bush_backport/data/client/ModItemModelProvider.java @@ -2,15 +2,15 @@ package dev.micle.firefly_bush_backport.data.client; import dev.micle.firefly_bush_backport.FireflyBushBackport; import dev.micle.firefly_bush_backport.block.ModBlocks; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.data.DataGenerator; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; -import net.minecraftforge.client.model.generators.ItemModelBuilder; -import net.minecraftforge.client.model.generators.ItemModelProvider; -import net.minecraftforge.client.model.generators.ModelFile; -import net.minecraftforge.common.data.ExistingFileHelper; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; +import net.neoforged.neoforge.client.model.generators.ItemModelBuilder; +import net.neoforged.neoforge.client.model.generators.ItemModelProvider; +import net.neoforged.neoforge.client.model.generators.ModelFile; +import net.neoforged.neoforge.common.data.ExistingFileHelper; +import net.neoforged.neoforge.registries.DeferredHolder; import java.util.Objects; @@ -21,11 +21,11 @@ public class ModItemModelProvider extends ItemModelProvider { @Override protected void registerModels() { - ModBlocks.BLOCKS.getEntries().stream().map(RegistryObject::get).forEach(this::blockItemModel); + ModBlocks.BLOCKS.getEntries().stream().map(DeferredHolder::get).forEach(this::blockItemModel); } private void blockItemModel(Block block) { - String name = Objects.requireNonNull(ForgeRegistries.BLOCKS.getKey(block)).getPath(); + String name = Objects.requireNonNull(BuiltInRegistries.BLOCK.getKey(block)).getPath(); if (block == ModBlocks.FIREFLY_BUSH.get()) { builder(getExistingFile(mcLoc("item/generated")), name); diff --git a/src/main/java/dev/micle/firefly_bush_backport/data/client/ModSoundDefinitionsProvider.java b/src/main/java/dev/micle/firefly_bush_backport/data/client/ModSoundDefinitionsProvider.java index a508d28..f3ff8f1 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/data/client/ModSoundDefinitionsProvider.java +++ b/src/main/java/dev/micle/firefly_bush_backport/data/client/ModSoundDefinitionsProvider.java @@ -4,8 +4,8 @@ import dev.micle.firefly_bush_backport.FireflyBushBackport; import dev.micle.firefly_bush_backport.sound.ModSounds; import net.minecraft.data.DataGenerator; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.common.data.ExistingFileHelper; -import net.minecraftforge.common.data.SoundDefinitionsProvider; +import net.neoforged.neoforge.common.data.ExistingFileHelper; +import net.neoforged.neoforge.common.data.SoundDefinitionsProvider; public class ModSoundDefinitionsProvider extends SoundDefinitionsProvider { public ModSoundDefinitionsProvider(DataGenerator generator, ExistingFileHelper existingFileHelper) { diff --git a/src/main/java/dev/micle/firefly_bush_backport/data/loot/ModBlockLootTableProvider.java b/src/main/java/dev/micle/firefly_bush_backport/data/loot/ModBlockLootTableProvider.java index 9365028..076b56a 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/data/loot/ModBlockLootTableProvider.java +++ b/src/main/java/dev/micle/firefly_bush_backport/data/loot/ModBlockLootTableProvider.java @@ -1,17 +1,17 @@ package dev.micle.firefly_bush_backport.data.loot; import dev.micle.firefly_bush_backport.block.ModBlocks; +import net.minecraft.core.HolderLookup; import net.minecraft.data.loot.BlockLootSubProvider; import net.minecraft.world.flag.FeatureFlags; import net.minecraft.world.level.block.Block; -import net.minecraftforge.registries.RegistryObject; import org.jetbrains.annotations.NotNull; import java.util.Set; public class ModBlockLootTableProvider extends BlockLootSubProvider { - public ModBlockLootTableProvider() { - super(Set.of(), FeatureFlags.REGISTRY.allFlags()); + public ModBlockLootTableProvider(HolderLookup.Provider provider) { + super(Set.of(), FeatureFlags.REGISTRY.allFlags(), provider); } @Override @@ -21,6 +21,6 @@ public class ModBlockLootTableProvider extends BlockLootSubProvider { @Override protected @NotNull Iterable getKnownBlocks() { - return ModBlocks.BLOCKS.getEntries().stream().map(RegistryObject::get)::iterator; + return ModBlocks.BLOCKS.getEntries().stream().map(x -> (Block)x.value())::iterator; } } diff --git a/src/main/java/dev/micle/firefly_bush_backport/data/server/ModLootTableProvider.java b/src/main/java/dev/micle/firefly_bush_backport/data/server/ModLootTableProvider.java index 4d30a38..f7f7333 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/data/server/ModLootTableProvider.java +++ b/src/main/java/dev/micle/firefly_bush_backport/data/server/ModLootTableProvider.java @@ -1,17 +1,19 @@ package dev.micle.firefly_bush_backport.data.server; import dev.micle.firefly_bush_backport.data.loot.ModBlockLootTableProvider; +import net.minecraft.core.HolderLookup; import net.minecraft.data.DataGenerator; import net.minecraft.data.loot.LootTableProvider; import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import java.util.List; import java.util.Set; +import java.util.concurrent.CompletableFuture; public class ModLootTableProvider extends LootTableProvider { - public ModLootTableProvider(DataGenerator generator) { + public ModLootTableProvider(DataGenerator generator, CompletableFuture registries) { super(generator.getPackOutput(), Set.of(), List.of( new LootTableProvider.SubProviderEntry(ModBlockLootTableProvider::new, LootContextParamSets.BLOCK) - )); + ), registries); } } diff --git a/src/main/java/dev/micle/firefly_bush_backport/data/server/ModWorldGenProvider.java b/src/main/java/dev/micle/firefly_bush_backport/data/server/ModWorldGenProvider.java index 3c9edc6..95341b8 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/data/server/ModWorldGenProvider.java +++ b/src/main/java/dev/micle/firefly_bush_backport/data/server/ModWorldGenProvider.java @@ -8,8 +8,8 @@ import net.minecraft.core.HolderLookup; import net.minecraft.core.RegistrySetBuilder; import net.minecraft.core.registries.Registries; import net.minecraft.data.DataGenerator; -import net.minecraftforge.common.data.DatapackBuiltinEntriesProvider; -import net.minecraftforge.registries.ForgeRegistries; +import net.neoforged.neoforge.common.data.DatapackBuiltinEntriesProvider; +import net.neoforged.neoforge.registries.NeoForgeRegistries; import java.util.Set; import java.util.concurrent.CompletableFuture; @@ -18,7 +18,7 @@ public class ModWorldGenProvider extends DatapackBuiltinEntriesProvider { public static final RegistrySetBuilder BUILDER = new RegistrySetBuilder() .add(Registries.CONFIGURED_FEATURE, ModConfiguredFeatures::bootstrap) .add(Registries.PLACED_FEATURE, ModPlacedFeatures::bootstrap) - .add(ForgeRegistries.Keys.BIOME_MODIFIERS, ModBiomeModifiers::bootstrap); + .add(NeoForgeRegistries.Keys.BIOME_MODIFIERS, ModBiomeModifiers::bootstrap); public ModWorldGenProvider(DataGenerator generator, CompletableFuture registries) { super(generator.getPackOutput(), registries, BUILDER, Set.of(FireflyBushBackport.MOD_ID)); diff --git a/src/main/java/dev/micle/firefly_bush_backport/event/OnWandererTradesEventHandler.java b/src/main/java/dev/micle/firefly_bush_backport/event/OnWandererTradesEventHandler.java new file mode 100644 index 0000000..3af41f0 --- /dev/null +++ b/src/main/java/dev/micle/firefly_bush_backport/event/OnWandererTradesEventHandler.java @@ -0,0 +1,14 @@ +package dev.micle.firefly_bush_backport.event; + +import dev.micle.firefly_bush_backport.item.ModItems; +import net.minecraft.world.item.ItemStack; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.neoforge.common.BasicItemListing; +import net.neoforged.neoforge.event.village.WandererTradesEvent; + +public class OnWandererTradesEventHandler { + @SubscribeEvent + public void onWandererTradesEvent(WandererTradesEvent event) { + event.getGenericTrades().add(new BasicItemListing(3, new ItemStack(ModItems.FIREFLY_BUSH, 1), 12, 1)); + } +} diff --git a/src/main/java/dev/micle/firefly_bush_backport/item/ModItems.java b/src/main/java/dev/micle/firefly_bush_backport/item/ModItems.java index 2904912..a6f0fe2 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/item/ModItems.java +++ b/src/main/java/dev/micle/firefly_bush_backport/item/ModItems.java @@ -1,15 +1,26 @@ package dev.micle.firefly_bush_backport.item; import dev.micle.firefly_bush_backport.FireflyBushBackport; +import dev.micle.firefly_bush_backport.block.ModBlocks; +import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; +import net.minecraft.world.level.block.Block; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; + +import java.util.Objects; public class ModItems { - public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, FireflyBushBackport.MOD_ID); + public static final DeferredRegister ITEMS = DeferredRegister.createItems(FireflyBushBackport.MOD_ID); + + public static final DeferredHolder FIREFLY_BUSH = registerBlock(ModBlocks.FIREFLY_BUSH); public static void register(IEventBus modEventBus) { ITEMS.register(modEventBus); } + + private static DeferredHolder registerBlock(DeferredHolder block) { + return ITEMS.register(Objects.requireNonNull(block.getId()).getPath(), () -> new BlockItem(block.get(), new Item.Properties())); + } } diff --git a/src/main/java/dev/micle/firefly_bush_backport/particle/FireflyParticle.java b/src/main/java/dev/micle/firefly_bush_backport/particle/FireflyParticle.java index d041953..f3e9e9f 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/particle/FireflyParticle.java +++ b/src/main/java/dev/micle/firefly_bush_backport/particle/FireflyParticle.java @@ -6,8 +6,8 @@ import net.minecraft.client.particle.*; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.SimpleParticleType; import net.minecraft.util.Mth; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; import org.jetbrains.annotations.NotNull; import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/dev/micle/firefly_bush_backport/particle/ModParticles.java b/src/main/java/dev/micle/firefly_bush_backport/particle/ModParticles.java index 7f1114e..5375dc3 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/particle/ModParticles.java +++ b/src/main/java/dev/micle/firefly_bush_backport/particle/ModParticles.java @@ -3,15 +3,15 @@ package dev.micle.firefly_bush_backport.particle; import dev.micle.firefly_bush_backport.FireflyBushBackport; import net.minecraft.core.particles.ParticleType; import net.minecraft.core.particles.SimpleParticleType; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; +import net.minecraft.core.registries.BuiltInRegistries; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; public class ModParticles { - public static final DeferredRegister> PARTICLE_TYPES = DeferredRegister.create(ForgeRegistries.PARTICLE_TYPES, FireflyBushBackport.MOD_ID); + public static final DeferredRegister> PARTICLE_TYPES = DeferredRegister.create(BuiltInRegistries.PARTICLE_TYPE, FireflyBushBackport.MOD_ID); - public static final RegistryObject FIREFLY = PARTICLE_TYPES.register("firefly", + public static final DeferredHolder, SimpleParticleType> FIREFLY = PARTICLE_TYPES.register("firefly", () -> new SimpleParticleType(false)); public static void register(IEventBus modEventBus) { diff --git a/src/main/java/dev/micle/firefly_bush_backport/proxy/IProxy.java b/src/main/java/dev/micle/firefly_bush_backport/proxy/IProxy.java index b325ae3..788fe8b 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/proxy/IProxy.java +++ b/src/main/java/dev/micle/firefly_bush_backport/proxy/IProxy.java @@ -4,8 +4,15 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; +import javax.annotation.Nullable; + public interface IProxy { + @Nullable MinecraftServer getServer(); + + @Nullable Player getClientPlayer(); + + @Nullable Level getClientLevel(); } diff --git a/src/main/java/dev/micle/firefly_bush_backport/proxy/Proxy.java b/src/main/java/dev/micle/firefly_bush_backport/proxy/Proxy.java index b2a190d..8d446d4 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/proxy/Proxy.java +++ b/src/main/java/dev/micle/firefly_bush_backport/proxy/Proxy.java @@ -1,8 +1,8 @@ package dev.micle.firefly_bush_backport.proxy; -import dev.micle.firefly_bush_backport.FireflyBushBackport; import dev.micle.firefly_bush_backport.block.ModBlocks; import dev.micle.firefly_bush_backport.config.Config; +import dev.micle.firefly_bush_backport.event.OnWandererTradesEventHandler; import dev.micle.firefly_bush_backport.tab.ModCreativeModeTabs; import dev.micle.firefly_bush_backport.item.ModItems; import dev.micle.firefly_bush_backport.particle.FireflyParticle; @@ -12,24 +12,23 @@ import net.minecraft.client.Minecraft; import net.minecraft.server.MinecraftServer; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.client.event.RegisterParticleProvidersEvent; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.AddReloadListenerEvent; -import net.minecraftforge.event.server.ServerStartedEvent; -import net.minecraftforge.event.server.ServerStoppingEvent; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.fml.event.lifecycle.*; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.event.lifecycle.*; +import net.neoforged.neoforge.client.event.RegisterParticleProvidersEvent; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.event.AddReloadListenerEvent; +import net.neoforged.neoforge.event.server.ServerStartedEvent; +import net.neoforged.neoforge.event.server.ServerStoppingEvent; public class Proxy implements IProxy { private static MinecraftServer server = null; // Common setup - public Proxy() { - IEventBus modEventBus = FireflyBushBackport.getFMLJavaModLoadingContext().getModEventBus(); - - Config.register(); + public Proxy(IEventBus modEventBus, ModContainer modContainer) { + Config.register(modEventBus, modContainer); ModBlocks.register(modEventBus); ModItems.register(modEventBus); ModCreativeModeTabs.register(modEventBus); @@ -42,9 +41,12 @@ public class Proxy implements IProxy { modEventBus.addListener(Proxy::imcProcess); // Register event bus listeners - MinecraftForge.EVENT_BUS.addListener(Proxy::onAddReloadListeners); - MinecraftForge.EVENT_BUS.addListener(Proxy::serverStarted); - MinecraftForge.EVENT_BUS.addListener(Proxy::serverStopping); + NeoForge.EVENT_BUS.addListener(Proxy::onAddReloadListeners); + NeoForge.EVENT_BUS.addListener(Proxy::serverStarted); + NeoForge.EVENT_BUS.addListener(Proxy::serverStopping); + + // Register event handlers + NeoForge.EVENT_BUS.register(new OnWandererTradesEventHandler()); } private static void setup(FMLCommonSetupEvent event) {} @@ -80,8 +82,8 @@ public class Proxy implements IProxy { // Client setup public static class Client extends Proxy { - public Client() { - IEventBus modEventBus = FireflyBushBackport.getFMLJavaModLoadingContext().getModEventBus(); + public Client(IEventBus modEventBus, ModContainer modContainer) { + super(modEventBus, modContainer); // Register mod event bus listeners modEventBus.addListener(Client::setup); @@ -112,9 +114,10 @@ public class Proxy implements IProxy { // Server setup public static class Server extends Proxy { - public Server() { + public Server(IEventBus modEventBus, ModContainer modContainer) { + super(modEventBus, modContainer); + // Register mod event bus listeners - IEventBus modEventBus = FireflyBushBackport.getFMLJavaModLoadingContext().getModEventBus(); modEventBus.addListener(Server::setup); } diff --git a/src/main/java/dev/micle/firefly_bush_backport/sound/ModSounds.java b/src/main/java/dev/micle/firefly_bush_backport/sound/ModSounds.java index a4dcb42..1906655 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/sound/ModSounds.java +++ b/src/main/java/dev/micle/firefly_bush_backport/sound/ModSounds.java @@ -1,23 +1,23 @@ package dev.micle.firefly_bush_backport.sound; import dev.micle.firefly_bush_backport.FireflyBushBackport; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; public class ModSounds { - public static final DeferredRegister SOUND_EVENTS = DeferredRegister.create(ForgeRegistries.SOUND_EVENTS, FireflyBushBackport.MOD_ID); + public static final DeferredRegister SOUND_EVENTS = DeferredRegister.create(BuiltInRegistries.SOUND_EVENT, FireflyBushBackport.MOD_ID); - public static final RegistryObject FIREFLY_BUSH_IDLE = registerSoundEvent("block.firefly_bush.idle"); + public static final DeferredHolder FIREFLY_BUSH_IDLE = registerSoundEvent("block.firefly_bush.idle"); public static void register(IEventBus modEventBus) { SOUND_EVENTS.register(modEventBus); } - private static RegistryObject registerSoundEvent(String name) { + private static DeferredHolder registerSoundEvent(String name) { return SOUND_EVENTS.register(name, () -> SoundEvent.createVariableRangeEvent(ResourceLocation.fromNamespaceAndPath(FireflyBushBackport.MOD_ID, name))); } } diff --git a/src/main/java/dev/micle/firefly_bush_backport/tab/ModCreativeModeTabs.java b/src/main/java/dev/micle/firefly_bush_backport/tab/ModCreativeModeTabs.java index 5fdccb9..c3f7186 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/tab/ModCreativeModeTabs.java +++ b/src/main/java/dev/micle/firefly_bush_backport/tab/ModCreativeModeTabs.java @@ -2,17 +2,17 @@ package dev.micle.firefly_bush_backport.tab; import dev.micle.firefly_bush_backport.FireflyBushBackport; import dev.micle.firefly_bush_backport.block.ModBlocks; -import net.minecraft.core.registries.Registries; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.Component; import net.minecraft.world.item.CreativeModeTab; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.RegistryObject; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; public class ModCreativeModeTabs { - public static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, FireflyBushBackport.MOD_ID); + public static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(BuiltInRegistries.CREATIVE_MODE_TAB, FireflyBushBackport.MOD_ID); - public static final RegistryObject MAIN_TAB = CREATIVE_MODE_TABS.register( "main", + public static final DeferredHolder MAIN_TAB = CREATIVE_MODE_TABS.register( "main", () -> CreativeModeTab.builder() .title(Component.translatable(String.format("itemGroup.%s.main", FireflyBushBackport.MOD_ID))) .icon(ModBlocks.FIREFLY_BUSH.get().asItem()::getDefaultInstance) diff --git a/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModBiomeModifiers.java b/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModBiomeModifiers.java index 49f640a..9d15f78 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModBiomeModifiers.java +++ b/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModBiomeModifiers.java @@ -4,17 +4,17 @@ import dev.micle.firefly_bush_backport.FireflyBushBackport; import net.minecraft.core.HolderGetter; 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.world.level.biome.Biome; import net.minecraft.world.level.levelgen.GenerationStep; import net.minecraft.world.level.levelgen.placement.PlacedFeature; -import net.minecraftforge.common.Tags; -import net.minecraftforge.common.world.BiomeModifier; -import net.minecraftforge.common.world.ForgeBiomeModifiers; -import net.minecraftforge.registries.ForgeRegistries; +import net.neoforged.neoforge.common.Tags; +import net.neoforged.neoforge.common.world.BiomeModifier; +import net.neoforged.neoforge.common.world.BiomeModifiers; +import net.neoforged.neoforge.registries.NeoForgeRegistries; import java.util.Set; @@ -24,29 +24,29 @@ public class ModBiomeModifiers { public static final ResourceKey ADD_PATCH_FIREFLY_BUSH_NEAR_WATER = registerKey("add_patch_firefly_bush_near_water"); public static final ResourceKey REMOVE_PATCH_FIREFLY_BUSH_NEAR_WATER = registerKey("remove_patch_firefly_bush_near_water"); - public static void bootstrap(BootstapContext context) { + public static void bootstrap(BootstrapContext context) { HolderGetter placedFeatures = context.lookup(Registries.PLACED_FEATURE); HolderGetter biomes = context.lookup(Registries.BIOME); - context.register(ADD_PATCH_FIREFLY_BUSH_SWAMP, new ForgeBiomeModifiers.AddFeaturesBiomeModifier( + context.register(ADD_PATCH_FIREFLY_BUSH_SWAMP, new BiomeModifiers.AddFeaturesBiomeModifier( biomes.getOrThrow(Tags.Biomes.IS_SWAMP), HolderSet.direct(placedFeatures.getOrThrow(ModPlacedFeatures.PATCH_FIREFLY_BUSH_SWAMP_PLACED_KEY)), GenerationStep.Decoration.VEGETAL_DECORATION )); - context.register(ADD_PATCH_FIREFLY_BUSH_NEAR_WATER_SWAMP, new ForgeBiomeModifiers.AddFeaturesBiomeModifier( + context.register(ADD_PATCH_FIREFLY_BUSH_NEAR_WATER_SWAMP, new BiomeModifiers.AddFeaturesBiomeModifier( biomes.getOrThrow(Tags.Biomes.IS_SWAMP), HolderSet.direct(placedFeatures.getOrThrow(ModPlacedFeatures.PATCH_FIREFLY_BUSH_NEAR_WATER_SWAMP_PLACED_KEY)), GenerationStep.Decoration.VEGETAL_DECORATION )); - context.register(ADD_PATCH_FIREFLY_BUSH_NEAR_WATER, new ForgeBiomeModifiers.AddFeaturesBiomeModifier( + context.register(ADD_PATCH_FIREFLY_BUSH_NEAR_WATER, new BiomeModifiers.AddFeaturesBiomeModifier( biomes.getOrThrow(BiomeTags.IS_OVERWORLD), HolderSet.direct(placedFeatures.getOrThrow(ModPlacedFeatures.PATCH_FIREFLY_BUSH_NEAR_WATER_PLACED_KEY)), GenerationStep.Decoration.VEGETAL_DECORATION )); - context.register(REMOVE_PATCH_FIREFLY_BUSH_NEAR_WATER, new ForgeBiomeModifiers.RemoveFeaturesBiomeModifier( + context.register(REMOVE_PATCH_FIREFLY_BUSH_NEAR_WATER, new BiomeModifiers.RemoveFeaturesBiomeModifier( biomes.getOrThrow(Tags.Biomes.IS_SWAMP), HolderSet.direct(placedFeatures.getOrThrow(ModPlacedFeatures.PATCH_FIREFLY_BUSH_NEAR_WATER_PLACED_KEY)), Set.of(GenerationStep.Decoration.VEGETAL_DECORATION) @@ -54,6 +54,6 @@ public class ModBiomeModifiers { } private static ResourceKey registerKey(String name) { - return ResourceKey.create(ForgeRegistries.Keys.BIOME_MODIFIERS, ResourceLocation.fromNamespaceAndPath(FireflyBushBackport.MOD_ID, name)); + return ResourceKey.create(NeoForgeRegistries.Keys.BIOME_MODIFIERS, ResourceLocation.fromNamespaceAndPath(FireflyBushBackport.MOD_ID, name)); } } diff --git a/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModConfiguredFeatures.java b/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModConfiguredFeatures.java index 66849da..c35f6a1 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModConfiguredFeatures.java +++ b/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModConfiguredFeatures.java @@ -3,7 +3,7 @@ package dev.micle.firefly_bush_backport.worldgen; import dev.micle.firefly_bush_backport.FireflyBushBackport; import dev.micle.firefly_bush_backport.block.ModBlocks; import net.minecraft.core.registries.Registries; -import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.data.worldgen.BootstrapContext; import net.minecraft.data.worldgen.placement.PlacementUtils; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; @@ -17,7 +17,7 @@ import net.minecraft.world.level.levelgen.feature.stateproviders.SimpleStateProv public class ModConfiguredFeatures { public static final ResourceKey> PATCH_FIREFLY_BUSH_KEY = registerKey("patch_firefly_bush"); - public static void bootstrap(BootstapContext> context) { + public static void bootstrap(BootstrapContext> context) { register(context, PATCH_FIREFLY_BUSH_KEY, Feature.RANDOM_PATCH, new RandomPatchConfiguration( 20, 4, @@ -36,7 +36,7 @@ public class ModConfiguredFeatures { } private static > void register( - BootstapContext> context, + BootstrapContext> context, ResourceKey> key, F feature, FC configuration ) { context.register(key, new ConfiguredFeature<>(feature, configuration)); diff --git a/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModPlacedFeatures.java b/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModPlacedFeatures.java index c7a3094..79f052e 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModPlacedFeatures.java +++ b/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModPlacedFeatures.java @@ -6,7 +6,7 @@ import net.minecraft.core.Holder; import net.minecraft.core.HolderGetter; import net.minecraft.core.Vec3i; import net.minecraft.core.registries.Registries; -import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.data.worldgen.BootstrapContext; import net.minecraft.data.worldgen.placement.PlacementUtils; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; @@ -24,7 +24,7 @@ public class ModPlacedFeatures { public static final ResourceKey PATCH_FIREFLY_BUSH_NEAR_WATER_SWAMP_PLACED_KEY = registerKey("patch_firefly_bush_near_water_swamp"); public static final ResourceKey PATCH_FIREFLY_BUSH_NEAR_WATER_PLACED_KEY = registerKey("patch_firefly_bush_near_water"); - public static void bootstrap(BootstapContext context) { + public static void bootstrap(BootstrapContext context) { HolderGetter> configuredFeatures = context.lookup(Registries.CONFIGURED_FEATURE); register(context, PATCH_FIREFLY_BUSH_SWAMP_PLACED_KEY, configuredFeatures.getOrThrow(ModConfiguredFeatures.PATCH_FIREFLY_BUSH_KEY), List.of( @@ -73,7 +73,7 @@ public class ModPlacedFeatures { return ResourceKey.create(Registries.PLACED_FEATURE, ResourceLocation.fromNamespaceAndPath(FireflyBushBackport.MOD_ID, name)); } - private static void register(BootstapContext context, ResourceKey key, Holder> configuration, List modifiers) { + private static void register(BootstrapContext context, ResourceKey key, Holder> configuration, List modifiers) { context.register(key, new PlacedFeature(configuration, List.copyOf(modifiers))); } } diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml deleted file mode 100644 index 2430641..0000000 --- a/src/main/resources/META-INF/mods.toml +++ /dev/null @@ -1,30 +0,0 @@ -modLoader = "javafml" -loaderVersion = "${loader_version_range}" -license = "${mod_license}" -issueTrackerURL="https://gitea.micle.dev/minecraft-mods/firefly_bush_backport/issues" - -[[mods]] -modId = "${mod_id}" -version = "${mod_version}" -displayName = "${mod_name}" -#updateJSONURL="https://change.me.example.invalid/updates.json" # https://docs.minecraftforge.net/en/latest/misc/updatechecker/ -#displayURL="https://change.me.to.your.mods.homepage.example.invalid/" -logoFile="logo.jpg" -#credits="" -authors = "${mod_authors}" -displayTest="MATCH_VERSION" # MATCH_VERSION, IGNORE_SERVER_VERSION (server only), IGNORE_ALL_VERSION (client only), NONE (IExtensionPoint.DisplayTest) -description = '''${mod_description}''' - -[[dependencies."${mod_id}"]] -modId = "forge" -mandatory = true -versionRange = "${forge_version_range}" -ordering = "NONE" # BEFORE, AFTER, NONE -side = "BOTH" # BOTH, CLIENT, SERVER - -[[dependencies."${mod_id}"]] -modId = "minecraft" -mandatory = true -versionRange = "${minecraft_version_range}" -ordering = "NONE" -side = "BOTH" diff --git a/src/main/resources/META-INF/neoforge.mods.toml b/src/main/resources/META-INF/neoforge.mods.toml new file mode 100644 index 0000000..b014006 --- /dev/null +++ b/src/main/resources/META-INF/neoforge.mods.toml @@ -0,0 +1,44 @@ +modLoader = "javafml" +loaderVersion = "${loader_version_range}" +license = "${mod_license}" +issueTrackerURL="https://gitea.micle.dev/minecraft-mods/firefly_bush_backport/issues" + +[[mods]] +modId = "${mod_id}" +version = "${mod_version}" +displayName = "${mod_name}" +#updateJSONURL="https://change.me.example.invalid/updates.json" # https://docs.minecraftforge.net/en/latest/misc/updatechecker/ +#displayURL="https://change.me.to.your.mods.homepage.example.invalid/" +logoFile="logo.png" +#credits="" +authors = "${mod_authors}" +description = '''${mod_description}''' + +#[[mixins]] +#config = "${mod_id}.mixins.json" + +#[[accessTransformers]] +#file = "META-INF/accesstransformer.cfg" + +[[dependencies."${mod_id}"]] + modId = "neoforge" + # The type of the dependency. Can be one of "required", "optional", "incompatible" or "discouraged" (case insensitive). + # 'required' requires the mod to exist, 'optional' does not + # 'incompatible' will prevent the game from loading when the mod exists, and 'discouraged' will show a warning" + type = "required" + versionRange = "${neo_version_range}" + ordering = "NONE" # BEFORE, AFTER, NONE + side = "BOTH" # BOTH, CLIENT, SERVER + +[[dependencies."${mod_id}"]] + modId = "minecraft" + type = "required" + versionRange = "${minecraft_version_range}" + ordering = "NONE" + side = "BOTH" + +# Features are specific properties of the game environment, that you may want to declare you require. This example declares +# that your mod requires GL version 3.2 or higher. Other features will be added. They are side aware so declaring this won't +# stop your mod loading on the server for example. +#[features.${mod_id}] +#openGLVersion = "[3.2,)" \ No newline at end of file diff --git a/src/main/resources/logo.jpg b/src/main/resources/logo.jpg deleted file mode 100644 index 435a6cc..0000000 --- a/src/main/resources/logo.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3b1aaab2288a8be7f5d4d2b9c2599df7093afa75c6295554eba2c226ef01a9e7 -size 39868 diff --git a/src/main/resources/logo.png b/src/main/resources/logo.png new file mode 100644 index 0000000..72e23d8 --- /dev/null +++ b/src/main/resources/logo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d5d002aa88f4bbd76ff2e9579ed39c0d025273f2bab98ab58b8ebfc4be1febb +size 198514