From 0003fc6c6b6c73a574264bc74f90044eece3fb26 Mon Sep 17 00:00:00 2001 From: QuImUfu Date: Sun, 2 Jul 2023 14:54:17 +0200 Subject: [PATCH] Update to 1.20.1 --- README.md | 11 +- blockPropertyDocumentation.txt | 71 +- build.gradle | 111 +-- gradle.properties | 13 +- gradle/wrapper/gradle-wrapper.properties | 2 +- materialsDocumentation.txt | 462 ------------ .../simple_creator/BlockResourceLoader.java | 671 +++++++++++------- .../simple_creator/BlockSettingsPojo.java | 14 + .../GenericManualResourceLoader.java | 155 ++-- .../simple_creator/ItemResourceLoader.java | 44 +- .../simple_creator/MaterialSettingsPojo.java | 15 - .../simple_creator/SimpleCreatorConfig.java | 21 +- .../simple_creator/SimpleCreatorMod.java | 28 - .../SimpleCreatorModMenuIntegration.java | 21 - src/main/resources/fabric.mod.json | 4 +- 15 files changed, 681 insertions(+), 962 deletions(-) delete mode 100644 materialsDocumentation.txt delete mode 100644 src/main/java/quimufu/simple_creator/MaterialSettingsPojo.java delete mode 100644 src/main/java/quimufu/simple_creator/SimpleCreatorModMenuIntegration.java diff --git a/README.md b/README.md index 3a1d9dd..178c6d0 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,11 @@ Put jsons with the same structure as src/main/resources/data/simple_creator/items/test_item.json src/main/resources/data/simple_creator/blocks/test_block.json ``` -in a (newly introduced) global datapack `(minecraft root)/datapacks`. -This datapack needs a `pack.mcmeta`. -After a restart, the so created items are available ingame. \ No newline at end of file +in a (newly introduced) global folder `(minecraft root)/simplyCreated` +(automatically created on first startup). +If you set `enableTestThings: true`, example ones will be copied. +After a restart, the so created items are available ingame. + +You will need to add a ton of metadata +(translations, correct tools, mining levels) via datapacks. +I recommend using a mod like https://modrinth.com/mod/globalpacks in addition \ No newline at end of file diff --git a/blockPropertyDocumentation.txt b/blockPropertyDocumentation.txt index f1c8430..6412cb8 100644 --- a/blockPropertyDocumentation.txt +++ b/blockPropertyDocumentation.txt @@ -1,21 +1,70 @@ -"material": +"soundGroup" ~ string + one of: + intentionally_empty, wood, gravel, grass, lily_pad, stone, + metal, glass, wool, sand, snow, powder_snow, ladder, anvil, + slime, honey, wet_grass, coral, bamboo, bamboo_sapling, + scaffolding, sweet_berry_bush, crop, stem, vine, nether_wart, + lantern, nether_stem, nylium, fungus, roots, shroomlight, + weeping_vines, weeping_vines_low_pitch, soul_sand, soul_soil, + basalt, wart_block, netherrack, nether_bricks, nether_sprouts, + nether_ore, bone, netherite, ancient_debris, lodestone, chain, + nether_gold_ore, gilded_blackstone, candle, amethyst_block, + amethyst_cluster, small_amethyst_bud, medium_amethyst_bud, + large_amethyst_bud, tuff, calcite, dripstone_block, + pointed_dripstone, copper, cave_vines, spore_blossom, azalea, + flowering_azalea, moss_carpet, pink_petals, moss_block, big_dripleaf, + small_dripleaf, rooted_dirt, hanging_roots, azalea_leaves, + sculk_sensor, sculk_catalyst, sculk, sculk_vein, sculk_shrieker, + glow_lichen, deepslate, deepslate_bricks, deepslate_tiles, + polished_deepslate, froglight, frogspawn, mangrove_roots, + muddy_mangrove_roots, mud, mud_bricks, packed_mud, hanging_sign, + nether_wood_hanging_sign, bamboo_wood_hanging_sign, bamboo_wood, + nether_wood, cherry_wood, cherry_sapling, cherry_leaves, + cherry_wood_hanging_sign, chiseled_bookshelf, suspicious_sand, + suspicious_gravel, decorated_pot, decorated_pot_shatter + changes how the block sounds -//controls what happens when a piston pushes this block +"dropTableId" ~ string + the id of the drop table to use e.g. "minecraft:blocks/diamond_ore" + what loot table is used for blockdrops when broken successfully + +"collidable" ~ boolean + this sets whether the block has collision. if false you (and monsters) can walk throught the block. + +"lightLevel" ~ int + 0-15 + how much light does the block produce + +"explosionResistance" ~ float + 0.0-3600000.0+ + the resistance against explosions 6.0 is stone, 3600000.0 is bedrock, wood is usually 2.0 or 3.0 + +"hardness" ~ float + -1.0-50.0+ + how hard it is to break the block. -1.0 is unbreakable, 50.0 is obsidian, 1.5 is stone, 2.0 cobble + +"pistonBehavior" ~ string + one of: + normal, destroy, block, ignore, push_only + controls what happens when a piston pushes this block + +"slipperiness" ~ float + +"slowDownMultiplier" ~ float + +"jumpVelocityMultiplier" ~ float "blocksMovement" ~ boolean -//this sets whether water can flow away this block if "collidable" is false, otherwise subtily changes how fluids look around it - -"collidable" ~ boolean -//this sets whether the block has collision. if false you (and monsters) can walk throught the block. + this sets whether water can flow away this block if "collidable" is false, otherwise subtily changes how fluids look around it "burnable" ~ boolean -//does lava ignite the block + does lava ignite the block "burnChance" ~ int -//how fast the block burns down (leaves 60, wood 5, flowers 100) if 0, block will never burn down. + how fast the block burns down (leaves 60, wood 5, flowers 100) if 0, block will never burn down. "spreadChance" ~ int -//how easily this block catches fire ( wood 5, leaves 30, flowers 60) if null, block can only be ignited by lava if burnable. + how easily this block catches fire ( wood 5, leaves 30, flowers 60) if null, block can only be ignited by lava if burnable. -"breakByHand" ~ boolean -//this sets whether the block drops when brocken without tool. +"requiresTool" ~ boolean + this sets whether the block drops when broken without tool. diff --git a/build.gradle b/build.gradle index 10a7f1f..91b8d1b 100644 --- a/build.gradle +++ b/build.gradle @@ -1,94 +1,99 @@ plugins { - id 'fabric-loom' version '0.6-SNAPSHOT' + id 'fabric-loom' version '1.2-SNAPSHOT' id 'maven-publish' } -sourceCompatibility = JavaVersion.VERSION_1_8 -targetCompatibility = JavaVersion.VERSION_1_8 - -archivesBaseName = project.archives_base_name version = project.mod_version group = project.maven_group -minecraft { +base { + archivesName = project.archives_base_name } repositories { - maven { url "https://maven.shedaniel.me/" } - maven { url "https://maven.terraformersmc.com/releases/" } + // 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. + maven { url 'https://maven.siphalor.de/' } + maven { url 'https://jitpack.io' } +} + +loom { + splitEnvironmentSourceSets() + + mods { + "modid" { + sourceSet sourceSets.main + sourceSet sourceSets.client + } + } + } dependencies { - //to change the versions see the gradle.properties file + // To change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" - implementation 'com.google.code.findbugs:jsr305:3.0.2' - modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}" - - modApi("me.shedaniel.cloth:cloth-config-fabric:4.11.18") { - exclude(group: "net.fabricmc.fabric-api") - } - modApi("com.terraformersmc:modmenu:1.16.8") - //modCompile "me.sargunvohra.mcmods:autoconfig1u:2.0" - //include "me.sargunvohra.mcmods:autoconfig1u:2.0" - //modApi "me.shedaniel.cloth:config-2:2.13.1" - //include "me.shedaniel.cloth:config-2:2.13.1" - //modImplementation "io.github.prospector:modmenu:1.10.0+build.28" + + // Fabric API. This is technically optional, but you probably want it anyway. + modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" + + // Uncomment the following line to enable the deprecated Fabric API modules. + // These are included in the Fabric API production distribution and allow you to update your mod to the latest modules at a later more convenient time. + + include(modApi(platform("de.siphalor.tweed4:tweed4-bom-$project.minecraft_major_version:$project.tweed_version"))) + // Pick any modules you want to use, e.g.: + include(modApi("de.siphalor.tweed4:tweed4-base-$project.minecraft_major_version")) + include(modApi("de.siphalor.tweed4:tweed4-annotated-$project.minecraft_major_version")) + include(modApi("de.siphalor.tweed4:tweed4-data-$project.minecraft_major_version")) + include(modApi("de.siphalor.tweed4:tweed4-data-hjson-$project.minecraft_major_version")) + // modImplementation "net.fabricmc.fabric-api:fabric-api-deprecated:${project.fabric_version}" } processResources { inputs.property "version", project.version - from(sourceSets.main.resources.srcDirs) { - include "fabric.mod.json" + filesMatching("fabric.mod.json") { expand "version": project.version } - - from(sourceSets.main.resources.srcDirs) { - exclude "fabric.mod.json" - } } -// ensure that the encoding is set to UTF-8, no matter what the system default is -// this fixes some edge cases with special characters not displaying correctly -// see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html -tasks.withType(JavaCompile) { - options.encoding = "UTF-8" +tasks.withType(JavaCompile).configureEach { + it.options.release = 17 } -// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task -// if it is present. -// If you remove this task, sources will not be generated. -task sourcesJar(type: Jar, dependsOn: classes) { - classifier = "sources" - from sourceSets.main.allSource +java { + // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task + // if it is present. + // If you remove this line, sources will not be generated. + withSourcesJar() + + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } jar { - from "LICENSE" + from("LICENSE") { + rename { "${it}_${project.archivesBaseName}"} + } } // configure the maven publication publishing { publications { mavenJava(MavenPublication) { - // add all the jars that should be included when publishing to maven - artifact(jar) { - builtBy remapJar - } - artifact("${project.buildDir.absolutePath}/libs/${archivesBaseName}-${project.version}.jar"){ - builtBy remapJar - } - artifact(sourcesJar) { - builtBy remapSourcesJar - } + from components.java } } - // select the repositories you want to publish to + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. repositories { - // uncomment to publish to the local maven - // mavenLocal() + // Add repositories to publish to here. + // Notice: This block does NOT have the same function as the block in the top level. + // The repositories here will be used for publishing your artifact, not for + // retrieving dependencies. } -} +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 81f98c2..4faddd9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,14 +1,17 @@ org.gradle.jvmargs = -Xmx1G #Fabric properties -minecraft_version = 1.16.5 -yarn_mappings = 1.16.5+build.6 -loader_version = 0.11.3 +minecraft_version=1.20.1 +minecraft_major_version=1.20 +yarn_mappings=1.20.1+build.9 +loader_version=0.14.21 + +#Fabric api +fabric_version=0.84.0+1.20.1 #Mod properties mod_version = 0.9.0 maven_group = quimufu.simple_creator archives_base_name = simple_creator -#Dependencies -fabric_api_version = 0.32.5+1.16 +tweed_version=1.3.0+mc1.20-pre1 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4b7e1f3..15de902 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/materialsDocumentation.txt b/materialsDocumentation.txt deleted file mode 100644 index 95e6614..0000000 --- a/materialsDocumentation.txt +++ /dev/null @@ -1,462 +0,0 @@ -Some materials have certain effects, apart from their properties. - They have effect on how noteblocks sound when the block is below: - material -> soundtype - --------------------- - stone -> basedrum - sand -> snare - glass -> hat - wood -> bass - others -> harp - The "water" material should cause crashes (or at least errors in connection with the frostwalker enchantment. (untested) - Some materials prevent the block being broken by water, even if the other conditions are met: - portal - structure_void - underwater_plant - seagrass - The "ice" material negates the stronger downward flow next to solid blocks. i.e. for waterfalls: block ~ air - Some materials are broken faster by sword. This can also be achieved via tag "leaves". - plant - replaceable_plant - unused_plant - pumpkin - Some materials let the block when mined with an axe be broken faster: - wood - plant - replaceable_plant - bamboo - Some materials let the block when mined with an Pickaxe be broken faster and drop loot: - metal - anvil - stone - - - - - -All materials with their settings: -"air" -pistonBehavior: "normal" -blocksMovement: false -burnable: false -breakByHand: true -liquid: false -replaceable: true -solid: false -blocksLight: false - -"structure_void" -pistonBehavior: "normal" -blocksMovement: false -burnable: false -breakByHand: true -liquid: false -replaceable: true -solid: false -blocksLight: false - -"portal" -pistonBehavior: "block" -blocksMovement: false -burnable: false -breakByHand: true -liquid: false -replaceable: false -solid: false -blocksLight: false - -"carpet" -pistonBehavior: "normal" -blocksMovement: false -burnable: true -breakByHand: true -liquid: false -replaceable: false -solid: false -blocksLight: false - -"plant" -pistonBehavior: "destroy" -blocksMovement: false -burnable: false -breakByHand: true -liquid: false -replaceable: false -solid: false -blocksLight: false - -"underwater_plant" -pistonBehavior: "destroy" -blocksMovement: false -burnable: false -breakByHand: true -liquid: false -replaceable: false -solid: false -blocksLight: false - -"replaceable_plant" -pistonBehavior: "destroy" -blocksMovement: false -burnable: true -breakByHand: true -liquid: false -replaceable: true -solid: false -blocksLight: false - -"seagrass" -pistonBehavior: "destroy" -blocksMovement: false -burnable: false -breakByHand: true -liquid: false -replaceable: true -solid: false -blocksLight: false - -"water" -pistonBehavior: "destroy" -blocksMovement: false -burnable: false -breakByHand: true -liquid: true -replaceable: true -solid: false -blocksLight: false - -"bubble_column" -pistonBehavior: "destroy" -blocksMovement: false -burnable: false -breakByHand: true -liquid: true -replaceable: true -solid: false -blocksLight: false - -"lava" -pistonBehavior: "destroy" -blocksMovement: false -burnable: false -breakByHand: true -liquid: true -replaceable: true -solid: false -blocksLight: false - -"snow" -pistonBehavior: "destroy" -blocksMovement: false -burnable: false -breakByHand: false -liquid: false -replaceable: true -solid: false -blocksLight: false - -"fire" -pistonBehavior: "destroy" -blocksMovement: false -burnable: false -breakByHand: true -liquid: false -replaceable: true -solid: false -blocksLight: false - -"part" -pistonBehavior: "destroy" -blocksMovement: false -burnable: false -breakByHand: true -liquid: false -replaceable: false -solid: false -blocksLight: false - -"cobweb" -pistonBehavior: "destroy" -blocksMovement: false -burnable: false -breakByHand: false -liquid: false -replaceable: false -solid: true -blocksLight: false - -"redstone_lamp" -pistonBehavior: "normal" -blocksMovement: true -burnable: false -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: true - -"clay" -pistonBehavior: "normal" -blocksMovement: true -burnable: false -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: true - -"earth" -pistonBehavior: "normal" -blocksMovement: true -burnable: false -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: true - -"organic" -pistonBehavior: "normal" -blocksMovement: true -burnable: false -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: true - -"packed_ice" -pistonBehavior: "normal" -blocksMovement: true -burnable: false -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: true - -"sand" -pistonBehavior: "normal" -blocksMovement: true -burnable: false -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: true - -"sponge" -pistonBehavior: "normal" -blocksMovement: true -burnable: false -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: true - -"shulker_box" -pistonBehavior: "normal" -blocksMovement: true -burnable: false -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: true - -"wood" -pistonBehavior: "normal" -blocksMovement: true -burnable: true -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: true - -"bamboo_sapling" -pistonBehavior: "destroy" -blocksMovement: false -burnable: true -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: true - -"bamboo" -pistonBehavior: "destroy" -blocksMovement: true -burnable: true -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: true - -"wool" -pistonBehavior: "normal" -blocksMovement: true -burnable: true -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: true - -"tnt" -pistonBehavior: "normal" -blocksMovement: true -burnable: true -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: false - -"leaves" -pistonBehavior: "destroy" -blocksMovement: true -burnable: true -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: false - -"glass" -pistonBehavior: "normal" -blocksMovement: true -burnable: false -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: false - -"ice" -pistonBehavior: "normal" -blocksMovement: true -burnable: false -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: false - -"cactus" -pistonBehavior: "destroy" -blocksMovement: true -burnable: false -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: false - -"stone" -pistonBehavior: "normal" -blocksMovement: true -burnable: false -breakByHand: false -liquid: false -replaceable: false -solid: true -blocksLight: true - -"metal" -pistonBehavior: "normal" -blocksMovement: true -burnable: false -breakByHand: false -liquid: false -replaceable: false -solid: true -blocksLight: true - -"snow_block" -pistonBehavior: "normal" -blocksMovement: true -burnable: false -breakByHand: false -liquid: false -replaceable: false -solid: true -blocksLight: true - -"anvil" -pistonBehavior: "block" -blocksMovement: true -burnable: false -breakByHand: false -liquid: false -replaceable: false -solid: true -blocksLight: true - -"barrier" -pistonBehavior: "block" -blocksMovement: true -burnable: false -breakByHand: false -liquid: false -replaceable: false -solid: true -blocksLight: true - -"piston" -pistonBehavior: "block" -blocksMovement: true -burnable: false -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: true - -"unused_plant" -pistonBehavior: "destroy" -blocksMovement: true -burnable: false -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: true - -"pumpkin" -pistonBehavior: "destroy" -blocksMovement: true -burnable: false -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: true - -"egg" -pistonBehavior: "destroy" -blocksMovement: true -burnable: false -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: true - -"cake" -pistonBehavior: "destroy" -blocksMovement: true -burnable: false -breakByHand: true -liquid: false -replaceable: false -solid: true -blocksLight: true - -"pistonBehavior": -normal, -destroy, -block, -ignore, -push_only \ No newline at end of file diff --git a/src/main/java/quimufu/simple_creator/BlockResourceLoader.java b/src/main/java/quimufu/simple_creator/BlockResourceLoader.java index fbe523b..8c891ee 100644 --- a/src/main/java/quimufu/simple_creator/BlockResourceLoader.java +++ b/src/main/java/quimufu/simple_creator/BlockResourceLoader.java @@ -4,19 +4,29 @@ import com.google.common.collect.Maps; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; +import net.fabricmc.fabric.api.item.v1.FabricItemSettings; +import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.registry.FlammableBlockRegistry; -import net.fabricmc.fabric.mixin.object.builder.AbstractBlockSettingsAccessor; -import net.minecraft.block.*; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.MapColor; +import net.minecraft.block.enums.Instrument; import net.minecraft.block.piston.PistonBehavior; +import net.minecraft.entity.EntityType; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKey; import net.minecraft.sound.BlockSoundGroup; import net.minecraft.util.Identifier; import net.minecraft.util.JsonHelper; import net.minecraft.util.Pair; -import net.minecraft.util.registry.Registry; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.BlockView; import org.apache.logging.log4j.Level; import java.util.Map; @@ -36,8 +46,8 @@ public class BlockResourceLoader extends GenericManualResourceLoader thing) { - Registry.register(Registry.BLOCK, id, thing.getLeft()); - Registry.register(Registry.ITEM, id, thing.getRight()); + Registry.register(Registries.BLOCK, id, thing.getLeft()); + Registry.register(Registries.ITEM, id, thing.getRight()); } @Override @@ -49,219 +59,338 @@ public class BlockResourceLoader extends GenericManualResourceLoader deserialize(Pair e) { JsonObject jo = e.getRight(); - Material material; - if(JsonHelper.hasString(jo, "material")){ - String materialString = JsonHelper.getString(jo, "material"); - material = getMaterial(materialString); - } else if (JsonHelper.getObject(jo,"material", null)!=null){ - // get material information - JsonObject jmo = JsonHelper.getObject(jo, "material"); - MaterialSettingsPojo mspj = GSON.fromJson(jmo, MaterialSettingsPojo.class); - //build material - material = getSettings(mspj); - } else { - material = Material.SOIL; - } // get block information BlockSettingsPojo bspj = GSON.fromJson(jo, BlockSettingsPojo.class); // move block information in Block.Settings (!!hacky!!) - Block.Settings bs = getSettings(material, bspj); + Block.Settings bs = getSettings(bspj); // parse item group String group = JsonHelper.getString(jo, "itemGroup", "misc"); - ItemGroup g = ItemResourceLoader.findGroup(group); + RegistryKey g = ItemResourceLoader.findGroup(group); //create block and corresponding item Block resB = new Block(bs); - Item resI = new BlockItem(resB, new Item.Settings().group(g)); + Item resI = new BlockItem(resB, new FabricItemSettings()); + ItemGroupEvents.modifyEntriesEvent(g).register(content -> content.add(resI)); - int burnChance = JsonHelper.getInt(jo,"burnChance", -1); - int spreadChance = JsonHelper.getInt(jo,"spreadChance", -1); - if(burnChance!=-1 && spreadChance!=-1){ + int burnChance = JsonHelper.getInt(jo, "burnChance", -1); + int spreadChance = JsonHelper.getInt(jo, "spreadChance", -1); + if (burnChance != -1 && spreadChance != -1) { FlammableBlockRegistry.getDefaultInstance().add(resB, spreadChance, burnChance); } return new Pair<>(resB, resI); } - private Material getSettings(MaterialSettingsPojo mspj) { - return new Material( - getMaterialColor(mspj.materialColor), - mspj.liquid, - mspj.solid, - mspj.blocksMovement, - mspj.blocksLight, - mspj.breakByHand, - mspj.burnable, - getPistonBehavior(mspj.pistonBehavior)); + private Block.Settings getSettings(BlockSettingsPojo bspj) { + FabricBlockSettings fabricBlockSettings = FabricBlockSettings.create(); + fabricBlockSettings + .collidable(bspj.collidable) + .slipperiness(bspj.slipperiness) + .velocityMultiplier(bspj.slowDownMultiplier) + .jumpVelocityMultiplier(bspj.jumpVelocityMultiplier) + .sounds(getSoundGroup(bspj.soundGroup)) + .drops(getDropTableId(bspj.dropTableId)) + .mapColor(getMapColor(bspj.mapColor)) + .allowsSpawning(bspj.allowsSpawning ? BlockResourceLoader::always : BlockResourceLoader::never) + .solidBlock(bspj.solidBlock ? BlockResourceLoader::always : BlockResourceLoader::never) + .suffocates(bspj.suffocates ? BlockResourceLoader::always : BlockResourceLoader::never) + .blockVision(bspj.blockVision ? BlockResourceLoader::always : BlockResourceLoader::never) + .postProcess(bspj.postProcess ? BlockResourceLoader::always : BlockResourceLoader::never) + .emissiveLighting(bspj.emissiveLighting ? BlockResourceLoader::always : BlockResourceLoader::never) + .hardness(bspj.hardness) + .resistance(bspj.explosionResistance) + .offset(getOffset(bspj.modelOffset)) + .pistonBehavior(getPistonBehavior(bspj.pistonBehavior)) + .instrument(getInstrument(bspj.instrument)) + .luminance(bspj.lightLevel); + if (bspj.burnable) { + fabricBlockSettings.burnable(); + } + //not supported for now + //fabricBlockSettings.liquid() + if (bspj.solidBlock) { + fabricBlockSettings.solid(); + } else { + fabricBlockSettings.notSolid(); + } + if (bspj.replaceable) { + fabricBlockSettings.replaceable(); + } + //not supported for now + //fabricBlockSettings.air() + + if (bspj.noBlockBreakParticles) { + fabricBlockSettings.noBlockBreakParticles(); + } + if (bspj.requiresTool) { + fabricBlockSettings.requiresTool(); + + } + if (bspj.breaksInstantly) { + fabricBlockSettings.breakInstantly(); + } + + if (!bspj.opaque) { + fabricBlockSettings.nonOpaque(); + } + + return fabricBlockSettings; + } + + private Instrument getInstrument(String instrument) { + switch (instrument.toUpperCase()) { + case "HARP": + return Instrument.HARP; + case "BASEDRUM": + return Instrument.BASEDRUM; + case "SNARE": + return Instrument.SNARE; + case "HAT": + return Instrument.HAT; + case "BASS": + return Instrument.BASS; + case "FLUTE": + return Instrument.FLUTE; + case "BELL": + return Instrument.BELL; + case "GUITAR": + return Instrument.GUITAR; + case "CHIME": + return Instrument.CHIME; + case "XYLOPHONE": + return Instrument.XYLOPHONE; + case "IRON_XYLOPHONE": + return Instrument.IRON_XYLOPHONE; + case "COW_BELL": + return Instrument.COW_BELL; + case "DIDGERIDOO": + return Instrument.DIDGERIDOO; + case "BIT": + return Instrument.BIT; + case "BANJO": + return Instrument.BANJO; + case "PLING": + return Instrument.PLING; + case "ZOMBIE": + return Instrument.ZOMBIE; + case "SKELETON": + return Instrument.SKELETON; + case "CREEPER": + return Instrument.CREEPER; + case "DRAGON": + return Instrument.DRAGON; + case "WITHER_SKELETON": + return Instrument.WITHER_SKELETON; + case "PIGLIN": + return Instrument.PIGLIN; + case "CUSTOM_HEAD": + return Instrument.CUSTOM_HEAD; + default: + log(Level.WARN, "Instrument " + instrument + " not found, using harp"); + return Instrument.HARP; + } + + } + + private AbstractBlock.OffsetType getOffset(String modelOffset) { + switch (modelOffset.toUpperCase()) { + case "NONE": + return AbstractBlock.OffsetType.NONE; + case "XZ": + return AbstractBlock.OffsetType.XZ; + case "XYZ": + return AbstractBlock.OffsetType.XYZ; + default: + log(Level.WARN, "ModelOffset " + modelOffset + " not found, using none"); + return AbstractBlock.OffsetType.NONE; + } + + } + + private static boolean always(BlockState blockState, BlockView blockView, BlockPos blockPos) { + return true; + } + + private static boolean never(BlockState blockState, BlockView blockView, BlockPos blockPos) { + return false; + } + + /** + * A shortcut to always return {@code false} in a typed context predicate with an + * {@link EntityType}, used like {@code settings.allowSpawning(Blocks::never)}. + */ + private static Boolean never(BlockState state, BlockView world, BlockPos pos, EntityType type) { + return false; + } + + /** + * A shortcut to always return {@code true} in a typed context predicate with an + * {@link EntityType}, used like {@code settings.allowSpawning(Blocks::always)}. + */ + private static Boolean always(BlockState state, BlockView world, BlockPos pos, EntityType type) { + return true; } private PistonBehavior getPistonBehavior(String pistonBehavior) { switch (pistonBehavior.toUpperCase()) { - case "NORMAL": + case "NORMAL" -> { return PistonBehavior.NORMAL; - case "DESTROY": + } + case "DESTROY" -> { return PistonBehavior.DESTROY; - case "BLOCK": + } + case "BLOCK" -> { return PistonBehavior.BLOCK; - case "IGNORE": + } + case "IGNORE" -> { return PistonBehavior.IGNORE; - case "PUSH_ONLY": + } + case "PUSH_ONLY" -> { return PistonBehavior.PUSH_ONLY; - default: + } + default -> { log(Level.WARN, "Piston Behavior " + pistonBehavior + " not found, using normal"); return PistonBehavior.NORMAL; - + } } } - private MaterialColor getMaterialColor(String color) { + + private MapColor getMapColor(String color) { switch (color.toUpperCase()) { - case "AIR": case "CLEAR": - return MaterialColor.CLEAR; - case "GRASS": - return MaterialColor.GRASS; - case "SAND": - return MaterialColor.SAND; - case "WEB": - return MaterialColor.WEB; - case "LAVA": - return MaterialColor.LAVA; - case "ICE": - return MaterialColor.ICE; - case "IRON": - return MaterialColor.IRON; - case "FOLIAGE": - return MaterialColor.FOLIAGE; + return MapColor.CLEAR; + case "PALE_GREEN": + return MapColor.PALE_GREEN; + case "PALE_YELLOW": + return MapColor.PALE_YELLOW; + case "WHITE_GRAY": + return MapColor.WHITE_GRAY; + case "BRIGHT_RED": + return MapColor.BRIGHT_RED; + case "PALE_PURPLE": + return MapColor.PALE_PURPLE; + case "IRON_GRAY": + return MapColor.IRON_GRAY; + case "DARK_GREEN": + return MapColor.DARK_GREEN; case "WHITE": - return MaterialColor.WHITE; - case "CLAY": - return MaterialColor.CLAY; - case "DIRT": - return MaterialColor.DIRT; - case "STONE": - return MaterialColor.STONE; - case "WATER": - return MaterialColor.WATER; - case "WOOD": - return MaterialColor.WOOD; - case "QUARTZ": - return MaterialColor.QUARTZ; + return MapColor.WHITE; + case "LIGHT_BLUE_GRAY": + return MapColor.LIGHT_BLUE_GRAY; + case "DIRT_BROWN": + return MapColor.DIRT_BROWN; + case "STONE_GRAY": + return MapColor.STONE_GRAY; + case "WATER_BLUE": + return MapColor.WATER_BLUE; + case "OAK_TAN": + return MapColor.OAK_TAN; + case "OFF_WHITE": + return MapColor.OFF_WHITE; case "ORANGE": - return MaterialColor.ORANGE; + return MapColor.ORANGE; case "MAGENTA": - return MaterialColor.MAGENTA; + return MapColor.MAGENTA; case "LIGHT_BLUE": - return MaterialColor.LIGHT_BLUE; + return MapColor.LIGHT_BLUE; case "YELLOW": - return MaterialColor.YELLOW; + return MapColor.YELLOW; case "LIME": - return MaterialColor.LIME; + return MapColor.LIME; case "PINK": - return MaterialColor.PINK; + return MapColor.PINK; case "GRAY": - return MaterialColor.GRAY; + return MapColor.GRAY; case "LIGHT_GRAY": - return MaterialColor.LIGHT_GRAY; + return MapColor.LIGHT_GRAY; case "CYAN": - return MaterialColor.CYAN; + return MapColor.CYAN; case "PURPLE": - return MaterialColor.PURPLE; + return MapColor.PURPLE; case "BLUE": - return MaterialColor.BLUE; + return MapColor.BLUE; case "BROWN": - return MaterialColor.BROWN; + return MapColor.BROWN; case "GREEN": - return MaterialColor.GREEN; + return MapColor.GREEN; case "RED": - return MaterialColor.RED; + return MapColor.RED; case "BLACK": - return MaterialColor.BLACK; + return MapColor.BLACK; case "GOLD": - return MaterialColor.GOLD; - case "DIAMOND": - return MaterialColor.DIAMOND; - case "LAPIS": - return MaterialColor.LAPIS; - case "EMERALD": - return MaterialColor.EMERALD; - case "SPRUCE": - return MaterialColor.SPRUCE; - case "NETHER": - return MaterialColor.NETHER; - case "WHITE_TERRACOTTA": - return MaterialColor.WHITE_TERRACOTTA; - case "ORANGE_TERRACOTTA": - return MaterialColor.ORANGE_TERRACOTTA; - case "MAGENTA_TERRACOTTA": - return MaterialColor.MAGENTA_TERRACOTTA; - case "LIGHT_BLUE_TERRACOTTA": - return MaterialColor.LIGHT_BLUE_TERRACOTTA; - case "YELLOW_TERRACOTTA": - return MaterialColor.YELLOW_TERRACOTTA; - case "LIME_TERRACOTTA": - return MaterialColor.LIME_TERRACOTTA; - case "PINK_TERRACOTTA": - return MaterialColor.PINK_TERRACOTTA; - case "GRAY_TERRACOTTA": - return MaterialColor.GRAY_TERRACOTTA; - case "LIGHT_GRAY_TERRACOTTA": - return MaterialColor.LIGHT_GRAY_TERRACOTTA; - case "CYAN_TERRACOTTA": - return MaterialColor.CYAN_TERRACOTTA; - case "PURPLE_TERRACOTTA": - return MaterialColor.PURPLE_TERRACOTTA; - case "BLUE_TERRACOTTA": - return MaterialColor.BLUE_TERRACOTTA; - case "BROWN_TERRACOTTA": - return MaterialColor.BROWN_TERRACOTTA; - case "GREEN_TERRACOTTA": - return MaterialColor.GREEN_TERRACOTTA; - case "RED_TERRACOTTA": - return MaterialColor.RED_TERRACOTTA; - case "BLACK_TERRACOTTA": - return MaterialColor.BLACK_TERRACOTTA; - case "CRIMSON_NYLIUM": - return MaterialColor.field_25702; - case "CRIMSON_WOOD": - return MaterialColor.field_25703; - case "CRIMSON_HYPHAE": - return MaterialColor.field_25704; - case "WARPED_NYLIUM": - return MaterialColor.field_25705; - case "WARPED_WOOD": - return MaterialColor.field_25706; - case "WARPED_HYPHAE": - return MaterialColor.field_25707; - case "WARPED_WART_BLOCK": - return MaterialColor.field_25708; + return MapColor.GOLD; + case "DIAMOND_BLUE": + return MapColor.DIAMOND_BLUE; + case "LAPIS_BLUE": + return MapColor.LAPIS_BLUE; + case "EMERALD_GREEN": + return MapColor.EMERALD_GREEN; + case "SPRUCE_BROWN": + return MapColor.SPRUCE_BROWN; + case "DARK_RED": + return MapColor.DARK_RED; + case "TERRACOTTA_WHITE": + return MapColor.TERRACOTTA_WHITE; + case "TERRACOTTA_ORANGE": + return MapColor.TERRACOTTA_ORANGE; + case "TERRACOTTA_MAGENTA": + return MapColor.TERRACOTTA_MAGENTA; + case "TERRACOTTA_LIGHT_BLUE": + return MapColor.TERRACOTTA_LIGHT_BLUE; + case "TERRACOTTA_YELLOW": + return MapColor.TERRACOTTA_YELLOW; + case "TERRACOTTA_LIME": + return MapColor.TERRACOTTA_LIME; + case "TERRACOTTA_PINK": + return MapColor.TERRACOTTA_PINK; + case "TERRACOTTA_GRAY": + return MapColor.TERRACOTTA_GRAY; + case "TERRACOTTA_LIGHT_GRAY": + return MapColor.TERRACOTTA_LIGHT_GRAY; + case "TERRACOTTA_CYAN": + return MapColor.TERRACOTTA_CYAN; + case "TERRACOTTA_PURPLE": + return MapColor.TERRACOTTA_PURPLE; + case "TERRACOTTA_BLUE": + return MapColor.TERRACOTTA_BLUE; + case "TERRACOTTA_BROWN": + return MapColor.TERRACOTTA_BROWN; + case "TERRACOTTA_GREEN": + return MapColor.TERRACOTTA_GREEN; + case "TERRACOTTA_RED": + return MapColor.TERRACOTTA_RED; + case "TERRACOTTA_BLACK": + return MapColor.TERRACOTTA_BLACK; + case "DULL_RED": + return MapColor.DULL_RED; + case "DULL_PINK": + return MapColor.DULL_PINK; + case "DARK_CRIMSON": + return MapColor.DARK_CRIMSON; + case "TEAL": + return MapColor.TEAL; + case "DARK_AQUA": + return MapColor.DARK_AQUA; + case "DARK_DULL_PINK": + return MapColor.DARK_DULL_PINK; + case "BRIGHT_TEAL": + return MapColor.BRIGHT_TEAL; + case "DEEPSLATE_GRAY": + return MapColor.DEEPSLATE_GRAY; + case "RAW_IRON_PINK": + return MapColor.RAW_IRON_PINK; + case "LICHEN_GREEN": + return MapColor.LICHEN_GREEN; default: log(Level.WARN, "MapColor " + color + " not found, using pink"); - return MaterialColor.PINK; + return MapColor.PINK; } } - private Block.Settings getSettings(Material material, BlockSettingsPojo bspj) { - FabricBlockSettings fabricBlockSettings = FabricBlockSettings.of(material, material.getColor()); - AbstractBlockSettingsAccessor bs = (AbstractBlockSettingsAccessor) fabricBlockSettings; - bs.setMaterial(material); - bs.setMaterialColorFactory(ignored -> material.getColor()); - bs.setCollidable(bspj.collidable); - fabricBlockSettings.sounds(getSoundGroup(bspj.soundGroup)); - bs.setLuminanceFunction(ignored -> bspj.lightLevel); - bs.setResistance(bspj.explosionResistance); - bs.setHardness(bspj.hardness); - fabricBlockSettings.slipperiness(bspj.slipperiness); - fabricBlockSettings.velocityMultiplier(bspj.slowDownMultiplier); - fabricBlockSettings.jumpVelocityMultiplier(bspj.jumpVelocityMultiplier); - bs.setLootTableId(getDropTableId(bspj.dropTableId)); - bs.setOpaque(bspj.opaque); - return fabricBlockSettings; - } - private Identifier getDropTableId(String s) { if (s == null) return null; @@ -275,6 +404,8 @@ public class BlockResourceLoader extends GenericManualResourceLoader { - private Gson GSON; - private String dataType; - private SimpleCreatorConfig config; + private final Gson gson; + private final String dataType; GenericManualResourceLoader(Gson gson, String dt) { - GSON = gson; + this.gson = gson; dataType = dt; } @@ -51,73 +42,91 @@ public abstract class GenericManualResourceLoader { protected abstract void save(Identifier id, T item); public void load() { - config = AutoConfig.getConfigHolder(SimpleCreatorConfig.class).getConfig(); - ResourcePackManager resourcePackManager; - if (!config.enableTestThings) { - resourcePackManager = - new ResourcePackManager(ResourcePackProfile::new, - new VanillaDataPackProvider(), - new FileResourcePackProvider(new File("./datapacks"), method_29486("pack.source.global"))); - } else { - resourcePackManager = - new ResourcePackManager(ResourcePackProfile::new, - new VanillaDataPackProvider(), - new FileResourcePackProvider(new File("./datapacks"), method_29486("pack.source.global")), - new ModResourcePackCreator(ResourceType.SERVER_DATA)); - } - resourcePackManager.scanPacks(); - List ep = Lists.newArrayList(resourcePackManager.getEnabledProfiles()); - for (ResourcePackProfile rpp : resourcePackManager.getProfiles()) { - if (!ep.contains(rpp)) { - rpp.getInitialPosition().insert(ep, rpp, resourcePackProfile -> resourcePackProfile, false); - } - } - resourcePackManager.setEnabledProfiles(ep.stream().map(ResourcePackProfile::getName).collect(Collectors.toList())); + if (true) { + createFromResource("simple_creator/blocks/test_block.json"); + createFromResource("simple_creator/items/test_item.json"); + } + File location = new File("./simplyCreated"); + + if (!location.exists() && !location.mkdirs()) { + throw new IllegalStateException("Couldn't create dir: " + location); + } + + if (!location.isDirectory()) { + throw new IllegalStateException("Not a dir: " + location); + } + + File[] modIds = location.listFiles(); ArrayList> itemJsonList = new ArrayList<>(); - HashMap itemJsonMap = Maps.newHashMap(); - for (ResourcePackProfile rpp : resourcePackManager.getEnabledProfiles()) { - ResourcePack rp = rpp.createResourcePack(); - log(Level.INFO, "Loading ResourcePack " + rp.getName()); - for (String ns : rp.getNamespaces(ResourceType.SERVER_DATA)) { - log(Level.INFO, "Loading namespace " + ns); - Collection resources = rp.findResources(ResourceType.SERVER_DATA, ns, dataType, 5, s -> s.endsWith(".json")); - for (Identifier id : resources) { - if (config.extendedLogging) - log(Level.INFO, "found: " + id.toString() + " in Pack: " + rp.getName()); - Identifier idNice = new Identifier(id.getNamespace(), getName(id)); - try { - InputStream is = rp.open(ResourceType.SERVER_DATA, id); - Reader r = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8)); - JsonObject jo = JsonHelper.deserialize(GSON, r, JsonObject.class); - if (jo != null) - if (jo.entrySet().isEmpty()) { - itemJsonMap.remove(idNice); - if (config.extendedLogging) - log(Level.INFO, "deleting " + idNice + " because of an empty override in " + rp.getName()); - } else { - itemJsonMap.put(idNice, jo); - if (config.extendedLogging) - log(Level.INFO, "adding " + idNice + " from " + rp.getName()); - } + if(modIds == null){ + log(Level.INFO, "No files found at " + location + " quitting!"); + return; + } + for (File mod : modIds) { + if (!mod.isDirectory()) { + continue; + } + String modId = mod.getName(); + + File entryDir = new File(mod + "/" + dataType); + if (entryDir.isDirectory()) { + File[] entries = entryDir.listFiles(); + if(entries == null){ + log(Level.INFO, "No files found at " + entryDir + " skipping!"); + continue; + } + + for (File entryJson : entries) { + String blockJsonName = entryJson.getName(); + if(!blockJsonName.endsWith(".json")){ + log(Level.INFO, "Non json found at " + entryJson + " ignoring!"); + continue; + } + String entryName = blockJsonName.substring(0,blockJsonName.length()-5); + Identifier identifier = new Identifier(modId, entryName); + + try (Reader reader = new FileReader(entryJson)) { + JsonObject jsonObject = gson.fromJson(reader, JsonObject.class); + itemJsonList.add(new Pair<>(identifier, jsonObject)); } catch (IOException e) { - log(Level.ERROR, "error loading " + id + " " + e.getMessage()); - } catch (JsonParseException e) { - log(Level.ERROR, "error parsing json for " + id + " " + e.getMessage()); + log(Level.INFO, "Could not parse " + entryJson + " ignoring!"); + e.printStackTrace(); + log(Level.INFO, e.getMessage()); } } } } - for (Map.Entry e : itemJsonMap.entrySet()) { - itemJsonList.add(new Pair<>(e.getKey(), e.getValue())); - } + loadItems(itemJsonList); + } - private String getName(Identifier id) { - String path = id.getPath(); - int startLength = dataType.length() + 1; - int endLength = ".json".length(); - return path.substring(startLength, path.length() - endLength); + private static void createFromResource(String path) { + try (InputStream blocks = ClassLoader.getSystemClassLoader().getResourceAsStream("data/" + path)) { + + File file = new File("./simplyCreated/" + path); + if (!file.exists() && blocks != null) { + + File parent = file.getParentFile(); + if (parent != null && !parent.exists() && !parent.mkdirs()) { + throw new IllegalStateException("Couldn't create dir: " + parent); + } + if (!file.createNewFile()) { + throw new IllegalStateException("Couldn't create file: " + file); + } + + try (FileOutputStream out = new FileOutputStream(file)) { + //copy stream + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = blocks.read(buffer)) != -1) { + out.write(buffer, 0, bytesRead); + } + } + } + } catch (IOException e) { + throw new RuntimeException(e); + } } } diff --git a/src/main/java/quimufu/simple_creator/ItemResourceLoader.java b/src/main/java/quimufu/simple_creator/ItemResourceLoader.java index 200ae71..f309dc4 100644 --- a/src/main/java/quimufu/simple_creator/ItemResourceLoader.java +++ b/src/main/java/quimufu/simple_creator/ItemResourceLoader.java @@ -2,20 +2,26 @@ package quimufu.simple_creator; import com.google.common.collect.Maps; import com.google.gson.*; +import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; import net.minecraft.entity.effect.StatusEffect; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.item.FoodComponent; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; +import net.minecraft.item.ItemGroups; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKey; import net.minecraft.util.Identifier; import net.minecraft.util.JsonHelper; import net.minecraft.util.Pair; import net.minecraft.util.Rarity; -import net.minecraft.util.registry.Registry; import org.apache.logging.log4j.Level; import java.util.Arrays; import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; import static quimufu.simple_creator.SimpleCreatorMod.log; @@ -30,13 +36,13 @@ public class ItemResourceLoader extends GenericManualResourceLoader { @Override protected void register(Identifier id, Item thing) { - Registry.register(Registry.ITEM, id, thing); + Registry.register(Registries.ITEM, id, thing); } public Item deserialize(Pair e) { JsonObject jo = e.getRight(); String group = JsonHelper.getString(jo, "group", "misc"); - ItemGroup g = findGroup(group); + RegistryKey g = findGroup(group); int durability = JsonHelper.getInt(jo, "durability", 0); byte stackSize = JsonHelper.getByte(jo, "stackSize", (byte) 1); boolean isFood = JsonHelper.hasElement(jo, "food"); @@ -44,7 +50,6 @@ public class ItemResourceLoader extends GenericManualResourceLoader { Item.Settings settings = new Item.Settings(); - settings.group(g); if (isFood) { if (durability != 0) { log(Level.WARN, "durability does not work with food"); @@ -65,7 +70,12 @@ public class ItemResourceLoader extends GenericManualResourceLoader { } } settings.rarity(findRarity(rarity)); - return new Item(settings); + + + Item item = new Item(settings); + ItemGroupEvents.modifyEntriesEvent(g).register(content -> content.add(item)); + + return item; } @Override @@ -104,7 +114,7 @@ public class ItemResourceLoader extends GenericManualResourceLoader { String effect = JsonHelper.getString(jo, "effect"); Identifier ei = Identifier.tryParse(effect); if (ei != null) { - StatusEffect se = Registry.STATUS_EFFECT.get(ei); + StatusEffect se = Registries.STATUS_EFFECT.get(ei); if (se != null) { type = se; } else { @@ -134,15 +144,21 @@ public class ItemResourceLoader extends GenericManualResourceLoader { return Rarity.COMMON; } - public static ItemGroup findGroup(String filter) { - for (ItemGroup g : ItemGroup.GROUPS) { - if (g.getName().equalsIgnoreCase(filter)) { - return g; - } + public static RegistryKey findGroup(String filter) { + Identifier identifier = Identifier.tryParse(filter); + ItemGroup itemGroup = Registries.ITEM_GROUP.get(identifier); + Optional> optionalRegistryKey = Registries.ITEM_GROUP.getKey(itemGroup); + if (optionalRegistryKey.isPresent()) { + return optionalRegistryKey.get(); } - log(Level.WARN, "Item Group " + filter + " not found, using misc"); - log(Level.INFO, "Valid groups:" + Arrays.stream(ItemGroup.GROUPS).map(ItemGroup::getName)); - return ItemGroup.MISC; + log(Level.WARN, "Item Group " + filter + " not found, using minecraft:building_blocks"); + + log(Level.INFO, "Valid groups:" + Registries.ITEM_GROUP.getKeys() + .stream() + .map(RegistryKey::getValue) + .map(Identifier::toString) + .collect(Collectors.joining(","))); + return ItemGroups.BUILDING_BLOCKS; } diff --git a/src/main/java/quimufu/simple_creator/MaterialSettingsPojo.java b/src/main/java/quimufu/simple_creator/MaterialSettingsPojo.java deleted file mode 100644 index ca9a55f..0000000 --- a/src/main/java/quimufu/simple_creator/MaterialSettingsPojo.java +++ /dev/null @@ -1,15 +0,0 @@ -package quimufu.simple_creator; - -import net.minecraft.block.MaterialColor; -import net.minecraft.block.piston.PistonBehavior; - -public class MaterialSettingsPojo { - String materialColor = "PINK"; - String pistonBehavior = "normal"; - boolean blocksMovement = true; - boolean burnable = false; - boolean breakByHand = true; - boolean liquid = false; - boolean solid = true; - boolean blocksLight = true; -} diff --git a/src/main/java/quimufu/simple_creator/SimpleCreatorConfig.java b/src/main/java/quimufu/simple_creator/SimpleCreatorConfig.java index 1460eef..1b9615f 100644 --- a/src/main/java/quimufu/simple_creator/SimpleCreatorConfig.java +++ b/src/main/java/quimufu/simple_creator/SimpleCreatorConfig.java @@ -1,10 +1,19 @@ package quimufu.simple_creator; -import me.shedaniel.autoconfig.ConfigData; -import me.shedaniel.autoconfig.annotation.Config; +import com.google.common.base.CaseFormat; +import de.siphalor.tweed4.annotated.AConfigEntry; +import de.siphalor.tweed4.annotated.ATweedConfig; +import de.siphalor.tweed4.config.ConfigEnvironment; +import de.siphalor.tweed4.config.ConfigScope; -@Config(name = "simple_creator") -public class SimpleCreatorConfig implements ConfigData { - public boolean enableTestThings = false; - public boolean extendedLogging = false; + +@ATweedConfig(serializer = "tweed4:hjson", scope = ConfigScope.GAME, environment = ConfigEnvironment.UNIVERSAL, tailors = {"tweed4:lang_json_descriptions", "tweed4:coat", "tweed4:json_schema"}, casing = CaseFormat.LOWER_HYPHEN) +//@ClothData(modid = "tweed4_testmod") +public class SimpleCreatorConfig { + + @AConfigEntry(name = "enableTestThings", comment = "Enables included test Blocks and Items") + public static boolean enableTestThings = false; + + + public static boolean extendedLogging = false; } diff --git a/src/main/java/quimufu/simple_creator/SimpleCreatorMod.java b/src/main/java/quimufu/simple_creator/SimpleCreatorMod.java index b4042c6..56d220b 100644 --- a/src/main/java/quimufu/simple_creator/SimpleCreatorMod.java +++ b/src/main/java/quimufu/simple_creator/SimpleCreatorMod.java @@ -1,16 +1,10 @@ package quimufu.simple_creator; -import me.shedaniel.autoconfig.AutoConfig; -import me.shedaniel.autoconfig.serializer.GsonConfigSerializer; import net.fabricmc.api.ModInitializer; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -//import net.minecraft.block.Material; - -//import java.lang.reflect.Field; - public class SimpleCreatorMod implements ModInitializer { public static Logger LOGGER = LogManager.getLogger(); @@ -23,28 +17,6 @@ public class SimpleCreatorMod implements ModInitializer { @Override public void onInitialize() { log(Level.INFO, "Initializing"); - AutoConfig.register(SimpleCreatorConfig.class, GsonConfigSerializer::new); -// for(Material m : Material.class.getEnumConstants()){ -// log(Level.INFO, String.valueOf(m.getColor().color)); -// } -// for (Field f : Material.class.getDeclaredFields()) { -// log(Level.INFO, f.getName()); -// try { -// Material m = ((Material) f.get(Material.class)); -// log(Level.INFO, "pistonBehavior: " + m.getPistonBehavior().name()); -// log(Level.INFO, "blocksMovement: " + m.blocksMovement()); -// log(Level.INFO, "burnable: " + m.isBurnable()); -// log(Level.INFO, "breakByHand: " + m.canBreakByHand()); -// log(Level.INFO, "liquid: " + m.isLiquid()); -// log(Level.INFO, "replaceable: " + m.isReplaceable()); -// log(Level.INFO, "solid: " + m.isSolid()); -// log(Level.INFO, "blocksLight: " + m.blocksLight()); -// log(Level.INFO, ""); -// log(Level.INFO, ""); -// -// } catch (IllegalAccessException ignored) { -// } -// } irl.load(); brl.load(); } diff --git a/src/main/java/quimufu/simple_creator/SimpleCreatorModMenuIntegration.java b/src/main/java/quimufu/simple_creator/SimpleCreatorModMenuIntegration.java deleted file mode 100644 index 8c7e993..0000000 --- a/src/main/java/quimufu/simple_creator/SimpleCreatorModMenuIntegration.java +++ /dev/null @@ -1,21 +0,0 @@ -package quimufu.simple_creator; - - -import com.terraformersmc.modmenu.api.ConfigScreenFactory; -import com.terraformersmc.modmenu.api.ModMenuApi; -import me.shedaniel.autoconfig.AutoConfig; -import net.minecraft.client.gui.screen.Screen; - -public class SimpleCreatorModMenuIntegration implements ModMenuApi { - - @Override - public ConfigScreenFactory getModConfigScreenFactory() { - return this::getScreen; - } - - private Screen getScreen(Screen parent) { - return AutoConfig.getConfigScreen(SimpleCreatorConfig.class, parent).get(); - } - - -} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 0fff2e3..d602fc9 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -18,8 +18,8 @@ ], "client": [], "server": [], - "modmenu": [ - "quimufu.simple_creator.SimpleCreatorModMenuIntegration" + "tweed4:config": [ + "quimufu.simple_creator.SimpleCreatorConfig" ] }, "mixins": [],