Compare commits

..

No commits in common. "main" and "2.0" have entirely different histories.
main ... 2.0

24 changed files with 161 additions and 461 deletions

View file

@ -9,7 +9,7 @@ org.gradle.jvmargs=-Xmx1G
kotlin_loader_version=1.13.0+kotlin.2.1.0 kotlin_loader_version=1.13.0+kotlin.2.1.0
# Mod Properties # Mod Properties
mod_version = 3.0+1.19.3-1.19.4 mod_version = 2.0+1.19.3-1.19.4
maven_group = observer.nelle maven_group = observer.nelle
archives_base_name = roses_mod archives_base_name = roses_mod

View file

@ -23,6 +23,9 @@ public class RosesPlacedFeatures {
public static final RegistryKey<PlacedFeature> cyanRoseRarerPlacedKey = registerKey("cyan_rose_rare_placed"); public static final RegistryKey<PlacedFeature> cyanRoseRarerPlacedKey = registerKey("cyan_rose_rare_placed");
public static final RegistryKey<PlacedFeature> roseRarerPlacedKey = registerKey("rose_rare_placed"); public static final RegistryKey<PlacedFeature> roseRarerPlacedKey = registerKey("rose_rare_placed");
public static final RegistryKey<PlacedFeature> cyanRoseCommonPlacedKey = registerKey("cyan_rose_common_placed");
public static final RegistryKey<PlacedFeature> roseCommonPlacedKey = registerKey("rose_common_placed");
public static void bootstrap(Registerable<PlacedFeature> context) { public static void bootstrap(Registerable<PlacedFeature> context) {
var configuredFeatures = context.getRegistryLookup(RegistryKeys.CONFIGURED_FEATURE); var configuredFeatures = context.getRegistryLookup(RegistryKeys.CONFIGURED_FEATURE);
@ -58,6 +61,19 @@ public class RosesPlacedFeatures {
SquarePlacementModifier.of(), SquarePlacementModifier.of(),
PlacedFeatures.MOTION_BLOCKING_HEIGHTMAP, PlacedFeatures.MOTION_BLOCKING_HEIGHTMAP,
BiomePlacementModifier.of()); BiomePlacementModifier.of());
// more common
register(context, cyanRoseCommonPlacedKey, configuredFeatures.getOrThrow(RosesConfiguredFeatures.cyanRoseKey),
RarityFilterPlacementModifier.of(45),
SquarePlacementModifier.of(),
PlacedFeatures.MOTION_BLOCKING_HEIGHTMAP,
BiomePlacementModifier.of());
register(context, roseCommonPlacedKey, configuredFeatures.getOrThrow(RosesConfiguredFeatures.roseKey),
RarityFilterPlacementModifier.of(4),
SquarePlacementModifier.of(),
PlacedFeatures.MOTION_BLOCKING_HEIGHTMAP,
BiomePlacementModifier.of());
} }
public static RegistryKey<PlacedFeature> registerKey(String name) { public static RegistryKey<PlacedFeature> registerKey(String name) {

View file

@ -90,12 +90,6 @@ object RosesVegetationGeneration {
BiomeKeys.ICE_SPIKES, BiomeKeys.ICE_SPIKES,
BiomeKeys.DRIPSTONE_CAVES, BiomeKeys.DRIPSTONE_CAVES,
BiomeKeys.DEEP_DARK, BiomeKeys.DEEP_DARK,
BiomeKeys.JUNGLE,
BiomeKeys.BAMBOO_JUNGLE,
BiomeKeys.SPARSE_JUNGLE,
BiomeKeys.SAVANNA,
BiomeKeys.SAVANNA_PLATEAU,
BiomeKeys.WINDSWEPT_SAVANNA,
), ),
GenerationStep.Feature.VEGETAL_DECORATION, GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.cyanRoseRarerPlacedKey, RosesPlacedFeatures.cyanRoseRarerPlacedKey,
@ -119,6 +113,14 @@ object RosesVegetationGeneration {
BiomeKeys.ICE_SPIKES, BiomeKeys.ICE_SPIKES,
BiomeKeys.DRIPSTONE_CAVES, BiomeKeys.DRIPSTONE_CAVES,
BiomeKeys.DEEP_DARK, BiomeKeys.DEEP_DARK,
),
GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.roseRarerPlacedKey,
)
// more common
BiomeModifications.addFeature(
BiomeSelectors.includeByKey(
BiomeKeys.JUNGLE, BiomeKeys.JUNGLE,
BiomeKeys.BAMBOO_JUNGLE, BiomeKeys.BAMBOO_JUNGLE,
BiomeKeys.SPARSE_JUNGLE, BiomeKeys.SPARSE_JUNGLE,
@ -127,7 +129,20 @@ object RosesVegetationGeneration {
BiomeKeys.WINDSWEPT_SAVANNA, BiomeKeys.WINDSWEPT_SAVANNA,
), ),
GenerationStep.Feature.VEGETAL_DECORATION, GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.roseRarerPlacedKey, RosesPlacedFeatures.cyanRoseCommonPlacedKey,
)
BiomeModifications.addFeature(
BiomeSelectors.includeByKey(
BiomeKeys.JUNGLE,
BiomeKeys.BAMBOO_JUNGLE,
BiomeKeys.SPARSE_JUNGLE,
BiomeKeys.SAVANNA,
BiomeKeys.SAVANNA_PLATEAU,
BiomeKeys.WINDSWEPT_SAVANNA,
),
GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.roseCommonPlacedKey,
) )
} }
} }

View file

@ -23,6 +23,9 @@ public class RosesPlacedFeatures {
public static final RegistryKey<PlacedFeature> cyanRoseRarerPlacedKey = registerKey("cyan_rose_rare_placed"); public static final RegistryKey<PlacedFeature> cyanRoseRarerPlacedKey = registerKey("cyan_rose_rare_placed");
public static final RegistryKey<PlacedFeature> roseRarerPlacedKey = registerKey("rose_rare_placed"); public static final RegistryKey<PlacedFeature> roseRarerPlacedKey = registerKey("rose_rare_placed");
public static final RegistryKey<PlacedFeature> cyanRoseCommonPlacedKey = registerKey("cyan_rose_common_placed");
public static final RegistryKey<PlacedFeature> roseCommonPlacedKey = registerKey("rose_common_placed");
public static void bootstrap(Registerable<PlacedFeature> context) { public static void bootstrap(Registerable<PlacedFeature> context) {
var configuredFeatures = context.getRegistryLookup(RegistryKeys.CONFIGURED_FEATURE); var configuredFeatures = context.getRegistryLookup(RegistryKeys.CONFIGURED_FEATURE);
@ -58,6 +61,19 @@ public class RosesPlacedFeatures {
SquarePlacementModifier.of(), SquarePlacementModifier.of(),
PlacedFeatures.MOTION_BLOCKING_HEIGHTMAP, PlacedFeatures.MOTION_BLOCKING_HEIGHTMAP,
BiomePlacementModifier.of()); BiomePlacementModifier.of());
// more common
register(context, cyanRoseCommonPlacedKey, configuredFeatures.getOrThrow(RosesConfiguredFeatures.cyanRoseKey),
RarityFilterPlacementModifier.of(45),
SquarePlacementModifier.of(),
PlacedFeatures.MOTION_BLOCKING_HEIGHTMAP,
BiomePlacementModifier.of());
register(context, roseCommonPlacedKey, configuredFeatures.getOrThrow(RosesConfiguredFeatures.roseKey),
RarityFilterPlacementModifier.of(4),
SquarePlacementModifier.of(),
PlacedFeatures.MOTION_BLOCKING_HEIGHTMAP,
BiomePlacementModifier.of());
} }
public static RegistryKey<PlacedFeature> registerKey(String name) { public static RegistryKey<PlacedFeature> registerKey(String name) {

View file

@ -90,12 +90,6 @@ object RosesVegetationGeneration {
BiomeKeys.ICE_SPIKES, BiomeKeys.ICE_SPIKES,
BiomeKeys.DRIPSTONE_CAVES, BiomeKeys.DRIPSTONE_CAVES,
BiomeKeys.DEEP_DARK, BiomeKeys.DEEP_DARK,
BiomeKeys.JUNGLE,
BiomeKeys.BAMBOO_JUNGLE,
BiomeKeys.SPARSE_JUNGLE,
BiomeKeys.SAVANNA,
BiomeKeys.SAVANNA_PLATEAU,
BiomeKeys.WINDSWEPT_SAVANNA,
), ),
GenerationStep.Feature.VEGETAL_DECORATION, GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.cyanRoseRarerPlacedKey, RosesPlacedFeatures.cyanRoseRarerPlacedKey,
@ -119,6 +113,14 @@ object RosesVegetationGeneration {
BiomeKeys.ICE_SPIKES, BiomeKeys.ICE_SPIKES,
BiomeKeys.DRIPSTONE_CAVES, BiomeKeys.DRIPSTONE_CAVES,
BiomeKeys.DEEP_DARK, BiomeKeys.DEEP_DARK,
),
GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.roseRarerPlacedKey,
)
// more common
BiomeModifications.addFeature(
BiomeSelectors.includeByKey(
BiomeKeys.JUNGLE, BiomeKeys.JUNGLE,
BiomeKeys.BAMBOO_JUNGLE, BiomeKeys.BAMBOO_JUNGLE,
BiomeKeys.SPARSE_JUNGLE, BiomeKeys.SPARSE_JUNGLE,
@ -127,7 +129,20 @@ object RosesVegetationGeneration {
BiomeKeys.WINDSWEPT_SAVANNA, BiomeKeys.WINDSWEPT_SAVANNA,
), ),
GenerationStep.Feature.VEGETAL_DECORATION, GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.roseRarerPlacedKey, RosesPlacedFeatures.cyanRoseCommonPlacedKey,
)
BiomeModifications.addFeature(
BiomeSelectors.includeByKey(
BiomeKeys.JUNGLE,
BiomeKeys.BAMBOO_JUNGLE,
BiomeKeys.SPARSE_JUNGLE,
BiomeKeys.SAVANNA,
BiomeKeys.SAVANNA_PLATEAU,
BiomeKeys.WINDSWEPT_SAVANNA,
),
GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.roseCommonPlacedKey,
) )
} }
} }

View file

@ -8,6 +8,7 @@ import net.minecraft.util.Identifier;
import net.minecraft.util.math.intprovider.ClampedIntProvider; import net.minecraft.util.math.intprovider.ClampedIntProvider;
import net.minecraft.util.math.intprovider.UniformIntProvider; import net.minecraft.util.math.intprovider.UniformIntProvider;
import net.minecraft.world.gen.feature.*; import net.minecraft.world.gen.feature.*;
import net.minecraft.world.gen.placementmodifier.PlacementModifier;
import net.minecraft.world.gen.placementmodifier.*; import net.minecraft.world.gen.placementmodifier.*;
import observer.nelle.roses.RosesModKt; import observer.nelle.roses.RosesModKt;
@ -23,6 +24,8 @@ public class RosesPlacedFeatures {
public static final RegistryKey<PlacedFeature> cyanRoseRarerPlacedKey = registerKey("cyan_rose_rare_placed"); public static final RegistryKey<PlacedFeature> cyanRoseRarerPlacedKey = registerKey("cyan_rose_rare_placed");
public static final RegistryKey<PlacedFeature> roseRarerPlacedKey = registerKey("rose_rare_placed"); public static final RegistryKey<PlacedFeature> roseRarerPlacedKey = registerKey("rose_rare_placed");
public static final RegistryKey<PlacedFeature> cyanRoseCommonPlacedKey = registerKey("cyan_rose_common_placed");
public static final RegistryKey<PlacedFeature> roseCommonPlacedKey = registerKey("rose_common_placed");
public static void bootstrap(Registerable<PlacedFeature> context) { public static void bootstrap(Registerable<PlacedFeature> context) {
var configuredFeatures = context.getRegistryLookup(RegistryKeys.CONFIGURED_FEATURE); var configuredFeatures = context.getRegistryLookup(RegistryKeys.CONFIGURED_FEATURE);
@ -59,6 +62,19 @@ public class RosesPlacedFeatures {
SquarePlacementModifier.of(), SquarePlacementModifier.of(),
PlacedFeatures.MOTION_BLOCKING_HEIGHTMAP, PlacedFeatures.MOTION_BLOCKING_HEIGHTMAP,
BiomePlacementModifier.of()); BiomePlacementModifier.of());
// more common
register(context, cyanRoseCommonPlacedKey, configuredFeatures.getOrThrow(RosesConfiguredFeatures.cyanRoseKey),
RarityFilterPlacementModifier.of(45),
SquarePlacementModifier.of(),
PlacedFeatures.MOTION_BLOCKING_HEIGHTMAP,
BiomePlacementModifier.of());
register(context, roseCommonPlacedKey, configuredFeatures.getOrThrow(RosesConfiguredFeatures.roseKey),
RarityFilterPlacementModifier.of(4),
SquarePlacementModifier.of(),
PlacedFeatures.MOTION_BLOCKING_HEIGHTMAP,
BiomePlacementModifier.of());
} }
public static RegistryKey<PlacedFeature> registerKey(String name) { public static RegistryKey<PlacedFeature> registerKey(String name) {

View file

@ -90,12 +90,6 @@ object RosesVegetationGeneration {
BiomeKeys.ICE_SPIKES, BiomeKeys.ICE_SPIKES,
BiomeKeys.DRIPSTONE_CAVES, BiomeKeys.DRIPSTONE_CAVES,
BiomeKeys.DEEP_DARK, BiomeKeys.DEEP_DARK,
BiomeKeys.JUNGLE,
BiomeKeys.BAMBOO_JUNGLE,
BiomeKeys.SPARSE_JUNGLE,
BiomeKeys.SAVANNA,
BiomeKeys.SAVANNA_PLATEAU,
BiomeKeys.WINDSWEPT_SAVANNA,
), ),
GenerationStep.Feature.VEGETAL_DECORATION, GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.cyanRoseRarerPlacedKey, RosesPlacedFeatures.cyanRoseRarerPlacedKey,
@ -119,6 +113,14 @@ object RosesVegetationGeneration {
BiomeKeys.ICE_SPIKES, BiomeKeys.ICE_SPIKES,
BiomeKeys.DRIPSTONE_CAVES, BiomeKeys.DRIPSTONE_CAVES,
BiomeKeys.DEEP_DARK, BiomeKeys.DEEP_DARK,
),
GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.roseRarerPlacedKey,
)
// more common
BiomeModifications.addFeature(
BiomeSelectors.includeByKey(
BiomeKeys.JUNGLE, BiomeKeys.JUNGLE,
BiomeKeys.BAMBOO_JUNGLE, BiomeKeys.BAMBOO_JUNGLE,
BiomeKeys.SPARSE_JUNGLE, BiomeKeys.SPARSE_JUNGLE,
@ -127,7 +129,20 @@ object RosesVegetationGeneration {
BiomeKeys.WINDSWEPT_SAVANNA, BiomeKeys.WINDSWEPT_SAVANNA,
), ),
GenerationStep.Feature.VEGETAL_DECORATION, GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.roseRarerPlacedKey, RosesPlacedFeatures.cyanRoseCommonPlacedKey,
)
BiomeModifications.addFeature(
BiomeSelectors.includeByKey(
BiomeKeys.JUNGLE,
BiomeKeys.BAMBOO_JUNGLE,
BiomeKeys.SPARSE_JUNGLE,
BiomeKeys.SAVANNA,
BiomeKeys.SAVANNA_PLATEAU,
BiomeKeys.WINDSWEPT_SAVANNA,
),
GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.roseCommonPlacedKey,
) )
} }
} }

View file

@ -9,7 +9,7 @@ org.gradle.jvmargs=-Xmx1G
kotlin_loader_version=1.13.0+kotlin.2.1.0 kotlin_loader_version=1.13.0+kotlin.2.1.0
# Mod Properties # Mod Properties
mod_version = 3.2+1.21.2-1.21.4 mod_version = 3.0+1.21.2-1.21.4
maven_group = observer.nelle maven_group = observer.nelle
archives_base_name = roses_mod archives_base_name = roses_mod

View file

@ -61,6 +61,19 @@ public class RosesPlacedFeatures {
SquarePlacementModifier.of(), SquarePlacementModifier.of(),
PlacedFeatures.MOTION_BLOCKING_HEIGHTMAP, PlacedFeatures.MOTION_BLOCKING_HEIGHTMAP,
BiomePlacementModifier.of()); BiomePlacementModifier.of());
// more common
register(context, cyanRoseCommonPlacedKey, configuredFeatures.getOrThrow(RosesConfiguredFeatures.cyanRoseKey),
RarityFilterPlacementModifier.of(45),
SquarePlacementModifier.of(),
PlacedFeatures.MOTION_BLOCKING_HEIGHTMAP,
BiomePlacementModifier.of());
register(context, roseCommonPlacedKey, configuredFeatures.getOrThrow(RosesConfiguredFeatures.roseKey),
RarityFilterPlacementModifier.of(4),
SquarePlacementModifier.of(),
PlacedFeatures.MOTION_BLOCKING_HEIGHTMAP,
BiomePlacementModifier.of());
} }
public static RegistryKey<PlacedFeature> registerKey(String name) { public static RegistryKey<PlacedFeature> registerKey(String name) {

View file

@ -90,12 +90,6 @@ object RosesVegetationGeneration {
BiomeKeys.ICE_SPIKES, BiomeKeys.ICE_SPIKES,
BiomeKeys.DRIPSTONE_CAVES, BiomeKeys.DRIPSTONE_CAVES,
BiomeKeys.DEEP_DARK, BiomeKeys.DEEP_DARK,
BiomeKeys.JUNGLE,
BiomeKeys.BAMBOO_JUNGLE,
BiomeKeys.SPARSE_JUNGLE,
BiomeKeys.SAVANNA,
BiomeKeys.SAVANNA_PLATEAU,
BiomeKeys.WINDSWEPT_SAVANNA,
), ),
GenerationStep.Feature.VEGETAL_DECORATION, GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.cyanRoseRarerPlacedKey, RosesPlacedFeatures.cyanRoseRarerPlacedKey,
@ -119,6 +113,14 @@ object RosesVegetationGeneration {
BiomeKeys.ICE_SPIKES, BiomeKeys.ICE_SPIKES,
BiomeKeys.DRIPSTONE_CAVES, BiomeKeys.DRIPSTONE_CAVES,
BiomeKeys.DEEP_DARK, BiomeKeys.DEEP_DARK,
),
GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.roseRarerPlacedKey,
)
// more common
BiomeModifications.addFeature(
BiomeSelectors.includeByKey(
BiomeKeys.JUNGLE, BiomeKeys.JUNGLE,
BiomeKeys.BAMBOO_JUNGLE, BiomeKeys.BAMBOO_JUNGLE,
BiomeKeys.SPARSE_JUNGLE, BiomeKeys.SPARSE_JUNGLE,
@ -127,7 +129,20 @@ object RosesVegetationGeneration {
BiomeKeys.WINDSWEPT_SAVANNA, BiomeKeys.WINDSWEPT_SAVANNA,
), ),
GenerationStep.Feature.VEGETAL_DECORATION, GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.roseRarerPlacedKey, RosesPlacedFeatures.cyanRoseCommonPlacedKey,
)
BiomeModifications.addFeature(
BiomeSelectors.includeByKey(
BiomeKeys.JUNGLE,
BiomeKeys.BAMBOO_JUNGLE,
BiomeKeys.SPARSE_JUNGLE,
BiomeKeys.SAVANNA,
BiomeKeys.SAVANNA_PLATEAU,
BiomeKeys.WINDSWEPT_SAVANNA,
),
GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.roseCommonPlacedKey,
) )
} }
} }

View file

@ -1,6 +0,0 @@
{
"model": {
"type": "minecraft:model",
"model": "roses_mod:item/cyan_rose"
}
}

View file

@ -1,6 +0,0 @@
{
"model": {
"type": "minecraft:model",
"model": "roses_mod:item/cyan_rose_bush"
}
}

View file

@ -1,6 +0,0 @@
{
"model": {
"type": "minecraft:model",
"model": "roses_mod:item/rose_flower"
}
}

View file

@ -6,12 +6,12 @@
"name": "Roses Mod", "name": "Roses Mod",
"description": "Reinstates the classic roses to Minecraft.", "description": "Reinstates the classic roses to Minecraft.",
"authors": [ "authors": [
"nelle (limepotato/nellePoint)" "nellePoint"
], ],
"contact": { "contact": {
"homepage": "https://modrinth.com/mod/roses-mod", "homepage": "https://modrinth.com/mod/roses-mod",
"issues": "https://nelle.observer/email", "issues": "https://git.nullafati.xyz/limepotato/roses-mod/issues",
"sources": "https://git.limbo.town/nelle/roses-mod" "sources": "https://git.nullafati.xyz/limepotato/roses-mod"
}, },
"license": "LGPL-3.0", "license": "LGPL-3.0",
@ -37,6 +37,6 @@
"fabricloader": ">=${loader_version}", "fabricloader": ">=${loader_version}",
"fabric-language-kotlin": ">=${kotlin_loader_version}", "fabric-language-kotlin": ">=${kotlin_loader_version}",
"fabric": "*", "fabric": "*",
"minecraft": ">=1.21.2 <=1.21.4" "minecraft": ">=1.21.2 <1.21.4"
} }
} }

View file

@ -1,178 +0,0 @@
plugins {
id 'java-library'
id 'maven-publish'
id 'idea'
id 'net.neoforged.moddev' version '2.0.77'
id 'org.jetbrains.kotlin.jvm' version '2.0.0'
}
version = mod_version
group = mod_group_id
repositories {
mavenLocal()
maven {
name = 'Kotlin for Forge'
url = 'https://thedarkcolour.github.io/KotlinForForge/'
content { includeGroup "thedarkcolour" }
}
}
base {
archivesName = mod_id
}
java.toolchain.languageVersion = JavaLanguageVersion.of(21)
kotlin.jvmToolchain(21)
neoForge {
// Specify the version of NeoForge to use.
version = project.neo_version
parchment {
mappingsVersion = project.parchment_mappings_version
minecraftVersion = project.parchment_minecraft_version
}
// This line is optional. Access Transformers are automatically detected
// accessTransformers.add('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
}
server {
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 {
type = "gameTestServer"
systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id
}
data {
clientData()
// 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
// mostly optional in a single mod project
// but multi mod projects should define one per mod
"${mod_id}" {
sourceSet(sourceSets.main)
}
}
}
// Include resources generated by data generators.
sourceSets.main.resources { srcDir 'src/generated/resources' }
dependencies {
implementation 'thedarkcolour:kotlinforforge-neoforge:5.3.0'
// Example 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}-forge-api:${jei_version}"
// runtimeOnly "mezz.jei:jei-${mc_version}-forge:${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
}
// 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.
var generateModMetadata = tasks.register("generateModMetadata", ProcessResources) {
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
expand replaceProperties
from "src/main/templates"
into "build/generated/sources/modMetadata"
}
// Include the output of "generateModMetadata" as an input directory for the build
// this works with both building through Gradle and the IDE.
sourceSets.main.resources.srcDir generateModMetadata
// To avoid having to run "generateModMetadata" manually, make it run on every project reload
neoForge.ideSyncTask generateModMetadata
// 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"
}
}
}
// IDEA no longer automatically downloads sources/javadoc jars for dependencies, so we need to explicitly enable the behavior.
idea {
module {
downloadSources = true
downloadJavadoc = true
}
}

View file

@ -1,40 +0,0 @@
# Sets default memory used for gradle commands. Can be overridden by user or command line properties.
org.gradle.jvmargs=-Xmx2G
## Environment Properties
# You can find the latest versions here: https://projects.neoforged.net/neoforged/neoforge
# The Minecraft version must agree with the Neo version to get a valid artifact
minecraft_version=1.21.4
# The Minecraft version range can use any release version of Minecraft as bounds.
# Snapshots, pre-releases, and release candidates are not guaranteed to sort properly
# as they do not follow standard versioning conventions.
minecraft_version_range=[1.21.4,1.22)
# The Neo version must agree with the Minecraft version to get a valid artifact
neo_version=21.4.80-beta
# The Neo version range can use any version of Neo as bounds
neo_version_range=[21,)
# The loader version range can only use the major version of FML as bounds
loader_version_range=[5.3,)
parchment_minecraft_version=1.21.4
parchment_mappings_version=2025.01.19
## Mod Properties
# The unique mod identifier for the mod. Must be lowercase in English locale. Must fit the regex [a-z][a-z0-9_]{1,63}
# Must match the String constant located in the main mod class annotated with @Mod.
mod_id=roses
# The human-readable display name for the mod.
mod_name=roses
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
mod_license=All Rights Reserved
# The mod version. See https://semver.org/
mod_version=0.0
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
# This should match the base package used for the mod sources.
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
mod_group_id=observer.nelle
# The authors of the mod. This is a simple text string that is used for display purposes in the mod list.
mod_authors=nelle (limepotato/nellePoint)
# The description of the mod. This is a simple multiline text string that is used for display purposes in the mod list.
mod_description=adds the classic roses and cyan roses back to the game, in a modern way

View file

@ -1 +0,0 @@
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip

View file

@ -1,70 +0,0 @@
package observer.nelle.roses
import net.minecraft.client.Minecraft
import net.neoforged.bus.api.SubscribeEvent
import net.neoforged.fml.common.EventBusSubscriber
import net.neoforged.fml.common.Mod
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent
import net.neoforged.fml.event.lifecycle.FMLDedicatedServerSetupEvent
import org.apache.logging.log4j.Level
import org.apache.logging.log4j.LogManager
import org.apache.logging.log4j.Logger
import thedarkcolour.kotlinforforge.neoforge.forge.MOD_BUS
import thedarkcolour.kotlinforforge.neoforge.forge.runForDist
/**
* Main mod class.
*
* An example for blocks is in the `blocks` package of this mod.
*/
@Mod(Roses.ID)
@EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD)
object Roses {
const val ID = "roses"
// the logger for our mod
val LOGGER: Logger = LogManager.getLogger(ID)
init {
LOGGER.log(Level.INFO, "Hello world!")
// Register the KDeferredRegister to the mod-specific event bus
// ModBlocks.REGISTRY.register(MOD_BUS)
val obj =
runForDist(
clientTarget = {
MOD_BUS.addListener(::onClientSetup)
Minecraft.getInstance()
},
serverTarget = {
MOD_BUS.addListener(::onServerSetup)
"test"
},
)
println(obj)
}
/**
* This is used for initializing client specific
* things such as renderers and keymaps
* Fired on the mod specific event bus.
*/
private fun onClientSetup(event: FMLClientSetupEvent) {
LOGGER.log(Level.INFO, "Initializing client...")
}
/**
* Fired on the global Forge bus.
*/
private fun onServerSetup(event: FMLDedicatedServerSetupEvent) {
LOGGER.log(Level.INFO, "Server starting...")
}
@SubscribeEvent
fun onCommonSetup(event: FMLCommonSetupEvent) {
LOGGER.log(Level.INFO, "Hello! This is working!")
}
}

View file

@ -1,16 +0,0 @@
package observer.nelle.roses.block
// THIS LINE IS REQUIRED FOR USING PROPERTY DELEGATES
object ModBlocks {
/* val REGISTRY = DeferredRegister.createBlocks(Roses.ID)
// If you get an "overload resolution ambiguity" error, include the arrow at the start of the closure.
val EXAMPLE_BLOCK by REGISTRY.register("example_block") { Block(
BlockBehaviour.Properties
.of()
.lightLevel { 15 }
.strength(3.0f),
)
}*/
}

View file

@ -1,5 +0,0 @@
{
"itemGroup.roses": "Example Mod Tab",
"block.roses.example_block": "Example Block",
"item.roses.example_item": "Example Item"
}

View file

@ -1,14 +0,0 @@
{
"required": true,
"minVersion": "0.8",
"package": "observer.nelle.roses.mixin",
"compatibilityLevel": "JAVA_8",
"refmap": "roses.refmap.json",
"mixins": [
],
"client": [
],
"injectors": {
"defaultRequire": 1
}
}

View file

@ -1,79 +0,0 @@
# This is an example mods.toml file. It contains the data relating to the loading mods.
# There are several mandatory fields (#mandatory), and many more that are optional (#optional).
# The overall format is standard TOML format, v0.5.0.
# Note that there are a couple of TOML lists in this file.
# Find more information on toml format here: https://github.com/toml-lang/toml
# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml
modLoader="kotlinforforge" #mandatory
# A version range to match for said mod loader - for regular FML @Mod it will be the the FML version. This is currently 47.
loaderVersion="${loader_version_range}" #mandatory
# The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties.
# Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here.
license="${mod_license}"
# A URL to refer people to when problems occur with this mod
#issueTrackerURL="https://change.me.to.your.issue.tracker.example.invalid/" #optional
# A list of mods - how many allowed here is determined by the individual mod loader
[[mods]] #mandatory
# The modid of the mod
modId="${mod_id}" #mandatory
# The version number of the mod
version="${mod_version}" #mandatory
# A display name for the mod
displayName="${mod_name}" #mandatory
# A URL to query for updates for this mod. See the JSON update specification https://docs.neoforge.net/docs/misc/updatechecker/
#updateJSONURL="https://change.me.example.invalid/updates.json" #optional
# A URL for the "homepage" for this mod, displayed in the mod UI
#displayURL="https://change.me.to.your.mods.homepage.example.invalid/" #optional
# A file name (in the root of the mod JAR) containing a logo for display
#logoFile="roses.png" #optional
# A text field displayed in the mod UI
#credits="" #optional
# A text field displayed in the mod UI
authors="${mod_authors}" #optional
# The description text for the mod (multi line!) (#mandatory)
description='''${mod_description}'''
# The [[mixins]] block allows you to declare your mixin config to FML so that it gets loaded.
[[mixins]]
config="${mod_id}.mixins.json"
# The [[accessTransformers]] block allows you to declare where your AT file is.
# If this block is omitted, a fallback attempt will be made to load an AT from META-INF/accesstransformer.cfg
#[[accessTransformers]]
#file="META-INF/accesstransformer.cfg"
# The coremods config file path is not configurable and is always loaded from META-INF/coremods.json
# A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional.
[[dependencies."${mod_id}"]] #optional
# the modid of the dependency
modId="neoforge" #mandatory
# 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" #mandatory
# Optional field describing why the dependency is required or why it is incompatible
# reason="..."
# The version range of the dependency
versionRange="${neo_version_range}" #mandatory
# An ordering relationship for the dependency.
# BEFORE - This mod is loaded BEFORE the dependency
# AFTER - This mod is loaded AFTER the dependency
ordering="NONE"
# Side this dependency is applied on - BOTH, CLIENT, or SERVER
side="BOTH"
# Here's another dependency
[[dependencies."${mod_id}"]]
modId="minecraft"
type="required"
# This version range declares a minimum of the current minecraft version up to but not including the next major version
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,)"

View file

@ -1,6 +1,11 @@
# Roses Mod # Roses Mod
![made with fabric 88x31 badge](https://cdn.modrinth.com/data/cached_images/566134d54a0d603a50b616650bc189ef3f3ed9b8.png) > **Note**
> The mod has been rewritten in kotlin and fabric, instead of java quilt,
> previous versions have some bugs and not all bug fixes or features have been backported,
> I will be backporting the mod after this rewrite back as far as I can while being sane.
>
> I have removed all older versions from modrinth to prevent confusion
This mod brings back the classic roses and other classic flowers to minecraft, without replacing any newer flower types. This mod brings back the classic roses and other classic flowers to minecraft, without replacing any newer flower types.
@ -12,7 +17,6 @@ This mod brings back the classic roses and other classic flowers to minecraft, w
- Bees can pollinate all flowers - Bees can pollinate all flowers
<!-- modrinth_exclude.start --> <!-- modrinth_exclude.start -->
## Versioning ## Versioning
1.0: where the first number is the grander version (all mc versions will have the same), 1.0: where the first number is the grander version (all mc versions will have the same),
second number is specific mc version patch second number is specific mc version patch

View file

@ -20,9 +20,6 @@ pluginManagement {
maven("https://maven.quiltmc.org/repository/release") { maven("https://maven.quiltmc.org/repository/release") {
name = "Quilt" name = "Quilt"
} }
maven("https://maven.neoforged.net/releases") {
name = "NeoForge"
}
gradlePluginPortal() gradlePluginPortal()
} }
} }
@ -38,4 +35,3 @@ include(":MC20.5-21.1")
include(":MC20-20.4") include(":MC20-20.4")
include(":MC21.2-21.4") include(":MC21.2-21.4")
include(":MC19.3-19.4") include(":MC19.3-19.4")
include(":MC21.4-neoforge")