diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..f811f6a
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,5 @@
+# Disable autocrlf on generated files, they always generate with LF
+# Add any extra files or paths here to make git stop saying they
+# are changed when only line endings change.
+src/generated/**/.cache/cache text eol=lf
+src/generated/**/*.json text eol=lf
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index f634b27..66b847e 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -5,7 +5,7 @@ jobs:
build:
strategy:
matrix:
- java: [ 17 ]
+ java: [ 21 ]
runs-on: ubuntu-latest
steps:
@@ -32,14 +32,8 @@ jobs:
- name: build
run: ./gradlew build
- - name: Upload Fabric artifacts
+ - name: Upload Neoforge artifacts
uses: actions/upload-artifact@v4
with:
- name: fabric-artifacts
- path: fabric/build/libs/
-
- - name: Upload Forge artifacts
- uses: actions/upload-artifact@v4
- with:
- name: forge-artifacts
- path: forge/build/libs/
+ name: neoforge-artifacts
+ path: build/libs/
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index ccb0c56..31d2550 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,19 +1,26 @@
-build/
+# eclipse
+bin
+*.launch
+.settings
+.metadata
+.classpath
+.project
+
+# idea
+out
*.ipr
-run/
*.iws
-out/
*.iml
-.gradle/
-output/
-bin/
-libs/
+.idea
-.classpath
-.project
-.idea/
-classes/
-.metadata
-.vscode
-.settings
-*.launch
\ No newline at end of file
+# gradle
+build
+.gradle
+
+# other
+eclipse
+run
+runs
+run-data
+
+repo
\ No newline at end of file
diff --git a/README.md b/README.md
index c2460b3..b9e749b 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,9 @@
-# Create cobblestone
-
+# Create cobblestone (NeoForge)
Create cobblestone is a create mod addon that focusses on reducing the lag generated by cobblestone generators. Ideal for server wanting to keep the tps above 10 without buying a very expensive server. The mod does not only add cobblestone generators, but also stone generators, basalt generators, limestone generators and scoria generators.
## Download
[Modrinth](https://modrinth.com/mod/create-cobblestone)
-[Curseforge](https://www.curseforge.com/minecraft/mc-mods/create-cobblestone)
+[Curseforge](https://www.curseforge.com/minecraft/mc-mods/create-cobblestone)
## Crafting
### Cobblestone generator
@@ -39,7 +38,7 @@ The generator types are also configurable. By default are all enabled, except fo
## Custom generators
Custom generators can be added by installing a datapack. Custom generator types can have a custom stress, ratio and storage amount set. For an example pack check out the [deepslate generators datapack](https://modrinth.com/datapack/create-cobblestone-deepslate-generators).
-### Technical
+### Technical
Custom generator files are json files located in the datapack folder data/MOD/generator_types/TYPE.json with the following required content:
```json
{
diff --git a/TEMPLATE_LICENSE.txt b/TEMPLATE_LICENSE.txt
new file mode 100644
index 0000000..b64bc64
--- /dev/null
+++ b/TEMPLATE_LICENSE.txt
@@ -0,0 +1,24 @@
+MIT License
+
+Copyright (c) 2023 NeoForged project
+
+This license applies to the template files as supplied by github.com/NeoForged/MDK
+
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/build.gradle b/build.gradle
index c8569b8..6bd2a95 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,82 +1,204 @@
- plugins {
- id "architectury-plugin" version "3.4.+"
- id "dev.architectury.loom" version "1.9.+" apply false
- id "io.github.p03w.machete" version "1.+" // automatic jar compressing on build
+plugins {
+ id 'java-library'
+ id 'maven-publish'
+ id 'net.neoforged.moddev' version '2.0.107'
+ id 'idea'
}
-architectury {
- minecraft = rootProject.minecraft_version
+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
}
-subprojects {
- apply plugin: "dev.architectury.loom"
+// Formats the mod version to include the loader, Minecraft version, and build number (if present)
+// example: 1.0.0+fabric-1.18.2-100
+String buildNumber = System.getenv("GITHUB_RUN_NUMBER")
+version = "${mod_version}+neoforge-${minecraft_version}" + (buildNumber != null ? "-${buildNumber}" : "")
+group = mod_group_id
- loom {
- silentMojangMappingsLicense()
+repositories {
+ maven { url "https://maven.createmod.net" } // Ponder, Flywheel
+ maven { url "https://mvn.devos.one/snapshots" } // Registrate
+ maven { url "https://maven.blamejared.com" } // JEI
+ maven { url "https://maven.theillusivec4.top/" } // Curios API
+ maven { url 'https://maven.fallenbreath.me/releases' } // Conditional Mixin
+ maven { url "https://www.cursemaven.com" }
+ maven { url "https://api.modrinth.com/maven" }
+ maven { url "https://raw.githubusercontent.com/Fuzss/modresources/main/maven" } // NeoForge config api port, needed by ponder
+}
+
+base {
+ archivesName = archives_base_name
+}
+
+// Mojang ships Java 21 to end users in 1.21.1, so mods should target Java 21.
+java.toolchain.languageVersion = JavaLanguageVersion.of(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 = 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
+ }
+
+ 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
+ }
- runs.configureEach {
- vmArg("-XX:+AllowEnhancedClassRedefinition")
- vmArg("-XX:+IgnoreUnrecognizedVMOptions")
- vmArg("-Dmixin.debug.export=true")
- vmArg("-Dmixin.env.remapRefMap=true")
- vmArg("-Dmixin.env.refMapRemappingFile=${projectDir}/build/createSrgToMcp/output.srg")
+ data {
+ data()
- if (project.name == "forge")
- programArg("-mixin.config=create.mixins.json")
+ // 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
}
}
- repositories {
- mavenCentral()
- maven { url = "https://maven.shedaniel.me/" } // Cloth Config, REI
- maven { url = "https://maven.blamejared.com/" } // JEI
- maven { url = "https://maven.parchmentmc.org" } // Parchment mappings
- maven { url = "https://maven.quiltmc.org/repository/release" } // Quilt Mappings
- maven { url = "https://maven.createmod.net" } // Create
+ 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)
+ }
}
+}
- dependencies {
- //modImplementation "dev.architectury:architectury:${architectury_api_version}"
- minecraft "com.mojang:minecraft:${minecraft_version}"
-
- // Can't use parchment for some reason, game ends up completely unmapped
- mappings loom.officialMojangMappings()
+// Include resources generated by data generators.
+sourceSets.main.resources {
+ srcDir 'src/generated/resources'
+}
- // see each subproject for dependencies.
- }
+tasks.named('processResources', ProcessResources) {
+ duplicatesStrategy = DuplicatesStrategy.EXCLUDE
+}
+
+// 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
}
-allprojects {
- apply plugin: "java"
- apply plugin: "architectury-plugin"
- apply plugin: "maven-publish"
- archivesBaseName = rootProject.archives_base_name
- group = rootProject.maven_group
- // Formats the mod version to include the loader, Minecraft version, and build number (if present)
- // example: 1.0.0+fabric-1.18.2-100
- String buildNumber = System.getenv("GITHUB_RUN_NUMBER")
- version = "${mod_version}+${project.name}-${minecraft_version}" + (buildNumber != null ? "-${buildNumber}" : "")
+dependencies {
+ api("com.simibubi.create:create-${minecraft_version}:${create_version}") { transitive false }
+ api("com.tterrag.registrate:Registrate:${registrate_version}")
+ api("net.createmod.ponder:Ponder-NeoForge-${minecraft_version}:${ponder_version}")
- repositories {
- // Add repositories to retrieve artifacts from in here.
- // You should only use this when depending on other mods because
- // Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
- // See https://docs.gradle.org/current/userguide/declaring_repositories.html
- // for more information about repositories.
- }
+ compileOnlyApi("dev.engine-room.flywheel:flywheel-neoforge-api-${minecraft_version}:${flywheel_version}")
+ runtimeOnly("dev.engine-room.flywheel:flywheel-neoforge-${minecraft_version}:${flywheel_version}")
+ runtimeOnly("dev.engine-room.vanillin:vanillin-neoforge-${minecraft_version}:${vanillin_version}")
- tasks.withType(JavaCompile) {
- options.encoding = "UTF-8"
- }
+ compileOnly("mezz.jei:jei-${minecraft_version}-common-api:${jei_version}")
+ compileOnly("mezz.jei:jei-${minecraft_version}-neoforge-api:${jei_version}")
+ localRuntime("mezz.jei:jei-${minecraft_version}-neoforge:${jei_version}")
+
+ localRuntime("top.theillusivec4.curios:curios-neoforge:${curios_version}+${minecraft_version}")
+ compileOnly("top.theillusivec4.curios:curios-neoforge:${curios_version}+${minecraft_version}:api")
+ localRuntime("maven.modrinth:jade:${jade_version}")
+}
+
+// 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.split("\\.")[0],
+ loader_version_range : loader_version_range,
+ mod_id : mod_id,
+ mod_name : mod_name,
+ mod_license : mod_license,
+ mod_version : version,
+ mod_authors : mod_authors,
+ mod_description : mod_description,
+ mod_logo : mod_logo,
+ mod_github : mod_github,
+ create_version : create_version.split("-")[0],
+ create_until_version : create_until_version
+ ]
+ 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
- java {
- withSourcesJar()
+// 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.withType(JavaCompile).configureEach {
+ options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
+}
- machete {
- // disable machete locally for faster builds
- enabled = buildNumber != null
+// 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/common/build.gradle b/common/build.gradle
deleted file mode 100644
index ce53a2e..0000000
--- a/common/build.gradle
+++ /dev/null
@@ -1,46 +0,0 @@
-architectury {
- common(rootProject.enabled_platforms.split(","))
-}
-
-loom {
- accessWidenerPath = file("src/main/resources/createcobblestone.accesswidener")
-}
-
-repositories {
- // mavens for Create Fabric and dependencies
- maven { url = "https://api.modrinth.com/maven" } // LazyDFU
- maven { url = "https://maven.terraformersmc.com/releases/" } // Mod Menu
- maven { url = "https://mvn.devos.one/snapshots/" } // Create Fabric, Porting Lib, Forge Tags, Milk Lib, Registrate Fabric
- maven { url = "https://mvn.devos.one/releases/" } // Porting Lib Releases
- maven { url = "https://raw.githubusercontent.com/Fuzss/modresources/main/maven/" } // Forge Config API Port
- maven { url = "https://maven.jamieswhiteshirt.com/libs-release" } // Reach Entity Attributes
- maven { url = "https://jitpack.io/" } // Mixin Extras, Fabric ASM
-}
-
-dependencies {
- // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies
- // Do NOT use other classes from fabric loader
- modImplementation("net.fabricmc:fabric-loader:${fabric_loader_version}")
- // Compile against Create Fabric in common
- // beware of differences across platforms!
- // dependencies must also be pulled in to minimize problems, from remapping issues to compile errors.
- // All dependencies except Flywheel and Registrate are NOT safe to use!
- // Flywheel and Registrate must also be used carefully due to differences.
- modCompileOnly("com.simibubi.create:create-fabric-${minecraft_version}:${create_fabric_version}")
-
- modImplementation "dev.architectury:architectury:$rootProject.architectury_api_version"
-}
-
-publishing {
- publications {
- mavenCommon(MavenPublication) {
- artifactId = rootProject.archives_base_name
- from components.java
- }
- }
-
- // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
- repositories {
- // Add repositories to publish to here.
- }
-}
diff --git a/common/src/main/java/net/createcobblestone/CreateCobblestoneExpectPlatform.java b/common/src/main/java/net/createcobblestone/CreateCobblestoneExpectPlatform.java
deleted file mode 100644
index 6bd0494..0000000
--- a/common/src/main/java/net/createcobblestone/CreateCobblestoneExpectPlatform.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package net.createcobblestone;
-
-import dev.architectury.injectables.annotations.ExpectPlatform;
-
-public class CreateCobblestoneExpectPlatform {
- /**
- * an example of {@link ExpectPlatform}.
- *
- * This must be a public static method. The platform-implemented solution must be placed under a
- * platform sub-package, with its class suffixed with {@code Impl}.
- *
- * Example:
- * Expect: net.createcobblestone.CreateCobblestoneExpectPlatform#platformName()
- * Actual Fabric: net.createcobblestone.fabric.ExampleExpectPlatformImpl#platformName()
- * Actual Forge: net.createcobblestone.forge.ExampleExpectPlatformImpl#platformName()
- *
- * You should also get the IntelliJ plugin to help with @ExpectPlatform.
- */
- @ExpectPlatform
- public static String platformName() {
- // Just throw an error, the content should get replaced at runtime.
- throw new AssertionError();
- }
-}
diff --git a/common/src/main/java/net/createcobblestone/CreateCobblestoneMod.java b/common/src/main/java/net/createcobblestone/CreateCobblestoneMod.java
deleted file mode 100644
index 58ad8b1..0000000
--- a/common/src/main/java/net/createcobblestone/CreateCobblestoneMod.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package net.createcobblestone;
-
-import com.simibubi.create.Create;
-import com.simibubi.create.foundation.data.CreateRegistrate;
-import net.createcobblestone.data.GeneratorTypeLoader;
-import net.createcobblestone.index.*;
-import net.minecraft.resources.ResourceLocation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class CreateCobblestoneMod {
- public static final String MOD_ID = "createcobblestone";
- public static final String NAME = "Create cobblestone";
- public static final Logger LOGGER = LoggerFactory.getLogger(NAME);
-
- public static final CreateRegistrate REGISTRATE = CreateRegistrate.create(CreateCobblestoneMod.MOD_ID);
-
- public static void init() {
- LOGGER.info("{} initializing on platform: {}", NAME, CreateCobblestoneExpectPlatform.platformName());
-
- Network.init();
- Config.register();
-
- Blocks.init(); // hold registrate in a separate class to avoid loading early on forge
- BlockEntities.init();
-
- CreativeTabs.init();
-
- GeneratorTypeLoader.init();
- }
-
- public static ResourceLocation id(String path) {
- return new ResourceLocation(MOD_ID, path);
- }
-}
diff --git a/common/src/main/java/net/createcobblestone/blocks/MechanicalGeneratorBlockItem.java b/common/src/main/java/net/createcobblestone/blocks/MechanicalGeneratorBlockItem.java
deleted file mode 100644
index 1c97b1e..0000000
--- a/common/src/main/java/net/createcobblestone/blocks/MechanicalGeneratorBlockItem.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package net.createcobblestone.blocks;
-
-import net.createcobblestone.CreateCobblestoneMod;
-import net.createcobblestone.data.GeneratorType;
-import net.minecraft.ChatFormatting;
-import net.minecraft.nbt.CompoundTag;
-import net.minecraft.network.chat.Component;
-import net.minecraft.network.chat.Style;
-import net.minecraft.world.entity.player.Player;
-import net.minecraft.world.item.*;
-import net.minecraft.world.level.Level;
-import net.minecraft.world.level.block.Block;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.List;
-
-public class MechanicalGeneratorBlockItem extends BlockItem {
-
- public MechanicalGeneratorBlockItem(Block block, Properties properties) {
- super(block, properties);
- }
-
- @Override
- public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, TooltipFlag isAdvanced) {
- if (stack.getTag() != null) {
- CompoundTag BET = stack.getTagElement("BlockEntityTag");
-
- if (BET != null) {
-
- Item generatedItem = GeneratorType.fromId(
- BET.getString("type")
- ).getItem();
-
- if (generatedItem != Items.AIR) {
- tooltipComponents.add(
- Component.translatable(
- "block.createcobblestone.generators.hovertext.itemprefix"
- ).append(
- generatedItem.getName(generatedItem.getDefaultInstance())
- ).setStyle(Style.EMPTY.withColor(ChatFormatting.DARK_GRAY))
- );
- } else {
- tooltipComponents.add(
- Component.translatable(
- "block.createcobblestone.generators.hovertext.no_item"
- ).setStyle(Style.EMPTY.withColor(ChatFormatting.DARK_GRAY))
- );
- }
-
-
-
- }
- }
-
- super.appendHoverText(stack, level, tooltipComponents, isAdvanced);
- }
-
- @Override
- public @NotNull ItemStack getDefaultInstance() {
- ItemStack defaultStack = super.getDefaultInstance();
- try {
- defaultStack.getOrCreateTagElement("BlockEntityTag").putString("type", GeneratorType.NONE.getId());
- } catch (NullPointerException e) {
- CreateCobblestoneMod.LOGGER.error("Tried accessing generator NONE as item before initialized (world load), error below:");
- CreateCobblestoneMod.LOGGER.error(e.getMessage(), e);
- defaultStack.getOrCreateTagElement("BlockEntityTag").putString("type", "none");
- }
-
- return defaultStack;
- }
-
- @Override
- public void onCraftedBy(ItemStack stack, Level level, Player player) {
- stack.getOrCreateTagElement("BlockEntityTag").putString("type", GeneratorType.NONE.getId());
- super.onCraftedBy(stack, level, player);
- }
-}
diff --git a/common/src/main/java/net/createcobblestone/blocks/MechanicalGeneratorVisual.java b/common/src/main/java/net/createcobblestone/blocks/MechanicalGeneratorVisual.java
deleted file mode 100644
index 3d76635..0000000
--- a/common/src/main/java/net/createcobblestone/blocks/MechanicalGeneratorVisual.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package net.createcobblestone.blocks;
-
-import com.simibubi.create.AllPartialModels;
-import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual;
-import com.simibubi.create.content.kinetics.base.RotatingInstance;
-import com.simibubi.create.foundation.render.AllInstanceTypes;
-import dev.engine_room.flywheel.api.instance.Instance;
-import dev.engine_room.flywheel.api.instance.InstancerProvider;
-import dev.engine_room.flywheel.api.visualization.VisualizationContext;
-import dev.engine_room.flywheel.lib.model.Models;
-import net.minecraft.world.level.block.state.BlockState;
-
-import java.util.function.Consumer;
-
-public class MechanicalGeneratorVisual extends KineticBlockEntityVisual {
-
- protected final RotatingInstance rotatingModel;
-
- public MechanicalGeneratorVisual(VisualizationContext context, MechanicalGeneratorBlockEntity blockEntity, float partialTick) {
- super(context, blockEntity, partialTick);
- rotatingModel = shaft(instancerProvider(), blockState)
- .setup(blockEntity)
- .setPosition(getVisualPosition());
- rotatingModel.setChanged();
- }
-
- public static RotatingInstance shaft(InstancerProvider instancerProvider, BlockState state) {
- return instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT))
- .createInstance()
- .rotateToFace(state.getValue(MechanicalGeneratorBlock.HORIZONTAL_FACING));
- }
-
- @Override
- public void update(float pt) {
- rotatingModel.setup(blockEntity)
- .setChanged();
- }
-
- @Override
- public void updateLight(float partialTick) {
- relight(rotatingModel);
- }
-
- @Override
- protected void _delete() {
- rotatingModel.delete();
- }
-
- @Override
- public void collectCrumblingInstances(Consumer consumer) {
- consumer.accept(rotatingModel);
- }
-}
diff --git a/common/src/main/java/net/createcobblestone/data/GeneratorType.java b/common/src/main/java/net/createcobblestone/data/GeneratorType.java
deleted file mode 100644
index ecdb50c..0000000
--- a/common/src/main/java/net/createcobblestone/data/GeneratorType.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package net.createcobblestone.data;
-
-import net.createcobblestone.index.Config;
-import net.minecraft.core.registries.BuiltInRegistries;
-import net.minecraft.resources.ResourceLocation;
-import net.minecraft.world.item.Item;
-import net.minecraft.world.level.block.Block;
-import net.minecraft.world.level.block.Blocks;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.*;
-
-import static net.createcobblestone.CreateCobblestoneMod.LOGGER;
-
-public class GeneratorType {
- private static final Map ID_TO_TYPE = new HashMap<>();
- private static final Map BLOCK_TO_TYPE = new HashMap<>();
-
- private final String id;
- private final ResourceLocation block;
- private final int generatorStress;
- private final float outputPerSecondPerRpm;
- private final int generatorStorage;
-
- public static GeneratorType NONE;
-
- public static void init() {
- // clears all generator types and (re)adds the empty type
- ID_TO_TYPE.clear();
- BLOCK_TO_TYPE.clear();
-
- LOGGER.info("Generator types cleared");
-
- NONE = initializeNewType("none", Blocks.AIR.arch$registryName(), -1, -1, -1);
- }
-
- public static GeneratorType initializeNewType(String id, ResourceLocation block, int generatorStress, float outputPerSecondPerRpm, int generatorStorage){
-
- if (id == null || id.isEmpty()) {
- throw new IllegalArgumentException("Generator type ID cannot be null or empty");
- }
-
- id = id.toLowerCase();
-
- if (BLOCK_TO_TYPE.get(block) != null) {
- LOGGER.error("Error initializing generator, generator type with block {} already exists (existing id: {}, new id: {})", block, BLOCK_TO_TYPE.get(block).getId(), id);
- return BLOCK_TO_TYPE.get(block);
- }
-
- GeneratorType type = new GeneratorType(id, block, generatorStress, outputPerSecondPerRpm, generatorStorage);
- ID_TO_TYPE.put(id.toLowerCase(), type);
- BLOCK_TO_TYPE.put(block, type);
-
- if (Config.common().enableDebugLogging.get()) {
- LOGGER.info("Generator type {} initialized with block {}", id, block);
- }
-
- return type;
- }
-
- private GeneratorType(String id, ResourceLocation block, int generatorStress, float outputPerSecondPerRpm, int generatorStorage) {
- this.id = id;
- this.block = block;
-
- this.generatorStress = generatorStress;
- this.outputPerSecondPerRpm = outputPerSecondPerRpm;
- this.generatorStorage = generatorStorage;
- }
-
-
- public int getGeneratorStress() {
- if (generatorStress == -1) {
- return Config.common().generatorStress.get();
- }
- return generatorStress;
- }
-
- public float getOutputPerSecondPerRpm() {
- if (outputPerSecondPerRpm == -1) {
- return Config.common().outputPerSecondPerRpm.get().floatValue();
- }
- return outputPerSecondPerRpm;
- }
-
- public int getStorage() {
- if (generatorStorage == -1) {
- return Config.common().maxStorage.get();
- }
- return generatorStorage;
- }
-
- public String getId() {
- return id;
- }
-
- public Block getBlock() throws NullPointerException
- {
- return BuiltInRegistries.BLOCK.get(block);
- }
-
- public Item getItem() throws NullPointerException
- {
- return getBlock().asItem();
- }
-
- public boolean isLoaded() {
- return ID_TO_TYPE.get(id) != null;
- }
-
- public static @NotNull GeneratorType fromId(String id) {
-
- GeneratorType type = ensureType(ID_TO_TYPE.get(id.toLowerCase()));
-
- if (type == GeneratorType.NONE) {
- switch (id.toLowerCase()) {
- case "cobblestone":
- id = "createcobblestone:generator_types/cobblestone.json";
- break;
- case "stone":
- id = "createcobblestone:generator_types/stone.json";
- break;
- case "basalt":
- id = "createcobblestone:generator_types/basalt.json";
- break;
- case "limestone":
- id = "createcobblestone:generator_types/limestone.json";
- break;
- case "scoria":
- id = "createcobblestone:generator_types/scoria.json";
- break;
-
- case "deepslate":
- id = "createcobblestone:generator_types/deepslate.json";
- break;
- case "cobbled_deepslate":
- id = "createcobblestone:generator_types/cobbled_deepslate.json";
- break;
- }
-
- type = ensureType(ID_TO_TYPE.get(id));
-
- if (type == GeneratorType.NONE && id.equals("createcobblestone:generator_types/deepslate.json") || id.equals("createcobblestone:generator_types/cobbled_deepslate.json")) {
- LOGGER.error("Deepslate generators are now added using a data pack. Please install it from the mod page. (generator: {})", id);
- }
- }
-
- return type;
- }
-
- public static @NotNull GeneratorType fromBlock(Block block) {
- return ensureType(BLOCK_TO_TYPE.get(block.arch$registryName()));
- }
-
- public static @NotNull GeneratorType fromItem(Item item) {
- return ensureType(BLOCK_TO_TYPE.get(item.arch$registryName()));
- }
-
- public static List getTypes() {
- return new ArrayList<>(ID_TO_TYPE.values());
- }
-
- private static @NotNull GeneratorType ensureType(GeneratorType type) {
- // Return NONE if type is null to stop the game from crashing
- return type == null ? NONE : type;
- }
-}
\ No newline at end of file
diff --git a/common/src/main/java/net/createcobblestone/index/BlockEntities.java b/common/src/main/java/net/createcobblestone/index/BlockEntities.java
deleted file mode 100644
index 6f90cbe..0000000
--- a/common/src/main/java/net/createcobblestone/index/BlockEntities.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package net.createcobblestone.index;
-
-import com.tterrag.registrate.util.entry.BlockEntityEntry;
-import net.createcobblestone.CreateCobblestoneMod;
-import net.createcobblestone.blocks.MechanicalGeneratorBlockEntity;
-import net.createcobblestone.blocks.MechanicalGeneratorRenderer;
-import net.createcobblestone.blocks.MechanicalGeneratorVisual;
-
-import static net.createcobblestone.CreateCobblestoneMod.REGISTRATE;
-import static net.createcobblestone.index.Blocks.MECHANICAL_GENERATOR_BLOCK;
-
-public class BlockEntities {
- public static BlockEntityEntry MECHANICAL_GENERATOR;
-
- public static void init() {
- CreateCobblestoneMod.LOGGER.info("Registering blockEntities for " + CreateCobblestoneMod.NAME);
-
- MECHANICAL_GENERATOR = REGISTRATE
- .blockEntity("mechanical_generator", MechanicalGeneratorBlockEntity::new)
- .visual(() -> MechanicalGeneratorVisual::new)
- .validBlocks(MECHANICAL_GENERATOR_BLOCK)
- .renderer(() -> MechanicalGeneratorRenderer::new)
- .register();
- }
-}
diff --git a/common/src/main/java/net/createcobblestone/index/Config.java b/common/src/main/java/net/createcobblestone/index/Config.java
deleted file mode 100644
index 92a26cf..0000000
--- a/common/src/main/java/net/createcobblestone/index/Config.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package net.createcobblestone.index;
-
-import dev.architectury.injectables.annotations.ExpectPlatform;
-import net.createcobblestone.config.CreateCobblestoneCommon;
-import net.createmod.catnip.config.ConfigBase;
-import net.minecraftforge.fml.config.ModConfig;
-
-import java.util.EnumMap;
-import java.util.Map;
-
-public class Config {
- public static final Map CONFIGS = new EnumMap<>(ModConfig.Type.class);
-
- protected static CreateCobblestoneCommon common;
-
- public static CreateCobblestoneCommon common() {
- return common;
- }
-
- public static ConfigBase byType(ModConfig.Type type) {
- return CONFIGS.get(type);
- }
-
- @ExpectPlatform
- public static void register() {
- }
-
- public static void onLoad(ModConfig modConfig) {
- for (ConfigBase config : CONFIGS.values())
- if (config.specification == modConfig
- .getSpec())
- config.onLoad();
- }
-
- public static void onReload(ModConfig modConfig) {
- for (ConfigBase config : CONFIGS.values())
- if (config.specification == modConfig
- .getSpec())
- config.onReload();
- }
-}
diff --git a/common/src/main/java/net/createcobblestone/index/CreativeTabs.java b/common/src/main/java/net/createcobblestone/index/CreativeTabs.java
deleted file mode 100644
index f98619f..0000000
--- a/common/src/main/java/net/createcobblestone/index/CreativeTabs.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package net.createcobblestone.index;
-
-import dev.architectury.injectables.annotations.ExpectPlatform;
-import net.minecraft.resources.ResourceKey;
-import net.minecraft.world.item.CreativeModeTab;
-
-import java.util.function.Supplier;
-
-public class CreativeTabs {
- @ExpectPlatform
- public static CreativeModeTab getBaseTab() {
- throw new AssertionError();
- }
-
- @ExpectPlatform
- public static ResourceKey getBaseTabKey() {
- throw new AssertionError();
- }
-
- public enum Tabs {
- MAIN(CreativeTabs::getBaseTabKey);
-
- private final Supplier> keySupplier;
-
- Tabs(Supplier> keySupplier) {
- this.keySupplier = keySupplier;
- }
-
- public ResourceKey getKey() {
- return keySupplier.get();
- }
-
- public void use() {
- use(this);
- }
-
- @ExpectPlatform
- private static void use(Tabs tab) {
- throw new AssertionError();
- }
- }
-
- public static void init (){}
-}
-
diff --git a/common/src/main/java/net/createcobblestone/index/Network.java b/common/src/main/java/net/createcobblestone/index/Network.java
deleted file mode 100644
index d22486c..0000000
--- a/common/src/main/java/net/createcobblestone/index/Network.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package net.createcobblestone.index;
-
-import dev.architectury.networking.NetworkManager;
-import dev.architectury.platform.Platform;
-import dev.architectury.utils.Env;
-import net.createcobblestone.CreateCobblestoneMod;
-import net.createcobblestone.data.GeneratorTypeLoader;
-import net.minecraft.resources.ResourceLocation;
-
-import static net.createcobblestone.CreateCobblestoneMod.LOGGER;
-
-public class Network {
- public static final ResourceLocation GENERATOR_TYPES_PACKET = new ResourceLocation(CreateCobblestoneMod.MOD_ID, "generator_types_packet");
-
- public static void init() {
- LOGGER.info("Registering packets for " + CreateCobblestoneMod.NAME);
-
- // Client side only
- if (Platform.getEnvironment() == Env.CLIENT) {
- NetworkManager.registerReceiver(NetworkManager.serverToClient(), GENERATOR_TYPES_PACKET, GeneratorTypeLoader::loadGeneratorTypesFromPacket);
- }
- }
-}
diff --git a/common/src/main/resources/architectury.common.json b/common/src/main/resources/architectury.common.json
deleted file mode 100644
index b01870b..0000000
--- a/common/src/main/resources/architectury.common.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "accessWidener": "createcobblestone.accesswidener"
-}
diff --git a/common/src/main/resources/assets/createcobblestone/blockstates/mechanical_generator.json b/common/src/main/resources/assets/createcobblestone/blockstates/mechanical_generator.json
deleted file mode 100644
index 67f1c63..0000000
--- a/common/src/main/resources/assets/createcobblestone/blockstates/mechanical_generator.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "variants": {
- "facing=north": { "model": "createcobblestone:block/mechanical_generator" },
- "facing=east": { "model": "createcobblestone:block/mechanical_generator", "y": 90 },
- "facing=south": { "model": "createcobblestone:block/mechanical_generator", "y": 180 },
- "facing=west": { "model": "createcobblestone:block/mechanical_generator", "y": 270 }
- }
-}
\ No newline at end of file
diff --git a/common/src/main/resources/assets/createcobblestone/models/block/mechanical_generator.json b/common/src/main/resources/assets/createcobblestone/models/block/mechanical_generator.json
deleted file mode 100644
index 6cd84a7..0000000
--- a/common/src/main/resources/assets/createcobblestone/models/block/mechanical_generator.json
+++ /dev/null
@@ -1,78 +0,0 @@
-{
- "credit": "Made with Blockbench",
- "parent": "block/block",
- "textures": {
- "1": "create:block/brass_gearbox",
- "2": "minecraft:block/cobblestone",
- "4": "createcobblestone:block/mechanical_generator",
- "particle": "create:block/brass_gearbox"
- },
- "elements": [
- {
- "name": "Bottom",
- "from": [0, 14, 0],
- "to": [16, 16, 16],
- "faces": {
- "north": {"uv": [0, 0, 16, 2], "texture": "#1"},
- "east": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#4"},
- "south": {"uv": [0, 0, 16, 2], "texture": "#1"},
- "west": {"uv": [0, 14, 16, 16], "rotation": 180, "texture": "#4"},
- "up": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#4"},
- "down": {"uv": [0, 0, 16, 16], "texture": "#1"}
- }
- },
- {
- "name": "Core",
- "from": [1, 2, 0.95],
- "to": [15, 14, 15.05],
- "faces": {
- "north": {"uv": [1, 2, 15, 14], "texture": "#1"},
- "south": {"uv": [1, 2, 15, 14], "texture": "#1"}
- }
- },
- {
- "name": "Top",
- "from": [0, 0, 0],
- "to": [16, 2, 16],
- "faces": {
- "north": {"uv": [0, 14, 16, 16], "texture": "#1"},
- "east": {"uv": [0, 0, 16, 2], "rotation": 180, "texture": "#4"},
- "south": {"uv": [0, 14, 16, 16], "texture": "#1"},
- "west": {"uv": [0, 0, 16, 2], "rotation": 180, "texture": "#4"},
- "up": {"uv": [0, 0, 16, 16], "texture": "#1"},
- "down": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#4"}
- }
- },
- {
- "name": "SideWest",
- "from": [0, 2, 0],
- "to": [2, 14, 16],
- "faces": {
- "north": {"uv": [14, 2, 16, 14], "texture": "#1"},
- "east": {"uv": [0, 2, 16, 14], "rotation": 180, "texture": "#1"},
- "south": {"uv": [0, 2, 2, 14], "texture": "#1"},
- "west": {"uv": [0, 2, 16, 14], "rotation": 180, "texture": "#4"}
- }
- },
- {
- "name": "SideEast",
- "from": [14, 2, 0],
- "to": [16, 14, 16],
- "faces": {
- "north": {"uv": [0, 2, 2, 14], "texture": "#1"},
- "east": {"uv": [0, 2, 16, 14], "rotation": 180, "texture": "#4"},
- "south": {"uv": [14, 2, 16, 14], "texture": "#1"},
- "west": {"uv": [0, 2, 16, 14], "rotation": 180, "texture": "#1"}
- }
- }
- ],
- "display": {},
- "groups": [
- {
- "name": "block",
- "origin": [8, 8, 8],
- "color": 0,
- "children": [0, 1, 2, 3, 4]
- }
- ]
-}
\ No newline at end of file
diff --git a/common/src/main/resources/createcobblestone.accesswidener b/common/src/main/resources/createcobblestone.accesswidener
deleted file mode 100644
index 13268c3..0000000
--- a/common/src/main/resources/createcobblestone.accesswidener
+++ /dev/null
@@ -1 +0,0 @@
-accessWidener v2 named
\ No newline at end of file
diff --git a/common/src/main/resources/data/createcobblestone/loot_tables/blocks/mechanical_generator.json b/common/src/main/resources/data/createcobblestone/loot_tables/blocks/mechanical_generator.json
deleted file mode 100644
index 5158cd4..0000000
--- a/common/src/main/resources/data/createcobblestone/loot_tables/blocks/mechanical_generator.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "type": "minecraft:block",
- "pools": [
- {
- "rolls": 1,
- "entries": [
- {
- "type": "minecraft:item",
- "name": "createcobblestone:mechanical_generator",
- "functions": [
- {
- "function": "minecraft:copy_nbt",
- "source": "block_entity",
- "ops": [
- {
- "source": "type",
- "target": "BlockEntityTag.type",
- "op": "replace"
- }
- ]
- }
- ]
- }
- ],
- "conditions": [
- {
- "condition": "minecraft:survives_explosion"
- }
- ]
- }
- ]
-}
diff --git a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/aethersite.json b/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/aethersite.json
deleted file mode 100644
index 12a5cab..0000000
--- a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/aethersite.json
+++ /dev/null
@@ -1 +0,0 @@
-{"block": "create_dd:aethersite"}
\ No newline at end of file
diff --git a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/asurine_cobble.json b/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/asurine_cobble.json
deleted file mode 100644
index c4bfe6f..0000000
--- a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/asurine_cobble.json
+++ /dev/null
@@ -1 +0,0 @@
-{"block": "create_dd:asurine_cobble"}
\ No newline at end of file
diff --git a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/blackstone.json b/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/blackstone.json
deleted file mode 100644
index a2d1d0a..0000000
--- a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/blackstone.json
+++ /dev/null
@@ -1 +0,0 @@
-{"block": "minecraft:blackstone"}
\ No newline at end of file
diff --git a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/calcite.json b/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/calcite.json
deleted file mode 100644
index 114b665..0000000
--- a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/calcite.json
+++ /dev/null
@@ -1 +0,0 @@
-{"block": "minecraft:calcite"}
\ No newline at end of file
diff --git a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/crimsite_cobble.json b/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/crimsite_cobble.json
deleted file mode 100644
index 358edd0..0000000
--- a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/crimsite_cobble.json
+++ /dev/null
@@ -1 +0,0 @@
-{"block": "create_dd:crimsite_cobble"}
\ No newline at end of file
diff --git a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/crying_obsidian.json b/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/crying_obsidian.json
deleted file mode 100644
index d2fb079..0000000
--- a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/crying_obsidian.json
+++ /dev/null
@@ -1 +0,0 @@
-{"block": "minecraft:crying_obsidian"}
\ No newline at end of file
diff --git a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/dripstone_block.json b/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/dripstone_block.json
deleted file mode 100644
index da3f642..0000000
--- a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/dripstone_block.json
+++ /dev/null
@@ -1 +0,0 @@
-{"block": "minecraft:dripstone_block"}
\ No newline at end of file
diff --git a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/gabbro.json b/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/gabbro.json
deleted file mode 100644
index 4671724..0000000
--- a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/gabbro.json
+++ /dev/null
@@ -1 +0,0 @@
-{"block": "create_dd:gabbro"}
\ No newline at end of file
diff --git a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/obsidian.json b/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/obsidian.json
deleted file mode 100644
index c2e7618..0000000
--- a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/obsidian.json
+++ /dev/null
@@ -1 +0,0 @@
-{"block": "minecraft:obsidian"}
\ No newline at end of file
diff --git a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/ochrum_cobble.json b/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/ochrum_cobble.json
deleted file mode 100644
index 2690c33..0000000
--- a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/ochrum_cobble.json
+++ /dev/null
@@ -1 +0,0 @@
-{"block": "create_dd:ochrum_cobble"}
\ No newline at end of file
diff --git a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/potassic_cobble.json b/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/potassic_cobble.json
deleted file mode 100644
index 68283e9..0000000
--- a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/potassic_cobble.json
+++ /dev/null
@@ -1 +0,0 @@
-{"block": "create_dd:potassic_cobble"}
\ No newline at end of file
diff --git a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/scorchia.json b/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/scorchia.json
deleted file mode 100644
index 0158367..0000000
--- a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/scorchia.json
+++ /dev/null
@@ -1 +0,0 @@
-{"block": "create:scorchia"}
\ No newline at end of file
diff --git a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/veridium_cobble.json b/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/veridium_cobble.json
deleted file mode 100644
index 895689f..0000000
--- a/datapack/CreateCobblestone_DreamsAndDesires/data/createcobblestone/generator_types/veridium_cobble.json
+++ /dev/null
@@ -1 +0,0 @@
-{"block": "create_dd:veridium_cobble"}
\ No newline at end of file
diff --git a/datapack/CreateCobblestone_DreamsAndDesires/pack.mcmeta b/datapack/CreateCobblestone_DreamsAndDesires/pack.mcmeta
deleted file mode 100644
index 4c63dbf..0000000
--- a/datapack/CreateCobblestone_DreamsAndDesires/pack.mcmeta
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "pack": {
- "pack_format": 48,
- "description": "Create Dreams and Desires generators for the Create Cobblestone mod"
- }
-}
diff --git a/datapack/CreateCobblestone_OresAndIngots/data/createcobblestone/generator_types/andesite_alloy_block.json b/datapack/CreateCobblestone_OresAndIngots/data/createcobblestone/generator_types/andesite_alloy_block.json
deleted file mode 100644
index 76b5cc5..0000000
--- a/datapack/CreateCobblestone_OresAndIngots/data/createcobblestone/generator_types/andesite_alloy_block.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "block": "create:andesite_alloy_block"
-}
\ No newline at end of file
diff --git a/datapack/CreateCobblestone_OresAndIngots/data/createcobblestone/generator_types/brass_block.json b/datapack/CreateCobblestone_OresAndIngots/data/createcobblestone/generator_types/brass_block.json
deleted file mode 100644
index 6ace787..0000000
--- a/datapack/CreateCobblestone_OresAndIngots/data/createcobblestone/generator_types/brass_block.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "block": "create:brass_block"
-}
\ No newline at end of file
diff --git a/datapack/CreateCobblestone_OresAndIngots/data/createcobblestone/generator_types/raw_copper_block.json b/datapack/CreateCobblestone_OresAndIngots/data/createcobblestone/generator_types/raw_copper_block.json
deleted file mode 100644
index aa0d37c..0000000
--- a/datapack/CreateCobblestone_OresAndIngots/data/createcobblestone/generator_types/raw_copper_block.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "block": "minecraft:raw_copper_block"
-}
\ No newline at end of file
diff --git a/datapack/CreateCobblestone_OresAndIngots/data/createcobblestone/generator_types/raw_iron_block.json b/datapack/CreateCobblestone_OresAndIngots/data/createcobblestone/generator_types/raw_iron_block.json
deleted file mode 100644
index c23a716..0000000
--- a/datapack/CreateCobblestone_OresAndIngots/data/createcobblestone/generator_types/raw_iron_block.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "block": "minecraft:raw_iron_block"
-}
\ No newline at end of file
diff --git a/datapack/CreateCobblestone_OresAndIngots/data/createcobblestone/generator_types/raw_zinc_block.json b/datapack/CreateCobblestone_OresAndIngots/data/createcobblestone/generator_types/raw_zinc_block.json
deleted file mode 100644
index 8b66d44..0000000
--- a/datapack/CreateCobblestone_OresAndIngots/data/createcobblestone/generator_types/raw_zinc_block.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "block": "create:raw_zinc_block"
-}
\ No newline at end of file
diff --git a/datapack/CreateCobblestone_OresAndIngots/pack.mcmeta b/datapack/CreateCobblestone_OresAndIngots/pack.mcmeta
deleted file mode 100644
index cfda3dc..0000000
--- a/datapack/CreateCobblestone_OresAndIngots/pack.mcmeta
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "pack": {
- "pack_format": 48,
- "description": "Ore and ingot block generators for the Create Cobblestone mod"
- }
-}
diff --git a/datapack/CreateCobblestone_deepslate/data/createcobblestone/generator_types/cobbled_deepslate.json b/datapack/CreateCobblestone_deepslate/data/createcobblestone/generator_types/cobbled_deepslate.json
deleted file mode 100644
index 11b431e..0000000
--- a/datapack/CreateCobblestone_deepslate/data/createcobblestone/generator_types/cobbled_deepslate.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "block": "minecraft:cobbled_deepslate"
-}
\ No newline at end of file
diff --git a/datapack/CreateCobblestone_deepslate/data/createcobblestone/generator_types/deepslate.json b/datapack/CreateCobblestone_deepslate/data/createcobblestone/generator_types/deepslate.json
deleted file mode 100644
index ec05483..0000000
--- a/datapack/CreateCobblestone_deepslate/data/createcobblestone/generator_types/deepslate.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "block": "minecraft:deepslate"
-}
\ No newline at end of file
diff --git a/datapack/CreateCobblestone_deepslate/pack.mcmeta b/datapack/CreateCobblestone_deepslate/pack.mcmeta
deleted file mode 100644
index 8637d73..0000000
--- a/datapack/CreateCobblestone_deepslate/pack.mcmeta
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "pack": {
- "pack_format": 48,
- "description": "Deepslate generators for the Create Cobblestone mod"
- }
-}
diff --git a/datapack/tools/from_file.py b/datapack/tools/from_file.py
deleted file mode 100644
index cc438a3..0000000
--- a/datapack/tools/from_file.py
+++ /dev/null
@@ -1,25 +0,0 @@
-import os
-
-# Specify the input file name
-input_file = "generators.txt"
-
-# Read the input file and process each line
-with open(input_file, "r") as file:
- for line in file:
- # Split the line by the colon
- parts = line.strip().split(":")
-
- # Extract the ID from the line
- id = parts[1].strip()
-
- # Create the output file name
- output_file = f"{id}.json"
-
- # Create the content for the output file
- content = f"{{\n \"block\": \"{line.strip("\n")}\"\n}}"
-
- # Write the content to the output file
- with open(output_file, "w") as output:
- output.write(content)
-
- print(f"Created file: {output_file}")
diff --git a/datapack/tools/generators.txt b/datapack/tools/generators.txt
deleted file mode 100644
index 836727f..0000000
--- a/datapack/tools/generators.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-create:andesite_alloy_block
-create:brass_block
-create:raw_zinc_block
-minecraft:raw_iron_block
-minecraft:raw_copper_block
diff --git a/fabric/build.gradle b/fabric/build.gradle
deleted file mode 100644
index 0ada4ee..0000000
--- a/fabric/build.gradle
+++ /dev/null
@@ -1,133 +0,0 @@
-plugins {
- id "com.github.johnrengelman.shadow" version "7.1.2"
-}
-
-architectury {
- platformSetupLoomIde()
- fabric()
-}
-
-loom {
- accessWidenerPath = project(":common").loom.accessWidenerPath
-}
-
-configurations {
- common
- shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this.
- compileClasspath.extendsFrom common
- runtimeClasspath.extendsFrom common
- developmentFabric.extendsFrom common
-}
-
-repositories {
- // mavens for Fabric-exclusives
- maven { url = "https://api.modrinth.com/maven" } // LazyDFU
- maven { url = "https://maven.terraformersmc.com/releases/" } // Mod Menu
- maven { url = "https://mvn.devos.one/snapshots/" } // Create Fabric, Porting Lib, Forge Tags, Milk Lib, Registrate Fabric
- maven { url = "https://mvn.devos.one/releases/" } // Porting Lib Releases
- maven { url = "https://raw.githubusercontent.com/Fuzss/modresources/main/maven/" } // Forge Config API Port
- maven { url = "https://maven.jamieswhiteshirt.com/libs-release" } // Reach Entity Attributes
- maven { url = "https://jitpack.io/" } // Mixin Extras, Fabric ASM
-}
-
-configurations.configureEach {
- resolutionStrategy {
- force("net.fabricmc:fabric-loader:${fabric_loader_version}")
- }
-}
-
-dependencies {
- modImplementation("net.fabricmc:fabric-loader:${fabric_loader_version}")
- common(project(path: ":common", configuration: "namedElements")) { transitive = false }
- shadowCommon(project(path: ":common", configuration: "transformProductionFabric")) { transitive = false }
-
- // dependencies
- modImplementation("net.fabricmc.fabric-api:fabric-api:${fabric_api_version}")
-
- // Create - dependencies are added transitively
- modImplementation("com.simibubi.create:create-fabric-${minecraft_version}:${create_fabric_version}")
-
- // Development QOL
- modLocalRuntime("maven.modrinth:lazydfu:${lazydfu_version}")
- modLocalRuntime("com.terraformersmc:modmenu:${modmenu_version}")
-
- // Recipe Viewers - Create Fabric supports JEI, REI, and EMI.
- // See root gradle.properties to choose which to use at runtime.
- switch (fabric_recipe_viewer.toLowerCase(Locale.ROOT)) {
- case "jei": modLocalRuntime("mezz.jei:jei-${minecraft_version}-fabric:${jei_version}"); break
- case "rei": modLocalRuntime("me.shedaniel:RoughlyEnoughItems-fabric:${rei_version}"); break
- case "emi": modLocalRuntime("dev.emi:emi:${emi_version}"); break
- case "disabled": break
- default: println("Unknown recipe viewer specified: ${fabric_recipe_viewer}. Must be JEI, REI, EMI, or disabled.")
- }
-
- modImplementation "dev.architectury:architectury-fabric:$rootProject.architectury_api_version"
-
- // if you would like to add integration with them, uncomment them here.
-// modCompileOnly("mezz.jei:jei-${minecraft_version}-fabric:${jei_version}")
-// modCompileOnly("mezz.jei:jei-${minecraft_version}-common:${jei_version}")
-// modCompileOnly("me.shedaniel:RoughlyEnoughItems-api-fabric:${rei_version}")
-// modCompileOnly("me.shedaniel:RoughlyEnoughItems-default-plugin-fabric:${rei_version}")
-// modCompileOnly("dev.emi:emi:${emi_version}")
-}
-
-processResources {
- // set up properties for filling into metadata
- Map properties = Map.of(
- "version", version,
- "fabric_loader_version", fabric_loader_version,
- "fabric_api_version", fabric_api_version,
- "minecraft_version", minecraft_version,
- "create_until_version", create_until_version,
- "create_version", create_fabric_version // on fabric, use the entire version, unlike forge
- )
- properties.forEach((k, v) -> inputs.property(k, v))
-
- filesMatching("fabric.mod.json") {
- expand properties
- }
-}
-
-shadowJar {
- exclude "architectury.common.json"
-
- configurations = [project.configurations.shadowCommon]
- archiveClassifier = "dev-shadow"
-}
-
-remapJar {
- injectAccessWidener = true
- input.set shadowJar.archiveFile
- dependsOn shadowJar
- archiveClassifier = null
-}
-
-jar {
- archiveClassifier = "dev"
-}
-
-sourcesJar {
- def commonSources = project(":common").sourcesJar
- dependsOn commonSources
- from commonSources.archiveFile.map { zipTree(it) }
-}
-
-components.java {
- withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) {
- skip()
- }
-}
-
-publishing {
- publications {
- mavenFabric(MavenPublication) {
- artifactId = rootProject.archives_base_name + "-" + project.name
- from components.java
- }
- }
-
- // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
- repositories {
- // Add repositories to publish to here.
- }
-}
diff --git a/fabric/run/config/fabric_loader_dependencies.json b/fabric/run/config/fabric_loader_dependencies.json
deleted file mode 100644
index cd0884b..0000000
--- a/fabric/run/config/fabric_loader_dependencies.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "version": 1,
- "overrides": {
- "forgeconfigapiport": {
- "-depends": {
- "com_electronwill_night-config_core": "",
- "com_electronwill_night-config_toml": ""
- }
- }
- }
-}
\ No newline at end of file
diff --git a/fabric/src/main/java/net/createcobblestone/data/fabric/GeneratorTypeLoaderImpl.java b/fabric/src/main/java/net/createcobblestone/data/fabric/GeneratorTypeLoaderImpl.java
deleted file mode 100644
index 916a064..0000000
--- a/fabric/src/main/java/net/createcobblestone/data/fabric/GeneratorTypeLoaderImpl.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package net.createcobblestone.data.fabric;
-
-import net.createcobblestone.data.GeneratorTypeLoader;
-import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
-import net.minecraft.server.level.ServerPlayer;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import static net.createcobblestone.CreateCobblestoneMod.LOGGER;
-
-public class GeneratorTypeLoaderImpl {
- public static void init() {
- ServerLifecycleEvents.SERVER_STARTING.register(server -> {
- LOGGER.info("Server starting, loading generator types");
- GeneratorTypeLoader.loadGeneratorTypes(server.getResourceManager());
- });
- ServerLifecycleEvents.END_DATA_PACK_RELOAD.register((server, serverResourceManager, success) -> {
- LOGGER.info("Server reloading, loading generator types");
- GeneratorTypeLoader.loadGeneratorTypes(serverResourceManager);
- GeneratorTypeLoader.sendGeneratorTypesToClient(server.getPlayerList().getPlayers());
- });
- ServerLifecycleEvents.SYNC_DATA_PACK_CONTENTS.register((player, serverResourceManager) -> {
- LOGGER.info("Server syncing data pack contents, loading generator types");
- GeneratorTypeLoader.sendGeneratorTypesToClient(Collections.singletonList(player));
- });
- }
-}
diff --git a/fabric/src/main/java/net/createcobblestone/fabric/CreateCobblestoneExpectPlatformImpl.java b/fabric/src/main/java/net/createcobblestone/fabric/CreateCobblestoneExpectPlatformImpl.java
deleted file mode 100644
index a966d6d..0000000
--- a/fabric/src/main/java/net/createcobblestone/fabric/CreateCobblestoneExpectPlatformImpl.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package net.createcobblestone.fabric;
-
-import net.fabricmc.loader.api.FabricLoader;
-
-public class CreateCobblestoneExpectPlatformImpl {
- public static String platformName() {
- return FabricLoader.getInstance().isModLoaded("quilt_loader") ? "Quilt" : "Fabric";
- }
-}
diff --git a/fabric/src/main/java/net/createcobblestone/fabric/CreateCobblestoneFabric.java b/fabric/src/main/java/net/createcobblestone/fabric/CreateCobblestoneFabric.java
deleted file mode 100644
index cbda9de..0000000
--- a/fabric/src/main/java/net/createcobblestone/fabric/CreateCobblestoneFabric.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package net.createcobblestone.fabric;
-
-import io.github.fabricators_of_create.porting_lib.util.EnvExecutor;
-import net.createcobblestone.CreateCobblestoneMod;
-import net.fabricmc.api.ModInitializer;
-
-import static net.createcobblestone.CreateCobblestoneMod.REGISTRATE;
-
-public class CreateCobblestoneFabric implements ModInitializer {
- @Override
- public void onInitialize() {
- CreateCobblestoneMod.init();
- CreateCobblestoneMod.LOGGER.info(EnvExecutor.unsafeRunForDist(
- () -> () -> "{} is accessing Porting Lib on a Fabric client!",
- () -> () -> "{} is accessing Porting Lib on a Fabric server!"
- ), CreateCobblestoneMod.NAME);
- // on fabric, Registrates must be explicitly finalized and registered.
- REGISTRATE.register();
- }
-}
diff --git a/fabric/src/main/java/net/createcobblestone/index/fabric/ConfigImpl.java b/fabric/src/main/java/net/createcobblestone/index/fabric/ConfigImpl.java
deleted file mode 100644
index 6d3f600..0000000
--- a/fabric/src/main/java/net/createcobblestone/index/fabric/ConfigImpl.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package net.createcobblestone.index.fabric;
-
-import fuzs.forgeconfigapiport.api.config.v2.ForgeConfigRegistry;
-import fuzs.forgeconfigapiport.api.config.v2.ModConfigEvents;
-import net.createcobblestone.CreateCobblestoneMod;
-import net.createcobblestone.config.CreateCobblestoneCommon;
-import net.createcobblestone.index.Config;
-import net.createmod.catnip.config.ConfigBase;
-import net.minecraftforge.common.ForgeConfigSpec;
-import net.minecraftforge.fml.config.ModConfig;
-import org.apache.commons.lang3.tuple.Pair;
-
-import java.util.Map;
-import java.util.function.Supplier;
-
-public class ConfigImpl extends Config {
- private static T register(Supplier factory, ModConfig.Type side) {
- Pair specPair = new ForgeConfigSpec.Builder().configure(builder -> {
- T config = factory.get();
- config.registerAll(builder);
- return config;
- });
-
- T config = specPair.getLeft();
- config.specification = specPair.getRight();
- CONFIGS.put(side, config);
- return config;
- }
-
- public static void register() {
- common = register(CreateCobblestoneCommon::new, ModConfig.Type.COMMON);
-
- for (Map.Entry pair : CONFIGS.entrySet())
- ForgeConfigRegistry.INSTANCE.register(CreateCobblestoneMod.MOD_ID, pair.getKey(), pair.getValue().specification);
-
- ModConfigEvents.loading(CreateCobblestoneMod.MOD_ID).register(net.createcobblestone.index.Config::onLoad);
- ModConfigEvents.reloading(CreateCobblestoneMod.MOD_ID).register(net.createcobblestone.index.Config::onReload);
- }
-}
diff --git a/fabric/src/main/java/net/createcobblestone/index/fabric/CreativeTabsImpl.java b/fabric/src/main/java/net/createcobblestone/index/fabric/CreativeTabsImpl.java
deleted file mode 100644
index 1f5ca8c..0000000
--- a/fabric/src/main/java/net/createcobblestone/index/fabric/CreativeTabsImpl.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package net.createcobblestone.index.fabric;
-
-import net.createcobblestone.CreateCobblestoneMod;
-import net.createcobblestone.index.Blocks;
-import net.createcobblestone.index.CreativeTabs;
-import net.createcobblestone.index.RegistrateDisplayItemsGenerator;
-import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
-import net.minecraft.core.Registry;
-import net.minecraft.core.registries.BuiltInRegistries;
-import net.minecraft.core.registries.Registries;
-import net.minecraft.network.chat.Component;
-import net.minecraft.resources.ResourceKey;
-import net.minecraft.resources.ResourceLocation;
-import net.minecraft.world.item.CreativeModeTab;
-
-import java.util.function.Supplier;
-
-public class CreativeTabsImpl {
- private static final RegistrateDisplayItemsGenerator.TabInfo MAIN_TAB = register("main",
- () -> FabricItemGroup.builder()
- .title(Component.translatable("itemGroup.create_cobblestone"))
- .icon(() -> Blocks.MECHANICAL_GENERATOR_BLOCK.asStack())
- .displayItems(new RegistrateDisplayItemsGenerator(CreativeTabs.Tabs.MAIN))
- .build());
-
- public static CreativeModeTab getBaseTab() {
- return MAIN_TAB.tab();
- }
-
- public static ResourceKey getBaseTabKey() {
- return MAIN_TAB.key();
- }
-
- private static RegistrateDisplayItemsGenerator.TabInfo register(String name, Supplier supplier) {
- ResourceLocation id = CreateCobblestoneMod.id(name);
- ResourceKey key = ResourceKey.create(Registries.CREATIVE_MODE_TAB, id);
- CreativeModeTab tab = supplier.get();
- Registry.register(BuiltInRegistries.CREATIVE_MODE_TAB, key, tab);
- return new RegistrateDisplayItemsGenerator.TabInfo(key, tab);
- }
-}
diff --git a/fabric/src/main/java/net/createcobblestone/index/fabric/CreativeTabsTabsImpl.java b/fabric/src/main/java/net/createcobblestone/index/fabric/CreativeTabsTabsImpl.java
deleted file mode 100644
index 721be36..0000000
--- a/fabric/src/main/java/net/createcobblestone/index/fabric/CreativeTabsTabsImpl.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package net.createcobblestone.index.fabric;
-
-import net.createcobblestone.CreateCobblestoneMod;
-import net.createcobblestone.index.CreativeTabs;
-
-public class CreativeTabsTabsImpl {
- public static void use(CreativeTabs.Tabs tab) {
- CreateCobblestoneMod.REGISTRATE.setCreativeTab(tab.getKey());
- }
-}
diff --git a/fabric/src/main/resources/assets/createcobblestone/icon.png b/fabric/src/main/resources/assets/createcobblestone/icon.png
deleted file mode 100644
index c1a6f1e..0000000
Binary files a/fabric/src/main/resources/assets/createcobblestone/icon.png and /dev/null differ
diff --git a/fabric/src/main/resources/createcobblestone.mixins.json b/fabric/src/main/resources/createcobblestone.mixins.json
deleted file mode 100644
index 8c479a3..0000000
--- a/fabric/src/main/resources/createcobblestone.mixins.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "required": true,
- "minVersion": "0.8",
- "package": "net.createcobblestone.mixin.fabric",
- "compatibilityLevel": "JAVA_17",
- "client": [
- ],
- "mixins": [
- ],
- "injectors": {
- "defaultRequire": 1
- }
-}
\ No newline at end of file
diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json
deleted file mode 100644
index cee1bbf..0000000
--- a/fabric/src/main/resources/fabric.mod.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "schemaVersion": 1,
- "id": "createcobblestone",
- "version": "${version}",
- "name": "Create Cobblestone",
- "description": "Adds a block generating cobblestone using SU, stopping cobblestone generators from eating your frames.",
- "authors": [
- "MrStickyPiston"
- ],
- "contact": {
- "sources": "https://github.com/StickyPiston-development/CreateCobblestone"
- },
- "license": "CC0",
- "icon": "assets/createcobblestone/icon.png",
- "environment": "*",
- "entrypoints": {
- "main": [
- "net.createcobblestone.fabric.CreateCobblestoneFabric"
- ]
- },
- "mixins": [
- "createcobblestone.mixins.json",
- "createcobblestone-common.mixins.json"
- ],
- "depends": {
- "minecraft": "${minecraft_version}",
- "fabricloader": ">=${fabric_loader_version}",
- "fabric-api": ">=${fabric_api_version}",
- "create": ">=${create_version} <${create_until_version}"
- }
-}
diff --git a/forge/build.gradle b/forge/build.gradle
deleted file mode 100644
index a1884b5..0000000
--- a/forge/build.gradle
+++ /dev/null
@@ -1,130 +0,0 @@
-plugins {
- id "com.github.johnrengelman.shadow" version "7.1.2"
-}
-
-architectury {
- platformSetupLoomIde()
- forge()
-}
-
-loom {
- accessWidenerPath = project(":common").loom.accessWidenerPath
-
- forge {
- convertAccessWideners = true
- extraAccessWideners.add loom.accessWidenerPath.get().asFile.name
- }
-}
-
-configurations {
- common
- shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this.
- compileClasspath.extendsFrom common
- runtimeClasspath.extendsFrom common
- developmentForge.extendsFrom common
-}
-
-repositories {
- // mavens for Forge-exclusives
- maven { url = "https://maven.theillusivec4.top/" } // Curios
- maven { // Create Forge and Registrate Forge
- url = "https://maven.tterrag.com/"
- content {
- includeGroup("com.tterrag.registrate")
- includeGroup("com.simibubi.create")
- }
- }
-}
-
-dependencies {
- forge("net.minecraftforge:forge:${minecraft_version}-${forge_version}")
- common(project(path: ":common", configuration: "namedElements")) { transitive = false }
- shadowCommon(project(path: ":common", configuration: "transformProductionForge")) { transitive = false }
-
- // Create and its dependencies
- modImplementation("com.simibubi.create:create-${minecraft_version}:${create_forge_version}:slim") { transitive = false }
- modImplementation("net.createmod.ponder:Ponder-Forge-${minecraft_version}:${ponder_version}")
- modImplementation("com.tterrag.registrate:Registrate:${registrate_forge_version}")
- modCompileOnly("dev.engine-room.flywheel:flywheel-forge-api-${minecraft_version}:${flywheel_version}")
- modRuntimeOnly("dev.engine-room.flywheel:flywheel-forge-${minecraft_version}:${flywheel_version}")
-
- compileOnly(annotationProcessor("io.github.llamalad7:mixinextras-common:0.4.1"))
- implementation("io.github.llamalad7:mixinextras-forge:0.4.1")
-
- // Development QOL
- modLocalRuntime("mezz.jei:jei-${minecraft_version}-forge:${jei_version}") { transitive = false }
-
- modImplementation "dev.architectury:architectury-forge:$rootProject.architectury_api_version"
-
- // if you would like to add integration with JEI, uncomment this line.
-// modCompileOnly("mezz.jei:jei-${minecraft_version}:${jei_version}:api")
-}
-
-processResources {
- // set up properties for filling into metadata
- Map properties = Map.of(
- "version", version,
- "forge_version", forge_version.split("\\.")[0], // only specify major version of forge
- "minecraft_version", minecraft_version,
- "create_until_version", create_until_version,
- "create_version", create_forge_version.split("-")[0] // cut off build number
- )
- properties.forEach((k, v) -> inputs.property(k, v))
-
- filesMatching("META-INF/mods.toml") {
- expand properties
- }
-}
-
-loom {
- forge {
- mixinConfig(
- "createcobblestone-common.mixins.json",
- "createcobblestone.mixins.json"
- )
- }
-}
-
-shadowJar {
- exclude "fabric.mod.json"
- exclude "architectury.common.json"
-
- configurations = [project.configurations.shadowCommon]
- archiveClassifier = "dev-shadow"
-}
-
-remapJar {
- input.set shadowJar.archiveFile
- dependsOn shadowJar
- archiveClassifier = null
-}
-
-jar {
- archiveClassifier = "dev"
-}
-
-sourcesJar {
- def commonSources = project(":common").sourcesJar
- dependsOn commonSources
- from commonSources.archiveFile.map { zipTree(it) }
-}
-
-components.java {
- withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) {
- skip()
- }
-}
-
-publishing {
- publications {
- mavenForge(MavenPublication) {
- artifactId = rootProject.archives_base_name + "-" + project.name
- from components.java
- }
- }
-
- // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
- repositories {
- // Add repositories to publish to here.
- }
-}
diff --git a/forge/gradle.properties b/forge/gradle.properties
deleted file mode 100644
index 32f842a..0000000
--- a/forge/gradle.properties
+++ /dev/null
@@ -1 +0,0 @@
-loom.platform=forge
\ No newline at end of file
diff --git a/forge/src/main/java/net/createcobblestone/data/forge/GeneratorTypeLoaderImpl.java b/forge/src/main/java/net/createcobblestone/data/forge/GeneratorTypeLoaderImpl.java
deleted file mode 100644
index 473560e..0000000
--- a/forge/src/main/java/net/createcobblestone/data/forge/GeneratorTypeLoaderImpl.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package net.createcobblestone.data.forge;
-
-public class GeneratorTypeLoaderImpl {
- public static void init() {}
-}
diff --git a/forge/src/main/java/net/createcobblestone/forge/CreateCobblestoneExpectPlatformImpl.java b/forge/src/main/java/net/createcobblestone/forge/CreateCobblestoneExpectPlatformImpl.java
deleted file mode 100644
index e4bc36b..0000000
--- a/forge/src/main/java/net/createcobblestone/forge/CreateCobblestoneExpectPlatformImpl.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package net.createcobblestone.forge;
-
-public class CreateCobblestoneExpectPlatformImpl {
- public static String platformName() {
- return "Forge";
- }
-}
diff --git a/forge/src/main/java/net/createcobblestone/forge/CreateCobblestoneForge.java b/forge/src/main/java/net/createcobblestone/forge/CreateCobblestoneForge.java
deleted file mode 100644
index 328f6e2..0000000
--- a/forge/src/main/java/net/createcobblestone/forge/CreateCobblestoneForge.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package net.createcobblestone.forge;
-
-import net.createcobblestone.CreateCobblestoneMod;
-import net.createcobblestone.data.GeneratorTypeLoader;
-import net.createcobblestone.index.forge.CreativeTabsImpl;
-import net.minecraftforge.common.MinecraftForge;
-import net.minecraftforge.event.OnDatapackSyncEvent;
-import net.minecraftforge.eventbus.api.IEventBus;
-import net.minecraftforge.fml.common.Mod;
-import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
-
-import java.util.Collections;
-import java.util.function.Consumer;
-
-import static net.createcobblestone.CreateCobblestoneMod.LOGGER;
-import static net.createcobblestone.CreateCobblestoneMod.REGISTRATE;
-
-@Mod(CreateCobblestoneMod.MOD_ID)
-public class CreateCobblestoneForge {
- public CreateCobblestoneForge() {
- // registrate must be given the mod event bus on forge before registration
- IEventBus eventBus = FMLJavaModLoadingContext.get().getModEventBus();
- REGISTRATE.registerEventListeners(eventBus);
- CreativeTabsImpl.register(FMLJavaModLoadingContext.get().getModEventBus());
-
- MinecraftForge.EVENT_BUS.addListener((Consumer) event -> {
-
- if (event.getPlayer() != null) {
- LOGGER.info("Syncing generator types to new client");
- GeneratorTypeLoader.sendGeneratorTypesToClient(
- Collections.singleton(event.getPlayer())
- );
-
- } else if (!event.getPlayerList().getPlayers().isEmpty()) {
- LOGGER.info("Syncing generator types to all clients");
- GeneratorTypeLoader.sendGeneratorTypesToClient(
- event.getPlayerList().getPlayers()
- );
-
- } else {
- LOGGER.warn("Syncing generator types, but no players found");
- }
- });
-
- CreateCobblestoneMod.init();
- }
-}
diff --git a/forge/src/main/java/net/createcobblestone/forge/EventBusSubscriber.java b/forge/src/main/java/net/createcobblestone/forge/EventBusSubscriber.java
deleted file mode 100644
index 5fcdd19..0000000
--- a/forge/src/main/java/net/createcobblestone/forge/EventBusSubscriber.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package net.createcobblestone.forge;
-
-import net.createcobblestone.CreateCobblestoneMod;
-import net.createcobblestone.data.forge.ResourceReloadListener;
-import net.minecraftforge.event.AddReloadListenerEvent;
-import net.minecraftforge.eventbus.api.SubscribeEvent;
-import net.minecraftforge.fml.common.Mod;
-
-@Mod.EventBusSubscriber(modid = CreateCobblestoneMod.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE)
-public class EventBusSubscriber {
-
- @SubscribeEvent
- public static void addReloadListener(AddReloadListenerEvent event) {
- // Register the custom resource reload listener
- event.addListener(new ResourceReloadListener());
- }
-}
diff --git a/forge/src/main/java/net/createcobblestone/forge/mixin/self/MechanicalGeneratorCapabilities.java b/forge/src/main/java/net/createcobblestone/forge/mixin/self/MechanicalGeneratorCapabilities.java
deleted file mode 100644
index 4808bdd..0000000
--- a/forge/src/main/java/net/createcobblestone/forge/mixin/self/MechanicalGeneratorCapabilities.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package net.createcobblestone.forge.mixin.self;
-
-import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
-import net.createcobblestone.blocks.MechanicalGeneratorBlockEntity;
-import net.minecraft.core.BlockPos;
-import net.minecraft.core.Direction;
-import net.minecraft.world.Container;
-import net.minecraft.world.level.block.entity.BlockEntityType;
-import net.minecraft.world.level.block.state.BlockState;
-import net.minecraftforge.common.capabilities.Capability;
-import net.minecraftforge.common.capabilities.ForgeCapabilities;
-import net.minecraftforge.common.capabilities.ICapabilityProvider;
-import net.minecraftforge.common.util.LazyOptional;
-import net.minecraftforge.items.IItemHandler;
-import net.minecraftforge.items.wrapper.InvWrapper;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Unique;
-
-@Mixin(MechanicalGeneratorBlockEntity.class)
-public abstract class MechanicalGeneratorCapabilities extends KineticBlockEntity implements ICapabilityProvider, Container {
- public MechanicalGeneratorCapabilities(BlockEntityType> type, BlockPos pos, BlockState state) {
- super(type, pos, state);
- }
-
- @Unique
- LazyOptional extends IItemHandler> createcobblestoneinv$handler = LazyOptional.of(() -> new InvWrapper(this));
-
- @Override
- public @NotNull LazyOptional getCapability(@NotNull Capability capability, @Nullable Direction facing) {
- if (capability == ForgeCapabilities.ITEM_HANDLER && !remove) {
- // If down return the down handler otherwise return the one for all other sides
- return createcobblestoneinv$handler.cast();
- }
-
- return super.getCapability(capability, facing);
- }
-
-
- @Override
- public void reviveCaps() {
- super.reviveCaps();
- createcobblestoneinv$handler = LazyOptional.of(() -> new InvWrapper(this));
- }
-
- @Override
- public void invalidateCaps() {
- super.invalidateCaps();
- createcobblestoneinv$handler.invalidate();
- }
-}
diff --git a/forge/src/main/java/net/createcobblestone/index/forge/ConfigImpl.java b/forge/src/main/java/net/createcobblestone/index/forge/ConfigImpl.java
deleted file mode 100644
index 6631d38..0000000
--- a/forge/src/main/java/net/createcobblestone/index/forge/ConfigImpl.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package net.createcobblestone.index.forge;
-
-import net.createcobblestone.CreateCobblestoneMod;
-import net.createcobblestone.config.CreateCobblestoneCommon;
-import net.createcobblestone.index.Config;
-import net.createmod.catnip.config.ConfigBase;
-import net.minecraftforge.common.ForgeConfigSpec;
-import net.minecraftforge.eventbus.api.SubscribeEvent;
-import net.minecraftforge.fml.ModLoadingContext;
-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.util.Map;
-import java.util.function.Supplier;
-
-@Mod.EventBusSubscriber(modid = CreateCobblestoneMod.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
-public class ConfigImpl extends Config {
- private static T register(Supplier factory, ModConfig.Type side) {
- Pair specPair = new ForgeConfigSpec.Builder().configure(builder -> {
- T config = factory.get();
- config.registerAll(builder);
- return config;
- });
-
- T config = specPair.getLeft();
- config.specification = specPair.getRight();
- CONFIGS.put(side, config);
- return config;
- }
-
- @SubscribeEvent
- public static void onLoadForge(ModConfigEvent.Loading event) {
- onLoad(event.getConfig());
- }
-
- @SubscribeEvent
- public static void onReloadForge(ModConfigEvent.Reloading event) {
- onReload(event.getConfig());
- }
-
- public static void register() {
- ModLoadingContext context = ModLoadingContext.get();
- common = register(CreateCobblestoneCommon::new, ModConfig.Type.COMMON);
-
- for (Map.Entry pair : CONFIGS.entrySet())
- context.registerConfig(pair.getKey(), pair.getValue().specification);
- }
-}
diff --git a/forge/src/main/java/net/createcobblestone/index/forge/CreativeTabsImpl.java b/forge/src/main/java/net/createcobblestone/index/forge/CreativeTabsImpl.java
deleted file mode 100644
index f0f72cc..0000000
--- a/forge/src/main/java/net/createcobblestone/index/forge/CreativeTabsImpl.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package net.createcobblestone.index.forge;
-
-import net.createcobblestone.CreateCobblestoneMod;
-import net.createcobblestone.index.Blocks;
-import net.createcobblestone.index.CreativeTabs;
-import net.createcobblestone.index.RegistrateDisplayItemsGenerator;
-import net.minecraft.core.registries.Registries;
-import net.minecraft.network.chat.Component;
-import net.minecraft.resources.ResourceKey;
-import net.minecraft.world.item.CreativeModeTab;
-import net.minecraftforge.eventbus.api.IEventBus;
-import net.minecraftforge.fml.common.Mod;
-import net.minecraftforge.registries.DeferredRegister;
-import net.minecraftforge.registries.RegistryObject;
-
-@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
-public class CreativeTabsImpl {
-
- private static final DeferredRegister TAB_REGISTER =
- DeferredRegister.create(Registries.CREATIVE_MODE_TAB, CreateCobblestoneMod.MOD_ID);
-
- public static final RegistryObject MAIN_TAB = TAB_REGISTER.register("main",
- () -> CreativeModeTab.builder()
- .title(Component.translatable("itemGroup.create_cobblestone"))
- .icon(() -> Blocks.MECHANICAL_GENERATOR_BLOCK.asStack())
- .displayItems(new RegistrateDisplayItemsGenerator(CreativeTabs.Tabs.MAIN))
- .build());
-
- public static CreativeModeTab getBaseTab() {
- return MAIN_TAB.get();
- }
-
- public static ResourceKey getBaseTabKey() {
- return MAIN_TAB.getKey();
- }
-
- public static void register(IEventBus modEventBus) {
- TAB_REGISTER.register(modEventBus);
- }
-}
diff --git a/forge/src/main/java/net/createcobblestone/index/forge/CreativeTabsTabsImpl.java b/forge/src/main/java/net/createcobblestone/index/forge/CreativeTabsTabsImpl.java
deleted file mode 100644
index 23261d9..0000000
--- a/forge/src/main/java/net/createcobblestone/index/forge/CreativeTabsTabsImpl.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package net.createcobblestone.index.forge;
-
-import net.createcobblestone.CreateCobblestoneMod;
-import net.createcobblestone.index.CreativeTabs;
-
-import static net.createcobblestone.index.forge.RegistrateDisplayItemsGeneratorImpl.getTabObject;
-
-public class CreativeTabsTabsImpl {
- public static void use(CreativeTabs.Tabs tab) {
- CreateCobblestoneMod.REGISTRATE.setCreativeTab(getTabObject(tab.getKey()));
- }
-}
diff --git a/forge/src/main/java/net/createcobblestone/index/forge/RegistrateDisplayItemsGeneratorImpl.java b/forge/src/main/java/net/createcobblestone/index/forge/RegistrateDisplayItemsGeneratorImpl.java
deleted file mode 100644
index 6935a5d..0000000
--- a/forge/src/main/java/net/createcobblestone/index/forge/RegistrateDisplayItemsGeneratorImpl.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package net.createcobblestone.index.forge;
-
-import net.createcobblestone.index.CreativeTabs;
-import net.minecraft.resources.ResourceKey;
-import net.minecraft.world.item.CreativeModeTab;
-import net.minecraftforge.registries.RegistryObject;
-
-public class RegistrateDisplayItemsGeneratorImpl {
- public static RegistryObject getTabObject(ResourceKey tab) {
- RegistryObject tabObject;
- if (tab == CreativeTabs.getBaseTabKey()) {
- tabObject = CreativeTabsImpl.MAIN_TAB;
- } else {
- tabObject = CreativeTabsImpl.MAIN_TAB;
- }
- return tabObject;
- }
-}
diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml
deleted file mode 100644
index 381fb8c..0000000
--- a/forge/src/main/resources/META-INF/mods.toml
+++ /dev/null
@@ -1,35 +0,0 @@
-modLoader = "javafml"
-loaderVersion = "[${forge_version},)"
-#issueTrackerURL = ""
-license = "Insert License Here"
-
-[[mods]]
-modId = "createcobblestone"
-version = "${version}"
-displayName = "Create cobblestone"
-authors = "MrStickyPiston"
-description = '''
-Adds a block generating cobblestone using SU, stopping cobblestone generators from eating your frames.
-'''
-logoFile = "icon.png"
-
-[[dependencies.createcobblestone]]
-modId = "forge"
-mandatory = true
-versionRange = "[${forge_version},)"
-ordering = "NONE"
-side = "BOTH"
-
-[[dependencies.createcobblestone]]
-modId = "minecraft"
-mandatory = true
-versionRange = "${minecraft_version}"
-ordering = "NONE"
-side = "BOTH"
-
-[[dependencies.createcobblestone]]
-modId="create"
-mandatory=true
-versionRange="[${create_version},${create_until_version})"
-ordering="NONE"
-side="BOTH"
diff --git a/forge/src/main/resources/createcobblestone.mixins.json b/forge/src/main/resources/createcobblestone.mixins.json
deleted file mode 100644
index c47e029..0000000
--- a/forge/src/main/resources/createcobblestone.mixins.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "required": true,
- "minVersion": "0.8",
- "package": "net.createcobblestone.forge.mixin",
- "compatibilityLevel": "JAVA_17",
- "client": [
- ],
- "mixins": [
- "self.MechanicalGeneratorCapabilities"
- ],
- "injectors": {
- "defaultRequire": 1
- }
-}
\ No newline at end of file
diff --git a/forge/src/main/resources/pack.mcmeta b/forge/src/main/resources/pack.mcmeta
deleted file mode 100644
index faebba3..0000000
--- a/forge/src/main/resources/pack.mcmeta
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "pack": {
- "description": "Create cobblestone",
- "pack_format": 8
- }
-}
diff --git a/gradle.properties b/gradle.properties
index 54e8b81..f24bd6a 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,51 +1,39 @@
-org.gradle.jvmargs = -Xmx2G
-
-# Mod Info
+org.gradle.jvmargs = -Xmx1G
+org.gradle.daemon = true
+org.gradle.parallel = true
+org.gradle.caching = true
+org.gradle.configuration-cache = true
+
+parchment_minecraft_version = 1.21.1
+parchment_mappings_version = 2024.11.17
+
+# Environment Properties
+minecraft_version = 1.21.1
+minecraft_version_range = [1.21.1]
+neo_version = 21.1.205
+neo_version_range = [21.1.0,)
+loader_version_range = [4,)
archives_base_name = createcobblestone
-mod_version = 1.4.5
-maven_group = net.createcobblestone
-
-minecraft_version = 1.20.1
-enabled_platforms = fabric,forge
-
-# Fabric
-# https://fabricmc.net/develop/
-fabric_loader_version = 0.16.9
-fabric_api_version = 0.92.2+1.20.1
-
-# Forge
-# https://files.minecraftforge.net/net/minecraftforge/forge/
-forge_version = 47.1.43
-# Create - Fabric
-# https://modrinth.com/mod/create-fabric/versions
-create_fabric_version = 6.0.0.0+mc1.20.1-build.1652
-
-# Create - Forge
-# https://github.com/Creators-of-Create/Create/wiki/Depending-on-Create
-create_forge_version = 6.0.1-41
-ponder_version = 1.0.36
-registrate_forge_version = MC1.20-1.3.3
-flywheel_version = 1.0.1
-
-# Create until version
+## Mod Properties
+mod_id = createcobblestone
+mod_name = Create cobblestone
+mod_license = CC0 1.0 Universal
+mod_version = 1.4.5
+mod_group_id = net.createcobblestone
+mod_authors = MrStickyPiston
+mod_description = Adds a block generating cobblestone using SU, stopping cobblestone generators from eating your frames.
+mod_logo = icon.png
+mod_github = https://github.com/StickyPiston-development/CreateCobblestone
+
+## Dependencies
+create_version = 6.0.6-98
create_until_version = 6.1
-# Development QOL
-# Create Fabric supports all 3 recipe viewers: JEI, REI, and EMI. This decides which is enabled at runtime.
-# set to disabled to have none of them.
-fabric_recipe_viewer = disabled
-# JEI - https://www.curseforge.com/minecraft/mc-mods/jei/files/all
-jei_version = 15.20.0.106
-# REI - https://modrinth.com/mod/rei/versions
-rei_version = 12.0.674
-# EMI - https://modrinth.com/mod/emi/versions
-emi_version = 1.0.28+1.20.1
-
-# Mod Menu - https://modrinth.com/mod/modmenu/versions
-modmenu_version = 7.2.2
-# LazyDFU - https://modrinth.com/mod/lazydfu/versions
-lazydfu_version = 0.1.3
-
-# Architectury API
-architectury_api_version = 9.2.14
+registrate_version = MC1.21-1.3.0+62
+ponder_version = 1.0.56
+vanillin_version = 1.0.0-beta-11
+flywheel_version = 1.0.0-9
+jei_version = 19.21.0.247
+curios_version = 9.2.2
+jade_version=15.10.0+neoforge
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 41d9927..1b33c55 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index d6e308a..d4081da 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
index 1b6c787..23d15a9 100755
--- a/gradlew
+++ b/gradlew
@@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
+# SPDX-License-Identifier: Apache-2.0
+#
##############################################################################
#
@@ -55,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
-# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -80,13 +82,11 @@ do
esac
done
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-APP_NAME="Gradle"
+# This is normally unused
+# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@@ -114,7 +114,7 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;;
esac
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+CLASSPATH="\\\"\\\""
# Determine the Java command to use to start the JVM.
@@ -133,22 +133,29 @@ location of your Java installation."
fi
else
JAVACMD=java
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+ if ! command -v java >/dev/null 2>&1
+ then
+ die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
+ fi
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@@ -193,18 +200,28 @@ if "$cygwin" || "$msys" ; then
done
fi
-# Collect all arguments for the java command;
-# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
-# shell script including quotes and variable substitutions, so put them in
-# double quotes to make sure that they get re-expanded; and
-# * put everything else in single quotes, so that it's not re-expanded.
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command:
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# and any embedded shellness will be escaped.
+# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
- org.gradle.wrapper.GradleWrapperMain \
+ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
diff --git a/gradlew.bat b/gradlew.bat
index 107acd3..db3a6ac 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -13,8 +13,10 @@
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
+@rem SPDX-License-Identifier: Apache-2.0
+@rem
-@if "%DEBUG%" == "" @echo off
+@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@@ -25,7 +27,8 @@
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@@ -40,13 +43,13 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto execute
+if %ERRORLEVEL% equ 0 goto execute
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
goto fail
@@ -56,32 +59,34 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
goto fail
:execute
@rem Setup the command line
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+set CLASSPATH=
@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
:end
@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
+if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
diff --git a/settings.gradle b/settings.gradle
index 7e52588..e2aad7b 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,15 +1,9 @@
pluginManagement {
repositories {
- maven { url = "https://maven.fabricmc.net/" }
- maven { url = "https://maven.architectury.dev/" }
- maven { url = "https://maven.minecraftforge.net/" }
- maven { url = "https://maven.quiltmc.org/repository/release" }
gradlePluginPortal()
}
}
-include("common")
-include("fabric")
-include("forge")
-
-rootProject.name = "create-cobblestone"
+plugins {
+ id 'org.gradle.toolchains.foojay-resolver-convention' version '0.9.0'
+}
diff --git a/src/generated/resources/.cache/46955bab0b5d8e074f6b495892f1dd8144c77912 b/src/generated/resources/.cache/46955bab0b5d8e074f6b495892f1dd8144c77912
new file mode 100644
index 0000000..de26fc1
--- /dev/null
+++ b/src/generated/resources/.cache/46955bab0b5d8e074f6b495892f1dd8144c77912
@@ -0,0 +1,7 @@
+// 1.21.1 2025-08-27T21:16:40.0446206 Registrate Provider for createcobblestone [Registries, Data Maps, Recipes, Advancements, Loot Tables, Tags (enchantments), Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), generic_server_provider, Blockstates, Item models, Lang (en_us/en_ud), generic_client_provider]
+577012a49d5fc542290eef7213e64ae33f46b355 assets/createcobblestone/blockstates/mechanical_generator.json
+60ac83844c86c811690247213c804c96d029f07b assets/createcobblestone/lang/en_ud.json
+d701f130156491c8e568d2a1d4523a1d8331c885 assets/createcobblestone/lang/en_us.json
+3c03d952d7f22a5e0176a0694bb790349af84d09 assets/createcobblestone/models/item/mechanical_generator.json
+3ade8696acdc55c5b231c24b6aeedef62d1ad4f8 data/createcobblestone/loot_table/blocks/mechanical_generator.json
+aa088294db259aea7d82c1abd88cc75c6adf439b data/create/tags/block/safe_nbt.json
diff --git a/src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d b/src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d
new file mode 100644
index 0000000..1459df2
--- /dev/null
+++ b/src/generated/resources/.cache/59eb3dbb5f86130e09b3c62d89b9525ee01cf52d
@@ -0,0 +1,2 @@
+// 1.21.1 2025-08-27T21:16:40.0466223 Loot Tables
+5f019896a085fb88abb62ab748544d2feae08673 data/createcobblestone/loot_table/blocks/mechanical_generator.json
diff --git a/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e b/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e
new file mode 100644
index 0000000..9676e80
--- /dev/null
+++ b/src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e
@@ -0,0 +1,3 @@
+// 1.21.1 2025-08-27T21:16:40.0476231 Recipes
+962a5e99da12ac8355864bf0fd9cca3684238e80 data/createcobblestone/advancement/recipes/redstone/mechanical_generator.json
+aa467b8548858017378536112973dfd641659603 data/createcobblestone/recipe/mechanical_generator.json
diff --git a/src/generated/resources/assets/createcobblestone/blockstates/mechanical_generator.json b/src/generated/resources/assets/createcobblestone/blockstates/mechanical_generator.json
new file mode 100644
index 0000000..378bfff
--- /dev/null
+++ b/src/generated/resources/assets/createcobblestone/blockstates/mechanical_generator.json
@@ -0,0 +1,19 @@
+{
+ "variants": {
+ "facing=east": {
+ "model": "createcobblestone:block/mechanical_generator",
+ "y": 90
+ },
+ "facing=north": {
+ "model": "createcobblestone:block/mechanical_generator"
+ },
+ "facing=south": {
+ "model": "createcobblestone:block/mechanical_generator",
+ "y": 180
+ },
+ "facing=west": {
+ "model": "createcobblestone:block/mechanical_generator",
+ "y": 270
+ }
+ }
+}
\ No newline at end of file
diff --git a/common/src/main/resources/assets/createcobblestone/lang/en_us.json b/src/generated/resources/assets/createcobblestone/lang/en_us.json
similarity index 66%
rename from common/src/main/resources/assets/createcobblestone/lang/en_us.json
rename to src/generated/resources/assets/createcobblestone/lang/en_us.json
index 961744d..63c52f0 100644
--- a/common/src/main/resources/assets/createcobblestone/lang/en_us.json
+++ b/src/generated/resources/assets/createcobblestone/lang/en_us.json
@@ -1,8 +1,7 @@
{
"itemGroup.create_cobblestone": "Create Cobblestone",
-
"block.createcobblestone.mechanical_generator": "Mechanical Generator",
-
"block.createcobblestone.generators.hovertext.itemprefix": "Generates: ",
- "block.createcobblestone.generators.hovertext.no_item": "Click on the generator with a stone type to set the generator type."
+ "block.createcobblestone.generators.hovertext.no_item": "Click on the generator with a stone type to set the generator type.",
+ "createcobblestone.gui.goggles.generators.itemprefix": "Generates: %1$s"
}
\ No newline at end of file
diff --git a/common/src/main/resources/assets/createcobblestone/lang/et_ee.json b/src/generated/resources/assets/createcobblestone/lang/et_ee.json
similarity index 67%
rename from common/src/main/resources/assets/createcobblestone/lang/et_ee.json
rename to src/generated/resources/assets/createcobblestone/lang/et_ee.json
index 78337a8..ea1b931 100644
--- a/common/src/main/resources/assets/createcobblestone/lang/et_ee.json
+++ b/src/generated/resources/assets/createcobblestone/lang/et_ee.json
@@ -1,8 +1,7 @@
{
"itemGroup.create_cobblestone": "Create Cobblestone",
-
"block.createcobblestone.mechanical_generator": "Mehaaniline generaator",
-
"block.createcobblestone.generators.hovertext.itemprefix": "Genereerib: ",
- "block.createcobblestone.generators.hovertext.no_item": "Generaatori Klõpsumine kiviga muudub generatori tüüp."
+ "block.createcobblestone.generators.hovertext.no_item": "Generaatori Klõpsumine kiviga muudub generatori tüüp.",
+ "createcobblestone.gui.goggles.generators.itemprefix": "Genereerib: %1$s"
}
\ No newline at end of file
diff --git a/common/src/main/resources/assets/createcobblestone/lang/ru_ru.json b/src/generated/resources/assets/createcobblestone/lang/ru_ru.json
similarity index 82%
rename from common/src/main/resources/assets/createcobblestone/lang/ru_ru.json
rename to src/generated/resources/assets/createcobblestone/lang/ru_ru.json
index da70801..5204b0f 100644
--- a/common/src/main/resources/assets/createcobblestone/lang/ru_ru.json
+++ b/src/generated/resources/assets/createcobblestone/lang/ru_ru.json
@@ -1,8 +1,7 @@
{
"itemGroup.create_cobblestone": "Create Cobblestone",
-
"block.createcobblestone.mechanical_generator": "Механический генератор",
-
"block.createcobblestone.generators.hovertext.itemprefix": "Генерирует: ",
- "block.createcobblestone.generators.hovertext.no_item": "Нажатие по генератору определённым видом камня задаёт генерируемый ресурс."
+ "block.createcobblestone.generators.hovertext.no_item": "Нажатие по генератору определённым видом камня задаёт генерируемый ресурс.",
+ "createcobblestone.gui.goggles.generators.itemprefix": "Генерирует: %1$s"
}
\ No newline at end of file
diff --git a/common/src/main/resources/assets/createcobblestone/models/item/mechanical_generator.json b/src/generated/resources/assets/createcobblestone/models/item/mechanical_generator.json
similarity index 100%
rename from common/src/main/resources/assets/createcobblestone/models/item/mechanical_generator.json
rename to src/generated/resources/assets/createcobblestone/models/item/mechanical_generator.json
diff --git a/src/generated/resources/data/create/tags/block/safe_nbt.json b/src/generated/resources/data/create/tags/block/safe_nbt.json
new file mode 100644
index 0000000..eb1f230
--- /dev/null
+++ b/src/generated/resources/data/create/tags/block/safe_nbt.json
@@ -0,0 +1,5 @@
+{
+ "values": [
+ "createcobblestone:mechanical_generator"
+ ]
+}
\ No newline at end of file
diff --git a/src/generated/resources/data/createcobblestone/advancement/recipes/redstone/mechanical_generator.json b/src/generated/resources/data/createcobblestone/advancement/recipes/redstone/mechanical_generator.json
new file mode 100644
index 0000000..3d3dbc2
--- /dev/null
+++ b/src/generated/resources/data/createcobblestone/advancement/recipes/redstone/mechanical_generator.json
@@ -0,0 +1,32 @@
+{
+ "parent": "minecraft:recipes/root",
+ "criteria": {
+ "has_drill": {
+ "conditions": {
+ "items": [
+ {
+ "items": "create:mechanical_drill"
+ }
+ ]
+ },
+ "trigger": "minecraft:inventory_changed"
+ },
+ "has_the_recipe": {
+ "conditions": {
+ "recipe": "createcobblestone:mechanical_generator"
+ },
+ "trigger": "minecraft:recipe_unlocked"
+ }
+ },
+ "requirements": [
+ [
+ "has_the_recipe",
+ "has_drill"
+ ]
+ ],
+ "rewards": {
+ "recipes": [
+ "createcobblestone:mechanical_generator"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/generated/resources/data/createcobblestone/loot_table/blocks/mechanical_generator.json b/src/generated/resources/data/createcobblestone/loot_table/blocks/mechanical_generator.json
new file mode 100644
index 0000000..67163fd
--- /dev/null
+++ b/src/generated/resources/data/createcobblestone/loot_table/blocks/mechanical_generator.json
@@ -0,0 +1,30 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "bonus_rolls": 0.0,
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ],
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "functions": [
+ {
+ "function": "minecraft:copy_components",
+ "include": [
+ "minecraft:block_entity_data"
+ ],
+ "source": "block_entity"
+ }
+ ],
+ "name": "createcobblestone:mechanical_generator"
+ }
+ ],
+ "rolls": 1.0
+ }
+ ],
+ "random_sequence": "createcobblestone:blocks/mechanical_generator"
+}
\ No newline at end of file
diff --git a/common/src/main/resources/data/createcobblestone/recipes/crafting/mechanical_generator.json b/src/generated/resources/data/createcobblestone/recipe/mechanical_generator.json
similarity index 87%
rename from common/src/main/resources/data/createcobblestone/recipes/crafting/mechanical_generator.json
rename to src/generated/resources/data/createcobblestone/recipe/mechanical_generator.json
index 52f36fd..8a5475e 100644
--- a/common/src/main/resources/data/createcobblestone/recipes/crafting/mechanical_generator.json
+++ b/src/generated/resources/data/createcobblestone/recipe/mechanical_generator.json
@@ -1,32 +1,33 @@
{
"type": "minecraft:crafting_shaped",
"category": "redstone",
- "pattern": [
- "IEI",
- "WDL",
- "BBB"
- ],
"key": {
- "I": {
- "item": "create:brass_ingot"
+ "B": {
+ "item": "create:brass_casing"
+ },
+ "D": {
+ "item": "create:mechanical_drill"
},
"E": {
"item": "create:electron_tube"
},
- "B": {
- "item": "create:brass_casing"
- },
- "W": {
- "item": "minecraft:water_bucket"
+ "I": {
+ "item": "create:brass_ingot"
},
"L": {
"item": "minecraft:lava_bucket"
},
- "D": {
- "item": "create:mechanical_drill"
+ "W": {
+ "item": "minecraft:water_bucket"
}
},
+ "pattern": [
+ "IEI",
+ "WDL",
+ "BBB"
+ ],
"result": {
- "item": "createcobblestone:mechanical_generator"
+ "count": 1,
+ "id": "createcobblestone:mechanical_generator"
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/net/createcobblestone/neoforge/CreateCobblestoneNeoForge.java b/src/main/java/net/createcobblestone/neoforge/CreateCobblestoneNeoForge.java
new file mode 100644
index 0000000..235f881
--- /dev/null
+++ b/src/main/java/net/createcobblestone/neoforge/CreateCobblestoneNeoForge.java
@@ -0,0 +1,127 @@
+package net.createcobblestone.neoforge;
+
+import com.simibubi.create.foundation.data.CreateRegistrate;
+import net.createcobblestone.neoforge.blocks.MechanicalGeneratorBlockEntity;
+import net.createcobblestone.neoforge.data.GeneratorTypeLoader;
+import net.createcobblestone.neoforge.data.provider.MechanicalGeneratorLootTableProvider;
+import net.createcobblestone.neoforge.data.provider.MechanicalGeneratorRecipeProvider;
+import net.createcobblestone.neoforge.data.GeneratorTypesPayload;
+import net.createcobblestone.neoforge.data.ResourceReloadListener;
+import net.createcobblestone.neoforge.index.*;
+import net.createcobblestone.neoforge.index.Config;
+import net.minecraft.resources.ResourceLocation;
+import net.neoforged.bus.api.SubscribeEvent;
+import net.neoforged.fml.common.EventBusSubscriber;
+import net.neoforged.fml.event.config.ModConfigEvent;
+import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
+import net.neoforged.neoforge.data.event.GatherDataEvent;
+import net.neoforged.neoforge.event.AddReloadListenerEvent;
+import net.neoforged.neoforge.event.OnDatapackSyncEvent;
+
+import net.neoforged.bus.api.IEventBus;
+import net.neoforged.fml.common.Mod;
+import net.neoforged.fml.ModContainer;
+import net.neoforged.neoforge.common.NeoForge;
+import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent;
+import net.neoforged.neoforge.network.registration.PayloadRegistrar;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Collections;
+
+@EventBusSubscriber(modid = CreateCobblestoneNeoForge.MOD_ID)
+@Mod(CreateCobblestoneNeoForge.MOD_ID)
+public class CreateCobblestoneNeoForge {
+ public static final String MOD_ID = "createcobblestone";
+ public static final String NAME = "Create cobblestone NeoForge";
+ public static final Logger LOGGER = LoggerFactory.getLogger(NAME);
+
+ public static final CreateRegistrate REGISTRATE = CreateRegistrate.create(MOD_ID);
+
+ public CreateCobblestoneNeoForge(IEventBus eventBus, ModContainer modContainer) {
+ LOGGER.info("{} initializing on platform: {}", NAME, "NeoForge");
+
+ REGISTRATE.registerEventListeners(eventBus);
+ CreativeTabs.register(eventBus);
+ NeoForge.EVENT_BUS.addListener(this::onDatapackSyncEvent);
+ Config.register(modContainer);
+ Blocks.register(); // hold registrate in a separate class to avoid loading early on forge
+ BlockEntities.register();
+ GeneratorTypeLoader.register();
+ eventBus.register(CreateCobblestoneNeoForge.class);
+ }
+
+ public static ResourceLocation asResource(String path) {
+ return ResourceLocation.fromNamespaceAndPath(MOD_ID, path);
+ }
+
+ @SubscribeEvent
+ public static void onGatherDataEvent(GatherDataEvent event) {
+ var gen = event.getGenerator();
+ var out = gen.getPackOutput();
+ var loot = event.getLookupProvider();
+ var efh = event.getExistingFileHelper();
+ var registries = event.getLookupProvider();
+
+
+ // Recipe
+ gen.addProvider(event.includeServer(), new MechanicalGeneratorRecipeProvider(out, loot));
+
+ // Loot Table
+ gen.addProvider(event.includeServer(), new MechanicalGeneratorLootTableProvider(out, registries));
+
+ }
+
+// @SubscribeEvent
+// public static void onAddReloadListenerEvent(AddReloadListenerEvent event) {
+// // Register the custom resource reload listener
+// event.addListener(new ResourceReloadListener());
+// }
+
+
+ @SubscribeEvent
+ public static void onRegisterCapabilitiesEvent(RegisterCapabilitiesEvent event){
+ MechanicalGeneratorBlockEntity.registerCapabilities(event);
+ }
+
+ @SubscribeEvent
+ public static void onModConfigLoadingEvent(ModConfigEvent.Loading event){
+ Config.onLoad(event.getConfig());
+ }
+
+ @SubscribeEvent
+ public static void onModConfigReloadingEvent(ModConfigEvent.Reloading event){
+ Config.onReload(event.getConfig());
+ }
+
+ @SubscribeEvent
+ public static void onRegisterPayloadsEvent(RegisterPayloadHandlersEvent event) {
+ LOGGER.info("Registering packets for " + NAME);
+
+ final PayloadRegistrar registrar = event.registrar("1");
+
+ registrar.playToClient(
+ GeneratorTypesPayload.TYPE,
+ GeneratorTypesPayload.STREAM_CODEC,
+ Network::handleGeneratorTypesOnClient
+ );
+ }
+
+ private void onDatapackSyncEvent(OnDatapackSyncEvent event) {
+ if (event.getPlayer() != null) {
+ LOGGER.info("Syncing generator types to new client");
+ GeneratorTypeLoader.sendGeneratorTypesToClient(
+ Collections.singleton(event.getPlayer())
+ );
+
+ } else if (!event.getPlayerList().getPlayers().isEmpty()) {
+ LOGGER.info("Syncing generator types to all clients");
+ GeneratorTypeLoader.sendGeneratorTypesToClient(
+ event.getPlayerList().getPlayers()
+ );
+
+ } else {
+ LOGGER.warn("Syncing generator types, but no players found");
+ }
+ }
+}
diff --git a/src/main/java/net/createcobblestone/neoforge/EventBusSubscriber.java b/src/main/java/net/createcobblestone/neoforge/EventBusSubscriber.java
new file mode 100644
index 0000000..a777f96
--- /dev/null
+++ b/src/main/java/net/createcobblestone/neoforge/EventBusSubscriber.java
@@ -0,0 +1,14 @@
+package net.createcobblestone.neoforge;
+
+import net.createcobblestone.neoforge.data.ResourceReloadListener;
+import net.neoforged.neoforge.event.AddReloadListenerEvent;
+
+@net.neoforged.fml.common.EventBusSubscriber(modid = CreateCobblestoneNeoForge.MOD_ID)
+public class EventBusSubscriber {
+
+ @net.neoforged.bus.api.SubscribeEvent
+ public static void addReloadListener(AddReloadListenerEvent event) {
+ // Register the custom resource reload listener
+ event.addListener(new ResourceReloadListener());
+ }
+}
\ No newline at end of file
diff --git a/common/src/main/java/net/createcobblestone/blocks/MechanicalGeneratorBlock.java b/src/main/java/net/createcobblestone/neoforge/blocks/MechanicalGeneratorBlock.java
similarity index 65%
rename from common/src/main/java/net/createcobblestone/blocks/MechanicalGeneratorBlock.java
rename to src/main/java/net/createcobblestone/neoforge/blocks/MechanicalGeneratorBlock.java
index 8040ac1..6251961 100644
--- a/common/src/main/java/net/createcobblestone/blocks/MechanicalGeneratorBlock.java
+++ b/src/main/java/net/createcobblestone/neoforge/blocks/MechanicalGeneratorBlock.java
@@ -1,24 +1,24 @@
-package net.createcobblestone.blocks;
+package net.createcobblestone.neoforge.blocks;
import com.simibubi.create.content.kinetics.base.HorizontalKineticBlock;
import com.simibubi.create.foundation.block.IBE;
-import net.createcobblestone.index.BlockEntities;
-import net.createcobblestone.index.Config;
-import net.createcobblestone.data.GeneratorType;
+import net.createcobblestone.neoforge.data.GeneratorType;
+import net.createcobblestone.neoforge.index.BlockEntities;
+import net.createcobblestone.neoforge.index.Config;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
-import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.InteractionHand;
-import net.minecraft.world.InteractionResult;
+import net.minecraft.world.ItemInteractionResult;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.BlockPlaceContext;
-import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelReader;
+import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.BlockHitResult;
+import net.minecraft.world.phys.HitResult;
import org.jetbrains.annotations.NotNull;
public class MechanicalGeneratorBlock extends HorizontalKineticBlock implements IBE {
@@ -63,42 +63,41 @@ public SpeedLevel getMinimumRequiredSpeedLevel() {
}
@Override
- public @NotNull InteractionResult use(@NotNull BlockState state, @NotNull Level level, @NotNull BlockPos pos, @NotNull Player player, @NotNull InteractionHand hand, @NotNull BlockHitResult hit) {
+ public @NotNull ItemInteractionResult useItemOn(@NotNull ItemStack stack, @NotNull BlockState state, @NotNull Level level, @NotNull BlockPos pos, @NotNull Player player, @NotNull InteractionHand hand, @NotNull BlockHitResult hitResult) {
+ super.useItemOn(stack, state, level, pos, player, hand, hitResult);
try {
GeneratorType type = GeneratorType.fromItem(player.getMainHandItem().getItem());
if (type.getBlock() == null || type == GeneratorType.NONE || !Config.common().isEnabled(type)) {
- return InteractionResult.FAIL;
+ return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION;
}
MechanicalGeneratorBlockEntity be = this.getBlockEntity(level, pos);
if (be != null) {
be.updateType(type);
- return InteractionResult.SUCCESS;
+ return ItemInteractionResult.SUCCESS;
} else {
- return InteractionResult.FAIL;
+ return ItemInteractionResult.FAIL;
}
} catch (NullPointerException ignored) {
- return InteractionResult.FAIL;
+ return ItemInteractionResult.FAIL;
}
}
@Override
- public @NotNull ItemStack getCloneItemStack(@NotNull BlockGetter level, @NotNull BlockPos pos, @NotNull BlockState state) {
- ItemStack stack = super.getCloneItemStack(level, pos, state);
+ public @NotNull ItemStack getCloneItemStack(@NotNull BlockState state, @NotNull HitResult target, @NotNull LevelReader level, @NotNull BlockPos pos, @NotNull Player player) {
+ ItemStack stack = super.getCloneItemStack(state, target, level, pos, player);
- MechanicalGeneratorBlockEntity blockEntity = (MechanicalGeneratorBlockEntity) level.getBlockEntity(pos);
-
- if (blockEntity == null) return stack;
-
- CompoundTag tag = new CompoundTag();
- tag.putString("type", blockEntity.type.getId());
- stack.addTagElement("BlockEntityTag", tag);
+ BlockEntity be = level.getBlockEntity(pos);
+ if (be instanceof MechanicalGeneratorBlockEntity gen) {
+ gen.type.writeToItemStack(stack);
+ }
return stack;
}
+
}
diff --git a/common/src/main/java/net/createcobblestone/blocks/MechanicalGeneratorBlockEntity.java b/src/main/java/net/createcobblestone/neoforge/blocks/MechanicalGeneratorBlockEntity.java
similarity index 61%
rename from common/src/main/java/net/createcobblestone/blocks/MechanicalGeneratorBlockEntity.java
rename to src/main/java/net/createcobblestone/neoforge/blocks/MechanicalGeneratorBlockEntity.java
index 6b1c75d..be9010a 100644
--- a/common/src/main/java/net/createcobblestone/blocks/MechanicalGeneratorBlockEntity.java
+++ b/src/main/java/net/createcobblestone/neoforge/blocks/MechanicalGeneratorBlockEntity.java
@@ -1,22 +1,33 @@
-package net.createcobblestone.blocks;
+package net.createcobblestone.neoforge.blocks;
import com.simibubi.create.content.kinetics.base.KineticBlockEntity;
-import net.createcobblestone.CreateCobblestoneMod;
-import net.createcobblestone.data.GeneratorType;
-import net.createcobblestone.index.Config;
+import net.createcobblestone.neoforge.CreateCobblestoneNeoForge;
+import net.createcobblestone.neoforge.data.GeneratorType;
+import net.createcobblestone.neoforge.index.BlockEntities;
+import net.createcobblestone.neoforge.index.Config;
+import net.createcobblestone.neoforge.utils.CreateCobblestoneLang;
+import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
+import net.minecraft.core.HolderLookup;
import net.minecraft.core.NonNullList;
import net.minecraft.nbt.CompoundTag;
+import net.minecraft.network.chat.Component;
import net.minecraft.world.Container;
import net.minecraft.world.ContainerHelper;
import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
+import net.neoforged.neoforge.capabilities.Capabilities;
+import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
+import net.neoforged.neoforge.items.wrapper.InvWrapper;
import org.jetbrains.annotations.NotNull;
+import java.util.List;
+
import static java.lang.Math.abs;
import static java.lang.Math.min;
@@ -33,27 +44,23 @@ public MechanicalGeneratorBlockEntity(BlockEntityType extends MechanicalGenera
items = NonNullList.withSize(size, ItemStack.EMPTY);
type = GeneratorType.NONE;
-
- if (type == null) {
- throw new IllegalStateException("Generator type cannot be null (GeneratorTypes not initialized but mechanicalGeneratorBlockEntity created)");
- }
}
@Override
- protected void write(CompoundTag compound, boolean clientPacket) {
- super.write(compound, clientPacket);
+ protected void write(CompoundTag compound, HolderLookup.Provider registries, boolean clientPacket) {
+ super.write(compound, registries, clientPacket);
- compound.putString("type", type.getId());
+ type.writeToCompoundTag(compound);
}
@Override
- protected void read(CompoundTag compound, boolean clientPacket) {
- super.read(compound, clientPacket);
+ protected void read(CompoundTag compound, HolderLookup.Provider registries, boolean clientPacket) {
+ super.read(compound, registries, clientPacket);
try {
- updateType(GeneratorType.fromId(compound.getString("type")));
+ updateType(GeneratorType.fromCompoundTag(compound));
} catch (IllegalArgumentException e) {
- CreateCobblestoneMod.LOGGER.error("Invalid generator type \"{}\", setting type to NONE", compound.getString("type"));
+ CreateCobblestoneNeoForge.LOGGER.error("Invalid generator type \"{}\", setting type to NONE", GeneratorType.fromCompoundTag(compound).getId());
type = GeneratorType.NONE;
setChanged();
}
@@ -128,7 +135,7 @@ public void tick(){
} catch (NullPointerException e) {
if (Config.common().enableDebugLogging.get()) {
- CreateCobblestoneMod.LOGGER.error("Tried accessing generator block before world was loaded");
+ CreateCobblestoneNeoForge.LOGGER.error("Tried accessing generator block before world was loaded");
}
return;
}
@@ -144,7 +151,7 @@ public void tick(){
this.available = min(this.available + abs(getSpeed() * type.getOutputPerSecondPerRpm())/20, type.getStorage());
}
- int current = this.items.get(0).getCount();
+ int current = this.items.getFirst().getCount();
int added = (int) this.available;
this.available -= added;
@@ -163,26 +170,26 @@ public void updateType(GeneratorType newType) {
if (newType == null) {
if (Config.common().enableDebugLogging.get()) {
- CreateCobblestoneMod.LOGGER.error("Attempted to update generator type to null");
+ CreateCobblestoneNeoForge.LOGGER.error("Attempted to update generator type to null");
}
return;
}
if (Config.common().enableDebugLogging.get()) {
- CreateCobblestoneMod.LOGGER.info("Trying to update generator type from \"{}\" to \"{}\"", type.getId(), newType.getId());
+ CreateCobblestoneNeoForge.LOGGER.info("Trying to update generator type from \"{}\" to \"{}\"", type.getId(), newType.getId());
}
if (!Config.common().isEnabled(newType)){
if (!Config.common().isEnabled(type)) {
newType = GeneratorType.NONE;
} else {
- CreateCobblestoneMod.LOGGER.error("Disabled generator type \"{}\", not changing old generator type. ({})", newType.getId(), type.getId());
+ CreateCobblestoneNeoForge.LOGGER.error("Disabled generator type \"{}\", not changing old generator type. ({})", newType.getId(), type.getId());
return;
}
}
if (Config.common().enableDebugLogging.get()) {
- CreateCobblestoneMod.LOGGER.info("Changing generator type from \"{}\" to \"{}\"", type.getId(), newType.getId());
+ CreateCobblestoneNeoForge.LOGGER.info("Changing generator type from \"{}\" to \"{}\"", type.getId(), newType.getId());
}
this.type = newType;
@@ -193,4 +200,31 @@ public void updateType(GeneratorType newType) {
this.setChanged();
}
-}
+
+ public static void registerCapabilities(RegisterCapabilitiesEvent event) {
+ event.registerBlockEntity(
+ Capabilities.ItemHandler.BLOCK,
+ BlockEntities.MECHANICAL_GENERATOR.get(),
+ (be, side) -> new InvWrapper(be)
+ );
+ }
+
+ @Override
+ public boolean addToGoggleTooltip(List tooltip, boolean isPlayerSneaking) {
+ boolean added = super.addToGoggleTooltip(tooltip, isPlayerSneaking);
+
+ if(!type.equals(GeneratorType.NONE)) {
+ Item generatedItem = type.getItem();
+
+ CreateCobblestoneLang
+ .translate(
+ "gui.goggles.generators.itemprefix",
+ generatedItem.getName(generatedItem.getDefaultInstance())
+ )
+ .style(ChatFormatting.GREEN)
+ .forGoggles(tooltip);
+ }
+
+ return added;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/net/createcobblestone/neoforge/blocks/MechanicalGeneratorBlockItem.java b/src/main/java/net/createcobblestone/neoforge/blocks/MechanicalGeneratorBlockItem.java
new file mode 100644
index 0000000..f8b1e22
--- /dev/null
+++ b/src/main/java/net/createcobblestone/neoforge/blocks/MechanicalGeneratorBlockItem.java
@@ -0,0 +1,67 @@
+package net.createcobblestone.neoforge.blocks;
+
+import net.createcobblestone.neoforge.data.GeneratorType;
+import net.minecraft.ChatFormatting;
+import net.minecraft.core.component.DataComponents;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.chat.Style;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.item.*;
+import net.minecraft.world.item.component.CustomData;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.block.Block;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.List;
+
+public class MechanicalGeneratorBlockItem extends BlockItem {
+
+ public MechanicalGeneratorBlockItem(Block block, Properties properties) {
+ super(block, properties);
+ }
+
+ @Override
+ public void appendHoverText(ItemStack stack, Item.@NotNull TooltipContext context, @NotNull List tooltipComponents, @NotNull TooltipFlag tooltipFlag) {
+ CustomData beData = stack.get(DataComponents.BLOCK_ENTITY_DATA);
+ Item generatedItem = GeneratorType.NONE.getItem();
+ if (beData == null) {
+ GeneratorType.NONE.writeToItemStack(stack);
+ }else {
+ generatedItem = GeneratorType.fromCompoundTag(beData.copyTag()).getItem();
+ }
+
+ if (generatedItem != Items.AIR) {
+ tooltipComponents.add(
+ Component.translatable(
+ "block.createcobblestone.generators.hovertext.itemprefix"
+ ).append(
+ generatedItem.getName(generatedItem.getDefaultInstance())
+ ).setStyle(Style.EMPTY.withColor(ChatFormatting.DARK_GRAY))
+ );
+ } else {
+ tooltipComponents.add(
+ Component.translatable(
+ "block.createcobblestone.generators.hovertext.no_item"
+ ).setStyle(Style.EMPTY.withColor(ChatFormatting.DARK_GRAY))
+ );
+ }
+
+ super.appendHoverText(stack, context, tooltipComponents, tooltipFlag);
+ }
+
+ @Override
+ public @NotNull ItemStack getDefaultInstance() {
+ ItemStack defaultStack = super.getDefaultInstance();
+
+ GeneratorType.NONE.writeToItemStack(defaultStack);
+
+ return defaultStack;
+ }
+
+ @Override
+ public void onCraftedBy(@NotNull ItemStack stack, @NotNull Level level, @NotNull Player player) {
+ GeneratorType.NONE.writeToItemStack(stack);
+ super.onCraftedBy(stack, level, player);
+ }
+}
\ No newline at end of file
diff --git a/common/src/main/java/net/createcobblestone/blocks/MechanicalGeneratorRenderer.java b/src/main/java/net/createcobblestone/neoforge/blocks/MechanicalGeneratorRenderer.java
similarity index 98%
rename from common/src/main/java/net/createcobblestone/blocks/MechanicalGeneratorRenderer.java
rename to src/main/java/net/createcobblestone/neoforge/blocks/MechanicalGeneratorRenderer.java
index 71564da..5b1a0a8 100644
--- a/common/src/main/java/net/createcobblestone/blocks/MechanicalGeneratorRenderer.java
+++ b/src/main/java/net/createcobblestone/neoforge/blocks/MechanicalGeneratorRenderer.java
@@ -1,4 +1,4 @@
-package net.createcobblestone.blocks;
+package net.createcobblestone.neoforge.blocks;
import com.mojang.blaze3d.vertex.PoseStack;
import com.simibubi.create.content.kinetics.base.KineticBlockEntityRenderer;
@@ -84,4 +84,4 @@ private void renderOnSides(PoseStack ms, MultiBufferSource buffer, MechanicalGen
ms.popPose();
}
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/net/createcobblestone/neoforge/blocks/MechanicalGeneratorVisual.java b/src/main/java/net/createcobblestone/neoforge/blocks/MechanicalGeneratorVisual.java
new file mode 100644
index 0000000..6c0f42b
--- /dev/null
+++ b/src/main/java/net/createcobblestone/neoforge/blocks/MechanicalGeneratorVisual.java
@@ -0,0 +1,53 @@
+package net.createcobblestone.neoforge.blocks;
+
+import com.simibubi.create.AllPartialModels;
+import com.simibubi.create.content.kinetics.base.KineticBlockEntityVisual;
+import com.simibubi.create.content.kinetics.base.RotatingInstance;
+import com.simibubi.create.foundation.render.AllInstanceTypes;
+import dev.engine_room.flywheel.api.instance.Instance;
+import dev.engine_room.flywheel.api.instance.InstancerProvider;
+import dev.engine_room.flywheel.api.visualization.VisualizationContext;
+import dev.engine_room.flywheel.lib.model.Models;
+import net.minecraft.world.level.block.state.BlockState;
+
+import java.util.function.Consumer;
+
+public class MechanicalGeneratorVisual extends KineticBlockEntityVisual {
+
+ protected final RotatingInstance rotatingModel;
+
+ public MechanicalGeneratorVisual(VisualizationContext context, MechanicalGeneratorBlockEntity blockEntity, float partialTick) {
+ super(context, blockEntity, partialTick);
+ rotatingModel = shaft(instancerProvider(), blockState)
+ .setup(blockEntity)
+ .setPosition(getVisualPosition());
+ rotatingModel.setChanged();
+ }
+
+ public static RotatingInstance shaft(InstancerProvider instancerProvider, BlockState state) {
+ return instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT))
+ .createInstance()
+ .rotateToFace(state.getValue(MechanicalGeneratorBlock.HORIZONTAL_FACING));
+ }
+
+ @Override
+ public void update(float pt) {
+ rotatingModel.setup(blockEntity)
+ .setChanged();
+ }
+
+ @Override
+ public void updateLight(float partialTick) {
+ relight(rotatingModel);
+ }
+
+ @Override
+ protected void _delete() {
+ rotatingModel.delete();
+ }
+
+ @Override
+ public void collectCrumblingInstances(Consumer consumer) {
+ consumer.accept(rotatingModel);
+ }
+}
\ No newline at end of file
diff --git a/common/src/main/java/net/createcobblestone/config/CreateCobblestoneCommon.java b/src/main/java/net/createcobblestone/neoforge/config/CreateCobblestoneCommon.java
similarity index 96%
rename from common/src/main/java/net/createcobblestone/config/CreateCobblestoneCommon.java
rename to src/main/java/net/createcobblestone/neoforge/config/CreateCobblestoneCommon.java
index 3a9dab2..70c8430 100644
--- a/common/src/main/java/net/createcobblestone/config/CreateCobblestoneCommon.java
+++ b/src/main/java/net/createcobblestone/neoforge/config/CreateCobblestoneCommon.java
@@ -1,7 +1,7 @@
-package net.createcobblestone.config;
+package net.createcobblestone.neoforge.config;
-import net.createcobblestone.data.GeneratorType;
-import net.createcobblestone.index.Config;
+import net.createcobblestone.neoforge.data.GeneratorType;
+import net.createcobblestone.neoforge.index.Config;
import net.createmod.catnip.config.ConfigBase;
import java.util.Objects;
@@ -88,4 +88,4 @@ public boolean isEnabled(GeneratorType type) {
return true;
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/net/createcobblestone/neoforge/data/GeneratorType.java b/src/main/java/net/createcobblestone/neoforge/data/GeneratorType.java
new file mode 100644
index 0000000..c06758e
--- /dev/null
+++ b/src/main/java/net/createcobblestone/neoforge/data/GeneratorType.java
@@ -0,0 +1,183 @@
+package net.createcobblestone.neoforge.data;
+
+import net.createcobblestone.neoforge.index.Config;
+import net.minecraft.core.component.DataComponents;
+import net.minecraft.core.registries.BuiltInRegistries;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.world.item.Item;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.item.component.CustomData;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.block.Blocks;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.*;
+
+import static com.mojang.text2speech.Narrator.LOGGER;
+import static net.createcobblestone.neoforge.index.Blocks.MECHANICAL_GENERATOR_BLOCK;
+
+public class GeneratorType {
+ private static final Map ID_TO_TYPE = new HashMap<>();
+ private static final Map BLOCK_TO_TYPE = new HashMap<>();
+ private static final Map LEGACY_IDS = Map.of(
+ "cobblestone", "createcobblestone:generator_types/cobblestone.json",
+ "stone", "createcobblestone:generator_types/stone.json",
+ "basalt", "createcobblestone:generator_types/basalt.json",
+ "limestone", "createcobblestone:generator_types/limestone.json",
+ "scoria", "createcobblestone:generator_types/scoria.json",
+ "deepslate", "createcobblestone:generator_types/deepslate.json",
+ "cobbled_deepslate", "createcobblestone:generator_types/cobbled_deepslate.json"
+ );
+ private static final Set DEEPSLATE_PATHS = Set.of(
+ "createcobblestone:generator_types/deepslate.json",
+ "createcobblestone:generator_types/cobbled_deepslate.json"
+ );
+
+ private final String id;
+ private final ResourceLocation block;
+ private final int generatorStress;
+ private final float outputPerSecondPerRpm;
+ private final int generatorStorage;
+
+ public static final GeneratorType NONE = initializeNewType("none", BuiltInRegistries.BLOCK.getKey(Blocks.AIR), -1, -1, -1);
+
+ private GeneratorType(String id, ResourceLocation block, int generatorStress, float outputPerSecondPerRpm, int generatorStorage) {
+ this.id = id;
+ this.block = block;
+
+ this.generatorStress = generatorStress;
+ this.outputPerSecondPerRpm = outputPerSecondPerRpm;
+ this.generatorStorage = generatorStorage;
+ }
+
+ public static void init() {
+ // clears all generator types and (re)adds the empty type
+ ID_TO_TYPE.clear();
+ BLOCK_TO_TYPE.clear();
+
+ LOGGER.info("Generator types cleared");
+ }
+
+ public static GeneratorType initializeNewType(String id, ResourceLocation block, int generatorStress, float outputPerSecondPerRpm, int generatorStorage){
+
+ Objects.requireNonNull(block, "block key");
+ String normId = normalizeId(id);
+
+ GeneratorType existing = BLOCK_TO_TYPE.get(block);
+ if (existing != null) {
+ LOGGER.error("Error initializing generator, generator type with block {} already exists (existing id: {}, new id: {})",
+ block, existing.getId(), normId);
+ return existing;
+ }
+
+ GeneratorType type = new GeneratorType(normId, block, generatorStress, outputPerSecondPerRpm, generatorStorage);
+ register(type);
+
+ if (Config.common().enableDebugLogging.get()) {
+ LOGGER.info("Generator type {} initialized with block {} generatorStress {} outputPerSecondPerRpm {} generatorStorage {}",
+ normId, block, generatorStress, outputPerSecondPerRpm, generatorStorage);
+ }
+ return type;
+ }
+
+ private static void register(GeneratorType type) {
+ ID_TO_TYPE.put(type.id, type);
+ BLOCK_TO_TYPE.put(type.block, type);
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public Block getBlock() throws NullPointerException {
+ return BuiltInRegistries.BLOCK.get(block);
+ }
+
+ public Item getItem() throws NullPointerException {
+ return getBlock().asItem();
+ }
+
+ public int getGeneratorStress() {
+ return (generatorStress == -1) ? Config.common().generatorStress.get() : generatorStress;
+ }
+
+ public float getOutputPerSecondPerRpm() {
+ return (outputPerSecondPerRpm == -1)
+ ? Config.common().outputPerSecondPerRpm.get().floatValue()
+ : outputPerSecondPerRpm;
+ }
+
+ public int getStorage() {
+ return (generatorStorage == -1) ? Config.common().maxStorage.get() : generatorStorage;
+ }
+
+ public boolean isLoaded() {
+ return ID_TO_TYPE.containsKey(id);
+ }
+
+ public static @NotNull GeneratorType fromId(String id) {
+ String norm = normalizeId(id);
+
+ GeneratorType type = ID_TO_TYPE.get(norm);
+ if (type != null) return type;
+
+ // legacy remap
+ String mapped = LEGACY_IDS.get(norm);
+ if (mapped != null) {
+ type = ID_TO_TYPE.get(mapped);
+ if (type != null) return type;
+
+ if (DEEPSLATE_PATHS.contains(mapped)) {
+ LOGGER.error("Deepslate generators are now added using a data pack. Please install it from the mod page. (generator: {})", mapped);
+ }
+ }
+
+ // fallback
+ return NONE;
+ }
+
+ public static @NotNull GeneratorType fromCompoundTag(CompoundTag tag) {
+ return fromId(tag.getString("type"));
+ }
+
+ public static @NotNull GeneratorType fromBlock(Block block) {
+ ResourceLocation key = BuiltInRegistries.BLOCK.getKey(block);
+ return Objects.requireNonNullElse(BLOCK_TO_TYPE.get(key), NONE);
+ }
+
+ public static @NotNull GeneratorType fromItem(Item item) {
+ Block block = Block.byItem(item);
+ if (block != Blocks.AIR) {
+ return fromBlock(block);
+ }
+
+ ResourceLocation itemKey = BuiltInRegistries.ITEM.getKey(item);
+ GeneratorType byItemKey = BLOCK_TO_TYPE.get(itemKey);
+ return Objects.requireNonNullElse(byItemKey, NONE);
+ }
+
+ public static List getTypes() {
+ return List.copyOf(ID_TO_TYPE.values());
+ }
+
+ public void writeToCompoundTag(CompoundTag tag) {
+ tag.putString("id", MECHANICAL_GENERATOR_BLOCK.getId().toString());
+ tag.putString("type", id);
+ }
+
+ public void writeToItemStack(ItemStack stack) {
+ CompoundTag tag = new CompoundTag();
+ writeToCompoundTag(tag);
+ stack.set(DataComponents.BLOCK_ENTITY_DATA, CustomData.of(tag));
+ }
+
+ private static String normalizeId(String id) {
+ if (id == null || id.isEmpty()) {
+ throw new IllegalArgumentException("Generator type ID cannot be null or empty");
+ }
+ return id.toLowerCase(Locale.ROOT);
+ }
+
+
+}
\ No newline at end of file
diff --git a/common/src/main/java/net/createcobblestone/data/GeneratorTypeLoader.java b/src/main/java/net/createcobblestone/neoforge/data/GeneratorTypeLoader.java
similarity index 63%
rename from common/src/main/java/net/createcobblestone/data/GeneratorTypeLoader.java
rename to src/main/java/net/createcobblestone/neoforge/data/GeneratorTypeLoader.java
index 1628dfd..dce71c5 100644
--- a/common/src/main/java/net/createcobblestone/data/GeneratorTypeLoader.java
+++ b/src/main/java/net/createcobblestone/neoforge/data/GeneratorTypeLoader.java
@@ -1,31 +1,26 @@
-package net.createcobblestone.data;
+package net.createcobblestone.neoforge.data;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
-import dev.architectury.injectables.annotations.ExpectPlatform;
-import dev.architectury.networking.NetworkManager;
-import io.netty.buffer.Unpooled;
-import net.createcobblestone.index.Network;
import net.minecraft.core.registries.BuiltInRegistries;
-import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.packs.resources.Resource;
import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.world.level.block.Blocks;
-import oshi.util.tuples.Quintet;
+import net.neoforged.neoforge.network.PacketDistributor;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-import static net.createcobblestone.CreateCobblestoneMod.LOGGER;
+import static net.createcobblestone.neoforge.CreateCobblestoneNeoForge.LOGGER;
public class GeneratorTypeLoader {
public static boolean loaded = false;
- public static List> loadedTypes = new ArrayList<>();
+ public static List loadedTypes = new ArrayList<>();
public static void loadGeneratorTypes(ResourceManager resourceManager) {
loaded = false;
@@ -47,7 +42,7 @@ public static void loadGeneratorTypes(ResourceManager resourceManager) {
String block = generatorJsonData.get("block").getAsString();
- if (BuiltInRegistries.BLOCK.get(new ResourceLocation(block)) == Blocks.AIR){
+ if (BuiltInRegistries.BLOCK.get(ResourceLocation.parse(block)) == Blocks.AIR){
LOGGER.error("Generator type {} has no block assigned", id);
}
@@ -85,9 +80,9 @@ public static void loadGeneratorTypes(ResourceManager resourceManager) {
}
}
- loadedTypes.add(new Quintet<>(id.toString(), block, generatorStress, outputPerSecondPerRpm, generatorStorage));
+ loadedTypes.add(new GeneratorTypesPayload.GeneratorTypePayload(id.toString(), block, generatorStress, outputPerSecondPerRpm, generatorStorage));
- GeneratorType.initializeNewType(id.toString(), new ResourceLocation(block), generatorStress, outputPerSecondPerRpm, generatorStorage);
+ GeneratorType.initializeNewType(id.toString(), ResourceLocation.parse(block), generatorStress, outputPerSecondPerRpm, generatorStorage);
} catch (Exception e) {
LOGGER.error("Error loading generator type: " + id, e);
@@ -99,44 +94,37 @@ public static void loadGeneratorTypes(ResourceManager resourceManager) {
}
public static void sendGeneratorTypesToClient(Iterable players) {
- FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer());
- buf.writeInt(loadedTypes.size());
- for (Quintet type: loadedTypes) {
-
- // id, block, stress, ratio, storage
- buf.writeUtf(type.getA());
- buf.writeUtf(type.getB());
- buf.writeInt(type.getC());
- buf.writeFloat(type.getD());
- buf.writeInt(type.getE());
+ GeneratorTypesPayload payload = new GeneratorTypesPayload(List.copyOf(loadedTypes));
+ int count = 0;
+ for (ServerPlayer p : players) {
+ PacketDistributor.sendToPlayer(p, payload);
+ count++;
}
-
- NetworkManager.sendToPlayers(players, Network.GENERATOR_TYPES_PACKET, buf);
- LOGGER.info("Send generator update packet to client");
+ LOGGER.info("Sent generator update payload ({} entries) to {} player(s)",
+ payload.list().size(), count);
}
- public static void loadGeneratorTypesFromPacket(FriendlyByteBuf buf, NetworkManager.PacketContext context) {
- LOGGER.info("Received generator update packet");
+ public static void loadGeneratorTypesFromPacket(GeneratorTypesPayload payload) {
+ LOGGER.info("Received generator update payload ({} entries)", payload.list().size());
loaded = false;
+ // Reset any client-side caches/registries
GeneratorType.init();
- int generatorAmount = buf.readInt();
-
- for (int i = 0; i < generatorAmount; i++) {
- String id = buf.readUtf();
- String block = buf.readUtf();
- int generatorStress = buf.readInt();
- float generatorRatio = buf.readFloat();
- int generatorStorage = buf.readInt();
-
- GeneratorType.initializeNewType(id, new ResourceLocation(block), generatorStress, generatorRatio, generatorStorage);
+ // Register each type locally on client
+ for (GeneratorTypesPayload.GeneratorTypePayload g : payload.list()) {
+ GeneratorType.initializeNewType(
+ g.id(),
+ ResourceLocation.parse(g.block()),
+ g.stress(),
+ g.ratio(),
+ g.storage()
+ );
}
loaded = true;
}
- @ExpectPlatform
- public static void init() {}
+ public static void register() {}
}
\ No newline at end of file
diff --git a/src/main/java/net/createcobblestone/neoforge/data/GeneratorTypesPayload.java b/src/main/java/net/createcobblestone/neoforge/data/GeneratorTypesPayload.java
new file mode 100644
index 0000000..8abb03c
--- /dev/null
+++ b/src/main/java/net/createcobblestone/neoforge/data/GeneratorTypesPayload.java
@@ -0,0 +1,61 @@
+package net.createcobblestone.neoforge.data;
+
+import net.minecraft.network.FriendlyByteBuf;
+import net.minecraft.network.codec.StreamCodec;
+import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
+import org.jetbrains.annotations.NotNull;
+import java.util.ArrayList;
+import java.util.List;
+
+import static net.createcobblestone.neoforge.index.Network.GENERATOR_TYPES_PACKET;
+
+public record GeneratorTypesPayload(List list) implements CustomPacketPayload {
+
+ public record GeneratorTypePayload(String id, String block, int stress, float ratio, int storage) {
+ public static final StreamCodec STREAM_CODEC = StreamCodec.of(
+ (buf, v) -> {
+ buf.writeUtf(v.id);
+ buf.writeUtf(v.block);
+ buf.writeVarInt(v.stress);
+ buf.writeFloat(v.ratio);
+ buf.writeVarInt(v.storage);
+ },
+ buf -> new GeneratorTypePayload(
+ buf.readUtf(),
+ buf.readUtf(),
+ buf.readVarInt(),
+ buf.readFloat(),
+ buf.readVarInt()
+ )
+ );
+ }
+
+ public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(GENERATOR_TYPES_PACKET);
+
+ public static final StreamCodec STREAM_CODEC =
+ StreamCodec.of(GeneratorTypesPayload::encode, GeneratorTypesPayload::decode);
+
+
+ @Override
+ public CustomPacketPayload.@NotNull Type extends CustomPacketPayload> type() {
+ return TYPE;
+ }
+
+ private static void encode(FriendlyByteBuf buf, GeneratorTypesPayload payload) {
+ List l = payload.list;
+ buf.writeVarInt(l.size());
+ for (GeneratorTypePayload gt : l) {
+ GeneratorTypePayload.STREAM_CODEC.encode(buf, gt);
+ }
+ }
+
+ private static GeneratorTypesPayload decode(FriendlyByteBuf buf) {
+ int n = buf.readVarInt();
+ List out = new ArrayList<>(n);
+ for (int i = 0; i < n; i++) {
+ out.add(GeneratorTypePayload.STREAM_CODEC.decode(buf));
+ }
+ return new GeneratorTypesPayload(out);
+ }
+
+}
diff --git a/forge/src/main/java/net/createcobblestone/data/forge/ResourceReloadListener.java b/src/main/java/net/createcobblestone/neoforge/data/ResourceReloadListener.java
similarity index 90%
rename from forge/src/main/java/net/createcobblestone/data/forge/ResourceReloadListener.java
rename to src/main/java/net/createcobblestone/neoforge/data/ResourceReloadListener.java
index 6ac9972..7e6c484 100644
--- a/forge/src/main/java/net/createcobblestone/data/forge/ResourceReloadListener.java
+++ b/src/main/java/net/createcobblestone/neoforge/data/ResourceReloadListener.java
@@ -1,6 +1,5 @@
-package net.createcobblestone.data.forge;
+package net.createcobblestone.neoforge.data;
-import net.createcobblestone.data.GeneratorTypeLoader;
import net.minecraft.server.packs.resources.PreparableReloadListener;
import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.util.profiling.ProfilerFiller;
@@ -12,7 +11,7 @@
public class ResourceReloadListener implements PreparableReloadListener {
@Override
- public @NotNull CompletableFuture reload(@NotNull PreparationBarrier barrier, ResourceManager resourceManager,
+ public @NotNull CompletableFuture reload(@NotNull PreparationBarrier barrier, @NotNull ResourceManager resourceManager,
@NotNull ProfilerFiller preparationsProfiler, @NotNull ProfilerFiller reloadProfiler,
@NotNull Executor backgroundExecutor, @NotNull Executor gameExecutor) {
diff --git a/src/main/java/net/createcobblestone/neoforge/data/provider/MechanicalGeneratorBlockLootSubProvider.java b/src/main/java/net/createcobblestone/neoforge/data/provider/MechanicalGeneratorBlockLootSubProvider.java
new file mode 100644
index 0000000..54f9372
--- /dev/null
+++ b/src/main/java/net/createcobblestone/neoforge/data/provider/MechanicalGeneratorBlockLootSubProvider.java
@@ -0,0 +1,48 @@
+package net.createcobblestone.neoforge.data.provider;
+
+import net.createcobblestone.neoforge.index.Blocks;
+import net.minecraft.core.HolderLookup;
+import net.minecraft.core.component.DataComponents;
+import net.minecraft.data.loot.BlockLootSubProvider;
+import net.minecraft.world.flag.FeatureFlags;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.storage.loot.LootPool;
+import net.minecraft.world.level.storage.loot.LootTable;
+import net.minecraft.world.level.storage.loot.entries.LootItem;
+import net.minecraft.world.level.storage.loot.functions.CopyComponentsFunction;
+import net.minecraft.world.level.storage.loot.predicates.ExplosionCondition;
+import net.minecraft.world.level.storage.loot.providers.number.ConstantValue;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Set;
+
+public class MechanicalGeneratorBlockLootSubProvider extends BlockLootSubProvider {
+
+ MechanicalGeneratorBlockLootSubProvider(HolderLookup.Provider registries) {
+ // no explosion-resistant items, enable all feature flags, pass registries
+ super(Set.of(), FeatureFlags.REGISTRY.allFlags(), registries);
+ }
+
+ @Override
+ protected void generate() {
+ var mechanical_generator = Blocks.MECHANICAL_GENERATOR_BLOCK.get();
+
+ this.add(mechanical_generator, LootTable.lootTable().withPool(
+ LootPool.lootPool().setRolls(ConstantValue.exactly(1))
+ .add(LootItem.lootTableItem(mechanical_generator)
+ .apply(
+ // Copy BE -> item component(s)
+ CopyComponentsFunction.copyComponents(CopyComponentsFunction.Source.BLOCK_ENTITY)
+ .include(DataComponents.BLOCK_ENTITY_DATA) // <— key part
+ )
+ )
+ .when(ExplosionCondition.survivesExplosion())
+ ));
+ }
+
+ @Override
+ protected @NotNull Iterable getKnownBlocks() {
+ // Return all blocks you add loot for (expand this as you add more)
+ return Set.of(Blocks.MECHANICAL_GENERATOR_BLOCK.get());
+ }
+}
diff --git a/src/main/java/net/createcobblestone/neoforge/data/provider/MechanicalGeneratorLootTableProvider.java b/src/main/java/net/createcobblestone/neoforge/data/provider/MechanicalGeneratorLootTableProvider.java
new file mode 100644
index 0000000..ec61144
--- /dev/null
+++ b/src/main/java/net/createcobblestone/neoforge/data/provider/MechanicalGeneratorLootTableProvider.java
@@ -0,0 +1,23 @@
+package net.createcobblestone.neoforge.data.provider;
+
+import net.minecraft.core.HolderLookup;
+import net.minecraft.data.PackOutput;
+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 MechanicalGeneratorLootTableProvider extends LootTableProvider {
+
+ public MechanicalGeneratorLootTableProvider(PackOutput out, CompletableFuture registries) {
+ super(
+ out,
+ Set.of(), // no special tables to validate
+ List.of(new SubProviderEntry(MechanicalGeneratorBlockLootSubProvider::new, LootContextParamSets.BLOCK)),
+ registries
+ );
+ }
+
+}
diff --git a/src/main/java/net/createcobblestone/neoforge/data/provider/MechanicalGeneratorRecipeProvider.java b/src/main/java/net/createcobblestone/neoforge/data/provider/MechanicalGeneratorRecipeProvider.java
new file mode 100644
index 0000000..dcb17f4
--- /dev/null
+++ b/src/main/java/net/createcobblestone/neoforge/data/provider/MechanicalGeneratorRecipeProvider.java
@@ -0,0 +1,41 @@
+package net.createcobblestone.neoforge.data.provider;
+
+import net.minecraft.core.HolderLookup;
+import net.minecraft.data.PackOutput;
+import net.minecraft.data.recipes.RecipeCategory;
+import net.minecraft.data.recipes.RecipeOutput;
+import net.minecraft.data.recipes.RecipeProvider;
+import net.minecraft.data.recipes.ShapedRecipeBuilder;
+import org.jetbrains.annotations.NotNull;
+
+import static com.simibubi.create.AllBlocks.BRASS_CASING;
+import static com.simibubi.create.AllBlocks.MECHANICAL_DRILL;
+import static com.simibubi.create.AllItems.BRASS_INGOT;
+import static com.simibubi.create.AllItems.ELECTRON_TUBE;
+import static net.createcobblestone.neoforge.index.Blocks.MECHANICAL_GENERATOR_BLOCK;
+import static net.minecraft.world.item.Items.*;
+
+import java.util.concurrent.CompletableFuture;
+
+public class MechanicalGeneratorRecipeProvider extends RecipeProvider {
+
+ public MechanicalGeneratorRecipeProvider(PackOutput output, CompletableFuture registries) {
+ super(output, registries);
+ }
+
+ @Override
+ protected void buildRecipes(@NotNull RecipeOutput out) {
+ ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, MECHANICAL_GENERATOR_BLOCK.get(),1)
+ .pattern("IEI")
+ .pattern("WDL")
+ .pattern("BBB")
+ .define('I', BRASS_INGOT)
+ .define('E', ELECTRON_TUBE)
+ .define('B', BRASS_CASING)
+ .define('W', WATER_BUCKET)
+ .define('L', LAVA_BUCKET)
+ .define('D', MECHANICAL_DRILL)
+ .unlockedBy("has_drill", has(MECHANICAL_DRILL))
+ .save(out, MECHANICAL_GENERATOR_BLOCK.getId());
+ }
+}
diff --git a/src/main/java/net/createcobblestone/neoforge/index/BlockEntities.java b/src/main/java/net/createcobblestone/neoforge/index/BlockEntities.java
new file mode 100644
index 0000000..8311767
--- /dev/null
+++ b/src/main/java/net/createcobblestone/neoforge/index/BlockEntities.java
@@ -0,0 +1,25 @@
+package net.createcobblestone.neoforge.index;
+
+import com.tterrag.registrate.util.entry.BlockEntityEntry;
+import net.createcobblestone.neoforge.CreateCobblestoneNeoForge;
+import net.createcobblestone.neoforge.blocks.MechanicalGeneratorBlockEntity;
+import net.createcobblestone.neoforge.blocks.MechanicalGeneratorVisual;
+import net.createcobblestone.neoforge.blocks.MechanicalGeneratorRenderer;
+
+import static net.createcobblestone.neoforge.CreateCobblestoneNeoForge.REGISTRATE;
+import static net.createcobblestone.neoforge.index.Blocks.MECHANICAL_GENERATOR_BLOCK;
+
+public class BlockEntities {
+ public static BlockEntityEntry MECHANICAL_GENERATOR;
+
+ public static void register() {
+ CreateCobblestoneNeoForge.LOGGER.info("Registering blockEntities for " + CreateCobblestoneNeoForge.NAME);
+
+ MECHANICAL_GENERATOR = REGISTRATE
+ .blockEntity("mechanical_generator", MechanicalGeneratorBlockEntity::new)
+ .visual(() -> MechanicalGeneratorVisual::new)
+ .validBlocks(MECHANICAL_GENERATOR_BLOCK)
+ .renderer(() -> MechanicalGeneratorRenderer::new)
+ .register();
+ }
+}
diff --git a/common/src/main/java/net/createcobblestone/index/Blocks.java b/src/main/java/net/createcobblestone/neoforge/index/Blocks.java
similarity index 56%
rename from common/src/main/java/net/createcobblestone/index/Blocks.java
rename to src/main/java/net/createcobblestone/neoforge/index/Blocks.java
index 92b7cfd..bf5f71c 100644
--- a/common/src/main/java/net/createcobblestone/index/Blocks.java
+++ b/src/main/java/net/createcobblestone/neoforge/index/Blocks.java
@@ -1,18 +1,18 @@
-package net.createcobblestone.index;
+package net.createcobblestone.neoforge.index;
import com.simibubi.create.AllTags;
import com.simibubi.create.foundation.item.ItemDescription;
import com.simibubi.create.foundation.item.KineticStats;
import com.simibubi.create.foundation.item.TooltipModifier;
import com.tterrag.registrate.util.entry.BlockEntry;
-import net.createcobblestone.CreateCobblestoneMod;
-import net.createcobblestone.blocks.MechanicalGeneratorBlock;
-import net.createcobblestone.blocks.MechanicalGeneratorBlockItem;
+import net.createcobblestone.neoforge.CreateCobblestoneNeoForge;
+import net.createcobblestone.neoforge.blocks.MechanicalGeneratorBlock;
+import net.createcobblestone.neoforge.blocks.MechanicalGeneratorBlockItem;
import net.createmod.catnip.lang.FontHelper;
import net.minecraft.world.level.material.MapColor;
import static com.simibubi.create.foundation.data.ModelGen.customItemModel;
-import static net.createcobblestone.CreateCobblestoneMod.REGISTRATE;
+import static net.createcobblestone.neoforge.CreateCobblestoneNeoForge.REGISTRATE;
public class Blocks {
@@ -25,8 +25,8 @@ public class Blocks {
public static BlockEntry MECHANICAL_GENERATOR_BLOCK;
- public static void init() {
- CreateCobblestoneMod.LOGGER.info("Registering blocks for " + CreateCobblestoneMod.NAME);
+ public static void register() {
+ CreateCobblestoneNeoForge.LOGGER.info("Registering blocks for " + CreateCobblestoneNeoForge.NAME);
int generator_stress;
@@ -34,7 +34,7 @@ public static void init() {
generator_stress = Config.common().generatorStress.get();
} catch (IllegalStateException e) {
// Fallback for forge config initializing late
- CreateCobblestoneMod.LOGGER.warn("Set generator stress tooltip stress to 8. (config not initialized, this is a common forge problem)");
+ CreateCobblestoneNeoForge.LOGGER.warn("Set generator stress tooltip stress to 8. (config not initialized, this is a common forge problem)");
generator_stress = 8;
}
@@ -43,9 +43,16 @@ public static void init() {
.properties(p -> p.mapColor(MapColor.COLOR_BROWN))
// .transform(BlockStressDefaults.setImpact(generator_stress))
.tag(AllTags.AllBlockTags.SAFE_NBT.tag)
+ .blockstate((ctx, prov) -> {
+ var model = prov.models().getExistingFile(prov.modLoc("block/mechanical_generator"));
+ prov.horizontalBlock(ctx.get(), model); // generates the 4 facing variants with y=0/90/180/270
+ })
.item(MechanicalGeneratorBlockItem::new)
- .tab(CreativeTabs.getBaseTabKey())
- .transform(customItemModel())
+ .model((ctx, prov) ->
+ prov.withExistingParent(ctx.getName(), prov.modLoc("block/mechanical_generator")))
+ .build()
+// .tab(CreativeTabs.getBaseTabKey())
+// .transform(customItemModel())
.register();
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/net/createcobblestone/neoforge/index/Config.java b/src/main/java/net/createcobblestone/neoforge/index/Config.java
new file mode 100644
index 0000000..635bfd3
--- /dev/null
+++ b/src/main/java/net/createcobblestone/neoforge/index/Config.java
@@ -0,0 +1,60 @@
+package net.createcobblestone.neoforge.index;
+
+import net.createcobblestone.neoforge.config.CreateCobblestoneCommon;
+import net.createmod.catnip.config.ConfigBase;
+import net.neoforged.fml.ModContainer;
+import net.neoforged.fml.config.ModConfig;
+import net.neoforged.neoforge.common.ModConfigSpec;
+import org.apache.commons.lang3.tuple.Pair;
+
+import java.util.EnumMap;
+import java.util.Map;
+import java.util.function.Supplier;
+
+public class Config {
+ public static final Map CONFIGS = new EnumMap<>(ModConfig.Type.class);
+
+ protected static CreateCobblestoneCommon common;
+
+ private static T register(Supplier factory, ModConfig.Type side) {
+ Pair specPair = new ModConfigSpec.Builder().configure(builder -> {
+ T config = factory.get();
+ config.registerAll(builder);
+ return config;
+ });
+
+ T config = specPair.getLeft();
+ config.specification = specPair.getRight();
+ CONFIGS.put(side, config);
+ return config;
+ }
+
+ public static CreateCobblestoneCommon common() {
+ return common;
+ }
+
+ public static ConfigBase byType(ModConfig.Type type) {
+ return CONFIGS.get(type);
+ }
+
+ public static void onLoad(ModConfig modConfig) {
+ for (ConfigBase config : CONFIGS.values())
+ if (config.specification == modConfig
+ .getSpec())
+ config.onLoad();
+ }
+
+ public static void onReload(ModConfig modConfig) {
+ for (ConfigBase config : CONFIGS.values())
+ if (config.specification == modConfig
+ .getSpec())
+ config.onReload();
+ }
+
+ public static void register(ModContainer container) {
+ common = register(CreateCobblestoneCommon::new, ModConfig.Type.COMMON);
+
+ for (Map.Entry pair : CONFIGS.entrySet())
+ container.registerConfig(pair.getKey(), pair.getValue().specification);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/net/createcobblestone/neoforge/index/CreativeTabs.java b/src/main/java/net/createcobblestone/neoforge/index/CreativeTabs.java
new file mode 100644
index 0000000..414534b
--- /dev/null
+++ b/src/main/java/net/createcobblestone/neoforge/index/CreativeTabs.java
@@ -0,0 +1,60 @@
+package net.createcobblestone.neoforge.index;
+
+import net.createcobblestone.neoforge.CreateCobblestoneNeoForge;
+import net.minecraft.core.registries.Registries;
+import net.minecraft.network.chat.Component;
+import net.minecraft.resources.ResourceKey;
+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 java.util.function.Supplier;
+
+import static net.createcobblestone.neoforge.index.RegistrateDisplayItemsGenerator.getTabObject;
+
+public class CreativeTabs {
+ private static final DeferredRegister TAB_REGISTER =
+ DeferredRegister.create(Registries.CREATIVE_MODE_TAB, CreateCobblestoneNeoForge.MOD_ID);
+
+ public static final DeferredHolder MAIN_TAB = TAB_REGISTER.register("main",
+ () -> CreativeModeTab.builder()
+ .title(Component.translatable("itemGroup.create_cobblestone"))
+ .icon(() -> Blocks.MECHANICAL_GENERATOR_BLOCK.asStack())
+ .displayItems(new RegistrateDisplayItemsGenerator(CreativeTabs.Tabs.MAIN))
+ .build());
+
+ public static CreativeModeTab getBaseTab() {
+ return MAIN_TAB.get();
+ }
+
+ public static ResourceKey getBaseTabKey() {
+ return MAIN_TAB.getKey();
+ }
+
+ public enum Tabs {
+ MAIN(CreativeTabs::getBaseTabKey);
+
+ private final Supplier> keySupplier;
+
+ Tabs(Supplier> keySupplier) {
+ this.keySupplier = keySupplier;
+ }
+
+ public ResourceKey getKey() {
+ return keySupplier.get();
+ }
+
+ public void use() {
+ use(this);
+ }
+
+ public static void use(CreativeTabs.Tabs tab) {
+ CreateCobblestoneNeoForge.REGISTRATE.setCreativeTab(getTabObject(tab.getKey()));
+ }
+ }
+
+ public static void register(IEventBus modEventBus) {
+ TAB_REGISTER.register(modEventBus);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/net/createcobblestone/neoforge/index/Network.java b/src/main/java/net/createcobblestone/neoforge/index/Network.java
new file mode 100644
index 0000000..3081fee
--- /dev/null
+++ b/src/main/java/net/createcobblestone/neoforge/index/Network.java
@@ -0,0 +1,16 @@
+package net.createcobblestone.neoforge.index;
+
+import net.createcobblestone.neoforge.CreateCobblestoneNeoForge;
+import net.createcobblestone.neoforge.data.GeneratorTypeLoader;
+import net.createcobblestone.neoforge.data.GeneratorTypesPayload;
+import net.minecraft.resources.ResourceLocation;
+import net.neoforged.neoforge.network.handling.IPayloadContext;
+
+
+public class Network {
+ public static final ResourceLocation GENERATOR_TYPES_PACKET = CreateCobblestoneNeoForge.asResource("generator_types_packet");
+
+ public static void handleGeneratorTypesOnClient(final GeneratorTypesPayload payload, final IPayloadContext ctx) {
+ ctx.enqueueWork(() -> GeneratorTypeLoader.loadGeneratorTypesFromPacket(payload));
+ }
+}
diff --git a/common/src/main/java/net/createcobblestone/index/RegistrateDisplayItemsGenerator.java b/src/main/java/net/createcobblestone/neoforge/index/RegistrateDisplayItemsGenerator.java
similarity index 62%
rename from common/src/main/java/net/createcobblestone/index/RegistrateDisplayItemsGenerator.java
rename to src/main/java/net/createcobblestone/neoforge/index/RegistrateDisplayItemsGenerator.java
index 7a9568a..b1fc05a 100644
--- a/common/src/main/java/net/createcobblestone/index/RegistrateDisplayItemsGenerator.java
+++ b/src/main/java/net/createcobblestone/neoforge/index/RegistrateDisplayItemsGenerator.java
@@ -1,11 +1,12 @@
-package net.createcobblestone.index;
+package net.createcobblestone.neoforge.index;
-import net.createcobblestone.CreateCobblestoneMod;
-import net.createcobblestone.data.GeneratorType;
-import net.minecraft.nbt.CompoundTag;
+import net.createcobblestone.neoforge.CreateCobblestoneNeoForge;
+import net.createcobblestone.neoforge.data.GeneratorType;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack;
+import net.neoforged.neoforge.registries.DeferredHolder;
+import org.jetbrains.annotations.NotNull;
import java.util.LinkedList;
import java.util.List;
@@ -19,16 +20,14 @@ public RegistrateDisplayItemsGenerator(CreativeTabs.Tabs tab) {
}
@Override
- public void accept(CreativeModeTab.ItemDisplayParameters pParameters, CreativeModeTab.Output output) {
+ public void accept(CreativeModeTab.@NotNull ItemDisplayParameters pParameters, CreativeModeTab.@NotNull Output output) {
ResourceKey tab = this.tab.getKey();
List stacks = new LinkedList<>();
ItemStack stack = Blocks.MECHANICAL_GENERATOR_BLOCK.asStack();
- CompoundTag tag = new CompoundTag();
- tag.putString("type", GeneratorType.NONE.getId());
- stack.addTagElement("BlockEntityTag", tag);
+ GeneratorType.NONE.writeToItemStack(stack);
stacks.add(stack);
@@ -40,14 +39,12 @@ public void accept(CreativeModeTab.ItemDisplayParameters pParameters, CreativeMo
stack = Blocks.MECHANICAL_GENERATOR_BLOCK.asStack();
- tag = new CompoundTag();
- tag.putString("type", type.getId());
- stack.addTagElement("BlockEntityTag", tag);
+ type.writeToItemStack(stack);
stacks.add(stack);
if (Config.common().enableDebugLogging.get()) {
- CreateCobblestoneMod.LOGGER.info("Added {} generator to creative menu", type.getId());
+ CreateCobblestoneNeoForge.LOGGER.info("Added {} generator to creative menu", type.getId());
}
}
@@ -57,7 +54,7 @@ public void accept(CreativeModeTab.ItemDisplayParameters pParameters, CreativeMo
private static void outputAll(CreativeModeTab.Output output, List stacks) {
for (ItemStack stack : stacks) {
if (stack.getCount() != 1) {
- CreateCobblestoneMod.LOGGER.error("Invalid stack size {} for stack {}.", stack.getCount(), stack);
+ CreateCobblestoneNeoForge.LOGGER.error("Invalid stack size {} for stack {}.", stack.getCount(), stack);
continue;
}
output.accept(stack, CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS);
@@ -66,4 +63,8 @@ private static void outputAll(CreativeModeTab.Output output, List sta
public record TabInfo(ResourceKey key, CreativeModeTab tab) {
}
+
+ public static DeferredHolder getTabObject(ResourceKey tab) {
+ return CreativeTabs.MAIN_TAB;
+ }
}
diff --git a/src/main/java/net/createcobblestone/neoforge/utils/CreateCobblestoneLang.java b/src/main/java/net/createcobblestone/neoforge/utils/CreateCobblestoneLang.java
new file mode 100644
index 0000000..c78a8c9
--- /dev/null
+++ b/src/main/java/net/createcobblestone/neoforge/utils/CreateCobblestoneLang.java
@@ -0,0 +1,79 @@
+package net.createcobblestone.neoforge.utils;
+
+import net.createcobblestone.neoforge.CreateCobblestoneNeoForge;
+import net.createmod.catnip.lang.LangBuilder;
+import net.createmod.catnip.lang.LangNumberFormat;
+import net.minecraft.network.chat.Component;
+import net.minecraft.network.chat.MutableComponent;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.level.block.state.BlockState;
+import net.neoforged.neoforge.fluids.FluidStack;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+public class CreateCobblestoneLang {
+
+ public CreateCobblestoneLang() {
+ }
+
+ public static String asId(String name) {
+ return name.toLowerCase(Locale.ROOT);
+ }
+
+ public static String nonPluralId(String name) {
+ String asId = asId(name);
+ return asId.endsWith("s") ? asId.substring(0, asId.length() - 1) : asId;
+ }
+
+ public static LangBuilder builder(String namespace) {
+ return new LangBuilder(namespace);
+ }
+
+ public static MutableComponent translateDirect(String key, Object... args) {
+ Object[] args1 = LangBuilder.resolveBuilders(args);
+ return Component.translatable(CreateCobblestoneNeoForge.MOD_ID + "." + key, args1);
+ }
+
+ public static List translatedOptions(String prefix, String... keys) {
+ List result = new ArrayList<>(keys.length);
+ for (String key : keys)
+ result.add(translate((prefix != null ? prefix + "." : "") + key).component());
+ return result;
+ }
+
+ //
+
+ public static LangBuilder builder() {
+ return new LangBuilder(CreateCobblestoneNeoForge.MOD_ID);
+ }
+
+ public static LangBuilder blockName(BlockState state) {
+ return builder().add(state.getBlock()
+ .getName());
+ }
+
+ public static LangBuilder itemName(ItemStack stack) {
+ return builder().add(stack.getHoverName()
+ .copy());
+ }
+
+ public static LangBuilder fluidName(FluidStack stack) {
+ return builder().add(stack.getHoverName()
+ .copy());
+ }
+
+ public static LangBuilder number(double d) {
+ return builder().text(LangNumberFormat.format(d));
+ }
+
+ public static LangBuilder translate(String langKey, Object... args) {
+ return builder().translate(langKey, args);
+ }
+
+ public static LangBuilder text(String text) {
+ return builder().text(text);
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/createcobblestone/lang/en_us.json b/src/main/resources/assets/createcobblestone/lang/en_us.json
new file mode 100644
index 0000000..63c52f0
--- /dev/null
+++ b/src/main/resources/assets/createcobblestone/lang/en_us.json
@@ -0,0 +1,7 @@
+{
+ "itemGroup.create_cobblestone": "Create Cobblestone",
+ "block.createcobblestone.mechanical_generator": "Mechanical Generator",
+ "block.createcobblestone.generators.hovertext.itemprefix": "Generates: ",
+ "block.createcobblestone.generators.hovertext.no_item": "Click on the generator with a stone type to set the generator type.",
+ "createcobblestone.gui.goggles.generators.itemprefix": "Generates: %1$s"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/createcobblestone/lang/et_ee.json b/src/main/resources/assets/createcobblestone/lang/et_ee.json
new file mode 100644
index 0000000..ea1b931
--- /dev/null
+++ b/src/main/resources/assets/createcobblestone/lang/et_ee.json
@@ -0,0 +1,7 @@
+{
+ "itemGroup.create_cobblestone": "Create Cobblestone",
+ "block.createcobblestone.mechanical_generator": "Mehaaniline generaator",
+ "block.createcobblestone.generators.hovertext.itemprefix": "Genereerib: ",
+ "block.createcobblestone.generators.hovertext.no_item": "Generaatori Klõpsumine kiviga muudub generatori tüüp.",
+ "createcobblestone.gui.goggles.generators.itemprefix": "Genereerib: %1$s"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/createcobblestone/lang/ru_ru.json b/src/main/resources/assets/createcobblestone/lang/ru_ru.json
new file mode 100644
index 0000000..5204b0f
--- /dev/null
+++ b/src/main/resources/assets/createcobblestone/lang/ru_ru.json
@@ -0,0 +1,7 @@
+{
+ "itemGroup.create_cobblestone": "Create Cobblestone",
+ "block.createcobblestone.mechanical_generator": "Механический генератор",
+ "block.createcobblestone.generators.hovertext.itemprefix": "Генерирует: ",
+ "block.createcobblestone.generators.hovertext.no_item": "Нажатие по генератору определённым видом камня задаёт генерируемый ресурс.",
+ "createcobblestone.gui.goggles.generators.itemprefix": "Генерирует: %1$s"
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/createcobblestone/models/block/mechanical_generator.json b/src/main/resources/assets/createcobblestone/models/block/mechanical_generator.json
new file mode 100644
index 0000000..3dbe31f
--- /dev/null
+++ b/src/main/resources/assets/createcobblestone/models/block/mechanical_generator.json
@@ -0,0 +1,314 @@
+{
+ "credit": "Made with Blockbench",
+ "parent": "block/block",
+ "textures": {
+ "1": "create:block/brass_gearbox",
+ "2": "minecraft:block/cobblestone",
+ "4": "createcobblestone:block/mechanical_generator",
+ "particle": "create:block/brass_gearbox"
+ },
+ "elements": [
+ {
+ "name": "Bottom",
+ "from": [
+ 0,
+ 14,
+ 0
+ ],
+ "to": [
+ 16,
+ 16,
+ 16
+ ],
+ "faces": {
+ "north": {
+ "uv": [
+ 0,
+ 0,
+ 16,
+ 2
+ ],
+ "texture": "#1"
+ },
+ "east": {
+ "uv": [
+ 0,
+ 14,
+ 16,
+ 16
+ ],
+ "rotation": 180,
+ "texture": "#4"
+ },
+ "south": {
+ "uv": [
+ 0,
+ 0,
+ 16,
+ 2
+ ],
+ "texture": "#1"
+ },
+ "west": {
+ "uv": [
+ 0,
+ 14,
+ 16,
+ 16
+ ],
+ "rotation": 180,
+ "texture": "#4"
+ },
+ "up": {
+ "uv": [
+ 0,
+ 0,
+ 16,
+ 16
+ ],
+ "rotation": 270,
+ "texture": "#4"
+ },
+ "down": {
+ "uv": [
+ 0,
+ 0,
+ 16,
+ 16
+ ],
+ "texture": "#1"
+ }
+ }
+ },
+ {
+ "name": "Core",
+ "from": [
+ 1,
+ 2,
+ 0.95
+ ],
+ "to": [
+ 15,
+ 14,
+ 15.05
+ ],
+ "faces": {
+ "north": {
+ "uv": [
+ 1,
+ 2,
+ 15,
+ 14
+ ],
+ "texture": "#1"
+ },
+ "south": {
+ "uv": [
+ 1,
+ 2,
+ 15,
+ 14
+ ],
+ "texture": "#1"
+ }
+ }
+ },
+ {
+ "name": "Top",
+ "from": [
+ 0,
+ 0,
+ 0
+ ],
+ "to": [
+ 16,
+ 2,
+ 16
+ ],
+ "faces": {
+ "north": {
+ "uv": [
+ 0,
+ 14,
+ 16,
+ 16
+ ],
+ "texture": "#1"
+ },
+ "east": {
+ "uv": [
+ 0,
+ 0,
+ 16,
+ 2
+ ],
+ "rotation": 180,
+ "texture": "#4"
+ },
+ "south": {
+ "uv": [
+ 0,
+ 14,
+ 16,
+ 16
+ ],
+ "texture": "#1"
+ },
+ "west": {
+ "uv": [
+ 0,
+ 0,
+ 16,
+ 2
+ ],
+ "rotation": 180,
+ "texture": "#4"
+ },
+ "up": {
+ "uv": [
+ 0,
+ 0,
+ 16,
+ 16
+ ],
+ "texture": "#1"
+ },
+ "down": {
+ "uv": [
+ 0,
+ 0,
+ 16,
+ 16
+ ],
+ "rotation": 90,
+ "texture": "#4"
+ }
+ }
+ },
+ {
+ "name": "SideWest",
+ "from": [
+ 0,
+ 2,
+ 0
+ ],
+ "to": [
+ 2,
+ 14,
+ 16
+ ],
+ "faces": {
+ "north": {
+ "uv": [
+ 14,
+ 2,
+ 16,
+ 14
+ ],
+ "texture": "#1"
+ },
+ "east": {
+ "uv": [
+ 0,
+ 2,
+ 16,
+ 14
+ ],
+ "rotation": 180,
+ "texture": "#1"
+ },
+ "south": {
+ "uv": [
+ 0,
+ 2,
+ 2,
+ 14
+ ],
+ "texture": "#1"
+ },
+ "west": {
+ "uv": [
+ 0,
+ 2,
+ 16,
+ 14
+ ],
+ "rotation": 180,
+ "texture": "#4"
+ }
+ }
+ },
+ {
+ "name": "SideEast",
+ "from": [
+ 14,
+ 2,
+ 0
+ ],
+ "to": [
+ 16,
+ 14,
+ 16
+ ],
+ "faces": {
+ "north": {
+ "uv": [
+ 0,
+ 2,
+ 2,
+ 14
+ ],
+ "texture": "#1"
+ },
+ "east": {
+ "uv": [
+ 0,
+ 2,
+ 16,
+ 14
+ ],
+ "rotation": 180,
+ "texture": "#4"
+ },
+ "south": {
+ "uv": [
+ 14,
+ 2,
+ 16,
+ 14
+ ],
+ "texture": "#1"
+ },
+ "west": {
+ "uv": [
+ 0,
+ 2,
+ 16,
+ 14
+ ],
+ "rotation": 180,
+ "texture": "#1"
+ }
+ }
+ }
+ ],
+ "display": {},
+ "groups": [
+ {
+ "name": "block",
+ "origin": [
+ 8,
+ 8,
+ 8
+ ],
+ "color": 0,
+ "children": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/common/src/main/resources/assets/createcobblestone/textures/block/mechanical_generator.png b/src/main/resources/assets/createcobblestone/textures/block/mechanical_generator.png
similarity index 100%
rename from common/src/main/resources/assets/createcobblestone/textures/block/mechanical_generator.png
rename to src/main/resources/assets/createcobblestone/textures/block/mechanical_generator.png
diff --git a/common/src/main/resources/createcobblestone-common.mixins.json b/src/main/resources/createcobblestone.mixins.json
similarity index 73%
rename from common/src/main/resources/createcobblestone-common.mixins.json
rename to src/main/resources/createcobblestone.mixins.json
index 1114d3b..cc7908d 100644
--- a/common/src/main/resources/createcobblestone-common.mixins.json
+++ b/src/main/resources/createcobblestone.mixins.json
@@ -2,10 +2,9 @@
"required": true,
"minVersion": "0.8",
"package": "net.createcobblestone.mixin",
- "compatibilityLevel": "JAVA_17",
+ "compatibilityLevel": "JAVA_21",
"client": [],
- "mixins": [
- ],
+ "mixins": [],
"injectors": {
"defaultRequire": 1
}
diff --git a/common/src/main/resources/data/createcobblestone/generator_types/basalt.json b/src/main/resources/data/createcobblestone/generator_types/basalt.json
similarity index 100%
rename from common/src/main/resources/data/createcobblestone/generator_types/basalt.json
rename to src/main/resources/data/createcobblestone/generator_types/basalt.json
diff --git a/common/src/main/resources/data/createcobblestone/generator_types/cobblestone.json b/src/main/resources/data/createcobblestone/generator_types/cobblestone.json
similarity index 100%
rename from common/src/main/resources/data/createcobblestone/generator_types/cobblestone.json
rename to src/main/resources/data/createcobblestone/generator_types/cobblestone.json
diff --git a/common/src/main/resources/data/createcobblestone/generator_types/limestone.json b/src/main/resources/data/createcobblestone/generator_types/limestone.json
similarity index 100%
rename from common/src/main/resources/data/createcobblestone/generator_types/limestone.json
rename to src/main/resources/data/createcobblestone/generator_types/limestone.json
diff --git a/common/src/main/resources/data/createcobblestone/generator_types/scoria.json b/src/main/resources/data/createcobblestone/generator_types/scoria.json
similarity index 100%
rename from common/src/main/resources/data/createcobblestone/generator_types/scoria.json
rename to src/main/resources/data/createcobblestone/generator_types/scoria.json
diff --git a/common/src/main/resources/data/createcobblestone/generator_types/stone.json b/src/main/resources/data/createcobblestone/generator_types/stone.json
similarity index 100%
rename from common/src/main/resources/data/createcobblestone/generator_types/stone.json
rename to src/main/resources/data/createcobblestone/generator_types/stone.json
diff --git a/forge/src/main/resources/icon.png b/src/main/resources/icon.png
similarity index 100%
rename from forge/src/main/resources/icon.png
rename to src/main/resources/icon.png
diff --git a/src/main/templates/META-INF/neoforge.mods.toml b/src/main/templates/META-INF/neoforge.mods.toml
new file mode 100644
index 0000000..397fce4
--- /dev/null
+++ b/src/main/templates/META-INF/neoforge.mods.toml
@@ -0,0 +1,40 @@
+modLoader="javafml"
+loaderVersion="${loader_version_range}"
+license="${mod_license}"
+issueTrackerURL="${mod_github}/issues"
+
+[[mods]]
+modId="${mod_id}"
+version="${mod_version}"
+displayName="${mod_name}"
+logoFile="${mod_logo}"
+#credits=""
+authors="${mod_authors}"
+description='''${mod_description}'''
+
+[[mixins]]
+config="${mod_id}.mixins.json"
+
+#[[accessTransformers]]
+#file="META-INF/accesstransformer.cfg"
+
+[[dependencies.${mod_id}]]
+ modId="neoforge"
+ type="required"
+ versionRange="[${neo_version},)"
+ ordering="NONE"
+ side="BOTH"
+
+[[dependencies.${mod_id}]]
+ modId="minecraft"
+ type="required"
+ versionRange="${minecraft_version_range}"
+ ordering="NONE"
+ side="BOTH"
+
+[[dependencies.${mod_id}]]
+ modId="create"
+ type="required"
+ versionRange="[${create_version},${create_until_version})"
+ ordering="AFTER"
+ side="BOTH"
\ No newline at end of file