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 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 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 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