6 Commits

38 changed files with 296 additions and 447 deletions

BIN
assets/images/web/logo.png (Stored with Git LFS)

Binary file not shown.

View File

@ -1,191 +1,134 @@
plugins {
id 'java-library'
id 'maven-publish'
id 'net.neoforged.moddev' version '2.0.137'
id 'idea'
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'
}
}
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
plugins {
id 'eclipse'
id 'idea'
id 'net.minecraftforge.gradle' version '[6.0.16,6.2)'
id 'org.parchmentmc.librarian.forgegradle' version '1.+'
}
apply plugin: 'org.spongepowered.mixin'
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(21)
toolchain.languageVersion = JavaLanguageVersion.of(17)
}
neoForge {
// Specify the version of NeoForge to use.
version = project.neo_version
minecraft {
mappings channel: mapping_channel, version: "$mapping_version-$minecraft_version"
parchment {
mappingsVersion = project.parchment_mappings_version
minecraftVersion = project.parchment_minecraft_version
copyIdeResources = true
// generateRunFolders = true
// accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') // https://docs.minecraftforge.net/en/latest/advanced/accesstransformers/
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
}
}
}
// 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 {
client {
client()
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
property 'forge.enabledGameTestNamespaces', mod_id
}
server {
server()
programArgument '--nogui'
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
property 'forge.enabledGameTestNamespaces', mod_id
args '--nogui'
}
// 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 {
type = "gameTestServer"
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
property 'forge.enabledGameTestNamespaces', mod_id
}
data {
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)
workingDirectory project.file('run-data')
args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
}
}
}
// Include resources generated by data generators.
mixin {
add sourceSets.main, "${mod_id}.refmap.json"
config "${mod_id}.mixins.json"
}
sourceSets.main.resources {
srcDir 'src/generated/resources'
}
// 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
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"
}
}
}
dependencies {
// 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
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
annotationProcessor 'org.spongepowered:mixin:0.8.5:processor'
}
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/neoforge.mods.toml']) {
expand replaceProperties
filesMatching(['META-INF/mods.toml', 'pack.mcmeta']) {
expand replaceProperties + [project: project]
}
}
// 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"
}
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")])
}
finalizedBy 'reobfJar'
}
tasks.withType(JavaCompile).configureEach {
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
}
options.encoding = 'UTF-8'
}

View File

@ -1,8 +1,5 @@
org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.caching=true
org.gradle.configuration-cache=true
org.gradle.daemon=false
mod_id=firefly_bush_backport
mod_name=Firefly Bush Backport
@ -12,12 +9,12 @@ mod_group_id=dev.micle
mod_authors=Micle
mod_description=Firefly bush backport from 1.21.5.
minecraft_version=1.21.1
minecraft_version_range=[1.21.1,1.22)
minecraft_version=1.20.1
minecraft_version_range=[1.20.1,1.21)
neo_version=21.1.228
neo_version_range=[21.1.228,21.2)
loader_version_range=[1,)
forge_version=47.4.0
forge_version_range=[47,)
loader_version_range=[47,)
parchment_minecraft_version=1.21.1
parchment_mappings_version=2024.11.17
mapping_channel=parchment
mapping_version=2023.09.03

View File

@ -1,7 +1 @@
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
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip

View File

@ -10,7 +10,7 @@ pluginManagement {
}
plugins {
id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0'
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.7.0'
}
rootProject.name = "${mod_id}-${minecraft_version}"

View File

@ -1,5 +1,5 @@
{
"type": "neoforge:add_features",
"type": "forge:add_features",
"biomes": "#minecraft:is_overworld",
"features": "firefly_bush_backport:patch_firefly_bush_near_water",
"step": "vegetal_decoration"

View File

@ -1,6 +1,6 @@
{
"type": "neoforge:add_features",
"biomes": "#c:is_swamp",
"type": "forge:add_features",
"biomes": "#forge:is_swamp",
"features": "firefly_bush_backport:patch_firefly_bush_near_water_swamp",
"step": "vegetal_decoration"
}

View File

@ -1,6 +1,6 @@
{
"type": "neoforge:add_features",
"biomes": "#c:is_swamp",
"type": "forge:add_features",
"biomes": "#forge:is_swamp",
"features": "firefly_bush_backport:patch_firefly_bush_swamp",
"step": "vegetal_decoration"
}

View File

@ -1,6 +1,6 @@
{
"type": "neoforge:remove_features",
"biomes": "#c:is_swamp",
"type": "forge:remove_features",
"biomes": "#forge:is_swamp",
"features": "firefly_bush_backport:patch_firefly_bush_near_water",
"steps": "vegetal_decoration"
}

View File

@ -1,7 +0,0 @@
{
"values": {
"firefly_bush_backport:firefly_bush": {
"chance": 0.3
}
}
}

View File

@ -3,46 +3,28 @@ 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.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 net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
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(IEventBus modEventBus, ModContainer modContainer) {
proxy = FMLEnvironment.dist == Dist.CLIENT
? new Proxy.Client(modEventBus, modContainer)
: new Proxy.Server(modEventBus, modContainer);
public FireflyBushBackport(FMLJavaModLoadingContext context) {
fmlJavaModLoadingContext = context;
proxy = DistExecutor.safeRunForDist(
() -> Proxy.Client::new,
() -> Proxy.Server::new
);
}
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<? extends ModContainer> 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;
public static FMLJavaModLoadingContext getFMLJavaModLoadingContext() {
return fmlJavaModLoadingContext;
}
}

View File

@ -1,6 +1,5 @@
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;
@ -15,25 +14,16 @@ 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<FireflyBushBlock> CODEC = simpleCodec(FireflyBushBlock::new);
public FireflyBushBlock(Properties properties) {
super(properties);
}
@Override
@NotNull
protected MapCodec<? extends BushBlock> codec() {
return CODEC;
}
@Override
@ParametersAreNonnullByDefault
public void animateTick(BlockState blockState, Level level, BlockPos blockPos, RandomSource randomSource) {
@ -68,7 +58,7 @@ public class FireflyBushBlock extends BushBlock implements BonemealableBlock {
@Override
@ParametersAreNonnullByDefault
public boolean isValidBonemealTarget(LevelReader level, BlockPos blockPos, BlockState blockState) {
public boolean isValidBonemealTarget(LevelReader level, BlockPos blockPos, BlockState blockState, boolean isClient) {
return hasSpreadableNeighbourPos(level, blockPos, blockState);
}

View File

@ -6,14 +6,15 @@ 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.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredRegister;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
public class ModBlocks {
public static final DeferredRegister<Block> BLOCKS = DeferredRegister.createBlocks(FireflyBushBackport.MOD_ID);
public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, FireflyBushBackport.MOD_ID);
public static DeferredHolder<Block, FireflyBushBlock> FIREFLY_BUSH = BLOCKS.register("firefly_bush",
public static RegistryObject<Block> FIREFLY_BUSH = BLOCKS.register("firefly_bush",
() -> new FireflyBushBlock(BlockBehaviour.Properties.of()
.mapColor(MapColor.PLANT)
.ignitedByLava()

View File

@ -1,46 +1,45 @@
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.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 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 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 ModConfigSpec CLIENT_SPEC;
public static final ForgeConfigSpec CLIENT_SPEC;
public static final Common COMMON;
public static final ModConfigSpec COMMON_SPEC;
public static final ForgeConfigSpec COMMON_SPEC;
public static final Server SERVER;
public static final ModConfigSpec SERVER_SPEC;
public static final ForgeConfigSpec SERVER_SPEC;
static {
Pair<Client, ModConfigSpec> clientSpecPair = new ModConfigSpec.Builder().configure(Client::new);
Pair<Client, ForgeConfigSpec> clientSpecPair = new ForgeConfigSpec.Builder().configure(Client::new);
CLIENT = clientSpecPair.getLeft();
CLIENT_SPEC = clientSpecPair.getRight();
Pair<Common, ModConfigSpec> commonSpecPair = new ModConfigSpec.Builder().configure(Common::new);
Pair<Common, ForgeConfigSpec> commonSpecPair = new ForgeConfigSpec.Builder().configure(Common::new);
COMMON = commonSpecPair.getLeft();
COMMON_SPEC = commonSpecPair.getRight();
Pair<Server, ModConfigSpec> serverSpecPair = new ModConfigSpec.Builder().configure(Server::new);
Pair<Server, ForgeConfigSpec> serverSpecPair = new ForgeConfigSpec.Builder().configure(Server::new);
SERVER = serverSpecPair.getLeft();
SERVER_SPEC = serverSpecPair.getRight();
}
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);
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);
}
@SubscribeEvent
@ -55,29 +54,29 @@ public final class Config {
}
public static class Client {
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.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.BooleanValue bushExtraAlwaysPlayAmbientSound;
public static ModConfigSpec.BooleanValue bushExtraAlwaysSpawnParticles;
public static ForgeConfigSpec.BooleanValue bushExtraAlwaysPlayAmbientSound;
public static ForgeConfigSpec.BooleanValue bushExtraAlwaysSpawnParticles;
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 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 particleExtraFriction;
public static ModConfigSpec.DoubleValue particleExtraScale;
public static ModConfigSpec.DoubleValue particleExtraBrightness;
private static ModConfigSpec.ConfigValue<List<? extends String>> particleExtraColors;
public static ForgeConfigSpec.DoubleValue particleExtraFriction;
public static ForgeConfigSpec.DoubleValue particleExtraScale;
public static ForgeConfigSpec.DoubleValue particleExtraBrightness;
private static ForgeConfigSpec.ConfigValue<List<? extends String>> particleExtraColors;
public static SimpleWeightedRandomList<Color> particleExtraColorsWeightedList;
Client(ModConfigSpec.Builder builder) {
Client(ForgeConfigSpec.Builder builder) {
builder.comment("Settings for the firefly bush.").push("bush");
bushFireflyChancePerTick = builder
.defineInRange("bushFireflyChancePerTick", 0.7, 0, 1);
@ -121,7 +120,7 @@ public final class Config {
.defineInRange("particleExtraBrightness", 255.0, 0, 255);
particleExtraColors = builder
.comment("List of color hex values and their weight. Format: '<color_hex>,<weight>'")
.defineList("particleExtraColors", List.of(getDefaultColorEntry()), Client::getDefaultColorEntry, Client::isValidColorEntry);
.defineList("particleExtraColors", List.of("#ffffff,1"), Client::isValidColorEntry);
builder.pop();
builder.pop();
}
@ -138,20 +137,16 @@ 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(ModConfigSpec.Builder builder) {}
Common(ForgeConfigSpec.Builder builder) {}
private static void onConfigReload() {}
}
public static class Server {
Server(ModConfigSpec.Builder builder) {}
Server(ForgeConfigSpec.Builder builder) {}
private static void onConfigReload() {}
}

View File

@ -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.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 net.minecraftforge.common.data.ExistingFileHelper;
import net.minecraftforge.data.event.GatherDataEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import java.util.concurrent.CompletableFuture;
@EventBusSubscriber
@Mod.EventBusSubscriber(modid = FireflyBushBackport.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
public class DataGenerators {
@SubscribeEvent
public static void gatherData(GatherDataEvent event) {
@ -26,9 +26,8 @@ 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, lookupProvider));
generator.addProvider(event.includeServer(), new ModLootTableProvider(generator));
generator.addProvider(event.includeServer(), new ModWorldGenProvider(generator, lookupProvider));
}
}

View File

@ -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.neoforged.neoforge.client.model.generators.BlockStateProvider;
import net.neoforged.neoforge.common.data.ExistingFileHelper;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.minecraftforge.client.model.generators.BlockStateProvider;
import net.minecraftforge.common.data.ExistingFileHelper;
import net.minecraftforge.registries.RegistryObject;
import java.util.Objects;
@ -21,7 +21,7 @@ public class ModBlockStateProvider extends BlockStateProvider {
crossEmissiveBlock(ModBlocks.FIREFLY_BUSH);
}
private void crossEmissiveBlock(DeferredHolder<Block, ? extends Block> block) {
private void crossEmissiveBlock(RegistryObject<Block> block) {
String name = Objects.requireNonNull(block.getId()).getPath();
simpleBlock(block.get(), models()
.withExistingParent(name, ResourceLocation.fromNamespaceAndPath(FireflyBushBackport.MOD_ID, "block/cross_emissive"))

View File

@ -1,24 +0,0 @@
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<HolderLookup.Provider> 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);
}
}

View File

@ -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.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 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 java.util.Objects;
@ -21,11 +21,11 @@ public class ModItemModelProvider extends ItemModelProvider {
@Override
protected void registerModels() {
ModBlocks.BLOCKS.getEntries().stream().map(DeferredHolder::get).forEach(this::blockItemModel);
ModBlocks.BLOCKS.getEntries().stream().map(RegistryObject::get).forEach(this::blockItemModel);
}
private void blockItemModel(Block block) {
String name = Objects.requireNonNull(BuiltInRegistries.BLOCK.getKey(block)).getPath();
String name = Objects.requireNonNull(ForgeRegistries.BLOCKS.getKey(block)).getPath();
if (block == ModBlocks.FIREFLY_BUSH.get()) {
builder(getExistingFile(mcLoc("item/generated")), name);

View File

@ -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.neoforged.neoforge.common.data.ExistingFileHelper;
import net.neoforged.neoforge.common.data.SoundDefinitionsProvider;
import net.minecraftforge.common.data.ExistingFileHelper;
import net.minecraftforge.common.data.SoundDefinitionsProvider;
public class ModSoundDefinitionsProvider extends SoundDefinitionsProvider {
public ModSoundDefinitionsProvider(DataGenerator generator, ExistingFileHelper existingFileHelper) {

View File

@ -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(HolderLookup.Provider provider) {
super(Set.of(), FeatureFlags.REGISTRY.allFlags(), provider);
public ModBlockLootTableProvider() {
super(Set.of(), FeatureFlags.REGISTRY.allFlags());
}
@Override
@ -21,6 +21,6 @@ public class ModBlockLootTableProvider extends BlockLootSubProvider {
@Override
protected @NotNull Iterable<Block> getKnownBlocks() {
return ModBlocks.BLOCKS.getEntries().stream().map(x -> (Block)x.value())::iterator;
return ModBlocks.BLOCKS.getEntries().stream().map(RegistryObject::get)::iterator;
}
}

View File

@ -1,19 +1,17 @@
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, CompletableFuture<HolderLookup.Provider> registries) {
public ModLootTableProvider(DataGenerator generator) {
super(generator.getPackOutput(), Set.of(), List.of(
new LootTableProvider.SubProviderEntry(ModBlockLootTableProvider::new, LootContextParamSets.BLOCK)
), registries);
));
}
}

View File

@ -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.neoforged.neoforge.common.data.DatapackBuiltinEntriesProvider;
import net.neoforged.neoforge.registries.NeoForgeRegistries;
import net.minecraftforge.common.data.DatapackBuiltinEntriesProvider;
import net.minecraftforge.registries.ForgeRegistries;
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(NeoForgeRegistries.Keys.BIOME_MODIFIERS, ModBiomeModifiers::bootstrap);
.add(ForgeRegistries.Keys.BIOME_MODIFIERS, ModBiomeModifiers::bootstrap);
public ModWorldGenProvider(DataGenerator generator, CompletableFuture<HolderLookup.Provider> registries) {
super(generator.getPackOutput(), registries, BUILDER, Set.of(FireflyBushBackport.MOD_ID));

View File

@ -2,13 +2,13 @@ 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;
import net.minecraftforge.common.BasicItemListing;
import net.minecraftforge.event.village.WandererTradesEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
public class OnWandererTradesEventHandler {
@SubscribeEvent
public void onWandererTradesEvent(WandererTradesEvent event) {
event.getGenericTrades().add(new BasicItemListing(3, new ItemStack(ModItems.FIREFLY_BUSH, 1), 12, 1));
event.getGenericTrades().add(new BasicItemListing(3, new ItemStack(ModItems.FIREFLY_BUSH.get(), 1), 12, 1));
}
}

View File

@ -5,22 +5,23 @@ import dev.micle.firefly_bush_backport.block.ModBlocks;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;
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 net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import java.util.Objects;
public class ModItems {
public static final DeferredRegister<Item> ITEMS = DeferredRegister.createItems(FireflyBushBackport.MOD_ID);
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, FireflyBushBackport.MOD_ID);
public static final DeferredHolder<Item, BlockItem> FIREFLY_BUSH = registerBlock(ModBlocks.FIREFLY_BUSH);
public static final RegistryObject<BlockItem> FIREFLY_BUSH = registerBlock(ModBlocks.FIREFLY_BUSH);
public static void register(IEventBus modEventBus) {
ITEMS.register(modEventBus);
}
private static <T extends Block> DeferredHolder<Item, BlockItem> registerBlock(DeferredHolder<Block, T> block) {
private static RegistryObject<BlockItem> registerBlock(RegistryObject<Block> block) {
return ITEMS.register(Objects.requireNonNull(block.getId()).getPath(), () -> new BlockItem(block.get(), new Item.Properties()));
}
}

View File

@ -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.neoforged.api.distmarker.Dist;
import net.neoforged.api.distmarker.OnlyIn;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import org.jetbrains.annotations.NotNull;
import javax.annotation.ParametersAreNonnullByDefault;

View File

@ -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.minecraft.core.registries.BuiltInRegistries;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredRegister;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
public class ModParticles {
public static final DeferredRegister<ParticleType<?>> PARTICLE_TYPES = DeferredRegister.create(BuiltInRegistries.PARTICLE_TYPE, FireflyBushBackport.MOD_ID);
public static final DeferredRegister<ParticleType<?>> PARTICLE_TYPES = DeferredRegister.create(ForgeRegistries.PARTICLE_TYPES, FireflyBushBackport.MOD_ID);
public static final DeferredHolder<ParticleType<?>, SimpleParticleType> FIREFLY = PARTICLE_TYPES.register("firefly",
public static final RegistryObject<SimpleParticleType> FIREFLY = PARTICLE_TYPES.register("firefly",
() -> new SimpleParticleType(false));
public static void register(IEventBus modEventBus) {

View File

@ -4,15 +4,8 @@ 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();
}

View File

@ -1,5 +1,6 @@
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;
@ -12,23 +13,25 @@ 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.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;
import net.minecraft.world.level.block.ComposterBlock;
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.*;
public class Proxy implements IProxy {
private static MinecraftServer server = null;
// Common setup
public Proxy(IEventBus modEventBus, ModContainer modContainer) {
Config.register(modEventBus, modContainer);
public Proxy() {
IEventBus modEventBus = FireflyBushBackport.getFMLJavaModLoadingContext().getModEventBus();
Config.register();
ModBlocks.register(modEventBus);
ModItems.register(modEventBus);
ModCreativeModeTabs.register(modEventBus);
@ -41,15 +44,17 @@ public class Proxy implements IProxy {
modEventBus.addListener(Proxy::imcProcess);
// Register event bus listeners
NeoForge.EVENT_BUS.addListener(Proxy::onAddReloadListeners);
NeoForge.EVENT_BUS.addListener(Proxy::serverStarted);
NeoForge.EVENT_BUS.addListener(Proxy::serverStopping);
MinecraftForge.EVENT_BUS.addListener(Proxy::onAddReloadListeners);
MinecraftForge.EVENT_BUS.addListener(Proxy::serverStarted);
MinecraftForge.EVENT_BUS.addListener(Proxy::serverStopping);
// Register event handlers
NeoForge.EVENT_BUS.register(new OnWandererTradesEventHandler());
MinecraftForge.EVENT_BUS.register(new OnWandererTradesEventHandler());
}
private static void setup(FMLCommonSetupEvent event) {}
private static void setup(FMLCommonSetupEvent event) {
ComposterBlock.COMPOSTABLES.put(ModItems.FIREFLY_BUSH.get().asItem(), 0.3F);
}
private static void imcEnqueue(InterModEnqueueEvent event) {}
@ -82,8 +87,8 @@ public class Proxy implements IProxy {
// Client setup
public static class Client extends Proxy {
public Client(IEventBus modEventBus, ModContainer modContainer) {
super(modEventBus, modContainer);
public Client() {
IEventBus modEventBus = FireflyBushBackport.getFMLJavaModLoadingContext().getModEventBus();
// Register mod event bus listeners
modEventBus.addListener(Client::setup);
@ -114,10 +119,9 @@ public class Proxy implements IProxy {
// Server setup
public static class Server extends Proxy {
public Server(IEventBus modEventBus, ModContainer modContainer) {
super(modEventBus, modContainer);
public Server() {
// Register mod event bus listeners
IEventBus modEventBus = FireflyBushBackport.getFMLJavaModLoadingContext().getModEventBus();
modEventBus.addListener(Server::setup);
}

View File

@ -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.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredRegister;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
public class ModSounds {
public static final DeferredRegister<SoundEvent> SOUND_EVENTS = DeferredRegister.create(BuiltInRegistries.SOUND_EVENT, FireflyBushBackport.MOD_ID);
public static final DeferredRegister<SoundEvent> SOUND_EVENTS = DeferredRegister.create(ForgeRegistries.SOUND_EVENTS, FireflyBushBackport.MOD_ID);
public static final DeferredHolder<SoundEvent, SoundEvent> FIREFLY_BUSH_IDLE = registerSoundEvent("block.firefly_bush.idle");
public static final RegistryObject<SoundEvent> FIREFLY_BUSH_IDLE = registerSoundEvent("block.firefly_bush.idle");
public static void register(IEventBus modEventBus) {
SOUND_EVENTS.register(modEventBus);
}
private static DeferredHolder<SoundEvent, SoundEvent> registerSoundEvent(String name) {
private static RegistryObject<SoundEvent> registerSoundEvent(String name) {
return SOUND_EVENTS.register(name, () -> SoundEvent.createVariableRangeEvent(ResourceLocation.fromNamespaceAndPath(FireflyBushBackport.MOD_ID, name)));
}
}

View File

@ -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.BuiltInRegistries;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.CreativeModeTab;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredRegister;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.RegistryObject;
public class ModCreativeModeTabs {
public static final DeferredRegister<CreativeModeTab> CREATIVE_MODE_TABS = DeferredRegister.create(BuiltInRegistries.CREATIVE_MODE_TAB, FireflyBushBackport.MOD_ID);
public static final DeferredRegister<CreativeModeTab> CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, FireflyBushBackport.MOD_ID);
public static final DeferredHolder<CreativeModeTab, CreativeModeTab> MAIN_TAB = CREATIVE_MODE_TABS.register( "main",
public static final RegistryObject<CreativeModeTab> 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)

View File

@ -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.BootstrapContext;
import net.minecraft.data.worldgen.BootstapContext;
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.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 net.minecraftforge.common.Tags;
import net.minecraftforge.common.world.BiomeModifier;
import net.minecraftforge.common.world.ForgeBiomeModifiers;
import net.minecraftforge.registries.ForgeRegistries;
import java.util.Set;
@ -24,29 +24,29 @@ public class ModBiomeModifiers {
public static final ResourceKey<BiomeModifier> ADD_PATCH_FIREFLY_BUSH_NEAR_WATER = registerKey("add_patch_firefly_bush_near_water");
public static final ResourceKey<BiomeModifier> REMOVE_PATCH_FIREFLY_BUSH_NEAR_WATER = registerKey("remove_patch_firefly_bush_near_water");
public static void bootstrap(BootstrapContext<BiomeModifier> context) {
public static void bootstrap(BootstapContext<BiomeModifier> context) {
HolderGetter<PlacedFeature> placedFeatures = context.lookup(Registries.PLACED_FEATURE);
HolderGetter<Biome> biomes = context.lookup(Registries.BIOME);
context.register(ADD_PATCH_FIREFLY_BUSH_SWAMP, new BiomeModifiers.AddFeaturesBiomeModifier(
context.register(ADD_PATCH_FIREFLY_BUSH_SWAMP, new ForgeBiomeModifiers.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 BiomeModifiers.AddFeaturesBiomeModifier(
context.register(ADD_PATCH_FIREFLY_BUSH_NEAR_WATER_SWAMP, new ForgeBiomeModifiers.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 BiomeModifiers.AddFeaturesBiomeModifier(
context.register(ADD_PATCH_FIREFLY_BUSH_NEAR_WATER, new ForgeBiomeModifiers.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 BiomeModifiers.RemoveFeaturesBiomeModifier(
context.register(REMOVE_PATCH_FIREFLY_BUSH_NEAR_WATER, new ForgeBiomeModifiers.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<BiomeModifier> registerKey(String name) {
return ResourceKey.create(NeoForgeRegistries.Keys.BIOME_MODIFIERS, ResourceLocation.fromNamespaceAndPath(FireflyBushBackport.MOD_ID, name));
return ResourceKey.create(ForgeRegistries.Keys.BIOME_MODIFIERS, ResourceLocation.fromNamespaceAndPath(FireflyBushBackport.MOD_ID, name));
}
}

View File

@ -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.BootstrapContext;
import net.minecraft.data.worldgen.BootstapContext;
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<ConfiguredFeature<?, ?>> PATCH_FIREFLY_BUSH_KEY = registerKey("patch_firefly_bush");
public static void bootstrap(BootstrapContext<ConfiguredFeature<?, ?>> context) {
public static void bootstrap(BootstapContext<ConfiguredFeature<?, ?>> context) {
register(context, PATCH_FIREFLY_BUSH_KEY, Feature.RANDOM_PATCH, new RandomPatchConfiguration(
20,
4,
@ -36,7 +36,7 @@ public class ModConfiguredFeatures {
}
private static <FC extends FeatureConfiguration, F extends Feature<FC>> void register(
BootstrapContext<ConfiguredFeature<?, ?>> context,
BootstapContext<ConfiguredFeature<?, ?>> context,
ResourceKey<ConfiguredFeature<?, ?>> key, F feature, FC configuration
) {
context.register(key, new ConfiguredFeature<>(feature, configuration));

View File

@ -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.BootstrapContext;
import net.minecraft.data.worldgen.BootstapContext;
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<PlacedFeature> PATCH_FIREFLY_BUSH_NEAR_WATER_SWAMP_PLACED_KEY = registerKey("patch_firefly_bush_near_water_swamp");
public static final ResourceKey<PlacedFeature> PATCH_FIREFLY_BUSH_NEAR_WATER_PLACED_KEY = registerKey("patch_firefly_bush_near_water");
public static void bootstrap(BootstrapContext<PlacedFeature> context) {
public static void bootstrap(BootstapContext<PlacedFeature> context) {
HolderGetter<ConfiguredFeature<?, ?>> 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(BootstrapContext<PlacedFeature> context, ResourceKey<PlacedFeature> key, Holder<ConfiguredFeature<?, ?>> configuration, List<PlacementModifier> modifiers) {
private static void register(BootstapContext<PlacedFeature> context, ResourceKey<PlacedFeature> key, Holder<ConfiguredFeature<?, ?>> configuration, List<PlacementModifier> modifiers) {
context.register(key, new PlacedFeature(configuration, List.copyOf(modifiers)));
}
}

View File

@ -0,0 +1,30 @@
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"

View File

@ -1,44 +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.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,)"

BIN
src/main/resources/logo.jpg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
src/main/resources/logo.png (Stored with Git LFS)

Binary file not shown.