diff --git a/README.md b/README.md index bfdb669..244cae3 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ Here is an example: If you have a normal modded helmet e.g. copper and want to have a goggle helmet of it too +Option 1: ``` File: your_helmet_id.json (at `resources/data/yourmodid/recipes`): @@ -52,4 +53,6 @@ File: your_helmet_id.json (at `resources/data/yourmodid/recipes`): "result":{"item":"yourmodid:your_goggle_helmet_id"} } ``` +Option 2: +use the CreatePlusRecipeBuilder in combination with a RecipeDataProvider diff --git a/build.gradle b/build.gradle index a63a745..6000260 100644 --- a/build.gradle +++ b/build.gradle @@ -112,9 +112,13 @@ dependencies { // The userdev artifact is a special name and will get all sorts of transformations applied to it. minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" - compileOnly fg.deobf("com.tterrag.registrate:Registrate:${registrate_version}") + //compileOnly fg.deobf("com.tterrag.registrate:Registrate:${registrate_version}") + + //implementation fg.deobf("curse.maven:create-328085:${create_file_number}")//0.5.0 + implementation fg.deobf("com.simibubi.create:create-${minecraft_version}:${create_version}:slim"){transitive = false} + implementation fg.deobf("com.jozufozu.flywheel:flywheel-forge-${minecraft_version}:${flywheel_version}") + implementation fg.deobf("com.tterrag.registrate:Registrate:${registrate_version}") - implementation fg.deobf("curse.maven:create-328085:${create_file_number}")//0.5.0 compileOnly "mekanism:Mekanism:${mekanism_version}:api" runtimeOnly fg.deobf("mekanism:Mekanism:${mekanism_version}")// core @@ -122,7 +126,7 @@ dependencies { compileOnly fg.deobf("top.theillusivec4.curios:curios-forge:${curios_minecraft_version}-${curios_version}:api") runtimeOnly fg.deobf("top.theillusivec4.curios:curios-forge:${curios_minecraft_version}-${curios_version}") - implementation fg.deobf("curse.maven:flywheel-486392:${flywheel_file_number}")//0.6.3 + //implementation fg.deobf("curse.maven:flywheel-486392:${flywheel_file_number}")//0.6.3 } diff --git a/gradle.properties b/gradle.properties index 61c452e..1c48517 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,17 +3,17 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false -mod_version = 0.5.1a +mod_version = 0.5.2a modid = createplus author = robocraft999 -minecraft_version = 1.18.2 -forge_version = 40.1.60 -# 0.5.0d -create_file_number = 3934676 -# 0.6.5 -flywheel_file_number = 3934664 -curios_minecraft_version = 1.18.2 -curios_version = 5.0.7.0 -mekanism_version = 1.18.2-10.2.4.464 -registrate_version = MC1.18.2-1.1.3 \ No newline at end of file +minecraft_version = 1.19.2 +forge_version = 43.1.3 +# https://maven.tterrag.com/com/simibubi/create/create-1.19.2/ +create_version = 0.5.0.e-13 +flywheel_version = 0.6.6-6 +curios_minecraft_version = 1.19.2 +curios_version = 5.1.1.0 +# https://modmaven.dev/mekanism/Mekanism/ +mekanism_version = 1.19.2-10.3.3.470 +registrate_version = MC1.19-1.1.5 \ No newline at end of file diff --git a/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_chainmail_helmet.json b/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_chainmail_helmet.json new file mode 100644 index 0000000..2c6e1a1 --- /dev/null +++ b/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_chainmail_helmet.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_helmet": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:chainmail_helmet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "createplus:goggle_chainmail_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_helmet", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "createplus:goggle_chainmail_helmet" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_diamond_helmet.json b/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_diamond_helmet.json new file mode 100644 index 0000000..1566dc8 --- /dev/null +++ b/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_diamond_helmet.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_helmet": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:diamond_helmet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "createplus:goggle_diamond_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_helmet", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "createplus:goggle_diamond_helmet" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_diving_helmet.json b/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_diving_helmet.json new file mode 100644 index 0000000..e5a2213 --- /dev/null +++ b/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_diving_helmet.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_helmet": { + "conditions": { + "items": [ + { + "items": [ + "create:diving_helmet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "createplus:goggle_diving_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_helmet", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "createplus:goggle_diving_helmet" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_golden_helmet.json b/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_golden_helmet.json new file mode 100644 index 0000000..afb4d81 --- /dev/null +++ b/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_golden_helmet.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_helmet": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:golden_helmet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "createplus:goggle_golden_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_helmet", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "createplus:goggle_golden_helmet" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_iron_helmet.json b/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_iron_helmet.json new file mode 100644 index 0000000..b9db178 --- /dev/null +++ b/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_iron_helmet.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_helmet": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:iron_helmet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "createplus:goggle_iron_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_helmet", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "createplus:goggle_iron_helmet" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_leather_helmet.json b/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_leather_helmet.json new file mode 100644 index 0000000..c0a0413 --- /dev/null +++ b/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_leather_helmet.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_helmet": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:leather_helmet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "createplus:goggle_leather_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_helmet", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "createplus:goggle_leather_helmet" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_netherite_helmet.json b/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_netherite_helmet.json new file mode 100644 index 0000000..ccd46ac --- /dev/null +++ b/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_netherite_helmet.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_helmet": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:netherite_helmet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "createplus:goggle_netherite_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_helmet", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "createplus:goggle_netherite_helmet" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_turtle_helmet.json b/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_turtle_helmet.json new file mode 100644 index 0000000..efe4bbf --- /dev/null +++ b/src/generated/resources/data/createplus/advancements/recipes/combat/goggle_turtle_helmet.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_helmet": { + "conditions": { + "items": [ + { + "items": [ + "minecraft:turtle_helmet" + ] + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "createplus:goggle_turtle_helmet" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_helmet", + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "createplus:goggle_turtle_helmet" + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/createplus/recipes/chrushing/chainmail_helmet.json b/src/generated/resources/data/createplus/recipes/crushing/chainmail_helmet.json similarity index 62% rename from src/main/resources/data/createplus/recipes/chrushing/chainmail_helmet.json rename to src/generated/resources/data/createplus/recipes/crushing/chainmail_helmet.json index 0face2c..60d0b90 100644 --- a/src/main/resources/data/createplus/recipes/chrushing/chainmail_helmet.json +++ b/src/generated/resources/data/createplus/recipes/crushing/chainmail_helmet.json @@ -1,17 +1,20 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "createplus:goggle_chainmail_helmet" - } - ], - "results": [ - { - "item": "minecraft:chainmail_helmet" - }, - { - "item": "create:goggles" - } - ], - "processingTime": 150 +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "createplus:goggle_chainmail_helmet" + } + ], + "processingTime": 150, + "results": [ + { + "item": "minecraft:chainmail_helmet", + "nbt": { + "Damage": 0 + } + }, + { + "item": "create:goggles" + } + ] } \ No newline at end of file diff --git a/src/main/resources/data/createplus/recipes/chrushing/diamond_helmet.json b/src/generated/resources/data/createplus/recipes/crushing/diamond_helmet.json similarity index 62% rename from src/main/resources/data/createplus/recipes/chrushing/diamond_helmet.json rename to src/generated/resources/data/createplus/recipes/crushing/diamond_helmet.json index 7fb4f9b..7465ff1 100644 --- a/src/main/resources/data/createplus/recipes/chrushing/diamond_helmet.json +++ b/src/generated/resources/data/createplus/recipes/crushing/diamond_helmet.json @@ -1,17 +1,20 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "createplus:goggle_diamond_helmet" - } - ], - "results": [ - { - "item": "minecraft:diamond_helmet" - }, - { - "item": "create:goggles" - } - ], - "processingTime": 150 +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "createplus:goggle_diamond_helmet" + } + ], + "processingTime": 150, + "results": [ + { + "item": "minecraft:diamond_helmet", + "nbt": { + "Damage": 0 + } + }, + { + "item": "create:goggles" + } + ] } \ No newline at end of file diff --git a/src/main/resources/data/createplus/recipes/chrushing/diving_helmet.json b/src/generated/resources/data/createplus/recipes/crushing/diving_helmet.json similarity index 62% rename from src/main/resources/data/createplus/recipes/chrushing/diving_helmet.json rename to src/generated/resources/data/createplus/recipes/crushing/diving_helmet.json index 674e536..91297dd 100644 --- a/src/main/resources/data/createplus/recipes/chrushing/diving_helmet.json +++ b/src/generated/resources/data/createplus/recipes/crushing/diving_helmet.json @@ -5,13 +5,16 @@ "item": "createplus:goggle_diving_helmet" } ], + "processingTime": 150, "results": [ { - "item": "create:diving_helmet" + "item": "create:diving_helmet", + "nbt": { + "Damage": 0 + } }, { "item": "create:goggles" } - ], - "processingTime": 150 + ] } \ No newline at end of file diff --git a/src/main/resources/data/createplus/recipes/chrushing/golden_helmet.json b/src/generated/resources/data/createplus/recipes/crushing/golden_helmet.json similarity index 62% rename from src/main/resources/data/createplus/recipes/chrushing/golden_helmet.json rename to src/generated/resources/data/createplus/recipes/crushing/golden_helmet.json index d3b5fda..24aed29 100644 --- a/src/main/resources/data/createplus/recipes/chrushing/golden_helmet.json +++ b/src/generated/resources/data/createplus/recipes/crushing/golden_helmet.json @@ -1,17 +1,20 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "createplus:goggle_golden_helmet" - } - ], - "results": [ - { - "item": "minecraft:golden_helmet" - }, - { - "item": "create:goggles" - } - ], - "processingTime": 150 +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "createplus:goggle_golden_helmet" + } + ], + "processingTime": 150, + "results": [ + { + "item": "minecraft:golden_helmet", + "nbt": { + "Damage": 0 + } + }, + { + "item": "create:goggles" + } + ] } \ No newline at end of file diff --git a/src/main/resources/data/createplus/recipes/chrushing/iron_helmet.json b/src/generated/resources/data/createplus/recipes/crushing/iron_helmet.json similarity index 62% rename from src/main/resources/data/createplus/recipes/chrushing/iron_helmet.json rename to src/generated/resources/data/createplus/recipes/crushing/iron_helmet.json index 56eb6f6..4ab8571 100644 --- a/src/main/resources/data/createplus/recipes/chrushing/iron_helmet.json +++ b/src/generated/resources/data/createplus/recipes/crushing/iron_helmet.json @@ -1,17 +1,20 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "createplus:goggle_iron_helmet" - } - ], - "results": [ - { - "item": "minecraft:iron_helmet" - }, - { - "item": "create:goggles" - } - ], - "processingTime": 150 +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "createplus:goggle_iron_helmet" + } + ], + "processingTime": 150, + "results": [ + { + "item": "minecraft:iron_helmet", + "nbt": { + "Damage": 0 + } + }, + { + "item": "create:goggles" + } + ] } \ No newline at end of file diff --git a/src/main/resources/data/createplus/recipes/chrushing/leather_helmet.json b/src/generated/resources/data/createplus/recipes/crushing/leather_helmet.json similarity index 62% rename from src/main/resources/data/createplus/recipes/chrushing/leather_helmet.json rename to src/generated/resources/data/createplus/recipes/crushing/leather_helmet.json index bf31838..d9b1124 100644 --- a/src/main/resources/data/createplus/recipes/chrushing/leather_helmet.json +++ b/src/generated/resources/data/createplus/recipes/crushing/leather_helmet.json @@ -1,17 +1,20 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "createplus:goggle_leather_helmet" - } - ], - "results": [ - { - "item": "minecraft:leather_helmet" - }, - { - "item": "create:goggles" - } - ], - "processingTime": 150 +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "createplus:goggle_leather_helmet" + } + ], + "processingTime": 150, + "results": [ + { + "item": "minecraft:leather_helmet", + "nbt": { + "Damage": 0 + } + }, + { + "item": "create:goggles" + } + ] } \ No newline at end of file diff --git a/src/main/resources/data/createplus/recipes/chrushing/netherite_helmet.json b/src/generated/resources/data/createplus/recipes/crushing/netherite_helmet.json similarity index 62% rename from src/main/resources/data/createplus/recipes/chrushing/netherite_helmet.json rename to src/generated/resources/data/createplus/recipes/crushing/netherite_helmet.json index 1dfa6c4..6c143a7 100644 --- a/src/main/resources/data/createplus/recipes/chrushing/netherite_helmet.json +++ b/src/generated/resources/data/createplus/recipes/crushing/netherite_helmet.json @@ -1,17 +1,20 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "createplus:goggle_netherite_helmet" - } - ], - "results": [ - { - "item": "minecraft:netherite_helmet" - }, - { - "item": "create:goggles" - } - ], - "processingTime": 150 +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "createplus:goggle_netherite_helmet" + } + ], + "processingTime": 150, + "results": [ + { + "item": "minecraft:netherite_helmet", + "nbt": { + "Damage": 0 + } + }, + { + "item": "create:goggles" + } + ] } \ No newline at end of file diff --git a/src/main/resources/data/createplus/recipes/chrushing/turtle_helmet.json b/src/generated/resources/data/createplus/recipes/crushing/turtle_helmet.json similarity index 62% rename from src/main/resources/data/createplus/recipes/chrushing/turtle_helmet.json rename to src/generated/resources/data/createplus/recipes/crushing/turtle_helmet.json index c1b4186..52fd16a 100644 --- a/src/main/resources/data/createplus/recipes/chrushing/turtle_helmet.json +++ b/src/generated/resources/data/createplus/recipes/crushing/turtle_helmet.json @@ -1,17 +1,20 @@ -{ - "type": "create:crushing", - "ingredients": [ - { - "item": "createplus:goggle_turtle_helmet" - } - ], - "results": [ - { - "item": "minecraft:turtle_helmet" - }, - { - "item": "create:goggles" - } - ], - "processingTime": 150 +{ + "type": "create:crushing", + "ingredients": [ + { + "item": "createplus:goggle_turtle_helmet" + } + ], + "processingTime": 150, + "results": [ + { + "item": "minecraft:turtle_helmet", + "nbt": { + "Damage": 0 + } + }, + { + "item": "create:goggles" + } + ] } \ No newline at end of file diff --git a/src/generated/resources/data/createplus/recipes/goggle_chainmail_helmet.json b/src/generated/resources/data/createplus/recipes/goggle_chainmail_helmet.json new file mode 100644 index 0000000..1cd3ad6 --- /dev/null +++ b/src/generated/resources/data/createplus/recipes/goggle_chainmail_helmet.json @@ -0,0 +1,17 @@ +{ + "type": "createplus:crafting_nbt", + "key": { + "g": { + "item": "create:goggles" + }, + "h": { + "item": "minecraft:chainmail_helmet" + } + }, + "pattern": [ + "hg" + ], + "result": { + "item": "createplus:goggle_chainmail_helmet" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/createplus/recipes/goggle_diamond_helmet.json b/src/generated/resources/data/createplus/recipes/goggle_diamond_helmet.json new file mode 100644 index 0000000..f2b667a --- /dev/null +++ b/src/generated/resources/data/createplus/recipes/goggle_diamond_helmet.json @@ -0,0 +1,17 @@ +{ + "type": "createplus:crafting_nbt", + "key": { + "g": { + "item": "create:goggles" + }, + "h": { + "item": "minecraft:diamond_helmet" + } + }, + "pattern": [ + "hg" + ], + "result": { + "item": "createplus:goggle_diamond_helmet" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/createplus/recipes/goggle_diving_helmet.json b/src/generated/resources/data/createplus/recipes/goggle_diving_helmet.json new file mode 100644 index 0000000..fd2a717 --- /dev/null +++ b/src/generated/resources/data/createplus/recipes/goggle_diving_helmet.json @@ -0,0 +1,17 @@ +{ + "type": "createplus:crafting_nbt", + "key": { + "g": { + "item": "create:goggles" + }, + "h": { + "item": "create:diving_helmet" + } + }, + "pattern": [ + "hg" + ], + "result": { + "item": "createplus:goggle_diving_helmet" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/createplus/recipes/goggle_golden_helmet.json b/src/generated/resources/data/createplus/recipes/goggle_golden_helmet.json new file mode 100644 index 0000000..ec3939c --- /dev/null +++ b/src/generated/resources/data/createplus/recipes/goggle_golden_helmet.json @@ -0,0 +1,17 @@ +{ + "type": "createplus:crafting_nbt", + "key": { + "g": { + "item": "create:goggles" + }, + "h": { + "item": "minecraft:golden_helmet" + } + }, + "pattern": [ + "hg" + ], + "result": { + "item": "createplus:goggle_golden_helmet" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/createplus/recipes/goggle_iron_helmet.json b/src/generated/resources/data/createplus/recipes/goggle_iron_helmet.json new file mode 100644 index 0000000..aac5c01 --- /dev/null +++ b/src/generated/resources/data/createplus/recipes/goggle_iron_helmet.json @@ -0,0 +1,17 @@ +{ + "type": "createplus:crafting_nbt", + "key": { + "g": { + "item": "create:goggles" + }, + "h": { + "item": "minecraft:iron_helmet" + } + }, + "pattern": [ + "hg" + ], + "result": { + "item": "createplus:goggle_iron_helmet" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/createplus/recipes/goggle_leather_helmet.json b/src/generated/resources/data/createplus/recipes/goggle_leather_helmet.json new file mode 100644 index 0000000..be6a938 --- /dev/null +++ b/src/generated/resources/data/createplus/recipes/goggle_leather_helmet.json @@ -0,0 +1,17 @@ +{ + "type": "createplus:crafting_nbt", + "key": { + "g": { + "item": "create:goggles" + }, + "h": { + "item": "minecraft:leather_helmet" + } + }, + "pattern": [ + "hg" + ], + "result": { + "item": "createplus:goggle_leather_helmet" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/createplus/recipes/goggle_netherite_helmet.json b/src/generated/resources/data/createplus/recipes/goggle_netherite_helmet.json new file mode 100644 index 0000000..e1e8243 --- /dev/null +++ b/src/generated/resources/data/createplus/recipes/goggle_netherite_helmet.json @@ -0,0 +1,17 @@ +{ + "type": "createplus:crafting_nbt", + "key": { + "g": { + "item": "create:goggles" + }, + "h": { + "item": "minecraft:netherite_helmet" + } + }, + "pattern": [ + "hg" + ], + "result": { + "item": "createplus:goggle_netherite_helmet" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/createplus/recipes/goggle_turtle_helmet.json b/src/generated/resources/data/createplus/recipes/goggle_turtle_helmet.json new file mode 100644 index 0000000..4e32351 --- /dev/null +++ b/src/generated/resources/data/createplus/recipes/goggle_turtle_helmet.json @@ -0,0 +1,17 @@ +{ + "type": "createplus:crafting_nbt", + "key": { + "g": { + "item": "create:goggles" + }, + "h": { + "item": "minecraft:turtle_helmet" + } + }, + "pattern": [ + "hg" + ], + "result": { + "item": "createplus:goggle_turtle_helmet" + } +} \ No newline at end of file diff --git a/src/main/java/com/robocraft999/createplus/ClientEvents.java b/src/main/java/com/robocraft999/createplus/ClientEvents.java index f83b949..2880426 100644 --- a/src/main/java/com/robocraft999/createplus/ClientEvents.java +++ b/src/main/java/com/robocraft999/createplus/ClientEvents.java @@ -10,7 +10,7 @@ import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.renderer.MultiBufferSource.BufferSource; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TextComponent; +//import net.minecraft.network.chat.TextComponent; import net.minecraft.tags.FluidTags; import net.minecraft.util.FastColor; import net.minecraft.util.StringUtil; diff --git a/src/main/java/com/robocraft999/createplus/CreatePlus.java b/src/main/java/com/robocraft999/createplus/CreatePlus.java index 9b1ffed..c645fa0 100644 --- a/src/main/java/com/robocraft999/createplus/CreatePlus.java +++ b/src/main/java/com/robocraft999/createplus/CreatePlus.java @@ -1,39 +1,35 @@ package com.robocraft999.createplus; -import com.robocraft999.createplus.item.goggle.module.GoggleModule; +import com.robocraft999.createplus.data.RecipeDataProvider; +import com.robocraft999.createplus.lists.ModCompat; import com.robocraft999.createplus.lists.ModuleList; -import mekanism.api.MekanismAPI; import mekanism.api.MekanismIMC; -import net.minecraftforge.client.gui.OverlayRegistry; +import net.minecraft.data.recipes.RecipeProvider; +import net.minecraft.data.recipes.ShapedRecipeBuilder; +import net.minecraft.world.item.Items; +import net.minecraftforge.client.event.RegisterColorHandlersEvent; +import net.minecraftforge.data.event.GatherDataEvent; import net.minecraftforge.eventbus.api.IEventBus; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.robocraft999.createplus.lists.ItemList; import com.robocraft999.createplus.lists.RecipeTypeList; -import com.simibubi.create.content.contraptions.goggles.GoggleOverlayRenderer; -import net.minecraft.world.inventory.InventoryMenu; import net.minecraft.world.item.DyeableLeatherItem; import net.minecraft.world.item.crafting.RecipeSerializer; -import net.minecraft.resources.ResourceLocation; import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.ColorHandlerEvent; -import net.minecraftforge.client.event.TextureStitchEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.crafting.conditions.ModLoadedCondition; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.fml.InterModComms; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import top.theillusivec4.curios.api.SlotTypeMessage; -@Mod("createplus") +@Mod(CreatePlus.MODID) public class CreatePlus { public static CreatePlus INSTANCE; @@ -46,15 +42,16 @@ public CreatePlus() { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); ItemList.register(modEventBus); - if(new ModLoadedCondition("mekanism").test()) - ModuleList.register(modEventBus); + RecipeTypeList.register(modEventBus); + + if(ModCompat.MEKANISM.isLoaded()) + ModuleList.register(modEventBus); modEventBus.addListener(this::setup); modEventBus.addListener(this::clientRegistries); + modEventBus.addListener(this::gatherData); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> modEventBus.addListener(this::registerItemColors)); - - modEventBus.addGenericListener(RecipeSerializer.class, RecipeTypeList::register); MinecraftForge.EVENT_BUS.register(this); } @@ -68,9 +65,14 @@ private void clientRegistries(final FMLClientSetupEvent event) { logger.info("Create Plus Client Setup"); } - private void registerItemColors(final ColorHandlerEvent.Item event){ + private void registerItemColors(final RegisterColorHandlersEvent.Item event){ event.getItemColors().register((stack, color) -> color > 0 ? -1 : ((DyeableLeatherItem)stack.getItem()).getColor(stack), ItemList.goggle_leather_helmet.get()); } + + private void gatherData(GatherDataEvent event){ + logger.info("gathering data"); + event.getGenerator().addProvider(true, new RecipeDataProvider(event.getGenerator())); + } @Mod.EventBusSubscriber(modid = MODID, bus=Mod.EventBusSubscriber.Bus.MOD) @@ -79,14 +81,12 @@ public static class RegistryEvents { @SuppressWarnings("unused") @SubscribeEvent public static void enqueueIMC(final InterModEnqueueEvent event) { - ModLoadedCondition curios_loaded = new ModLoadedCondition("curios"); - if(curios_loaded.test()) { + if(ModCompat.CURIOS.isLoaded()) { /*InterModComms.sendTo(MODID, "curios", SlotTypeMessage.REGISTER_TYPE, () -> new SlotTypeMessage.Builder("createplus.backtank_slot").size(1).icon(new ResourceLocation(MODID, "item/goggle_slot_icon")).build());*/ } - ModLoadedCondition mekanism_loaded = new ModLoadedCondition("mekanism"); - if(mekanism_loaded.test()){ + if(ModCompat.MEKANISM.isLoaded()){ MekanismIMC.addMekaSuitHelmetModules(ModuleList.GOGGLE_MODULE.get()); } } diff --git a/src/main/java/com/robocraft999/createplus/data/CreatePlusRecipeBuilder.java b/src/main/java/com/robocraft999/createplus/data/CreatePlusRecipeBuilder.java new file mode 100644 index 0000000..ff8283e --- /dev/null +++ b/src/main/java/com/robocraft999/createplus/data/CreatePlusRecipeBuilder.java @@ -0,0 +1,137 @@ +package com.robocraft999.createplus.data; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.robocraft999.createplus.lists.RecipeTypeList; +import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.AdvancementRewards; +import net.minecraft.advancements.CriterionTriggerInstance; +import net.minecraft.advancements.RequirementsStrategy; +import net.minecraft.advancements.critereon.RecipeUnlockedTrigger; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.data.recipes.RecipeBuilder; +import net.minecraft.data.recipes.ShapedRecipeBuilder; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.level.ItemLike; + +import javax.annotation.Nullable; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Consumer; + +public class CreatePlusRecipeBuilder implements RecipeBuilder { + private final Item result; + private final int count; + private final List rows = Lists.newArrayList(); + private final Map key = Maps.newLinkedHashMap(); + private final Advancement.Builder advancement = Advancement.Builder.advancement(); + @Nullable + private String group; + + public CreatePlusRecipeBuilder(ItemLike result, int count) { + this.result = result.asItem(); + this.count = count; + } + + public static CreatePlusRecipeBuilder shaped(ItemLike result) { + return shaped(result, 1); + } + + public static CreatePlusRecipeBuilder shaped(ItemLike result, int count) { + return new CreatePlusRecipeBuilder(result, count); + } + + public CreatePlusRecipeBuilder define(Character tag, TagKey item) { + return this.define(tag, Ingredient.of(item)); + } + + public CreatePlusRecipeBuilder define(Character tag, ItemLike item) { + return this.define(tag, Ingredient.of(item)); + } + + public CreatePlusRecipeBuilder define(Character tag, Ingredient item) { + if (this.key.containsKey(tag)) { + throw new IllegalArgumentException("Symbol '" + tag + "' is already defined!"); + } else if (tag == ' ') { + throw new IllegalArgumentException("Symbol ' ' (whitespace) is reserved and cannot be defined"); + } else { + this.key.put(tag, item); + return this; + } + } + + public CreatePlusRecipeBuilder pattern(String pattern) { + if (!this.rows.isEmpty() && pattern.length() != this.rows.get(0).length()) { + throw new IllegalArgumentException("Pattern must be the same width on every line!"); + } else { + this.rows.add(pattern); + return this; + } + } + + public CreatePlusRecipeBuilder unlockedBy(String name, CriterionTriggerInstance trigger) { + this.advancement.addCriterion(name, trigger); + return this; + } + + public CreatePlusRecipeBuilder group(@Nullable String group) { + this.group = group; + return this; + } + + public Item getResult() { + return this.result; + } + + public void save(Consumer writer, ResourceLocation id) { + this.ensureValid(id); + this.advancement.parent(ROOT_RECIPE_ADVANCEMENT).addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(id)).rewards(AdvancementRewards.Builder.recipe(id)).requirements(RequirementsStrategy.OR); + writer.accept(new Result(id, this.result, this.count, this.group == null ? "" : this.group, this.rows, this.key, this.advancement, new ResourceLocation(id.getNamespace(), "recipes/" + this.result.getItemCategory().getRecipeFolderName() + "/" + id.getPath()))); + } + + private void ensureValid(ResourceLocation p_126144_) { + if (this.rows.isEmpty()) { + throw new IllegalStateException("No pattern is defined for shaped recipe " + p_126144_ + "!"); + } else { + Set set = Sets.newHashSet(this.key.keySet()); + set.remove(' '); + + for(String s : this.rows) { + for(int i = 0; i < s.length(); ++i) { + char c0 = s.charAt(i); + if (!this.key.containsKey(c0) && c0 != ' ') { + throw new IllegalStateException("Pattern in recipe " + p_126144_ + " uses undefined symbol '" + c0 + "'"); + } + + set.remove(c0); + } + } + + if (!set.isEmpty()) { + throw new IllegalStateException("Ingredients are defined but not used in pattern for recipe " + p_126144_); + } else if (this.rows.size() == 1 && this.rows.get(0).length() == 1) { + throw new IllegalStateException("Shaped recipe " + p_126144_ + " only takes in a single item - should it be a shapeless recipe instead?"); + } else if (this.advancement.getCriteria().isEmpty()) { + throw new IllegalStateException("No way of obtaining recipe " + p_126144_); + } + } + } + + public static class Result extends ShapedRecipeBuilder.Result{ + + public Result(ResourceLocation id, Item result, int count, String group, List pattern, Map key, Advancement.Builder advancement, ResourceLocation advancementId) { + super(id, result, count, group, pattern, key, advancement, advancementId); + } + + @Override + public RecipeSerializer getType() { + return RecipeTypeList.CRAFTING_NBT.get(); + } + } +} diff --git a/src/main/java/com/robocraft999/createplus/data/RecipeDataProvider.java b/src/main/java/com/robocraft999/createplus/data/RecipeDataProvider.java new file mode 100644 index 0000000..dff7736 --- /dev/null +++ b/src/main/java/com/robocraft999/createplus/data/RecipeDataProvider.java @@ -0,0 +1,74 @@ +package com.robocraft999.createplus.data; + +import com.robocraft999.createplus.CreatePlus; +import com.robocraft999.createplus.lists.ItemList; +import com.simibubi.create.AllItems; +import com.simibubi.create.content.contraptions.components.crusher.CrushingRecipe; +import com.simibubi.create.content.contraptions.processing.ProcessingRecipeBuilder; +import mekanism.api.MekanismAPI; +import mekanism.api.MekanismIMC; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.data.recipes.RecipeProvider; +import net.minecraft.data.recipes.ShapedRecipeBuilder; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagManager; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.level.ItemLike; +import net.minecraftforge.common.Tags; +import net.minecraftforge.common.crafting.ConditionalRecipe; +import net.minecraftforge.common.crafting.conditions.ModLoadedCondition; + +import java.util.function.Consumer; + +public class RecipeDataProvider extends RecipeProvider { + public RecipeDataProvider(DataGenerator gen) { + super(gen); + } + + @Override + protected void buildCraftingRecipes(Consumer consumer) { + helmetRecipe(ItemList.goggle_chainmail_helmet.get(), Items.CHAINMAIL_HELMET, consumer); + helmetRecipe(ItemList.goggle_diamond_helmet.get(), Items.DIAMOND_HELMET, consumer); + helmetRecipe(ItemList.goggle_golden_helmet.get(), Items.GOLDEN_HELMET, consumer); + helmetRecipe(ItemList.goggle_iron_helmet.get(), Items.IRON_HELMET, consumer); + helmetRecipe(ItemList.goggle_leather_helmet.get(), Items.LEATHER_HELMET, consumer); + helmetRecipe(ItemList.goggle_turtle_helmet.get(), Items.TURTLE_HELMET, consumer); + helmetRecipe(ItemList.goggle_netherite_helmet.get(), Items.NETHERITE_HELMET, consumer); + helmetRecipe(ItemList.goggle_diving_helmet.get(), AllItems.DIVING_HELMET.get(), consumer); + } + + private void helmetRecipe(ItemLike result, ItemLike helmet, Consumer writer){ + CreatePlusRecipeBuilder.shaped(result) + .pattern("hg") + .define('h', helmet) + .define('g', AllItems.GOGGLES.get()) + .unlockedBy("has_helmet", has(helmet)) + .save(writer); + crushing(result, helmet, writer); + } + + private void crushing(ItemLike result, ItemLike input, Consumer writer){ + ProcessingRecipeBuilder crushingRecipeBuilder = + new ProcessingRecipeBuilder<>(CrushingRecipe::new, new ResourceLocation(CreatePlus.MODID, input.asItem().toString())); + crushingRecipeBuilder.withItemIngredients(Ingredient.of(result)) + .output(input) + .output(AllItems.GOGGLES.get()) + .duration(150) + .build(writer); + } + + /*private void mekModule(ItemLike module, ItemLike input, Consumer writer){ + //ConditionalRecipe.builder().addCondition(new ModLoadedCondition("mekanism")).addRecipe(writer.); + ShapedRecipeBuilder.shaped(module) + .pattern("A#A") + .pattern("ABA") + .pattern("HHH") + .define('A', ) + .define('#', input) + //.define('B', ) + //.define('H', ) + .save(writer); + }*/ +} diff --git a/src/main/java/com/robocraft999/createplus/item/crafting/GHelmetCrafingRecipe.java b/src/main/java/com/robocraft999/createplus/item/crafting/GHelmetCrafingRecipe.java deleted file mode 100644 index 9658d31..0000000 --- a/src/main/java/com/robocraft999/createplus/item/crafting/GHelmetCrafingRecipe.java +++ /dev/null @@ -1,137 +0,0 @@ -package com.robocraft999.createplus.item.crafting; - -import java.util.Map; -import java.util.Map.Entry; - -import com.google.gson.JsonObject; -import com.robocraft999.createplus.lists.ItemList; -import com.robocraft999.createplus.lists.RecipeTypeList; - -import com.simibubi.create.AllItems; -import com.simibubi.create.foundation.utility.CreateRegistry; -import com.simibubi.create.foundation.utility.RegisteredObjects; -import net.minecraft.world.item.enchantment.Enchantment; -import net.minecraft.world.item.enchantment.EnchantmentHelper; -import net.minecraft.world.inventory.CraftingContainer; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.item.crafting.CraftingRecipe; -import net.minecraft.world.item.crafting.RecipeSerializer; -import net.minecraft.world.item.crafting.Ingredient; -import net.minecraft.world.item.crafting.ShapedRecipe; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.core.NonNullList; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.Level; -import net.minecraftforge.registries.ForgeRegistryEntry; - -import javax.annotation.Nonnull; - -public class GHelmetCrafingRecipe implements CraftingRecipe{ - - private final ShapedRecipe recipe; - - public GHelmetCrafingRecipe(ShapedRecipe recipe) { - this.recipe = recipe; - } - - @Override - public boolean matches(@Nonnull CraftingContainer inv, @Nonnull Level worldIn) { - //System.out.println("matches: "+getRecipe().matches(inv, worldIn)); - return getRecipe().matches(inv, worldIn); - } - - @Nonnull - @Override - public NonNullList getIngredients() { - return recipe.getIngredients(); - } - - @Nonnull - @Override - public ItemStack assemble(CraftingContainer inv) { - for (int slot = 0; slot < inv.getContainerSize(); slot++) { - ItemStack helmet = inv.getItem(slot).copy(); - - ItemStack goggleHelmet = ItemStack.EMPTY; - if(helmet.is(Items.CHAINMAIL_HELMET))goggleHelmet = new ItemStack(ItemList.goggle_chainmail_helmet.get()); - if(helmet.is(Items.DIAMOND_HELMET))goggleHelmet = new ItemStack(ItemList.goggle_diamond_helmet.get()); - if(helmet.is(Items.GOLDEN_HELMET))goggleHelmet = new ItemStack(ItemList.goggle_golden_helmet.get()); - if(helmet.is(Items.IRON_HELMET))goggleHelmet = new ItemStack(ItemList.goggle_iron_helmet.get()); - if(helmet.is(Items.LEATHER_HELMET))goggleHelmet = new ItemStack(ItemList.goggle_leather_helmet.get()); - if(helmet.is(Items.TURTLE_HELMET))goggleHelmet = new ItemStack(ItemList.goggle_turtle_helmet.get()); - if(helmet.is(Items.NETHERITE_HELMET))goggleHelmet = new ItemStack(ItemList.goggle_netherite_helmet.get()); - if(helmet.is(AllItems.DIVING_HELMET.get()))goggleHelmet = new ItemStack(ItemList.goggle_diving_helmet.get()); - - if (goggleHelmet.isEmpty())continue; - Map map; - map = EnchantmentHelper.getEnchantments(helmet); - //System.out.println("got enchantments "+map); - - for(Entry entry : map.entrySet()) { - Enchantment enchantment = entry.getKey(); - if (!enchantment.isCurse() || EnchantmentHelper.getItemEnchantmentLevel(enchantment, goggleHelmet) == 0) { - goggleHelmet.enchant(enchantment, entry.getValue()); - //System.out.println("added enchantment"); - } - } - return goggleHelmet; - } - return ItemStack.EMPTY; - } - - @Nonnull - @Override - public ItemStack getResultItem() { - return getRecipe().getResultItem(); - } - - @Nonnull - @Override - public ResourceLocation getId() { - return getRecipe().getId(); - } - - @Nonnull - @Override - public RecipeSerializer getSerializer() { - return RecipeTypeList.HELMET_CRAFTING.serializer; - } - - @Override - public boolean canCraftInDimensions(int width, int height) { - return getRecipe().canCraftInDimensions(width, height); - } - - public ShapedRecipe getRecipe() { - return recipe; - } - public static class Serializer extends ForgeRegistryEntry> implements RecipeSerializer { - - @Nonnull - @Override - public GHelmetCrafingRecipe fromJson(@Nonnull ResourceLocation recipeId, @Nonnull JsonObject json) { - ShapedRecipe recipe = RecipeSerializer.SHAPED_RECIPE.fromJson(recipeId, json); - - return new GHelmetCrafingRecipe(recipe); - } - - @Override - public GHelmetCrafingRecipe fromNetwork(@Nonnull ResourceLocation recipeId, @Nonnull FriendlyByteBuf buffer) { - ShapedRecipe recipe = RecipeSerializer.SHAPED_RECIPE.fromNetwork(recipeId, buffer); - - return new GHelmetCrafingRecipe(recipe); - - } - - @Override - public void toNetwork(@Nonnull FriendlyByteBuf buffer, GHelmetCrafingRecipe recipe) { - RecipeSerializer.SHAPED_RECIPE.toNetwork(buffer, recipe.getRecipe()); - } - - } - - - - -} diff --git a/src/main/java/com/robocraft999/createplus/item/crafting/NBTCraftingRecipe.java b/src/main/java/com/robocraft999/createplus/item/crafting/NBTCraftingRecipe.java new file mode 100644 index 0000000..70fc6ff --- /dev/null +++ b/src/main/java/com/robocraft999/createplus/item/crafting/NBTCraftingRecipe.java @@ -0,0 +1,109 @@ +package com.robocraft999.createplus.item.crafting; + +import java.util.Arrays; +import java.util.Map; +import java.util.Map.Entry; +import java.util.stream.Collectors; + +import com.google.gson.JsonObject; +import com.robocraft999.createplus.CreatePlus; +import com.robocraft999.createplus.lists.RecipeTypeList; + +import net.minecraft.world.item.crafting.*; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.inventory.CraftingContainer; +import net.minecraft.world.item.ItemStack; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.core.NonNullList; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.Level; + +import javax.annotation.Nonnull; + +public record NBTCraftingRecipe(ShapedRecipe recipe) implements CraftingRecipe { + + @Override + public boolean matches(@Nonnull CraftingContainer inv, @Nonnull Level worldIn) { + return recipe().matches(inv, worldIn); + } + + @Nonnull + @Override + public NonNullList getIngredients() { + return recipe.getIngredients(); + } + + @Nonnull + @Override + public ItemStack assemble(CraftingContainer inv) { + for (int slot = 0; slot < inv.getContainerSize(); slot++) { + ItemStack nbtItem = inv.getItem(slot).copy(); + if(nbtItem.isEmpty())continue; + + ItemStack nbtItemResult = ItemStack.EMPTY; + if(nbtItem.isDamageableItem()) nbtItemResult = getResultItem(); + + if (nbtItemResult.isEmpty()) continue; + Map map = EnchantmentHelper.getEnchantments(nbtItem); + + for (Entry entry : map.entrySet()) { + Enchantment enchantment = entry.getKey(); + if (!enchantment.isCurse() && EnchantmentHelper.getTagEnchantmentLevel(enchantment, nbtItemResult) == 0) { + nbtItemResult.enchant(enchantment, entry.getValue()); + } + } + return nbtItemResult; + } + return ItemStack.EMPTY; + } + + @Nonnull + @Override + public ItemStack getResultItem() { + return recipe().getResultItem(); + } + + @Nonnull + @Override + public ResourceLocation getId() { + return recipe().getId(); + } + + @Nonnull + @Override + public RecipeSerializer getSerializer() { + return RecipeTypeList.CRAFTING_NBT.get(); + } + + @Override + public boolean canCraftInDimensions(int width, int height) { + return recipe().canCraftInDimensions(width, height); + } + + + public static class Serializer implements RecipeSerializer { + + @Nonnull + @Override + public NBTCraftingRecipe fromJson(@Nonnull ResourceLocation recipeId, @Nonnull JsonObject json) { + ShapedRecipe recipe = RecipeSerializer.SHAPED_RECIPE.fromJson(recipeId, json); + return new NBTCraftingRecipe(recipe); + } + + @Override + public NBTCraftingRecipe fromNetwork(@Nonnull ResourceLocation recipeId, @Nonnull FriendlyByteBuf buffer) { + ShapedRecipe recipe = RecipeSerializer.SHAPED_RECIPE.fromNetwork(recipeId, buffer); + return new NBTCraftingRecipe(recipe); + + } + + @Override + public void toNetwork(@Nonnull FriendlyByteBuf buffer, NBTCraftingRecipe recipe) { + RecipeSerializer.SHAPED_RECIPE.toNetwork(buffer, recipe.recipe()); + } + + } + + +} diff --git a/src/main/java/com/robocraft999/createplus/item/goggle/DivingGoggleArmor.java b/src/main/java/com/robocraft999/createplus/item/goggle/DivingGoggleArmor.java index 01cda28..2bd3dfb 100644 --- a/src/main/java/com/robocraft999/createplus/item/goggle/DivingGoggleArmor.java +++ b/src/main/java/com/robocraft999/createplus/item/goggle/DivingGoggleArmor.java @@ -4,11 +4,11 @@ import com.simibubi.create.AllItems; import com.simibubi.create.content.curiosities.armor.BackTankUtil; -import net.minecraft.client.Minecraft; +/*import net.minecraft.client.Minecraft; import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.player.Player;*/ import net.minecraft.world.item.ArmorMaterial; -import net.minecraft.world.item.ItemStack; +/*import net.minecraft.world.item.ItemStack; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.tags.FluidTags; @@ -18,7 +18,7 @@ import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.items.IItemHandlerModifiable; -import top.theillusivec4.curios.api.CuriosApi; +import top.theillusivec4.curios.api.CuriosApi;*/ //@EventBusSubscriber public class DivingGoggleArmor extends GoggleArmor { diff --git a/src/main/java/com/robocraft999/createplus/item/goggle/GoggleArmor.java b/src/main/java/com/robocraft999/createplus/item/goggle/GoggleArmor.java index 877f0e3..6b4a977 100644 --- a/src/main/java/com/robocraft999/createplus/item/goggle/GoggleArmor.java +++ b/src/main/java/com/robocraft999/createplus/item/goggle/GoggleArmor.java @@ -6,6 +6,7 @@ import com.robocraft999.createplus.lists.ArmorMaterialList; import com.robocraft999.createplus.lists.ItemList; +import com.robocraft999.createplus.lists.ModCompat; import com.robocraft999.createplus.lists.ModuleList; import com.simibubi.create.AllItems; import com.simibubi.create.content.contraptions.goggles.GogglesItem; @@ -81,8 +82,7 @@ public boolean isGoggleHelmet(Player player) { } } - ModLoadedCondition mekloaded = new ModLoadedCondition("mekanism"); - if(mekloaded.test()) { + if(ModCompat.MEKANISM.isLoaded()) { return MekanismAPI.getModuleHelper().isEnabled(headSlot, ModuleList.GOGGLE_MODULE.get()); } diff --git a/src/main/java/com/robocraft999/createplus/lists/ItemList.java b/src/main/java/com/robocraft999/createplus/lists/ItemList.java index 8402ebc..12504e8 100644 --- a/src/main/java/com/robocraft999/createplus/lists/ItemList.java +++ b/src/main/java/com/robocraft999/createplus/lists/ItemList.java @@ -37,7 +37,7 @@ public static void register(IEventBus bus) { } private static RegistryObject registerGoggleModule(Item.Properties properties){ - if (new ModLoadedCondition("mekanism").test()) { + if (ModCompat.MEKANISM.isLoaded()) { return ITEM_REGISTER.register("module_goggle_unit", () -> MekanismAPI.getModuleHelper().createModuleItem((IModuleDataProvider) ModuleList.GOGGLE_MODULE::get, properties)); } return null; diff --git a/src/main/java/com/robocraft999/createplus/lists/ModCompat.java b/src/main/java/com/robocraft999/createplus/lists/ModCompat.java new file mode 100644 index 0000000..7614fb7 --- /dev/null +++ b/src/main/java/com/robocraft999/createplus/lists/ModCompat.java @@ -0,0 +1,47 @@ +package com.robocraft999.createplus.lists; + +import com.simibubi.create.foundation.utility.Lang; +import net.minecraftforge.fml.ModList; + +import java.util.Optional; +import java.util.function.Supplier; + +public enum ModCompat { + MEKANISM, + CURIOS; + + /** + * @return a boolean of whether the mod is loaded or not based on mod id + */ + public boolean isLoaded() { + return ModList.get().isLoaded(asId()); + } + + /** + * @return the mod id + */ + public String asId() { + return Lang.asId(name()); + } + + /** + * Simple hook to run code if a mod is installed + * @param toRun will be run only if the mod is loaded + * @return Optional.empty() if the mod is not loaded, otherwise an Optional of the return value of the given supplier + */ + public Optional runIfInstalled(Supplier> toRun) { + if (isLoaded()) + return Optional.of(toRun.get().get()); + return Optional.empty(); + } + + /** + * Simple hook to execute code if a mod is installed + * @param toExecute will be executed only if the mod is loaded + */ + public void executeIfInstalled(Supplier toExecute) { + if (isLoaded()) { + toExecute.get().run(); + } + } + } diff --git a/src/main/java/com/robocraft999/createplus/lists/RecipeTypeList.java b/src/main/java/com/robocraft999/createplus/lists/RecipeTypeList.java index cfcb152..d4fe08b 100644 --- a/src/main/java/com/robocraft999/createplus/lists/RecipeTypeList.java +++ b/src/main/java/com/robocraft999/createplus/lists/RecipeTypeList.java @@ -1,53 +1,22 @@ package com.robocraft999.createplus.lists; -import java.util.function.Supplier; - import com.robocraft999.createplus.CreatePlus; -import com.robocraft999.createplus.item.crafting.GHelmetCrafingRecipe; -import com.simibubi.create.foundation.utility.Lang; +import com.robocraft999.createplus.item.crafting.NBTCraftingRecipe; -import net.minecraft.world.Container; -import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.item.crafting.RecipeSerializer; -import net.minecraft.world.item.crafting.RecipeType; -import net.minecraft.world.item.crafting.ShapedRecipe; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.core.Registry; -import net.minecraftforge.event.RegistryEvent; - -public enum RecipeTypeList { +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; - HELMET_CRAFTING(GHelmetCrafingRecipe.Serializer::new, RecipeType.CRAFTING); - - public RecipeSerializer serializer; - public final Supplier> supplier; - public RecipeType> type; +public class RecipeTypeList { - RecipeTypeList(Supplier> supplier,RecipeType> existingType) { - this.supplier = supplier; - this.type = existingType; - } - - public static void register(RegistryEvent.Register> event) { - ShapedRecipe.setCraftingSize(9, 9); + public static final DeferredRegister> RECIPE_REGISTER = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, CreatePlus.MODID); - for (RecipeTypeList r : RecipeTypeList.values()) { - if (r.type == null) - r.type = customType(Lang.asId(r.name())); + public static final RegistryObject> + CRAFTING_NBT = RECIPE_REGISTER.register("crafting_nbt", NBTCraftingRecipe.Serializer::new); - r.serializer = r.supplier.get(); - ResourceLocation location = new ResourceLocation(CreatePlus.MODID, Lang.asId(r.name())); - event.getRegistry() - .register(r.serializer.setRegistryName(location)); - //System.out.println(r.serializer.getRegistryName()); - } - } - - private static > RecipeType customType(String id) { - return Registry.register(Registry.RECIPE_TYPE, new ResourceLocation(CreatePlus.MODID, id), new RecipeType() { - public String toString() { - return CreatePlus.MODID + ":" + id; - } - }); + public static void register(IEventBus bus) { + RECIPE_REGISTER.register(bus); } } diff --git a/src/main/resources/data/createplus/recipes/crafting/goggle_chainmail_helmet.json b/src/main/resources/data/createplus/recipes/crafting/goggle_chainmail_helmet.json deleted file mode 100644 index a162a0e..0000000 --- a/src/main/resources/data/createplus/recipes/crafting/goggle_chainmail_helmet.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type":"createplus:helmet_crafting", - "pattern": - [ - "HG" - ], - "key": - { - "H": {"item": "minecraft:chainmail_helmet"}, - "G": {"item": "create:goggles"} - }, - "result":{"item":"createplus:goggle_chainmail_helmet"} -} \ No newline at end of file diff --git a/src/main/resources/data/createplus/recipes/crafting/goggle_diamond_helmet.json b/src/main/resources/data/createplus/recipes/crafting/goggle_diamond_helmet.json deleted file mode 100644 index d8ebbf0..0000000 --- a/src/main/resources/data/createplus/recipes/crafting/goggle_diamond_helmet.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type":"createplus:helmet_crafting", - "pattern": - [ - "HG" - ], - "key": - { - "H": {"item": "minecraft:diamond_helmet"}, - "G": {"item": "create:goggles"} - }, - "result":{"item":"createplus:goggle_diamond_helmet"} -} \ No newline at end of file diff --git a/src/main/resources/data/createplus/recipes/crafting/goggle_diving_helmet.json b/src/main/resources/data/createplus/recipes/crafting/goggle_diving_helmet.json deleted file mode 100644 index db9c264..0000000 --- a/src/main/resources/data/createplus/recipes/crafting/goggle_diving_helmet.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type":"createplus:helmet_crafting", - "pattern": - [ - "HG" - ], - "key": - { - "H": {"item": "create:diving_helmet"}, - "G": {"item": "create:goggles"} - }, - "result":{"item":"createplus:goggle_diving_helmet"} -} \ No newline at end of file diff --git a/src/main/resources/data/createplus/recipes/crafting/goggle_golden_helmet.json b/src/main/resources/data/createplus/recipes/crafting/goggle_golden_helmet.json deleted file mode 100644 index 066b66f..0000000 --- a/src/main/resources/data/createplus/recipes/crafting/goggle_golden_helmet.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type":"createplus:helmet_crafting", - "pattern": - [ - "HG" - ], - "key": - { - "H": {"item": "minecraft:golden_helmet"}, - "G": {"item": "create:goggles"} - }, - "result":{"item":"createplus:goggle_golden_helmet"} -} \ No newline at end of file diff --git a/src/main/resources/data/createplus/recipes/crafting/goggle_iron_helmet.json b/src/main/resources/data/createplus/recipes/crafting/goggle_iron_helmet.json deleted file mode 100644 index 108aa25..0000000 --- a/src/main/resources/data/createplus/recipes/crafting/goggle_iron_helmet.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type":"createplus:helmet_crafting", - "pattern": - [ - "HG" - ], - "key": - { - "H": {"item": "minecraft:iron_helmet"}, - "G": {"item": "create:goggles"} - }, - "result":{"item":"createplus:goggle_iron_helmet"} -} \ No newline at end of file diff --git a/src/main/resources/data/createplus/recipes/crafting/goggle_leather_helmet.json b/src/main/resources/data/createplus/recipes/crafting/goggle_leather_helmet.json deleted file mode 100644 index 67d363f..0000000 --- a/src/main/resources/data/createplus/recipes/crafting/goggle_leather_helmet.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type":"createplus:helmet_crafting", - "pattern": - [ - "HG" - ], - "key": - { - "H": {"item": "minecraft:leather_helmet"}, - "G": {"item": "create:goggles"} - }, - "result":{"item":"createplus:goggle_leather_helmet"} -} \ No newline at end of file diff --git a/src/main/resources/data/createplus/recipes/crafting/goggle_netherite_helmet.json b/src/main/resources/data/createplus/recipes/crafting/goggle_netherite_helmet.json deleted file mode 100644 index 77ec2ce..0000000 --- a/src/main/resources/data/createplus/recipes/crafting/goggle_netherite_helmet.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type":"createplus:helmet_crafting", - "pattern": - [ - "HG" - ], - "key": - { - "H": {"item": "minecraft:netherite_helmet"}, - "G": {"item": "create:goggles"} - }, - "result":{"item":"createplus:goggle_netherite_helmet"} -} \ No newline at end of file diff --git a/src/main/resources/data/createplus/recipes/crafting/goggle_turtle_helmet.json b/src/main/resources/data/createplus/recipes/crafting/goggle_turtle_helmet.json deleted file mode 100644 index 75a8ed8..0000000 --- a/src/main/resources/data/createplus/recipes/crafting/goggle_turtle_helmet.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type":"createplus:helmet_crafting", - "pattern": - [ - "HG" - ], - "key": - { - "H": {"item": "minecraft:turtle_helmet"}, - "G": {"item": "create:goggles"} - }, - "result":{"item":"createplus:goggle_turtle_helmet"} -} \ No newline at end of file