diff --git a/build.gradle b/build.gradle index 7cefae08..fae54c6e 100644 --- a/build.gradle +++ b/build.gradle @@ -54,7 +54,7 @@ runs { argument '--nogui' } - data { + clientData { // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources. arguments.addAll '--mod', mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath() } @@ -84,8 +84,8 @@ dependencies { implementation "net.themcbrothers:themcbroslib:$minecraft_version-$lib_version" // JEI - compileOnly("mezz.jei:jei-1.21-common-api:$jei_version") - compileOnly("mezz.jei:jei-1.21-neoforge-api:$jei_version") + compileOnly("mezz.jei:jei-$minecraft_version-common-api:$jei_version") + compileOnly("mezz.jei:jei-$minecraft_version-neoforge-api:$jei_version") // localRuntime("mezz.jei:jei-$minecraft_version-neoforge:$jei_version") } diff --git a/gradle.properties b/gradle.properties index 9a6efaec..893664c9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,17 +9,17 @@ mod_version=11.0.2 artifact_type=release # Minecraft -minecraft_version=1.21.2 -minecraft_version_range=[1.21, 1.22) +minecraft_version=1.21.11 +minecraft_version_range=[1.21.11] # NeoForge -neo_version=21.2.1-beta -neo_version_range=[21.2,) -loader_version_range=[4,) +neo_version=21.11.25-beta +neo_version_range=[21.11.25-beta,) +loader_version_range=[10,) # Mappings -neogradle.subsystems.parchment.minecraftVersion=1.21.3 -neogradle.subsystems.parchment.mappingsVersion=2024.12.07 +neogradle.subsystems.parchment.minecraftVersion=1.21.11 +neogradle.subsystems.parchment.mappingsVersion=2025.12.20 # Mod Properties mod_name=Useless Mod @@ -34,7 +34,7 @@ catalogue_item_icon=uselessmod:useless_ingot # Dependencies lib_version=9.0.0-SNAPSHOT lib_version_range=[1.21-8.0.0,) -jei_version=19.8.2.99 +jei_version=27.4.0.15 # Publishing supported_game_versions=1.21.2 diff --git a/src/generated/resources/assets/uselessmod/blockstates/stripped_useless_oak_wood.json b/src/generated/resources/assets/uselessmod/blockstates/stripped_useless_oak_wood.json index 37c69c4c..2acc53e4 100644 --- a/src/generated/resources/assets/uselessmod/blockstates/stripped_useless_oak_wood.json +++ b/src/generated/resources/assets/uselessmod/blockstates/stripped_useless_oak_wood.json @@ -1,7 +1,7 @@ { "variants": { "axis=x": { - "model": "uselessmod:block/stripped_useless_oak_wood_horizontal", + "model": "uselessmod:block/stripped_useless_oak_wood", "x": 90, "y": 90 }, @@ -9,7 +9,7 @@ "model": "uselessmod:block/stripped_useless_oak_wood" }, "axis=z": { - "model": "uselessmod:block/stripped_useless_oak_wood_horizontal", + "model": "uselessmod:block/stripped_useless_oak_wood", "x": 90 } } diff --git a/src/generated/resources/assets/uselessmod/blockstates/useless_oak_fence.json b/src/generated/resources/assets/uselessmod/blockstates/useless_oak_fence.json index dd72af59..c2bad185 100644 --- a/src/generated/resources/assets/uselessmod/blockstates/useless_oak_fence.json +++ b/src/generated/resources/assets/uselessmod/blockstates/useless_oak_fence.json @@ -18,30 +18,30 @@ "apply": { "model": "uselessmod:block/useless_oak_fence_side", "uvlock": true, - "y": 180 + "y": 90 }, "when": { - "south": "true" + "east": "true" } }, { "apply": { "model": "uselessmod:block/useless_oak_fence_side", "uvlock": true, - "y": 270 + "y": 180 }, "when": { - "west": "true" + "south": "true" } }, { "apply": { "model": "uselessmod:block/useless_oak_fence_side", "uvlock": true, - "y": 90 + "y": 270 }, "when": { - "east": "true" + "west": "true" } } ] diff --git a/src/generated/resources/assets/uselessmod/blockstates/useless_oak_trapdoor.json b/src/generated/resources/assets/uselessmod/blockstates/useless_oak_trapdoor.json index 341d223c..e3a764dd 100644 --- a/src/generated/resources/assets/uselessmod/blockstates/useless_oak_trapdoor.json +++ b/src/generated/resources/assets/uselessmod/blockstates/useless_oak_trapdoor.json @@ -1,21 +1,18 @@ { "variants": { "facing=east,half=bottom,open=false": { - "model": "uselessmod:block/useless_oak_trapdoor_bottom", - "y": 90 + "model": "uselessmod:block/useless_oak_trapdoor_bottom" }, "facing=east,half=bottom,open=true": { "model": "uselessmod:block/useless_oak_trapdoor_open", "y": 90 }, "facing=east,half=top,open=false": { - "model": "uselessmod:block/useless_oak_trapdoor_top", - "y": 90 + "model": "uselessmod:block/useless_oak_trapdoor_top" }, "facing=east,half=top,open=true": { "model": "uselessmod:block/useless_oak_trapdoor_open", - "x": 180, - "y": 270 + "y": 90 }, "facing=north,half=bottom,open=false": { "model": "uselessmod:block/useless_oak_trapdoor_bottom" @@ -27,42 +24,35 @@ "model": "uselessmod:block/useless_oak_trapdoor_top" }, "facing=north,half=top,open=true": { - "model": "uselessmod:block/useless_oak_trapdoor_open", - "x": 180, - "y": 180 + "model": "uselessmod:block/useless_oak_trapdoor_open" }, "facing=south,half=bottom,open=false": { - "model": "uselessmod:block/useless_oak_trapdoor_bottom", - "y": 180 + "model": "uselessmod:block/useless_oak_trapdoor_bottom" }, "facing=south,half=bottom,open=true": { "model": "uselessmod:block/useless_oak_trapdoor_open", "y": 180 }, "facing=south,half=top,open=false": { - "model": "uselessmod:block/useless_oak_trapdoor_top", - "y": 180 + "model": "uselessmod:block/useless_oak_trapdoor_top" }, "facing=south,half=top,open=true": { "model": "uselessmod:block/useless_oak_trapdoor_open", - "x": 180 + "y": 180 }, "facing=west,half=bottom,open=false": { - "model": "uselessmod:block/useless_oak_trapdoor_bottom", - "y": 270 + "model": "uselessmod:block/useless_oak_trapdoor_bottom" }, "facing=west,half=bottom,open=true": { "model": "uselessmod:block/useless_oak_trapdoor_open", "y": 270 }, "facing=west,half=top,open=false": { - "model": "uselessmod:block/useless_oak_trapdoor_top", - "y": 270 + "model": "uselessmod:block/useless_oak_trapdoor_top" }, "facing=west,half=top,open=true": { "model": "uselessmod:block/useless_oak_trapdoor_open", - "x": 180, - "y": 90 + "y": 270 } } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/blockstates/useless_oak_wood.json b/src/generated/resources/assets/uselessmod/blockstates/useless_oak_wood.json index 808e7acb..1f0bdd3f 100644 --- a/src/generated/resources/assets/uselessmod/blockstates/useless_oak_wood.json +++ b/src/generated/resources/assets/uselessmod/blockstates/useless_oak_wood.json @@ -1,7 +1,7 @@ { "variants": { "axis=x": { - "model": "uselessmod:block/useless_oak_wood_horizontal", + "model": "uselessmod:block/useless_oak_wood", "x": 90, "y": 90 }, @@ -9,7 +9,7 @@ "model": "uselessmod:block/useless_oak_wood" }, "axis=z": { - "model": "uselessmod:block/useless_oak_wood_horizontal", + "model": "uselessmod:block/useless_oak_wood", "x": 90 } } diff --git a/src/generated/resources/assets/uselessmod/blockstates/wild_coffee_beans.json b/src/generated/resources/assets/uselessmod/blockstates/wild_coffee_beans.json index 4c41efb3..896e5e42 100644 --- a/src/generated/resources/assets/uselessmod/blockstates/wild_coffee_beans.json +++ b/src/generated/resources/assets/uselessmod/blockstates/wild_coffee_beans.json @@ -1,28 +1,28 @@ { "variants": { "age=0": { - "model": "uselessmod:block/coffee_beans_stage0" + "model": "uselessmod:block/wild_coffee_beans_stage0" }, "age=1": { - "model": "uselessmod:block/coffee_beans_stage1" + "model": "uselessmod:block/wild_coffee_beans_stage1" }, "age=2": { - "model": "uselessmod:block/coffee_beans_stage2" + "model": "uselessmod:block/wild_coffee_beans_stage2" }, "age=3": { - "model": "uselessmod:block/coffee_beans_stage3" + "model": "uselessmod:block/wild_coffee_beans_stage3" }, "age=4": { - "model": "uselessmod:block/coffee_beans_stage4" + "model": "uselessmod:block/wild_coffee_beans_stage4" }, "age=5": { - "model": "uselessmod:block/coffee_beans_stage5" + "model": "uselessmod:block/wild_coffee_beans_stage5" }, "age=6": { - "model": "uselessmod:block/coffee_beans_stage6" + "model": "uselessmod:block/wild_coffee_beans_stage6" }, "age=7": { - "model": "uselessmod:block/coffee_beans_stage7" + "model": "uselessmod:block/wild_coffee_beans_stage7" } } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/blockstates/wild_useless_wheat.json b/src/generated/resources/assets/uselessmod/blockstates/wild_useless_wheat.json index 7b122ffe..e4f14801 100644 --- a/src/generated/resources/assets/uselessmod/blockstates/wild_useless_wheat.json +++ b/src/generated/resources/assets/uselessmod/blockstates/wild_useless_wheat.json @@ -1,28 +1,28 @@ { "variants": { "age=0": { - "model": "uselessmod:block/useless_wheat_stage0" + "model": "uselessmod:block/wild_useless_wheat_stage0" }, "age=1": { - "model": "uselessmod:block/useless_wheat_stage1" + "model": "uselessmod:block/wild_useless_wheat_stage1" }, "age=2": { - "model": "uselessmod:block/useless_wheat_stage2" + "model": "uselessmod:block/wild_useless_wheat_stage2" }, "age=3": { - "model": "uselessmod:block/useless_wheat_stage3" + "model": "uselessmod:block/wild_useless_wheat_stage3" }, "age=4": { - "model": "uselessmod:block/useless_wheat_stage4" + "model": "uselessmod:block/wild_useless_wheat_stage4" }, "age=5": { - "model": "uselessmod:block/useless_wheat_stage5" + "model": "uselessmod:block/wild_useless_wheat_stage5" }, "age=6": { - "model": "uselessmod:block/useless_wheat_stage6" + "model": "uselessmod:block/wild_useless_wheat_stage6" }, "age=7": { - "model": "uselessmod:block/useless_wheat_stage7" + "model": "uselessmod:block/wild_useless_wheat_stage7" } } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/black_lamp.json b/src/generated/resources/assets/uselessmod/items/black_lamp.json new file mode 100644 index 00000000..e83bdd6a --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/black_lamp.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/black_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/blue_lamp.json b/src/generated/resources/assets/uselessmod/items/blue_lamp.json new file mode 100644 index 00000000..d5cc2b28 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/blue_lamp.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/blue_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/blue_rose.json b/src/generated/resources/assets/uselessmod/items/blue_rose.json new file mode 100644 index 00000000..c5142674 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/blue_rose.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/blue_rose" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/brown_lamp.json b/src/generated/resources/assets/uselessmod/items/brown_lamp.json new file mode 100644 index 00000000..6f6d4ccd --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/brown_lamp.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/brown_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/bucket_paint.json b/src/generated/resources/assets/uselessmod/items/bucket_paint.json new file mode 100644 index 00000000..d5347f1a --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/bucket_paint.json @@ -0,0 +1,12 @@ +{ + "model": { + "type": "neoforge:fluid_container", + "fluid": "uselessmod:paint", + "textures": { + "base": "minecraft:item/bucket", + "cover": "neoforge:item/mask/bucket_fluid_cover", + "fluid": "neoforge:item/mask/bucket_fluid", + "particle": "minecraft:item/bucket" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/coffee_beans.json b/src/generated/resources/assets/uselessmod/items/coffee_beans.json new file mode 100644 index 00000000..f6372091 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/coffee_beans.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/coffee_beans" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/coffee_machine.json b/src/generated/resources/assets/uselessmod/items/coffee_machine.json new file mode 100644 index 00000000..d0f54783 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/coffee_machine.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/coffee_machine" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/coffee_seeds.json b/src/generated/resources/assets/uselessmod/items/coffee_seeds.json new file mode 100644 index 00000000..c4db8662 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/coffee_seeds.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/coffee_seeds" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/cup.json b/src/generated/resources/assets/uselessmod/items/cup.json new file mode 100644 index 00000000..834a3ecf --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/cup.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/cup" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/cup_coffee.json b/src/generated/resources/assets/uselessmod/items/cup_coffee.json new file mode 100644 index 00000000..5a5dc3b3 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/cup_coffee.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/cup_coffee" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/cyan_lamp.json b/src/generated/resources/assets/uselessmod/items/cyan_lamp.json new file mode 100644 index 00000000..0470ad3c --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/cyan_lamp.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/cyan_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/deepslate_super_useless_ore.json b/src/generated/resources/assets/uselessmod/items/deepslate_super_useless_ore.json new file mode 100644 index 00000000..813d85b4 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/deepslate_super_useless_ore.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/deepslate_super_useless_ore" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/deepslate_useless_ore.json b/src/generated/resources/assets/uselessmod/items/deepslate_useless_ore.json new file mode 100644 index 00000000..4e2e8ac9 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/deepslate_useless_ore.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/deepslate_useless_ore" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/end_super_useless_ore.json b/src/generated/resources/assets/uselessmod/items/end_super_useless_ore.json new file mode 100644 index 00000000..ee5181f9 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/end_super_useless_ore.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/end_super_useless_ore" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/end_useless_ore.json b/src/generated/resources/assets/uselessmod/items/end_useless_ore.json new file mode 100644 index 00000000..acd6163b --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/end_useless_ore.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/end_useless_ore" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/gray_lamp.json b/src/generated/resources/assets/uselessmod/items/gray_lamp.json new file mode 100644 index 00000000..981beb89 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/gray_lamp.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/gray_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/green_lamp.json b/src/generated/resources/assets/uselessmod/items/green_lamp.json new file mode 100644 index 00000000..01cad761 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/green_lamp.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/green_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/light_blue_lamp.json b/src/generated/resources/assets/uselessmod/items/light_blue_lamp.json new file mode 100644 index 00000000..0b72d89b --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/light_blue_lamp.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/light_blue_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/light_gray_lamp.json b/src/generated/resources/assets/uselessmod/items/light_gray_lamp.json new file mode 100644 index 00000000..7d496a88 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/light_gray_lamp.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/light_gray_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/light_switch.json b/src/generated/resources/assets/uselessmod/items/light_switch.json new file mode 100644 index 00000000..fe9c512d --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/light_switch.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/light_switch" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/light_switch_block.json b/src/generated/resources/assets/uselessmod/items/light_switch_block.json new file mode 100644 index 00000000..0496ac4e --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/light_switch_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/light_switch_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/lime_lamp.json b/src/generated/resources/assets/uselessmod/items/lime_lamp.json new file mode 100644 index 00000000..992e8642 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/lime_lamp.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/lime_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/machine_supplier.json b/src/generated/resources/assets/uselessmod/items/machine_supplier.json new file mode 100644 index 00000000..5cef67f9 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/machine_supplier.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/machine_supplier" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/magenta_lamp.json b/src/generated/resources/assets/uselessmod/items/magenta_lamp.json new file mode 100644 index 00000000..5fa08bd3 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/magenta_lamp.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/magenta_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/nether_super_useless_ore.json b/src/generated/resources/assets/uselessmod/items/nether_super_useless_ore.json new file mode 100644 index 00000000..651cf4ac --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/nether_super_useless_ore.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/nether_super_useless_ore" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/nether_useless_ore.json b/src/generated/resources/assets/uselessmod/items/nether_useless_ore.json new file mode 100644 index 00000000..38661389 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/nether_useless_ore.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/nether_useless_ore" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/orange_lamp.json b/src/generated/resources/assets/uselessmod/items/orange_lamp.json new file mode 100644 index 00000000..6e62a213 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/orange_lamp.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/orange_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/paint_brush.json b/src/generated/resources/assets/uselessmod/items/paint_brush.json new file mode 100644 index 00000000..b707b5fb --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/paint_brush.json @@ -0,0 +1,15 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/paint_brush", + "tints": [ + { + "type": "minecraft:constant", + "value": -1 + }, + { + "type": "uselessmod:paint" + } + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/paint_bucket.json b/src/generated/resources/assets/uselessmod/items/paint_bucket.json new file mode 100644 index 00000000..d4915e6f --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/paint_bucket.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/paint_bucket" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/painted_wool.json b/src/generated/resources/assets/uselessmod/items/painted_wool.json new file mode 100644 index 00000000..1607f5c7 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/painted_wool.json @@ -0,0 +1,11 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/painted_wool", + "tints": [ + { + "type": "uselessmod:paint" + } + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/pink_lamp.json b/src/generated/resources/assets/uselessmod/items/pink_lamp.json new file mode 100644 index 00000000..970f53e6 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/pink_lamp.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/pink_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/purple_lamp.json b/src/generated/resources/assets/uselessmod/items/purple_lamp.json new file mode 100644 index 00000000..44058ea6 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/purple_lamp.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/purple_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/raw_super_useless.json b/src/generated/resources/assets/uselessmod/items/raw_super_useless.json new file mode 100644 index 00000000..925a2c9b --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/raw_super_useless.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/raw_super_useless" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/raw_super_useless_block.json b/src/generated/resources/assets/uselessmod/items/raw_super_useless_block.json new file mode 100644 index 00000000..084507e3 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/raw_super_useless_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/raw_super_useless_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/raw_useless.json b/src/generated/resources/assets/uselessmod/items/raw_useless.json new file mode 100644 index 00000000..f673c775 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/raw_useless.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/raw_useless" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/raw_useless_block.json b/src/generated/resources/assets/uselessmod/items/raw_useless_block.json new file mode 100644 index 00000000..b08e263b --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/raw_useless_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/raw_useless_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/red_lamp.json b/src/generated/resources/assets/uselessmod/items/red_lamp.json new file mode 100644 index 00000000..19846225 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/red_lamp.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/red_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/red_rose.json b/src/generated/resources/assets/uselessmod/items/red_rose.json new file mode 100644 index 00000000..595d2a4d --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/red_rose.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/red_rose" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/stripped_useless_oak_log.json b/src/generated/resources/assets/uselessmod/items/stripped_useless_oak_log.json new file mode 100644 index 00000000..1ad82800 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/stripped_useless_oak_log.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/stripped_useless_oak_log" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/stripped_useless_oak_wood.json b/src/generated/resources/assets/uselessmod/items/stripped_useless_oak_wood.json new file mode 100644 index 00000000..d1d7e0e6 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/stripped_useless_oak_wood.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/stripped_useless_oak_wood" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/super_useless_axe.json b/src/generated/resources/assets/uselessmod/items/super_useless_axe.json new file mode 100644 index 00000000..470e63fb --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/super_useless_axe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/super_useless_axe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/super_useless_bars.json b/src/generated/resources/assets/uselessmod/items/super_useless_bars.json new file mode 100644 index 00000000..4b2a0354 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/super_useless_bars.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/super_useless_bars" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/super_useless_block.json b/src/generated/resources/assets/uselessmod/items/super_useless_block.json new file mode 100644 index 00000000..07f01176 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/super_useless_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/super_useless_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/super_useless_boots.json b/src/generated/resources/assets/uselessmod/items/super_useless_boots.json new file mode 100644 index 00000000..abebd6e3 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/super_useless_boots.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/super_useless_boots" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/super_useless_chestplate.json b/src/generated/resources/assets/uselessmod/items/super_useless_chestplate.json new file mode 100644 index 00000000..2a61e987 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/super_useless_chestplate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/super_useless_chestplate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/super_useless_door.json b/src/generated/resources/assets/uselessmod/items/super_useless_door.json new file mode 100644 index 00000000..515b4f1f --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/super_useless_door.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/super_useless_door" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/super_useless_dust.json b/src/generated/resources/assets/uselessmod/items/super_useless_dust.json new file mode 100644 index 00000000..28967bb7 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/super_useless_dust.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/super_useless_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/super_useless_elytra.json b/src/generated/resources/assets/uselessmod/items/super_useless_elytra.json new file mode 100644 index 00000000..af220c22 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/super_useless_elytra.json @@ -0,0 +1,14 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:model", + "model": "uselessmod:item/super_useless_elytra" + }, + "on_true": { + "type": "minecraft:model", + "model": "uselessmod:item/super_useless_elytra_broken" + }, + "property": "minecraft:broken" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/super_useless_helmet.json b/src/generated/resources/assets/uselessmod/items/super_useless_helmet.json new file mode 100644 index 00000000..c6ae6a80 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/super_useless_helmet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/super_useless_helmet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/super_useless_hoe.json b/src/generated/resources/assets/uselessmod/items/super_useless_hoe.json new file mode 100644 index 00000000..c72693a5 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/super_useless_hoe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/super_useless_hoe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/super_useless_ingot.json b/src/generated/resources/assets/uselessmod/items/super_useless_ingot.json new file mode 100644 index 00000000..5ae23547 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/super_useless_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/super_useless_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/super_useless_leggings.json b/src/generated/resources/assets/uselessmod/items/super_useless_leggings.json new file mode 100644 index 00000000..2ec008d3 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/super_useless_leggings.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/super_useless_leggings" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/super_useless_nugget.json b/src/generated/resources/assets/uselessmod/items/super_useless_nugget.json new file mode 100644 index 00000000..6cdc61ae --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/super_useless_nugget.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/super_useless_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/super_useless_ore.json b/src/generated/resources/assets/uselessmod/items/super_useless_ore.json new file mode 100644 index 00000000..47b30451 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/super_useless_ore.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/super_useless_ore" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/super_useless_pickaxe.json b/src/generated/resources/assets/uselessmod/items/super_useless_pickaxe.json new file mode 100644 index 00000000..eb243281 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/super_useless_pickaxe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/super_useless_pickaxe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/super_useless_shield.json b/src/generated/resources/assets/uselessmod/items/super_useless_shield.json new file mode 100644 index 00000000..300063ce --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/super_useless_shield.json @@ -0,0 +1,20 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "uselessmod:item/super_useless_shield", + "model": { + "type": "minecraft:shield" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "uselessmod:item/super_useless_shield_blocking", + "model": { + "type": "minecraft:shield" + } + }, + "property": "minecraft:using_item" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/super_useless_shovel.json b/src/generated/resources/assets/uselessmod/items/super_useless_shovel.json new file mode 100644 index 00000000..17c9cb91 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/super_useless_shovel.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/super_useless_shovel" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/super_useless_sword.json b/src/generated/resources/assets/uselessmod/items/super_useless_sword.json new file mode 100644 index 00000000..ae0639c7 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/super_useless_sword.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/super_useless_sword" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/super_useless_trapdoor.json b/src/generated/resources/assets/uselessmod/items/super_useless_trapdoor.json new file mode 100644 index 00000000..9e40ab97 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/super_useless_trapdoor.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/super_useless_trapdoor_bottom" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_activator_rail.json b/src/generated/resources/assets/uselessmod/items/useless_activator_rail.json new file mode 100644 index 00000000..a9d25221 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_activator_rail.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_activator_rail" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_axe.json b/src/generated/resources/assets/uselessmod/items/useless_axe.json new file mode 100644 index 00000000..b16d7d22 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_axe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_axe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_bars.json b/src/generated/resources/assets/uselessmod/items/useless_bars.json new file mode 100644 index 00000000..0c403df4 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_bars.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_bars" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_bed.json b/src/generated/resources/assets/uselessmod/items/useless_bed.json new file mode 100644 index 00000000..909f3e28 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_bed.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "minecraft:special", + "base": "uselessmod:item/useless_bed", + "model": { + "type": "minecraft:bed", + "texture": "minecraft:lime" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_block.json b/src/generated/resources/assets/uselessmod/items/useless_block.json new file mode 100644 index 00000000..cbfa53af --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/useless_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_bone.json b/src/generated/resources/assets/uselessmod/items/useless_bone.json new file mode 100644 index 00000000..dfd2364a --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_bone.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_bone" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_boots.json b/src/generated/resources/assets/uselessmod/items/useless_boots.json new file mode 100644 index 00000000..06369593 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_boots.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_boots" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_carpet.json b/src/generated/resources/assets/uselessmod/items/useless_carpet.json new file mode 100644 index 00000000..fa66ed2c --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_carpet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/useless_carpet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_chestplate.json b/src/generated/resources/assets/uselessmod/items/useless_chestplate.json new file mode 100644 index 00000000..4b149f96 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_chestplate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_chestplate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_chicken_spawn_egg.json b/src/generated/resources/assets/uselessmod/items/useless_chicken_spawn_egg.json new file mode 100644 index 00000000..69efe0ec --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_chicken_spawn_egg.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_chicken_spawn_egg" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_cow_spawn_egg.json b/src/generated/resources/assets/uselessmod/items/useless_cow_spawn_egg.json new file mode 100644 index 00000000..02404035 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_cow_spawn_egg.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_cow_spawn_egg" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_detector_rail.json b/src/generated/resources/assets/uselessmod/items/useless_detector_rail.json new file mode 100644 index 00000000..ef332b4a --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_detector_rail.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_detector_rail" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_door.json b/src/generated/resources/assets/uselessmod/items/useless_door.json new file mode 100644 index 00000000..8d59c6c8 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_door.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_door" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_dust.json b/src/generated/resources/assets/uselessmod/items/useless_dust.json new file mode 100644 index 00000000..598451d9 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_dust.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_dust" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_elytra.json b/src/generated/resources/assets/uselessmod/items/useless_elytra.json new file mode 100644 index 00000000..9b853333 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_elytra.json @@ -0,0 +1,14 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_elytra" + }, + "on_true": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_elytra_broken" + }, + "property": "minecraft:broken" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_feather.json b/src/generated/resources/assets/uselessmod/items/useless_feather.json new file mode 100644 index 00000000..b92b72ab --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_feather.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_feather" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_helmet.json b/src/generated/resources/assets/uselessmod/items/useless_helmet.json new file mode 100644 index 00000000..73a6f681 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_helmet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_helmet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_hoe.json b/src/generated/resources/assets/uselessmod/items/useless_hoe.json new file mode 100644 index 00000000..432f3394 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_hoe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_hoe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_ingot.json b/src/generated/resources/assets/uselessmod/items/useless_ingot.json new file mode 100644 index 00000000..825633cb --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_ingot.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_ingot" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_leather.json b/src/generated/resources/assets/uselessmod/items/useless_leather.json new file mode 100644 index 00000000..3bed9f76 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_leather.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_leather" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_leggings.json b/src/generated/resources/assets/uselessmod/items/useless_leggings.json new file mode 100644 index 00000000..87840410 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_leggings.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_leggings" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_nugget.json b/src/generated/resources/assets/uselessmod/items/useless_nugget.json new file mode 100644 index 00000000..5415f15a --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_nugget.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_nugget" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_oak_button.json b/src/generated/resources/assets/uselessmod/items/useless_oak_button.json new file mode 100644 index 00000000..b8771082 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_oak_button.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/useless_oak_button_inventory" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_oak_door.json b/src/generated/resources/assets/uselessmod/items/useless_oak_door.json new file mode 100644 index 00000000..fc687628 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_oak_door.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_oak_door" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_oak_fence.json b/src/generated/resources/assets/uselessmod/items/useless_oak_fence.json new file mode 100644 index 00000000..74a20d35 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_oak_fence.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/useless_oak_fence_inventory" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_oak_fence_gate.json b/src/generated/resources/assets/uselessmod/items/useless_oak_fence_gate.json new file mode 100644 index 00000000..0cee79ac --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_oak_fence_gate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/useless_oak_fence_gate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_oak_hanging_sign.json b/src/generated/resources/assets/uselessmod/items/useless_oak_hanging_sign.json new file mode 100644 index 00000000..41ffe8a2 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_oak_hanging_sign.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_oak_hanging_sign" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_oak_leaves.json b/src/generated/resources/assets/uselessmod/items/useless_oak_leaves.json new file mode 100644 index 00000000..5158a816 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_oak_leaves.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/useless_oak_leaves" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_oak_log.json b/src/generated/resources/assets/uselessmod/items/useless_oak_log.json new file mode 100644 index 00000000..8d919901 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_oak_log.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/useless_oak_log" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_oak_planks.json b/src/generated/resources/assets/uselessmod/items/useless_oak_planks.json new file mode 100644 index 00000000..f0160b52 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_oak_planks.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/useless_oak_planks" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_oak_pressure_plate.json b/src/generated/resources/assets/uselessmod/items/useless_oak_pressure_plate.json new file mode 100644 index 00000000..fcb4714e --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_oak_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/useless_oak_pressure_plate" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_oak_sapling.json b/src/generated/resources/assets/uselessmod/items/useless_oak_sapling.json new file mode 100644 index 00000000..2c0eab7b --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_oak_sapling.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_oak_sapling" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_oak_sign.json b/src/generated/resources/assets/uselessmod/items/useless_oak_sign.json new file mode 100644 index 00000000..7516e884 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_oak_sign.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_oak_sign" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_oak_slab.json b/src/generated/resources/assets/uselessmod/items/useless_oak_slab.json new file mode 100644 index 00000000..a7b288c9 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_oak_slab.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/useless_oak_slab" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_oak_stairs.json b/src/generated/resources/assets/uselessmod/items/useless_oak_stairs.json new file mode 100644 index 00000000..f46bcbee --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_oak_stairs.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/useless_oak_stairs" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_oak_trapdoor.json b/src/generated/resources/assets/uselessmod/items/useless_oak_trapdoor.json new file mode 100644 index 00000000..6ea5c7a0 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_oak_trapdoor.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/useless_oak_trapdoor_bottom" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_oak_wood.json b/src/generated/resources/assets/uselessmod/items/useless_oak_wood.json new file mode 100644 index 00000000..8c810d35 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_oak_wood.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/useless_oak_wood" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_ore.json b/src/generated/resources/assets/uselessmod/items/useless_ore.json new file mode 100644 index 00000000..93a3b7b5 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_ore.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/useless_ore" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_pickaxe.json b/src/generated/resources/assets/uselessmod/items/useless_pickaxe.json new file mode 100644 index 00000000..1e5a946e --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_pickaxe.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_pickaxe" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_pig_spawn_egg.json b/src/generated/resources/assets/uselessmod/items/useless_pig_spawn_egg.json new file mode 100644 index 00000000..7cdfd8d5 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_pig_spawn_egg.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_pig_spawn_egg" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_powered_rail.json b/src/generated/resources/assets/uselessmod/items/useless_powered_rail.json new file mode 100644 index 00000000..f8f448d4 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_powered_rail.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_powered_rail" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_rail.json b/src/generated/resources/assets/uselessmod/items/useless_rail.json new file mode 100644 index 00000000..e0a26455 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_rail.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_rail" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_rose.json b/src/generated/resources/assets/uselessmod/items/useless_rose.json new file mode 100644 index 00000000..11cea65c --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_rose.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_rose" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_shears.json b/src/generated/resources/assets/uselessmod/items/useless_shears.json new file mode 100644 index 00000000..854ad083 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_shears.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_shears" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_sheep_spawn_egg.json b/src/generated/resources/assets/uselessmod/items/useless_sheep_spawn_egg.json new file mode 100644 index 00000000..d2173510 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_sheep_spawn_egg.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_sheep_spawn_egg" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_shield.json b/src/generated/resources/assets/uselessmod/items/useless_shield.json new file mode 100644 index 00000000..69c12b6a --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_shield.json @@ -0,0 +1,20 @@ +{ + "model": { + "type": "minecraft:condition", + "on_false": { + "type": "minecraft:special", + "base": "uselessmod:item/useless_shield", + "model": { + "type": "minecraft:shield" + } + }, + "on_true": { + "type": "minecraft:special", + "base": "uselessmod:item/useless_shield_blocking", + "model": { + "type": "minecraft:shield" + } + }, + "property": "minecraft:using_item" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_shovel.json b/src/generated/resources/assets/uselessmod/items/useless_shovel.json new file mode 100644 index 00000000..05c567aa --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_shovel.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_shovel" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_skeleton_skull.json b/src/generated/resources/assets/uselessmod/items/useless_skeleton_skull.json new file mode 100644 index 00000000..86bf6a5f --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_skeleton_skull.json @@ -0,0 +1,10 @@ +{ + "model": { + "type": "minecraft:special", + "base": "minecraft:item/template_skull", + "model": { + "type": "minecraft:head", + "kind": "useless_skeleton" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_skeleton_spawn_egg.json b/src/generated/resources/assets/uselessmod/items/useless_skeleton_spawn_egg.json new file mode 100644 index 00000000..c4305fc6 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_skeleton_spawn_egg.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_skeleton_spawn_egg" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_sword.json b/src/generated/resources/assets/uselessmod/items/useless_sword.json new file mode 100644 index 00000000..67bc1c63 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_sword.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_sword" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_trapdoor.json b/src/generated/resources/assets/uselessmod/items/useless_trapdoor.json new file mode 100644 index 00000000..b4a61bdd --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_trapdoor.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/useless_trapdoor_bottom" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_wheat.json b/src/generated/resources/assets/uselessmod/items/useless_wheat.json new file mode 100644 index 00000000..a4e9f2f2 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_wheat.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_wheat" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_wheat_seeds.json b/src/generated/resources/assets/uselessmod/items/useless_wheat_seeds.json new file mode 100644 index 00000000..c9a231a1 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_wheat_seeds.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:item/useless_wheat_seeds" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/useless_wool.json b/src/generated/resources/assets/uselessmod/items/useless_wool.json new file mode 100644 index 00000000..2cf5791a --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/useless_wool.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/useless_wool" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/wall_closet.json b/src/generated/resources/assets/uselessmod/items/wall_closet.json new file mode 100644 index 00000000..6d8e04df --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/wall_closet.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/wall_closet" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/white_lamp.json b/src/generated/resources/assets/uselessmod/items/white_lamp.json new file mode 100644 index 00000000..38bf496d --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/white_lamp.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/white_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/items/yellow_lamp.json b/src/generated/resources/assets/uselessmod/items/yellow_lamp.json new file mode 100644 index 00000000..e6d2d191 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/items/yellow_lamp.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "uselessmod:block/yellow_lamp" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/lantern.json b/src/generated/resources/assets/uselessmod/models/block/lantern.json index 6a2101fe..59706e6a 100644 --- a/src/generated/resources/assets/uselessmod/models/block/lantern.json +++ b/src/generated/resources/assets/uselessmod/models/block/lantern.json @@ -2,6 +2,6 @@ "parent": "minecraft:block/template_lantern", "render_type": "minecraft:cutout", "textures": { - "lantern": "minecraft:block/lantern" + "lantern": "uselessmod:block/lantern" } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/lantern_hanging.json b/src/generated/resources/assets/uselessmod/models/block/lantern_hanging.json index 0bf4f0ea..f5c28994 100644 --- a/src/generated/resources/assets/uselessmod/models/block/lantern_hanging.json +++ b/src/generated/resources/assets/uselessmod/models/block/lantern_hanging.json @@ -2,6 +2,6 @@ "parent": "minecraft:block/template_hanging_lantern", "render_type": "minecraft:cutout", "textures": { - "lantern": "minecraft:block/lantern" + "lantern": "uselessmod:block/lantern" } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/light_switch_block.json b/src/generated/resources/assets/uselessmod/models/block/light_switch_block.json index 27d6ad9f..78ff77d7 100644 --- a/src/generated/resources/assets/uselessmod/models/block/light_switch_block.json +++ b/src/generated/resources/assets/uselessmod/models/block/light_switch_block.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/cube_all", "textures": { - "all": "uselessmod:block/light_switch" + "all": "uselessmod:block/light_switch_block" } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_cap.json b/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_cap.json index 0abb0bc8..bea9c130 100644 --- a/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_cap.json +++ b/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_cap.json @@ -1,9 +1,8 @@ { - "parent": "minecraft:block/iron_bars_cap", - "render_type": "minecraft:cutout_mipped", + "parent": "minecraft:block/template_bars_cap", + "render_type": "minecraft:cutout", "textures": { "bars": "uselessmod:block/super_useless_bars", - "edge": "uselessmod:block/super_useless_bars", - "particle": "uselessmod:block/super_useless_bars" + "edge": "uselessmod:block/super_useless_bars" } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_cap_alt.json b/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_cap_alt.json index f94b4758..e37f8f51 100644 --- a/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_cap_alt.json +++ b/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_cap_alt.json @@ -1,9 +1,8 @@ { - "parent": "minecraft:block/iron_bars_cap_alt", - "render_type": "minecraft:cutout_mipped", + "parent": "minecraft:block/template_bars_cap_alt", + "render_type": "minecraft:cutout", "textures": { "bars": "uselessmod:block/super_useless_bars", - "edge": "uselessmod:block/super_useless_bars", - "particle": "uselessmod:block/super_useless_bars" + "edge": "uselessmod:block/super_useless_bars" } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_post.json b/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_post.json index c7adf781..6bb9aeb5 100644 --- a/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_post.json +++ b/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_post.json @@ -1,8 +1,8 @@ { - "parent": "minecraft:block/iron_bars_post", - "render_type": "minecraft:cutout_mipped", + "parent": "minecraft:block/template_bars_post", + "render_type": "minecraft:cutout", "textures": { "bars": "uselessmod:block/super_useless_bars", - "particle": "uselessmod:block/super_useless_bars" + "edge": "uselessmod:block/super_useless_bars" } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_post_ends.json b/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_post_ends.json index 92db87ff..a7b6f0e7 100644 --- a/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_post_ends.json +++ b/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_post_ends.json @@ -1,8 +1,8 @@ { - "parent": "minecraft:block/iron_bars_post_ends", - "render_type": "minecraft:cutout_mipped", + "parent": "minecraft:block/template_bars_post_ends", + "render_type": "minecraft:cutout", "textures": { - "edge": "uselessmod:block/super_useless_bars", - "particle": "uselessmod:block/super_useless_bars" + "bars": "uselessmod:block/super_useless_bars", + "edge": "uselessmod:block/super_useless_bars" } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_side.json b/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_side.json index b0fe1887..86a54610 100644 --- a/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_side.json +++ b/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_side.json @@ -1,9 +1,8 @@ { - "parent": "minecraft:block/iron_bars_side", - "render_type": "minecraft:cutout_mipped", + "parent": "minecraft:block/template_bars_side", + "render_type": "minecraft:cutout", "textures": { "bars": "uselessmod:block/super_useless_bars", - "edge": "uselessmod:block/super_useless_bars", - "particle": "uselessmod:block/super_useless_bars" + "edge": "uselessmod:block/super_useless_bars" } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_side_alt.json b/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_side_alt.json index 98f11659..4609be3e 100644 --- a/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_side_alt.json +++ b/src/generated/resources/assets/uselessmod/models/block/super_useless_bars_side_alt.json @@ -1,9 +1,8 @@ { - "parent": "minecraft:block/iron_bars_side_alt", - "render_type": "minecraft:cutout_mipped", + "parent": "minecraft:block/template_bars_side_alt", + "render_type": "minecraft:cutout", "textures": { "bars": "uselessmod:block/super_useless_bars", - "edge": "uselessmod:block/super_useless_bars", - "particle": "uselessmod:block/super_useless_bars" + "edge": "uselessmod:block/super_useless_bars" } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/useless_bars_cap.json b/src/generated/resources/assets/uselessmod/models/block/useless_bars_cap.json index cbb3e1a3..22882925 100644 --- a/src/generated/resources/assets/uselessmod/models/block/useless_bars_cap.json +++ b/src/generated/resources/assets/uselessmod/models/block/useless_bars_cap.json @@ -1,9 +1,8 @@ { - "parent": "minecraft:block/iron_bars_cap", - "render_type": "minecraft:cutout_mipped", + "parent": "minecraft:block/template_bars_cap", + "render_type": "minecraft:cutout", "textures": { "bars": "uselessmod:block/useless_bars", - "edge": "uselessmod:block/useless_bars", - "particle": "uselessmod:block/useless_bars" + "edge": "uselessmod:block/useless_bars" } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/useless_bars_cap_alt.json b/src/generated/resources/assets/uselessmod/models/block/useless_bars_cap_alt.json index 3365ef67..4e35a131 100644 --- a/src/generated/resources/assets/uselessmod/models/block/useless_bars_cap_alt.json +++ b/src/generated/resources/assets/uselessmod/models/block/useless_bars_cap_alt.json @@ -1,9 +1,8 @@ { - "parent": "minecraft:block/iron_bars_cap_alt", - "render_type": "minecraft:cutout_mipped", + "parent": "minecraft:block/template_bars_cap_alt", + "render_type": "minecraft:cutout", "textures": { "bars": "uselessmod:block/useless_bars", - "edge": "uselessmod:block/useless_bars", - "particle": "uselessmod:block/useless_bars" + "edge": "uselessmod:block/useless_bars" } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/useless_bars_post.json b/src/generated/resources/assets/uselessmod/models/block/useless_bars_post.json index 9c26581b..ba1f78c5 100644 --- a/src/generated/resources/assets/uselessmod/models/block/useless_bars_post.json +++ b/src/generated/resources/assets/uselessmod/models/block/useless_bars_post.json @@ -1,8 +1,8 @@ { - "parent": "minecraft:block/iron_bars_post", - "render_type": "minecraft:cutout_mipped", + "parent": "minecraft:block/template_bars_post", + "render_type": "minecraft:cutout", "textures": { "bars": "uselessmod:block/useless_bars", - "particle": "uselessmod:block/useless_bars" + "edge": "uselessmod:block/useless_bars" } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/useless_bars_post_ends.json b/src/generated/resources/assets/uselessmod/models/block/useless_bars_post_ends.json index cf6cf4b8..358eadfd 100644 --- a/src/generated/resources/assets/uselessmod/models/block/useless_bars_post_ends.json +++ b/src/generated/resources/assets/uselessmod/models/block/useless_bars_post_ends.json @@ -1,8 +1,8 @@ { - "parent": "minecraft:block/iron_bars_post_ends", - "render_type": "minecraft:cutout_mipped", + "parent": "minecraft:block/template_bars_post_ends", + "render_type": "minecraft:cutout", "textures": { - "edge": "uselessmod:block/useless_bars", - "particle": "uselessmod:block/useless_bars" + "bars": "uselessmod:block/useless_bars", + "edge": "uselessmod:block/useless_bars" } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/useless_bars_side.json b/src/generated/resources/assets/uselessmod/models/block/useless_bars_side.json index 5b6255f9..a164aa98 100644 --- a/src/generated/resources/assets/uselessmod/models/block/useless_bars_side.json +++ b/src/generated/resources/assets/uselessmod/models/block/useless_bars_side.json @@ -1,9 +1,8 @@ { - "parent": "minecraft:block/iron_bars_side", - "render_type": "minecraft:cutout_mipped", + "parent": "minecraft:block/template_bars_side", + "render_type": "minecraft:cutout", "textures": { "bars": "uselessmod:block/useless_bars", - "edge": "uselessmod:block/useless_bars", - "particle": "uselessmod:block/useless_bars" + "edge": "uselessmod:block/useless_bars" } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/useless_bars_side_alt.json b/src/generated/resources/assets/uselessmod/models/block/useless_bars_side_alt.json index 3236e635..93093524 100644 --- a/src/generated/resources/assets/uselessmod/models/block/useless_bars_side_alt.json +++ b/src/generated/resources/assets/uselessmod/models/block/useless_bars_side_alt.json @@ -1,9 +1,8 @@ { - "parent": "minecraft:block/iron_bars_side_alt", - "render_type": "minecraft:cutout_mipped", + "parent": "minecraft:block/template_bars_side_alt", + "render_type": "minecraft:cutout", "textures": { "bars": "uselessmod:block/useless_bars", - "edge": "uselessmod:block/useless_bars", - "particle": "uselessmod:block/useless_bars" + "edge": "uselessmod:block/useless_bars" } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_oak_button.json b/src/generated/resources/assets/uselessmod/models/block/useless_oak_button_inventory.json similarity index 100% rename from src/generated/resources/assets/uselessmod/models/item/useless_oak_button.json rename to src/generated/resources/assets/uselessmod/models/block/useless_oak_button_inventory.json diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_oak_fence.json b/src/generated/resources/assets/uselessmod/models/block/useless_oak_fence_inventory.json similarity index 100% rename from src/generated/resources/assets/uselessmod/models/item/useless_oak_fence.json rename to src/generated/resources/assets/uselessmod/models/block/useless_oak_fence_inventory.json diff --git a/src/generated/resources/assets/uselessmod/models/block/useless_oak_hanging_sign.json b/src/generated/resources/assets/uselessmod/models/block/useless_oak_hanging_sign.json index 9f154a27..8a2d7725 100644 --- a/src/generated/resources/assets/uselessmod/models/block/useless_oak_hanging_sign.json +++ b/src/generated/resources/assets/uselessmod/models/block/useless_oak_hanging_sign.json @@ -1,5 +1,5 @@ { "textures": { - "particle": "uselessmod:block/useless_oak_planks" + "particle": "uselessmod:block/stripped_useless_oak_log" } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/useless_oak_trapdoor_bottom.json b/src/generated/resources/assets/uselessmod/models/block/useless_oak_trapdoor_bottom.json index 0764d0f4..0cb58d22 100644 --- a/src/generated/resources/assets/uselessmod/models/block/useless_oak_trapdoor_bottom.json +++ b/src/generated/resources/assets/uselessmod/models/block/useless_oak_trapdoor_bottom.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:block/template_orientable_trapdoor_bottom", + "parent": "minecraft:block/template_trapdoor_bottom", "render_type": "minecraft:cutout", "textures": { "texture": "uselessmod:block/useless_oak_trapdoor" diff --git a/src/generated/resources/assets/uselessmod/models/block/useless_oak_trapdoor_open.json b/src/generated/resources/assets/uselessmod/models/block/useless_oak_trapdoor_open.json index 56161021..99c876b0 100644 --- a/src/generated/resources/assets/uselessmod/models/block/useless_oak_trapdoor_open.json +++ b/src/generated/resources/assets/uselessmod/models/block/useless_oak_trapdoor_open.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:block/template_orientable_trapdoor_open", + "parent": "minecraft:block/template_trapdoor_open", "render_type": "minecraft:cutout", "textures": { "texture": "uselessmod:block/useless_oak_trapdoor" diff --git a/src/generated/resources/assets/uselessmod/models/block/useless_oak_trapdoor_top.json b/src/generated/resources/assets/uselessmod/models/block/useless_oak_trapdoor_top.json index 4c512e58..f2140cd9 100644 --- a/src/generated/resources/assets/uselessmod/models/block/useless_oak_trapdoor_top.json +++ b/src/generated/resources/assets/uselessmod/models/block/useless_oak_trapdoor_top.json @@ -1,5 +1,5 @@ { - "parent": "minecraft:block/template_orientable_trapdoor_top", + "parent": "minecraft:block/template_trapdoor_top", "render_type": "minecraft:cutout", "textures": { "texture": "uselessmod:block/useless_oak_trapdoor" diff --git a/src/generated/resources/assets/uselessmod/models/block/useless_oak_wood_horizontal.json b/src/generated/resources/assets/uselessmod/models/block/useless_oak_wood_horizontal.json deleted file mode 100644 index da5954a6..00000000 --- a/src/generated/resources/assets/uselessmod/models/block/useless_oak_wood_horizontal.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "minecraft:block/cube_column_horizontal", - "textures": { - "end": "uselessmod:block/useless_oak_log", - "side": "uselessmod:block/useless_oak_log" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage0.json b/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage0.json new file mode 100644 index 00000000..7c7d9c7c --- /dev/null +++ b/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage0.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/crop", + "render_type": "minecraft:cutout", + "textures": { + "crop": "uselessmod:block/coffee_beans_stage0" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage1.json b/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage1.json new file mode 100644 index 00000000..11823817 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage1.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/crop", + "render_type": "minecraft:cutout", + "textures": { + "crop": "uselessmod:block/coffee_beans_stage1" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage2.json b/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage2.json new file mode 100644 index 00000000..78f6c6bc --- /dev/null +++ b/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage2.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/crop", + "render_type": "minecraft:cutout", + "textures": { + "crop": "uselessmod:block/coffee_beans_stage2" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage3.json b/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage3.json new file mode 100644 index 00000000..92936853 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage3.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/crop", + "render_type": "minecraft:cutout", + "textures": { + "crop": "uselessmod:block/coffee_beans_stage3" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage4.json b/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage4.json new file mode 100644 index 00000000..746a344c --- /dev/null +++ b/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage4.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/crop", + "render_type": "minecraft:cutout", + "textures": { + "crop": "uselessmod:block/coffee_beans_stage4" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage5.json b/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage5.json new file mode 100644 index 00000000..70b82128 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage5.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/crop", + "render_type": "minecraft:cutout", + "textures": { + "crop": "uselessmod:block/coffee_beans_stage5" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage6.json b/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage6.json new file mode 100644 index 00000000..8f38eadf --- /dev/null +++ b/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage6.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/crop", + "render_type": "minecraft:cutout", + "textures": { + "crop": "uselessmod:block/coffee_beans_stage6" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage7.json b/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage7.json new file mode 100644 index 00000000..1ce9399b --- /dev/null +++ b/src/generated/resources/assets/uselessmod/models/block/wild_coffee_beans_stage7.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/crop", + "render_type": "minecraft:cutout", + "textures": { + "crop": "uselessmod:block/coffee_beans_stage7" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage0.json b/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage0.json new file mode 100644 index 00000000..9ccf155d --- /dev/null +++ b/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage0.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/crop", + "render_type": "minecraft:cutout", + "textures": { + "crop": "uselessmod:block/useless_wheat_stage0" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage1.json b/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage1.json new file mode 100644 index 00000000..619b7c5f --- /dev/null +++ b/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage1.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/crop", + "render_type": "minecraft:cutout", + "textures": { + "crop": "uselessmod:block/useless_wheat_stage1" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage2.json b/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage2.json new file mode 100644 index 00000000..e0b95ab2 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage2.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/crop", + "render_type": "minecraft:cutout", + "textures": { + "crop": "uselessmod:block/useless_wheat_stage2" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage3.json b/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage3.json new file mode 100644 index 00000000..d220f66f --- /dev/null +++ b/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage3.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/crop", + "render_type": "minecraft:cutout", + "textures": { + "crop": "uselessmod:block/useless_wheat_stage3" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage4.json b/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage4.json new file mode 100644 index 00000000..ed8a0e40 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage4.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/crop", + "render_type": "minecraft:cutout", + "textures": { + "crop": "uselessmod:block/useless_wheat_stage4" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage5.json b/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage5.json new file mode 100644 index 00000000..e9320e34 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage5.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/crop", + "render_type": "minecraft:cutout", + "textures": { + "crop": "uselessmod:block/useless_wheat_stage5" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage6.json b/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage6.json new file mode 100644 index 00000000..384582f6 --- /dev/null +++ b/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage6.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/crop", + "render_type": "minecraft:cutout", + "textures": { + "crop": "uselessmod:block/useless_wheat_stage6" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage7.json b/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage7.json new file mode 100644 index 00000000..81215c7d --- /dev/null +++ b/src/generated/resources/assets/uselessmod/models/block/wild_useless_wheat_stage7.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/crop", + "render_type": "minecraft:cutout", + "textures": { + "crop": "uselessmod:block/useless_wheat_stage7" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/black_lamp.json b/src/generated/resources/assets/uselessmod/models/item/black_lamp.json deleted file mode 100644 index f9b5c335..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/black_lamp.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/black_lamp" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/blue_lamp.json b/src/generated/resources/assets/uselessmod/models/item/blue_lamp.json deleted file mode 100644 index 60606389..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/blue_lamp.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/blue_lamp" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/brown_lamp.json b/src/generated/resources/assets/uselessmod/models/item/brown_lamp.json deleted file mode 100644 index 330ac195..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/brown_lamp.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/brown_lamp" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/bucket_paint.json b/src/generated/resources/assets/uselessmod/models/item/bucket_paint.json deleted file mode 100644 index 165cb3d7..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/bucket_paint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parent": "neoforge:item/bucket", - "fluid": "uselessmod:paint", - "loader": "neoforge:fluid_container" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/cup.json b/src/generated/resources/assets/uselessmod/models/item/cup.json deleted file mode 100644 index 3ba2bd70..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/cup.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/cup" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/cup_coffee.json b/src/generated/resources/assets/uselessmod/models/item/cup_coffee.json deleted file mode 100644 index 84500793..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/cup_coffee.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/cup_coffee" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/cyan_lamp.json b/src/generated/resources/assets/uselessmod/models/item/cyan_lamp.json deleted file mode 100644 index 73453e79..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/cyan_lamp.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/cyan_lamp" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/deepslate_super_useless_ore.json b/src/generated/resources/assets/uselessmod/models/item/deepslate_super_useless_ore.json deleted file mode 100644 index 01ce32ca..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/deepslate_super_useless_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/deepslate_super_useless_ore" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/deepslate_useless_ore.json b/src/generated/resources/assets/uselessmod/models/item/deepslate_useless_ore.json deleted file mode 100644 index c8e7f25f..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/deepslate_useless_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/deepslate_useless_ore" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/end_super_useless_ore.json b/src/generated/resources/assets/uselessmod/models/item/end_super_useless_ore.json deleted file mode 100644 index f58a9490..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/end_super_useless_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/end_super_useless_ore" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/end_useless_ore.json b/src/generated/resources/assets/uselessmod/models/item/end_useless_ore.json deleted file mode 100644 index 9cf0a111..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/end_useless_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/end_useless_ore" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/gray_lamp.json b/src/generated/resources/assets/uselessmod/models/item/gray_lamp.json deleted file mode 100644 index 2f518685..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/gray_lamp.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/gray_lamp" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/green_lamp.json b/src/generated/resources/assets/uselessmod/models/item/green_lamp.json deleted file mode 100644 index 717960c1..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/green_lamp.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/green_lamp" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/light_blue_lamp.json b/src/generated/resources/assets/uselessmod/models/item/light_blue_lamp.json deleted file mode 100644 index 86247e1d..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/light_blue_lamp.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/light_blue_lamp" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/light_gray_lamp.json b/src/generated/resources/assets/uselessmod/models/item/light_gray_lamp.json deleted file mode 100644 index 2f364c6b..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/light_gray_lamp.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/light_gray_lamp" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/light_switch.json b/src/generated/resources/assets/uselessmod/models/item/light_switch.json deleted file mode 100644 index 422c9adc..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/light_switch.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/light_switch" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/light_switch_block.json b/src/generated/resources/assets/uselessmod/models/item/light_switch_block.json deleted file mode 100644 index 07a5ec17..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/light_switch_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/light_switch_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/lime_lamp.json b/src/generated/resources/assets/uselessmod/models/item/lime_lamp.json deleted file mode 100644 index 9449c1ab..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/lime_lamp.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/lime_lamp" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/machine_supplier.json b/src/generated/resources/assets/uselessmod/models/item/machine_supplier.json deleted file mode 100644 index 32c7009e..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/machine_supplier.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/machine_supplier" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/magenta_lamp.json b/src/generated/resources/assets/uselessmod/models/item/magenta_lamp.json deleted file mode 100644 index 80e86f8e..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/magenta_lamp.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/magenta_lamp" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/nether_super_useless_ore.json b/src/generated/resources/assets/uselessmod/models/item/nether_super_useless_ore.json deleted file mode 100644 index 16967aee..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/nether_super_useless_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/nether_super_useless_ore" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/nether_useless_ore.json b/src/generated/resources/assets/uselessmod/models/item/nether_useless_ore.json deleted file mode 100644 index 57e2f8cc..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/nether_useless_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/nether_useless_ore" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/orange_lamp.json b/src/generated/resources/assets/uselessmod/models/item/orange_lamp.json deleted file mode 100644 index d3b296d3..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/orange_lamp.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/orange_lamp" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/paint_bucket.json b/src/generated/resources/assets/uselessmod/models/item/paint_bucket.json deleted file mode 100644 index f231ce68..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/paint_bucket.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/paint_bucket_inventory" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/painted_wool.json b/src/generated/resources/assets/uselessmod/models/item/painted_wool.json deleted file mode 100644 index 3dcafc60..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/painted_wool.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/painted_wool" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/pink_lamp.json b/src/generated/resources/assets/uselessmod/models/item/pink_lamp.json deleted file mode 100644 index 4b766cec..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/pink_lamp.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/pink_lamp" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/purple_lamp.json b/src/generated/resources/assets/uselessmod/models/item/purple_lamp.json deleted file mode 100644 index 7a3cf8b5..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/purple_lamp.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/purple_lamp" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/raw_super_useless_block.json b/src/generated/resources/assets/uselessmod/models/item/raw_super_useless_block.json deleted file mode 100644 index b00dd261..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/raw_super_useless_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/raw_super_useless_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/raw_useless_block.json b/src/generated/resources/assets/uselessmod/models/item/raw_useless_block.json deleted file mode 100644 index e7d33c58..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/raw_useless_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/raw_useless_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/red_lamp.json b/src/generated/resources/assets/uselessmod/models/item/red_lamp.json deleted file mode 100644 index ade3fb2b..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/red_lamp.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/red_lamp" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/stripped_useless_oak_log.json b/src/generated/resources/assets/uselessmod/models/item/stripped_useless_oak_log.json deleted file mode 100644 index 633d8f74..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/stripped_useless_oak_log.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/stripped_useless_oak_log" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/stripped_useless_oak_wood.json b/src/generated/resources/assets/uselessmod/models/item/stripped_useless_oak_wood.json deleted file mode 100644 index 9ac2fc46..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/stripped_useless_oak_wood.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/stripped_useless_oak_wood" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/super_useless_block.json b/src/generated/resources/assets/uselessmod/models/item/super_useless_block.json deleted file mode 100644 index 10f11249..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/super_useless_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/super_useless_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/super_useless_elytra.json b/src/generated/resources/assets/uselessmod/models/item/super_useless_elytra.json index d580fa7d..8ca69ac2 100644 --- a/src/generated/resources/assets/uselessmod/models/item/super_useless_elytra.json +++ b/src/generated/resources/assets/uselessmod/models/item/super_useless_elytra.json @@ -1,13 +1,5 @@ { "parent": "minecraft:item/generated", - "overrides": [ - { - "model": "uselessmod:item/broken_super_useless_elytra", - "predicate": { - "minecraft:broken": 1.0 - } - } - ], "textures": { "layer0": "uselessmod:item/super_useless_elytra" } diff --git a/src/generated/resources/assets/uselessmod/models/item/broken_super_useless_elytra.json b/src/generated/resources/assets/uselessmod/models/item/super_useless_elytra_broken.json similarity index 51% rename from src/generated/resources/assets/uselessmod/models/item/broken_super_useless_elytra.json rename to src/generated/resources/assets/uselessmod/models/item/super_useless_elytra_broken.json index 2933da9b..c1b2bfe7 100644 --- a/src/generated/resources/assets/uselessmod/models/item/broken_super_useless_elytra.json +++ b/src/generated/resources/assets/uselessmod/models/item/super_useless_elytra_broken.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "uselessmod:item/broken_super_useless_elytra" + "layer0": "uselessmod:item/super_useless_elytra_broken" } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/super_useless_ore.json b/src/generated/resources/assets/uselessmod/models/item/super_useless_ore.json deleted file mode 100644 index 0e5e641d..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/super_useless_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/super_useless_ore" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/super_useless_shield.json b/src/generated/resources/assets/uselessmod/models/item/super_useless_shield.json deleted file mode 100644 index dd2dc4bf..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/super_useless_shield.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "parent": "minecraft:builtin/entity", - "display": { - "firstperson_lefthand": { - "rotation": [ - 0, - 180, - 5 - ], - "scale": [ - 1.25, - 1.25, - 1.25 - ], - "translation": [ - 10, - 0, - -10 - ] - }, - "firstperson_righthand": { - "rotation": [ - 0, - 180, - 5 - ], - "scale": [ - 1.25, - 1.25, - 1.25 - ], - "translation": [ - -10, - 2, - -10 - ] - }, - "fixed": { - "rotation": [ - 0, - 180, - 0 - ], - "scale": [ - 0.5, - 0.5, - 0.5 - ], - "translation": [ - -2, - 4, - -5 - ] - }, - "ground": { - "scale": [ - 0.25, - 0.25, - 0.25 - ], - "translation": [ - 4, - 4, - 2 - ] - }, - "gui": { - "rotation": [ - 15, - -25, - -5 - ], - "scale": [ - 0.65, - 0.65, - 0.65 - ], - "translation": [ - 2, - 3, - 0 - ] - }, - "thirdperson_lefthand": { - "rotation": [ - 0, - 90, - 0 - ], - "translation": [ - 10, - 6, - 12 - ] - }, - "thirdperson_righthand": { - "rotation": [ - 0, - 90, - 0 - ], - "translation": [ - 10, - 6, - -4 - ] - } - }, - "gui_light": "front", - "overrides": [ - { - "model": "uselessmod:item/super_useless_shield_blocking", - "predicate": { - "minecraft:blocking": 1.0 - } - } - ], - "textures": { - "particle": "uselessmod:block/super_useless_block" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/super_useless_shield_blocking.json b/src/generated/resources/assets/uselessmod/models/item/super_useless_shield_blocking.json deleted file mode 100644 index 1ee249f8..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/super_useless_shield_blocking.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "parent": "minecraft:builtin/entity", - "display": { - "firstperson_lefthand": { - "rotation": [ - 0, - 180, - -5 - ], - "scale": [ - 1.25, - 1.25, - 1.25 - ], - "translation": [ - 5, - 5, - -11 - ] - }, - "firstperson_righthand": { - "rotation": [ - 0, - 180, - -5 - ], - "scale": [ - 1.25, - 1.25, - 1.25 - ], - "translation": [ - -15, - 5, - -11 - ] - }, - "gui": { - "rotation": [ - 15, - -25, - -5 - ], - "scale": [ - 0.65, - 0.65, - 0.65 - ], - "translation": [ - 2, - 3, - 0 - ] - }, - "thirdperson_lefthand": { - "rotation": [ - 45, - 135, - 0 - ], - "translation": [ - 13.51, - 3, - 5 - ] - }, - "thirdperson_righthand": { - "rotation": [ - 45, - 135, - 0 - ], - "translation": [ - 3.51, - 11, - -2 - ] - } - }, - "gui_light": "front", - "textures": { - "particle": "uselessmod:block/super_useless_block" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/super_useless_trapdoor.json b/src/generated/resources/assets/uselessmod/models/item/super_useless_trapdoor.json deleted file mode 100644 index 2a823c19..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/super_useless_trapdoor.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/super_useless_trapdoor_bottom" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_block.json b/src/generated/resources/assets/uselessmod/models/item/useless_block.json deleted file mode 100644 index 7708ddfd..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/useless_block.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/useless_block" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_carpet.json b/src/generated/resources/assets/uselessmod/models/item/useless_carpet.json deleted file mode 100644 index 7322d01d..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/useless_carpet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/useless_carpet" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_chicken_spawn_egg.json b/src/generated/resources/assets/uselessmod/models/item/useless_chicken_spawn_egg.json index d1aaa9d6..5969b8c5 100644 --- a/src/generated/resources/assets/uselessmod/models/item/useless_chicken_spawn_egg.json +++ b/src/generated/resources/assets/uselessmod/models/item/useless_chicken_spawn_egg.json @@ -1,3 +1,6 @@ { - "parent": "minecraft:item/template_spawn_egg" + "parent": "minecraft:item/generated", + "textures": { + "layer0": "uselessmod:item/useless_chicken_spawn_egg" + } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_cow_spawn_egg.json b/src/generated/resources/assets/uselessmod/models/item/useless_cow_spawn_egg.json index d1aaa9d6..420d83a9 100644 --- a/src/generated/resources/assets/uselessmod/models/item/useless_cow_spawn_egg.json +++ b/src/generated/resources/assets/uselessmod/models/item/useless_cow_spawn_egg.json @@ -1,3 +1,6 @@ { - "parent": "minecraft:item/template_spawn_egg" + "parent": "minecraft:item/generated", + "textures": { + "layer0": "uselessmod:item/useless_cow_spawn_egg" + } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_elytra.json b/src/generated/resources/assets/uselessmod/models/item/useless_elytra.json index 2a08052d..f0f92475 100644 --- a/src/generated/resources/assets/uselessmod/models/item/useless_elytra.json +++ b/src/generated/resources/assets/uselessmod/models/item/useless_elytra.json @@ -1,13 +1,5 @@ { "parent": "minecraft:item/generated", - "overrides": [ - { - "model": "uselessmod:item/broken_useless_elytra", - "predicate": { - "minecraft:broken": 1.0 - } - } - ], "textures": { "layer0": "uselessmod:item/useless_elytra" } diff --git a/src/generated/resources/assets/uselessmod/models/item/broken_useless_elytra.json b/src/generated/resources/assets/uselessmod/models/item/useless_elytra_broken.json similarity index 53% rename from src/generated/resources/assets/uselessmod/models/item/broken_useless_elytra.json rename to src/generated/resources/assets/uselessmod/models/item/useless_elytra_broken.json index fb153420..deaf3599 100644 --- a/src/generated/resources/assets/uselessmod/models/item/broken_useless_elytra.json +++ b/src/generated/resources/assets/uselessmod/models/item/useless_elytra_broken.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "uselessmod:item/broken_useless_elytra" + "layer0": "uselessmod:item/useless_elytra_broken" } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_oak_fence_gate.json b/src/generated/resources/assets/uselessmod/models/item/useless_oak_fence_gate.json deleted file mode 100644 index 39e20cbd..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/useless_oak_fence_gate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/useless_oak_fence_gate" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_oak_leaves.json b/src/generated/resources/assets/uselessmod/models/item/useless_oak_leaves.json deleted file mode 100644 index e48385c8..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/useless_oak_leaves.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/useless_oak_leaves" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_oak_log.json b/src/generated/resources/assets/uselessmod/models/item/useless_oak_log.json deleted file mode 100644 index a758152c..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/useless_oak_log.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/useless_oak_log" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_oak_planks.json b/src/generated/resources/assets/uselessmod/models/item/useless_oak_planks.json deleted file mode 100644 index 8117abc2..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/useless_oak_planks.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/useless_oak_planks" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_oak_pressure_plate.json b/src/generated/resources/assets/uselessmod/models/item/useless_oak_pressure_plate.json deleted file mode 100644 index 984a342d..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/useless_oak_pressure_plate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/useless_oak_pressure_plate" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_oak_slab.json b/src/generated/resources/assets/uselessmod/models/item/useless_oak_slab.json deleted file mode 100644 index 97ef6675..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/useless_oak_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/useless_oak_slab" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_oak_stairs.json b/src/generated/resources/assets/uselessmod/models/item/useless_oak_stairs.json deleted file mode 100644 index 13924661..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/useless_oak_stairs.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/useless_oak_stairs" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_oak_trapdoor.json b/src/generated/resources/assets/uselessmod/models/item/useless_oak_trapdoor.json deleted file mode 100644 index b82d2f6e..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/useless_oak_trapdoor.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/useless_oak_trapdoor_bottom" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_oak_wood.json b/src/generated/resources/assets/uselessmod/models/item/useless_oak_wood.json deleted file mode 100644 index df0d47ff..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/useless_oak_wood.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/useless_oak_wood" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_ore.json b/src/generated/resources/assets/uselessmod/models/item/useless_ore.json deleted file mode 100644 index 871dbf03..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/useless_ore.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/useless_ore" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_pig_spawn_egg.json b/src/generated/resources/assets/uselessmod/models/item/useless_pig_spawn_egg.json index d1aaa9d6..061250b8 100644 --- a/src/generated/resources/assets/uselessmod/models/item/useless_pig_spawn_egg.json +++ b/src/generated/resources/assets/uselessmod/models/item/useless_pig_spawn_egg.json @@ -1,3 +1,6 @@ { - "parent": "minecraft:item/template_spawn_egg" + "parent": "minecraft:item/generated", + "textures": { + "layer0": "uselessmod:item/useless_pig_spawn_egg" + } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_sheep_spawn_egg.json b/src/generated/resources/assets/uselessmod/models/item/useless_sheep_spawn_egg.json index d1aaa9d6..e51b55e5 100644 --- a/src/generated/resources/assets/uselessmod/models/item/useless_sheep_spawn_egg.json +++ b/src/generated/resources/assets/uselessmod/models/item/useless_sheep_spawn_egg.json @@ -1,3 +1,6 @@ { - "parent": "minecraft:item/template_spawn_egg" + "parent": "minecraft:item/generated", + "textures": { + "layer0": "uselessmod:item/useless_sheep_spawn_egg" + } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_shield.json b/src/generated/resources/assets/uselessmod/models/item/useless_shield.json deleted file mode 100644 index a3baef87..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/useless_shield.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "parent": "minecraft:builtin/entity", - "display": { - "firstperson_lefthand": { - "rotation": [ - 0, - 180, - 5 - ], - "scale": [ - 1.25, - 1.25, - 1.25 - ], - "translation": [ - 10, - 0, - -10 - ] - }, - "firstperson_righthand": { - "rotation": [ - 0, - 180, - 5 - ], - "scale": [ - 1.25, - 1.25, - 1.25 - ], - "translation": [ - -10, - 2, - -10 - ] - }, - "fixed": { - "rotation": [ - 0, - 180, - 0 - ], - "scale": [ - 0.5, - 0.5, - 0.5 - ], - "translation": [ - -2, - 4, - -5 - ] - }, - "ground": { - "scale": [ - 0.25, - 0.25, - 0.25 - ], - "translation": [ - 4, - 4, - 2 - ] - }, - "gui": { - "rotation": [ - 15, - -25, - -5 - ], - "scale": [ - 0.65, - 0.65, - 0.65 - ], - "translation": [ - 2, - 3, - 0 - ] - }, - "thirdperson_lefthand": { - "rotation": [ - 0, - 90, - 0 - ], - "translation": [ - 10, - 6, - 12 - ] - }, - "thirdperson_righthand": { - "rotation": [ - 0, - 90, - 0 - ], - "translation": [ - 10, - 6, - -4 - ] - } - }, - "gui_light": "front", - "overrides": [ - { - "model": "uselessmod:item/useless_shield_blocking", - "predicate": { - "minecraft:blocking": 1.0 - } - } - ], - "textures": { - "particle": "uselessmod:block/useless_block" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_shield_blocking.json b/src/generated/resources/assets/uselessmod/models/item/useless_shield_blocking.json deleted file mode 100644 index 31d81fc9..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/useless_shield_blocking.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "parent": "minecraft:builtin/entity", - "display": { - "firstperson_lefthand": { - "rotation": [ - 0, - 180, - -5 - ], - "scale": [ - 1.25, - 1.25, - 1.25 - ], - "translation": [ - 5, - 5, - -11 - ] - }, - "firstperson_righthand": { - "rotation": [ - 0, - 180, - -5 - ], - "scale": [ - 1.25, - 1.25, - 1.25 - ], - "translation": [ - -15, - 5, - -11 - ] - }, - "gui": { - "rotation": [ - 15, - -25, - -5 - ], - "scale": [ - 0.65, - 0.65, - 0.65 - ], - "translation": [ - 2, - 3, - 0 - ] - }, - "thirdperson_lefthand": { - "rotation": [ - 45, - 135, - 0 - ], - "translation": [ - 13.51, - 3, - 5 - ] - }, - "thirdperson_righthand": { - "rotation": [ - 45, - 135, - 0 - ], - "translation": [ - 3.51, - 11, - -2 - ] - } - }, - "gui_light": "front", - "textures": { - "particle": "uselessmod:block/useless_block" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_skeleton_skull.json b/src/generated/resources/assets/uselessmod/models/item/useless_skeleton_skull.json deleted file mode 100644 index 364b6e65..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/useless_skeleton_skull.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "minecraft:item/template_skull" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_skeleton_spawn_egg.json b/src/generated/resources/assets/uselessmod/models/item/useless_skeleton_spawn_egg.json index d1aaa9d6..847284ed 100644 --- a/src/generated/resources/assets/uselessmod/models/item/useless_skeleton_spawn_egg.json +++ b/src/generated/resources/assets/uselessmod/models/item/useless_skeleton_spawn_egg.json @@ -1,3 +1,6 @@ { - "parent": "minecraft:item/template_spawn_egg" + "parent": "minecraft:item/generated", + "textures": { + "layer0": "uselessmod:item/useless_skeleton_spawn_egg" + } } \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_trapdoor.json b/src/generated/resources/assets/uselessmod/models/item/useless_trapdoor.json deleted file mode 100644 index 41d61393..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/useless_trapdoor.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/useless_trapdoor_bottom" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/useless_wool.json b/src/generated/resources/assets/uselessmod/models/item/useless_wool.json deleted file mode 100644 index 783c8d6a..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/useless_wool.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/useless_wool" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/white_lamp.json b/src/generated/resources/assets/uselessmod/models/item/white_lamp.json deleted file mode 100644 index 3bf50e81..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/white_lamp.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/white_lamp" -} \ No newline at end of file diff --git a/src/generated/resources/assets/uselessmod/models/item/yellow_lamp.json b/src/generated/resources/assets/uselessmod/models/item/yellow_lamp.json deleted file mode 100644 index 424c939c..00000000 --- a/src/generated/resources/assets/uselessmod/models/item/yellow_lamp.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "uselessmod:block/yellow_lamp" -} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/axe.json b/src/generated/resources/data/minecraft/tags/block/maintains_farmland.json similarity index 100% rename from src/generated/resources/data/minecraft/tags/block/mineable/axe.json rename to src/generated/resources/data/minecraft/tags/block/maintains_farmland.json diff --git a/src/generated/resources/data/minecraft/tags/entity_type/burn_in_daylight.json b/src/generated/resources/data/minecraft/tags/entity_type/burn_in_daylight.json new file mode 100644 index 00000000..38867887 --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/entity_type/burn_in_daylight.json @@ -0,0 +1,5 @@ +{ + "values": [ + "uselessmod:useless_skeleton" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/neoforge/data_maps/block/strippables.json b/src/generated/resources/data/neoforge/data_maps/block/strippables.json new file mode 100644 index 00000000..40ee46b6 --- /dev/null +++ b/src/generated/resources/data/neoforge/data_maps/block/strippables.json @@ -0,0 +1,10 @@ +{ + "values": { + "uselessmod:useless_oak_log": { + "stripped_block": "uselessmod:stripped_useless_oak_log" + }, + "uselessmod:useless_oak_wood": { + "stripped_block": "uselessmod:stripped_useless_oak_wood" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/data/uselessmod/advancement/root.json b/src/generated/resources/data/uselessmod/advancement/root.json index e67bc15b..15ed655c 100644 --- a/src/generated/resources/data/uselessmod/advancement/root.json +++ b/src/generated/resources/data/uselessmod/advancement/root.json @@ -13,7 +13,7 @@ }, "display": { "announce_to_chat": false, - "background": "uselessmod:textures/gui/advancements/backgrounds/uselessmod.png", + "background": "uselessmod:gui/advancements/backgrounds/uselessmod", "description": { "translate": "advancement.uselessmod.root.description" }, diff --git a/src/generated/resources/data/uselessmod/loot_table/blocks/wall_closet.json b/src/generated/resources/data/uselessmod/loot_table/blocks/wall_closet.json index 58bf385d..f4d3958f 100644 --- a/src/generated/resources/data/uselessmod/loot_table/blocks/wall_closet.json +++ b/src/generated/resources/data/uselessmod/loot_table/blocks/wall_closet.json @@ -12,13 +12,10 @@ { "type": "minecraft:item", "functions": [ - { - "function": "minecraft:copy_name", - "source": "block_entity" - }, { "function": "minecraft:copy_components", "include": [ + "minecraft:custom_name", "uselessmod:wall_closet_material" ], "source": "block_entity" diff --git a/src/generated/resources/data/uselessmod/recipe/useless_oak_hanging_sign.json b/src/generated/resources/data/uselessmod/recipe/useless_oak_hanging_sign.json index 03cf8476..bbd038cb 100644 --- a/src/generated/resources/data/uselessmod/recipe/useless_oak_hanging_sign.json +++ b/src/generated/resources/data/uselessmod/recipe/useless_oak_hanging_sign.json @@ -4,7 +4,7 @@ "group": "hanging_sign", "key": { "#": "uselessmod:stripped_useless_oak_log", - "X": "minecraft:chain" + "X": "minecraft:iron_chain" }, "pattern": [ "X X", diff --git a/src/generated/resources/data/uselessmod/worldgen/biome/useless_forest.json b/src/generated/resources/data/uselessmod/worldgen/biome/useless_forest.json index e63a7d96..a9e0fc95 100644 --- a/src/generated/resources/data/uselessmod/worldgen/biome/useless_forest.json +++ b/src/generated/resources/data/uselessmod/worldgen/biome/useless_forest.json @@ -6,17 +6,8 @@ ], "downfall": 0.8, "effects": { - "fog_color": 12638463, - "grass_color": 4240479, - "mood_sound": { - "block_search_extent": 8, - "offset": 2.0, - "sound": "minecraft:ambient.cave", - "tick_delay": 6000 - }, - "sky_color": 4240479, - "water_color": 4623172, - "water_fog_color": 4623172 + "grass_color": "#40b45f", + "water_color": "#468b44" }, "features": [ [], @@ -75,8 +66,9 @@ "minecraft:patch_grass_forest", "minecraft:brown_mushroom_normal", "minecraft:red_mushroom_normal", - "minecraft:patch_sugar_cane", "minecraft:patch_pumpkin", + "minecraft:patch_sugar_cane", + "minecraft:patch_firefly_bush_near_water", "uselessmod:flower_default", "uselessmod:trees_useless_oak" ], diff --git a/src/main/java/net/themcbrothers/uselessmod/UselessMod.java b/src/main/java/net/themcbrothers/uselessmod/UselessMod.java index a463394e..6fa8d6de 100644 --- a/src/main/java/net/themcbrothers/uselessmod/UselessMod.java +++ b/src/main/java/net/themcbrothers/uselessmod/UselessMod.java @@ -2,16 +2,19 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public final class UselessMod { public static final String MOD_ID = "uselessmod"; + public static final Logger LOGGER = LogManager.getLogger(MOD_ID); private UselessMod() { } - public static ResourceLocation rl(String path) { - return ResourceLocation.fromNamespaceAndPath(MOD_ID, path); + public static Identifier id(String path) { + return Identifier.fromNamespaceAndPath(MOD_ID, path); } public static MutableComponent translate(String prefix, String suffix, Object... args) { diff --git a/src/main/java/net/themcbrothers/uselessmod/UselessTags.java b/src/main/java/net/themcbrothers/uselessmod/UselessTags.java index 24647309..63eeae0e 100644 --- a/src/main/java/net/themcbrothers/uselessmod/UselessTags.java +++ b/src/main/java/net/themcbrothers/uselessmod/UselessTags.java @@ -25,7 +25,7 @@ public static class Blocks { public static final TagKey WALL_CLOSET_MATERIALS = modTag("wall_closet_materials"); private static TagKey modTag(String tag) { - return BlockTags.create(UselessMod.rl(tag)); + return BlockTags.create(UselessMod.id(tag)); } } @@ -55,7 +55,7 @@ public static class Items { public static final TagKey LAMPS = modTag("lamps"); private static TagKey modTag(String tag) { - return ItemTags.create(UselessMod.rl(tag)); + return ItemTags.create(UselessMod.id(tag)); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/api/CoffeeType.java b/src/main/java/net/themcbrothers/uselessmod/api/CoffeeType.java index c0addd5f..4568b9bc 100644 --- a/src/main/java/net/themcbrothers/uselessmod/api/CoffeeType.java +++ b/src/main/java/net/themcbrothers/uselessmod/api/CoffeeType.java @@ -1,13 +1,11 @@ package net.themcbrothers.uselessmod.api; import com.mojang.serialization.Codec; -import net.minecraft.Util; -import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.util.Util; import net.minecraft.world.item.component.Consumable; import org.jetbrains.annotations.Nullable; import java.util.Objects; -import java.util.Set; public class CoffeeType { public static final Codec CODEC = UselessRegistries.COFFEE_REGISTRY.byNameCodec(); diff --git a/src/main/java/net/themcbrothers/uselessmod/api/UselessRegistries.java b/src/main/java/net/themcbrothers/uselessmod/api/UselessRegistries.java index 4d73948e..d0df476e 100644 --- a/src/main/java/net/themcbrothers/uselessmod/api/UselessRegistries.java +++ b/src/main/java/net/themcbrothers/uselessmod/api/UselessRegistries.java @@ -6,7 +6,7 @@ import net.themcbrothers.uselessmod.UselessMod; public class UselessRegistries { - public static final ResourceKey> COFFEE_KEY = ResourceKey.createRegistryKey(UselessMod.rl("coffee")); + public static final ResourceKey> COFFEE_KEY = ResourceKey.createRegistryKey(UselessMod.id("coffee")); public static final Registry COFFEE_REGISTRY = new RegistryBuilder<>(COFFEE_KEY).create(); } diff --git a/src/main/java/net/themcbrothers/uselessmod/client/CoffeeTintSource.java b/src/main/java/net/themcbrothers/uselessmod/client/CoffeeTintSource.java new file mode 100644 index 00000000..d6b72b80 --- /dev/null +++ b/src/main/java/net/themcbrothers/uselessmod/client/CoffeeTintSource.java @@ -0,0 +1,30 @@ +package net.themcbrothers.uselessmod.client; + +import com.mojang.serialization.MapCodec; +import net.minecraft.client.color.item.ItemTintSource; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.util.ARGB; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.themcbrothers.uselessmod.api.CoffeeType; +import net.themcbrothers.uselessmod.util.CoffeeUtils; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; + +public record CoffeeTintSource() implements ItemTintSource { + public static final CoffeeTintSource INSTANCE = new CoffeeTintSource(); + public static final MapCodec MAP_CODEC = MapCodec.unit(INSTANCE); + + @Override + public int calculate(@NonNull ItemStack stack, @Nullable ClientLevel level, @Nullable LivingEntity entity) { + return CoffeeUtils.getCoffeeType(stack) + .map(CoffeeType::getColor) + .map(color -> ARGB.color(0xFF, color)) + .orElse(-1); + } + + @Override + public @NonNull MapCodec type() { + return MAP_CODEC; + } +} diff --git a/src/main/java/net/themcbrothers/uselessmod/client/PaintTintSource.java b/src/main/java/net/themcbrothers/uselessmod/client/PaintTintSource.java new file mode 100644 index 00000000..c0c535fb --- /dev/null +++ b/src/main/java/net/themcbrothers/uselessmod/client/PaintTintSource.java @@ -0,0 +1,26 @@ +package net.themcbrothers.uselessmod.client; + +import com.mojang.serialization.MapCodec; +import net.minecraft.client.color.item.ItemTintSource; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.util.ARGB; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.themcbrothers.uselessmod.core.UselessDataComponents; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; + +public record PaintTintSource() implements ItemTintSource { + public static final PaintTintSource INSTANCE = new PaintTintSource(); + public static final MapCodec MAP_CODEC = MapCodec.unit(INSTANCE); + + @Override + public int calculate(@NonNull ItemStack stack, @Nullable ClientLevel level, @Nullable LivingEntity entity) { + return ARGB.color(0xFF, stack.getOrDefault(UselessDataComponents.COLOR.get(), 0xFFFFFFFF)); + } + + @Override + public @NonNull MapCodec type() { + return MAP_CODEC; + } +} diff --git a/src/main/java/net/themcbrothers/uselessmod/client/gui/screens/inventory/CoffeeMachineScreen.java b/src/main/java/net/themcbrothers/uselessmod/client/gui/screens/inventory/CoffeeMachineScreen.java index 8578011b..2c346c3c 100644 --- a/src/main/java/net/themcbrothers/uselessmod/client/gui/screens/inventory/CoffeeMachineScreen.java +++ b/src/main/java/net/themcbrothers/uselessmod/client/gui/screens/inventory/CoffeeMachineScreen.java @@ -5,14 +5,15 @@ import net.minecraft.client.gui.components.Renderable; import net.minecraft.client.gui.narration.NarrationElementOutput; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.input.InputWithModifiers; import net.minecraft.client.renderer.Rect2i; -import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.entity.player.Inventory; import net.neoforged.neoforge.client.gui.widget.ExtendedButton; +import net.neoforged.neoforge.client.network.ClientPacketDistributor; import net.neoforged.neoforge.fluids.FluidStack; -import net.neoforged.neoforge.network.PacketDistributor; import net.themcbrothers.lib.client.screen.widgets.EnergyBar; import net.themcbrothers.lib.client.screen.widgets.FluidTank; import net.themcbrothers.uselessmod.UselessMod; @@ -24,7 +25,8 @@ import org.jetbrains.annotations.Nullable; public class CoffeeMachineScreen extends AbstractContainerScreen { - private static final ResourceLocation COFFEE_MACHINE_LOCATION = UselessMod.rl("textures/gui/container/coffee_machine.png"); + private static final Identifier COFFEE_MACHINE_LOCATION = UselessMod.id("textures/gui/container/coffee_machine.png"); + private static final Identifier SLOT_HIGHLIGHT_FRONT_SPRITE = Identifier.withDefaultNamespace("container/slot_highlight_front"); public CoffeeMachineScreen(CoffeeMachineMenu menu, Inventory inventory, Component title) { super(menu, inventory, title); @@ -35,8 +37,9 @@ protected void init() { super.init(); this.titleLabelX = (this.imageWidth - this.font.width(this.title)) / 2; - this.addRenderableOnly(new FluidTank(this.leftPos + 12, this.topPos + 18, 8, 48, this.menu.getWaterTank(), this)); - this.addRenderableOnly(new FluidTank(this.leftPos + 30, this.topPos + 18, 8, 48, this.menu.getMilkTank(), this)); + // TODO: tanks in GUI +// this.addRenderableOnly(new FluidTank(this.leftPos + 12, this.topPos + 18, 8, 48, this.menu.getWaterTank(), this)); +// this.addRenderableOnly(new FluidTank(this.leftPos + 30, this.topPos + 18, 8, 48, this.menu.getMilkTank(), this)); this.addRenderableWidget(new EnergyBar(this.leftPos + 156, this.topPos + 18, EnergyBar.Size._8x48, this.menu, this)); this.addRenderableWidget(new StartStopButton(this.leftPos + 61, this.topPos + 50, 32, 20, true)); this.addRenderableWidget(new StartStopButton(this.leftPos + 61, this.topPos + 50, 32, 20, false)); @@ -65,12 +68,12 @@ protected void renderBg(@NotNull GuiGraphics guiGraphics, float partialTicks, in int yPos = this.topPos; // Background - guiGraphics.blit(RenderType::guiTextured, COFFEE_MACHINE_LOCATION, xPos, yPos, 0, 0, this.imageWidth, this.imageHeight, 256, 256); - guiGraphics.blit(RenderType::guiTextured, COFFEE_MACHINE_LOCATION, xPos - 16, yPos + 10, 0, 166, 23, 64, 256, 256); + guiGraphics.blit(RenderPipelines.GUI_TEXTURED, COFFEE_MACHINE_LOCATION, xPos, yPos, 0, 0, this.imageWidth, this.imageHeight, 256, 256); + guiGraphics.blit(RenderPipelines.GUI_TEXTURED, COFFEE_MACHINE_LOCATION, xPos - 16, yPos + 10, 0, 166, 23, 64, 256, 256); // Progress double d = this.menu.getScaledCookTime(42); - guiGraphics.blit(RenderType::guiTextured, COFFEE_MACHINE_LOCATION, xPos + 67, yPos + 39, 176, 0, (int) d, 6, 256, 256); + guiGraphics.blit(RenderPipelines.GUI_TEXTURED, COFFEE_MACHINE_LOCATION, xPos + 67, yPos + 39, 176, 0, (int) d, 6, 256, 256); } @Override @@ -89,7 +92,7 @@ protected void renderTooltip(@NotNull GuiGraphics guiGraphics, int mouseX, int m } public static void renderSlotHighlight(GuiGraphics guiGraphics, int x, int y, int width, int height, int offset, int color) { - guiGraphics.fillGradient(RenderType.guiOverlay(), x, y, x + width, y + height, color, color, offset); + guiGraphics.blitSprite(RenderPipelines.GUI_TEXTURED, SLOT_HIGHLIGHT_FRONT_SPRITE, x, y, x + width, y + height); } @Nullable @@ -118,8 +121,8 @@ public StartStopButton(int xPos, int yPos, int width, int height, boolean start) } @Override - public void onPress() { - PacketDistributor.sendToServer(new CoffeeMachineStartPacket(this.start)); + public void onPress(InputWithModifiers modifiers) { + ClientPacketDistributor.sendToServer(new CoffeeMachineStartPacket(this.start)); } @Override @@ -138,7 +141,7 @@ public void render(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, flo } public class MilkCheckboxButton extends AbstractButton { - private final ResourceLocation TEXTURE = UselessMod.rl("textures/gui/checkbox.png"); + private final Identifier TEXTURE = UselessMod.id("textures/gui/checkbox.png"); private boolean checked; public MilkCheckboxButton(int x, int y, Component title, boolean checked) { @@ -153,18 +156,18 @@ public void render(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, flo } @Override - public void renderWidget(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) { - guiGraphics.blit(RenderType::guiTextured, TEXTURE, this.getX(), this.getY(), this.isFocused() ? 10.0F : 0.0F, this.checked ? 10.0F : 0.0F, 10, 10, 32, 32); + protected void renderContents(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + guiGraphics.blit(RenderPipelines.GUI_TEXTURED, TEXTURE, this.getX(), this.getY(), this.isFocused() ? 10.0F : 0.0F, this.checked ? 10.0F : 0.0F, 10, 10, 32, 32); } public void renderToolTip(@NotNull GuiGraphics guiGraphics, int mouseX, int mouseY) { - guiGraphics.renderTooltip(font, this.getMessage(), mouseX, mouseY); + guiGraphics.setTooltipForNextFrame(this.getMessage(), mouseX, mouseY); // TODO: verify that this works; refactor } @Override - public void onPress() { + public void onPress(InputWithModifiers input) { this.checked = !this.checked; - PacketDistributor.sendToServer(new CoffeeMachineMilkUpdatePacket(this.isChecked())); + ClientPacketDistributor.sendToServer(new CoffeeMachineMilkUpdatePacket(this.isChecked())); } public boolean isChecked() { diff --git a/src/main/java/net/themcbrothers/uselessmod/client/model/MachineSupplierModel.java b/src/main/java/net/themcbrothers/uselessmod/client/model/MachineSupplierModel.java deleted file mode 100644 index 0c6f82b6..00000000 --- a/src/main/java/net/themcbrothers/uselessmod/client/model/MachineSupplierModel.java +++ /dev/null @@ -1,159 +0,0 @@ -package net.themcbrothers.uselessmod.client.model; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.block.model.BakedOverrides; -import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.ItemOverride; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.resources.model.BakedModel; -import net.minecraft.client.resources.model.Material; -import net.minecraft.client.resources.model.ModelBaker; -import net.minecraft.client.resources.model.ModelState; -import net.minecraft.core.Direction; -import net.minecraft.util.RandomSource; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.item.ItemDisplayContext; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.state.BlockState; -import net.neoforged.neoforge.client.ChunkRenderTypeSet; -import net.neoforged.neoforge.client.model.IDynamicBakedModel; -import net.neoforged.neoforge.client.model.data.ModelData; -import net.neoforged.neoforge.client.model.geometry.BlockGeometryBakingContext; -import net.neoforged.neoforge.client.model.geometry.IGeometryBakingContext; -import net.neoforged.neoforge.client.model.geometry.IGeometryLoader; -import net.neoforged.neoforge.client.model.geometry.IUnbakedGeometry; -import net.themcbrothers.uselessmod.core.UselessBlocks; -import net.themcbrothers.uselessmod.core.UselessDataComponents; -import net.themcbrothers.uselessmod.world.level.block.entity.MachineSupplierBlockEntity; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Collections; -import java.util.List; -import java.util.function.Function; - -public class MachineSupplierModel implements IDynamicBakedModel { - private static final BakedOverrides OVERRIDE = new ItemOverrideHandler(); - - private final BakedModel baseModel; - - private MachineSupplierModel(BakedModel baseModel) { - this.baseModel = baseModel; - } - - @Override - public @NotNull List getQuads(@Nullable BlockState state, @Nullable Direction side, @NotNull RandomSource rand, @NotNull ModelData extraData, @Nullable RenderType renderType) { - BlockState mimic = extraData.get(MachineSupplierBlockEntity.MIMIC_PROPERTY); - if (mimic == null || mimic.is(UselessBlocks.MACHINE_SUPPLIER.get())) { - return this.baseModel.getQuads(mimic, side, rand, ModelData.EMPTY, renderType); - } - - if (renderType == null || this.getRenderTypes(mimic, rand, ModelData.EMPTY).contains(renderType)) { - BakedModel model = getMimicModel(mimic); - return model.getQuads(mimic, side, rand, ModelData.EMPTY, renderType); - } - - return Collections.emptyList(); - } - - @Override - public TextureAtlasSprite getParticleIcon(@NotNull ModelData data) { - BlockState mimic = data.get(MachineSupplierBlockEntity.MIMIC_PROPERTY); - BakedModel model = getMimicModel(mimic); - return model.getParticleIcon(ModelData.EMPTY); - } - - @Override - public BakedModel applyTransform(ItemDisplayContext transformType, PoseStack poseStack, boolean applyLeftHandTransform) { - return this.baseModel.applyTransform(transformType, poseStack, applyLeftHandTransform); - } - - private BakedModel getMimicModel(@Nullable BlockState mimic) { - if (mimic == null || mimic.isAir()) { - return this.baseModel; - } - - return Minecraft.getInstance().getBlockRenderer().getBlockModel(mimic); - } - - @Override - public ChunkRenderTypeSet getRenderTypes(@NotNull BlockState state, @NotNull RandomSource rand, @NotNull ModelData data) { - BlockState mimic = data.get(MachineSupplierBlockEntity.MIMIC_PROPERTY); - BakedModel model = getMimicModel(mimic); - return mimic != null ? model.getRenderTypes(mimic, rand, ModelData.EMPTY) : this.baseModel.getRenderTypes(state, rand, data); - } - - @Override - public boolean useAmbientOcclusion() { - return true; - } - - @Override - public boolean isGui3d() { - return false; - } - - @Override - public boolean usesBlockLight() { - return this.baseModel.usesBlockLight(); - } - - @Override - public boolean isCustomRenderer() { - return false; - } - - @Override - public TextureAtlasSprite getParticleIcon() { - return getMimicModel(null).getParticleIcon(ModelData.EMPTY); - } - - @Override - public BakedOverrides overrides() { - return OVERRIDE; - } - - private static class ItemOverrideHandler extends BakedOverrides { - @Override - public @Nullable BakedModel findOverride(ItemStack stack, @Nullable ClientLevel clientLevel, @Nullable LivingEntity livingEntity, int i) { - BlockState mimic = stack.get(UselessDataComponents.MIMIC.get()); - - if (mimic == null) { - return null; - } - - BakedModel model = Minecraft.getInstance().getBlockRenderer().getBlockModel(UselessBlocks.MACHINE_SUPPLIER.get().defaultBlockState()); - return ((MachineSupplierModel) model).getMimicModel(mimic); - } - } - - private static class Geometry implements IUnbakedGeometry { - @Override - public BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function spriteGetter, ModelState modelState, List overrides) { - BlockModel baseModel = ((BlockGeometryBakingContext) context).owner.parent; - - if (baseModel == null) { - throw new NullPointerException("Expected model parent model: " + context.getModelName()); - } - - BakedModel bakedModel = baseModel.bake(baker, spriteGetter, modelState); - return new MachineSupplierModel(bakedModel); - } - } - - public static class Loader implements IGeometryLoader { - public static final Loader INSTANCE = new Loader(); - - @Override - public Geometry read(JsonObject jsonObject, JsonDeserializationContext deserializationContext) throws JsonParseException { - return new Geometry(); - } - } -} diff --git a/src/main/java/net/themcbrothers/uselessmod/client/model/WallClosetModel.java b/src/main/java/net/themcbrothers/uselessmod/client/model/WallClosetModel.java deleted file mode 100644 index 4afb282e..00000000 --- a/src/main/java/net/themcbrothers/uselessmod/client/model/WallClosetModel.java +++ /dev/null @@ -1,217 +0,0 @@ -package net.themcbrothers.uselessmod.client.model; - -import com.google.common.collect.Maps; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.datafixers.util.Either; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.block.model.*; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.resources.model.BakedModel; -import net.minecraft.client.resources.model.Material; -import net.minecraft.client.resources.model.ModelBaker; -import net.minecraft.client.resources.model.ModelState; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.core.Holder; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.util.RandomSource; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.inventory.InventoryMenu; -import net.minecraft.world.item.ItemDisplayContext; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.neoforged.neoforge.client.ChunkRenderTypeSet; -import net.neoforged.neoforge.client.model.IDynamicBakedModel; -import net.neoforged.neoforge.client.model.data.ModelData; -import net.neoforged.neoforge.client.model.geometry.BlockGeometryBakingContext; -import net.neoforged.neoforge.client.model.geometry.IGeometryBakingContext; -import net.neoforged.neoforge.client.model.geometry.IGeometryLoader; -import net.neoforged.neoforge.client.model.geometry.IUnbakedGeometry; -import net.themcbrothers.uselessmod.core.UselessBlocks; -import net.themcbrothers.uselessmod.core.UselessDataComponents; -import net.themcbrothers.uselessmod.world.level.block.entity.WallClosetBlockEntity; -import org.apache.commons.compress.utils.Lists; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.function.Function; - -import static net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING; - -public class WallClosetModel implements IDynamicBakedModel { - private static final BakedOverrides OVERRIDE = new ItemOverrideHandler(); - - private final ModelBaker modelBakery; - private final BlockModel model; - private final BakedModel bakedModel; - private final ModelState modelTransform; - private final Function spriteGetter; - - private final Map cache = Maps.newHashMap(); - - public WallClosetModel(ModelBaker modelBakery, BlockModel model, ModelState modelTransform, Function spriteGetter) { - this.modelBakery = modelBakery; - this.model = model; - this.bakedModel = model.bake(modelBakery, spriteGetter, modelTransform); - this.modelTransform = modelTransform; - this.spriteGetter = spriteGetter; - } - - private BakedModel getCustomModel(Block material, Direction facing) { - BakedModel customModel; - String key = BuiltInRegistries.BLOCK.getKey(material) + ";" + facing.getName(); - BakedModel possibleModel = this.cache.get(key); - - if (possibleModel != null) { - customModel = possibleModel; - } else { - List elements = Lists.newArrayList(); - for (BlockElement part : this.model.getElements()) { - elements.add(new BlockElement(part.from, part.to, Maps.newHashMap(part.faces), part.rotation, part.shade, part.lightEmission)); - } - - BlockModel newModel = new BlockModel(this.model.getParentLocation(), elements, - Maps.newHashMap(this.model.textureMap), this.model.hasAmbientOcclusion, - this.model.getGuiLight(), this.model.getTransforms(), this.model.getOverrides()); - newModel.name = this.model.name; - newModel.parent = this.model.parent; - - Material renderMaterial = new Material(InventoryMenu.BLOCK_ATLAS, Minecraft.getInstance() - .getBlockRenderer().getBlockModel(material.defaultBlockState()).getParticleIcon(ModelData.EMPTY).contents().name()); - newModel.textureMap.put("planks", Either.left(renderMaterial)); - newModel.textureMap.put("particle", Either.left(renderMaterial)); - - customModel = newModel.bake(this.modelBakery, this.spriteGetter, this.modelTransform); - - this.cache.put(key, customModel); - } - - return customModel; - } - - private Block getMaterial(@Nullable Block block) { - return block == null ? Blocks.OAK_PLANKS : block; - } - - private Direction getFacing(@Nullable BlockState state) { - return state == null || !state.hasProperty(HORIZONTAL_FACING) ? Direction.NORTH : state.getValue(HORIZONTAL_FACING); - } - - @NotNull - @Override - public List getQuads(@Nullable BlockState state, @Nullable Direction side, @NotNull RandomSource rand, @NotNull ModelData extraData, @Nullable RenderType renderType) { - return this.getCustomModel(getMaterial(extraData.get(WallClosetBlockEntity.MATERIAL_PROPERTY)), getFacing(state)) - .getQuads(state, side, rand, extraData, renderType); - } - - @Override - public TextureAtlasSprite getParticleIcon(@NotNull ModelData data) { - //noinspection deprecation - return this.getCustomModel(getMaterial(data.get(WallClosetBlockEntity.MATERIAL_PROPERTY)), Direction.NORTH).getParticleIcon(); - } - - @NotNull - @Override - public ModelData getModelData(@NotNull BlockAndTintGetter level, @NotNull BlockPos pos, @NotNull BlockState state, @NotNull ModelData modelData) { - if (level.getBlockEntity(pos) instanceof WallClosetBlockEntity wallClosetBlockEntity) { - return modelData.derive().with(WallClosetBlockEntity.MATERIAL_PROPERTY, wallClosetBlockEntity.getMaterial()).build(); - } - - return modelData; - } - - @Override - public ChunkRenderTypeSet getRenderTypes(@NotNull BlockState state, @NotNull RandomSource rand, @NotNull ModelData data) { - return ChunkRenderTypeSet.of(RenderType.cutout()); - } - - @Override - public boolean useAmbientOcclusion() { - return this.bakedModel.useAmbientOcclusion(); - } - - @Override - public boolean isGui3d() { - return this.bakedModel.isGui3d(); - } - - @Override - public boolean usesBlockLight() { - return this.bakedModel.usesBlockLight(); - } - - @Override - public boolean isCustomRenderer() { - return this.bakedModel.isCustomRenderer(); - } - - @Override - public TextureAtlasSprite getParticleIcon() { - return this.bakedModel.getParticleIcon(ModelData.EMPTY); - } - - @Override - public BakedModel applyTransform(ItemDisplayContext transformType, PoseStack poseStack, boolean applyLeftHandTransform) { - return this.bakedModel.applyTransform(transformType, poseStack, applyLeftHandTransform); - } - - @Override - public BakedOverrides overrides() { - return OVERRIDE; - } - - private static class ItemOverrideHandler extends BakedOverrides { - @Override - public @Nullable BakedModel findOverride(ItemStack stack, @Nullable ClientLevel clientLevel, @Nullable LivingEntity livingEntity, int seed) { - BakedModel model = Minecraft.getInstance().getBlockRenderer().getBlockModel(UselessBlocks.WALL_CLOSET.get().defaultBlockState()); - - if (model instanceof WallClosetModel wallClosetModel && stack.has(UselessDataComponents.WALL_CLOSET_MATERIAL.get())) { - Holder material = stack.get(UselessDataComponents.WALL_CLOSET_MATERIAL.get()); - - if (material == null) { - material = Holder.direct(Blocks.OAK_PLANKS); - } - - return wallClosetModel.getCustomModel(Objects.requireNonNull(material.value()), Direction.NORTH); - } - - return model; - } - } - - public static class Geometry implements IUnbakedGeometry { - @Override - public BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function spriteGetter, ModelState modelTransform, List overrides) { - BlockModel blockModel = ((BlockGeometryBakingContext) context).owner.parent; - if (blockModel == null) - throw new RuntimeException("Wall Closet parent model is null"); - return new WallClosetModel(baker, blockModel, modelTransform, spriteGetter); - } - } - - public static class Loader implements IGeometryLoader { - public static final Loader INSTANCE = new Loader(); - - private Loader() { - } - - @Override - public Geometry read(JsonObject jsonObject, JsonDeserializationContext deserializationContext) throws JsonParseException { - if (!jsonObject.has("parent")) - throw new RuntimeException("Wall Closet model requires 'parent' value."); - - return new Geometry(); - } - } -} diff --git a/src/main/java/net/themcbrothers/uselessmod/client/model/package-info.java b/src/main/java/net/themcbrothers/uselessmod/client/model/package-info.java index d671daac..5c048b66 100644 --- a/src/main/java/net/themcbrothers/uselessmod/client/model/package-info.java +++ b/src/main/java/net/themcbrothers/uselessmod/client/model/package-info.java @@ -1,7 +1,2 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package net.themcbrothers.uselessmod.client.model; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file +@org.jspecify.annotations.NullMarked +package net.themcbrothers.uselessmod.client.model; \ No newline at end of file diff --git a/src/main/java/net/themcbrothers/uselessmod/client/renderer/UselessBlockEntityWithoutLevelRenderer.java b/src/main/java/net/themcbrothers/uselessmod/client/renderer/UselessBlockEntityWithoutLevelRenderer.java deleted file mode 100644 index 73e84c38..00000000 --- a/src/main/java/net/themcbrothers/uselessmod/client/renderer/UselessBlockEntityWithoutLevelRenderer.java +++ /dev/null @@ -1,51 +0,0 @@ -package net.themcbrothers.uselessmod.client.renderer; - -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.core.BlockPos; -import net.minecraft.server.packs.resources.ResourceManager; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.ItemDisplayContext; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.neoforged.neoforge.client.model.data.ModelData; -import net.themcbrothers.uselessmod.core.UselessBlocks; -import net.themcbrothers.uselessmod.world.level.block.UselessBedBlock; -import net.themcbrothers.uselessmod.world.level.block.entity.CoffeeMachineBlockEntity; -import net.themcbrothers.uselessmod.world.level.block.entity.UselessBedBlockEntity; - -import java.util.function.Supplier; - -public class UselessBlockEntityWithoutLevelRenderer extends BlockEntityWithoutLevelRenderer { - private final Supplier bed = () -> new UselessBedBlockEntity(BlockPos.ZERO, UselessBlocks.USELESS_BED.get().defaultBlockState()); - private final Supplier coffeeMachine = () -> new CoffeeMachineBlockEntity(BlockPos.ZERO, UselessBlocks.COFFEE_MACHINE.get().defaultBlockState()); - - public UselessBlockEntityWithoutLevelRenderer() { - super(Minecraft.getInstance().getBlockEntityRenderDispatcher(), Minecraft.getInstance().getEntityModels()); - } - - @Override - public void onResourceManagerReload(ResourceManager manager) { - } - - @Override - public void renderByItem(ItemStack stack, ItemDisplayContext type, PoseStack poseStack, MultiBufferSource buffer, int combinedLight, int combinedOverlay) { - if (stack.getItem() instanceof BlockItem blockItem) { - Block block = blockItem.getBlock(); - BlockEntity blockEntity; - - if (block instanceof UselessBedBlock) { - blockEntity = this.bed.get(); - } else { - blockEntity = this.coffeeMachine.get(); - Minecraft.getInstance().getBlockRenderer().renderSingleBlock(UselessBlocks.COFFEE_MACHINE.get().defaultBlockState(), - poseStack, buffer, combinedLight, combinedOverlay, ModelData.EMPTY, null); - } - - this.blockEntityRenderDispatcher.renderItem(blockEntity, poseStack, buffer, combinedLight, combinedOverlay); - } - } -} diff --git a/src/main/java/net/themcbrothers/uselessmod/client/renderer/UselessItemStackRendererProvider.java b/src/main/java/net/themcbrothers/uselessmod/client/renderer/UselessItemStackRendererProvider.java deleted file mode 100644 index 7ff1b499..00000000 --- a/src/main/java/net/themcbrothers/uselessmod/client/renderer/UselessItemStackRendererProvider.java +++ /dev/null @@ -1,35 +0,0 @@ -package net.themcbrothers.uselessmod.client.renderer; - -import net.neoforged.neoforge.client.event.RegisterClientReloadListenersEvent; -import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; - -public class UselessItemStackRendererProvider { - private static UselessBlockEntityWithoutLevelRenderer blockEntityWithoutLevelRenderer; - private static UselessShieldItemRenderer shieldItemRenderer; - - public static void initialize(final RegisterClientReloadListenersEvent event) { - blockEntityWithoutLevelRenderer = new UselessBlockEntityWithoutLevelRenderer(); - shieldItemRenderer = new UselessShieldItemRenderer(); - - event.registerReloadListener(blockEntityWithoutLevelRenderer); - event.registerReloadListener(shieldItemRenderer); - } - - public static IClientItemExtensions blockEntity() { - return new IClientItemExtensions() { - @Override - public UselessBlockEntityWithoutLevelRenderer getCustomRenderer() { - return blockEntityWithoutLevelRenderer; - } - }; - } - - public static IClientItemExtensions shield() { - return new IClientItemExtensions() { - @Override - public UselessShieldItemRenderer getCustomRenderer() { - return shieldItemRenderer; - } - }; - } -} diff --git a/src/main/java/net/themcbrothers/uselessmod/client/renderer/UselessShieldItemRenderer.java b/src/main/java/net/themcbrothers/uselessmod/client/renderer/UselessShieldItemRenderer.java deleted file mode 100644 index bbd33f9c..00000000 --- a/src/main/java/net/themcbrothers/uselessmod/client/renderer/UselessShieldItemRenderer.java +++ /dev/null @@ -1,47 +0,0 @@ -package net.themcbrothers.uselessmod.client.renderer; - -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import net.minecraft.client.model.ShieldModel; -import net.minecraft.client.model.geom.ModelLayers; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.ItemRenderer; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.resources.model.Material; -import net.minecraft.server.packs.resources.ResourceManager; -import net.minecraft.world.inventory.InventoryMenu; -import net.minecraft.world.item.ItemDisplayContext; -import net.minecraft.world.item.ItemStack; -import net.themcbrothers.uselessmod.UselessMod; -import net.themcbrothers.uselessmod.core.UselessItems; - -public class UselessShieldItemRenderer extends UselessBlockEntityWithoutLevelRenderer { - private static final Material SHIELD_USELESS = new Material(InventoryMenu.BLOCK_ATLAS, UselessMod.rl("entity/shield/useless")); - private static final Material SHIELD_SUPER_USELESS = new Material(InventoryMenu.BLOCK_ATLAS, UselessMod.rl("entity/shield/super_useless")); - - private ShieldModel shieldModel; - - @Override - public void onResourceManagerReload(ResourceManager manager) { - this.shieldModel = new ShieldModel(this.entityModelSet.bakeLayer(ModelLayers.SHIELD)); - } - - @Override - public void renderByItem(ItemStack stack, ItemDisplayContext type, PoseStack poseStack, MultiBufferSource buffer, int combinedLight, int combinedOverlay) { - if (stack.is(UselessItems.USELESS_SHIELD) || stack.is(UselessItems.SUPER_USELESS_SHIELD)) { - boolean isUseless = stack.is(UselessItems.USELESS_SHIELD.get()); - - poseStack.pushPose(); - poseStack.scale(1.0F, -1.0F, -1.0F); - - Material material = isUseless ? SHIELD_USELESS : SHIELD_SUPER_USELESS; - TextureAtlasSprite sprite = material.sprite(); - VertexConsumer vertexConsumer = sprite.wrap(ItemRenderer.getFoilBuffer(buffer, this.shieldModel.renderType(material.atlasLocation()), type == ItemDisplayContext.GUI, stack.hasFoil())); - - this.shieldModel.handle().render(poseStack, vertexConsumer, combinedLight, combinedOverlay); - this.shieldModel.plate().render(poseStack, vertexConsumer, combinedLight, combinedOverlay); - - poseStack.popPose(); - } - } -} diff --git a/src/main/java/net/themcbrothers/uselessmod/client/renderer/blockentity/CoffeeMachineRenderer.java b/src/main/java/net/themcbrothers/uselessmod/client/renderer/blockentity/CoffeeMachineRenderer.java index 9f0bdf23..5257c8a5 100644 --- a/src/main/java/net/themcbrothers/uselessmod/client/renderer/blockentity/CoffeeMachineRenderer.java +++ b/src/main/java/net/themcbrothers/uselessmod/client/renderer/blockentity/CoffeeMachineRenderer.java @@ -1,31 +1,27 @@ package net.themcbrothers.uselessmod.client.renderer.blockentity; import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; -import net.minecraft.client.renderer.entity.ItemRenderer; -import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.renderer.blockentity.state.BlockEntityRenderState; +import net.minecraft.client.renderer.state.CameraRenderState; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.neoforged.neoforge.fluids.IFluidTank; import net.themcbrothers.lib.client.model.fluid.FluidCuboid; -import net.themcbrothers.lib.util.RenderUtils; import net.themcbrothers.uselessmod.world.level.block.entity.CoffeeMachineBlockEntity; -import org.jetbrains.annotations.NotNull; import org.joml.Vector3f; import static net.themcbrothers.lib.client.model.fluid.FluidCuboid.DEFAULT_FACES; -public class CoffeeMachineRenderer implements BlockEntityRenderer { +public class CoffeeMachineRenderer implements BlockEntityRenderer { public CoffeeMachineRenderer(BlockEntityRendererProvider.Context context) { } - @Override public void render(CoffeeMachineBlockEntity coffeeMachine, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight, int packedOverlay) { Direction facing = Direction.NORTH; @@ -53,7 +49,7 @@ private static void renderFluidTanks(CoffeeMachineBlockEntity coffeeMachine, Pos new Vector3f(7.99F, 9.99F, 14.99F), DEFAULT_FACES); }; - RenderUtils.renderFluidTank(poseStack, buffer, waterCuboid, waterTank, packedLight); +// RenderUtils.renderFluidTank(poseStack, buffer, waterCuboid, waterTank, packedLight); } if (!milkTank.getFluid().isEmpty()) { final FluidCuboid milkCuboid = switch (facing) { @@ -67,7 +63,7 @@ private static void renderFluidTanks(CoffeeMachineBlockEntity coffeeMachine, Pos new Vector3f(10.99F, 9.99F, 14.99F), DEFAULT_FACES); }; - RenderUtils.renderFluidTank(poseStack, buffer, milkCuboid, milkTank, packedLight); +// RenderUtils.renderFluidTank(poseStack, buffer, milkCuboid, milkTank, packedLight); } } @@ -82,16 +78,12 @@ private static void renderCupItem(CoffeeMachineBlockEntity coffeeMachine, PoseSt poseStack.scale(.6F, .6F, .6F); poseStack.mulPose(facing.getCounterClockWise().getRotation()); - final ItemRenderer itemRenderer = Minecraft.getInstance().getItemRenderer(); - BakedModel model = itemRenderer.getModel(renderStack, null, null, -1); - itemRenderer.render(renderStack, ItemDisplayContext.FIXED, false, - poseStack, buffer, packedLight, packedOverlay, model); +// ItemRenderer.renderItem(ItemDisplayContext.FIXED, poseStack, buffer, packedLight, packedOverlay, new int[0], null, RenderTypes.entitySolid(TextureAtlas.LOCATION_BLOCKS), ItemStackRenderState.FoilType.NONE); poseStack.popPose(); } } - @NotNull private static Vector3f getTranslation(Direction facing) { final float yOffset = 1F / 16F; final float cupOffset1 = 8F / 16F; @@ -104,4 +96,14 @@ private static Vector3f getTranslation(Direction facing) { default -> new Vector3f(cupOffset1, yOffset, 1F - cupOffset2); }; } + + @Override + public BlockEntityRenderState createRenderState() { + return new BlockEntityRenderState(); + } + + @Override + public void submit(BlockEntityRenderState renderState, PoseStack poseStack, SubmitNodeCollector nodeCollector, CameraRenderState cameraRenderState) { + // TODO: render coffee machine + } } diff --git a/src/main/java/net/themcbrothers/uselessmod/client/renderer/blockentity/PaintBucketRenderer.java b/src/main/java/net/themcbrothers/uselessmod/client/renderer/blockentity/PaintBucketRenderer.java index 108d3c2d..e67437f2 100644 --- a/src/main/java/net/themcbrothers/uselessmod/client/renderer/blockentity/PaintBucketRenderer.java +++ b/src/main/java/net/themcbrothers/uselessmod/client/renderer/blockentity/PaintBucketRenderer.java @@ -2,22 +2,23 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.blockentity.state.BlockEntityRenderState; +import net.minecraft.client.renderer.rendertype.RenderTypes; +import net.minecraft.client.renderer.state.CameraRenderState; +import net.minecraft.client.renderer.texture.TextureAtlas; import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.resources.ResourceLocation; import net.minecraft.util.ARGB; -import net.minecraft.world.inventory.InventoryMenu; -import net.minecraft.world.level.material.Fluid; import net.neoforged.neoforge.client.extensions.common.IClientFluidTypeExtensions; import net.neoforged.neoforge.fluids.FluidStack; import net.neoforged.neoforge.fluids.FluidType; +import net.themcbrothers.lib.client.render.FluidRenderer; import net.themcbrothers.uselessmod.world.level.block.entity.PaintBucketBlockEntity; -public class PaintBucketRenderer implements BlockEntityRenderer { +public class PaintBucketRenderer implements BlockEntityRenderer { private static final float BOTTOM_OFFSET = 1f / 16f; private static final float PAINT_HEIGHT = 6f / 16f; private static final float START = 5f / 16f; @@ -36,7 +37,6 @@ private void add(VertexConsumer renderer, PoseStack stack, float x, float y, flo .setNormal(1, 0, 0); } - @Override public void render(PaintBucketBlockEntity blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight, int packedOverlay) { if (blockEntity.colorTank.isEmpty()) { return; @@ -44,11 +44,11 @@ public void render(PaintBucketBlockEntity blockEntity, float partialTick, PoseSt FluidStack fluidStack = blockEntity.colorTank.getFluid(); - TextureAtlasSprite sprite = getStillFluidSprite(fluidStack); + TextureAtlasSprite sprite = FluidRenderer.getStillFluidSprite(fluidStack); int color = IClientFluidTypeExtensions.of(fluidStack.getFluid()).getTintColor(fluidStack); float y = BOTTOM_OFFSET + (((float) fluidStack.getAmount() / (float) FluidType.BUCKET_VOLUME) * PAINT_HEIGHT); - VertexConsumer vertexBuilder = buffer.getBuffer(RenderType.translucent()); + VertexConsumer vertexBuilder = buffer.getBuffer(RenderTypes.entityTranslucent(TextureAtlas.LOCATION_BLOCKS)); poseStack.pushPose(); add(vertexBuilder, poseStack, START, y, END, sprite.getU0(), sprite.getV1(), color); @@ -56,12 +56,17 @@ public void render(PaintBucketBlockEntity blockEntity, float partialTick, PoseSt add(vertexBuilder, poseStack, END, y, START, sprite.getU1(), sprite.getV0(), color); add(vertexBuilder, poseStack, START, y, START, sprite.getU0(), sprite.getV0(), color); poseStack.popPose(); + + } - private static TextureAtlasSprite getStillFluidSprite(FluidStack fluidStack) { - Minecraft minecraft = Minecraft.getInstance(); - Fluid fluid = fluidStack.getFluid(); - ResourceLocation fluidStill = IClientFluidTypeExtensions.of(fluid).getStillTexture(); - return minecraft.getTextureAtlas(InventoryMenu.BLOCK_ATLAS).apply(fluidStill); + @Override + public BlockEntityRenderState createRenderState() { + return new BlockEntityRenderState(); + } + + @Override + public void submit(BlockEntityRenderState renderState, PoseStack poseStack, SubmitNodeCollector nodeCollector, CameraRenderState cameraRenderState) { + // TODO: render paint bucket } } diff --git a/src/main/java/net/themcbrothers/uselessmod/client/renderer/blockentity/UselessBedRenderer.java b/src/main/java/net/themcbrothers/uselessmod/client/renderer/blockentity/UselessBedRenderer.java index 6315486e..b86b1217 100644 --- a/src/main/java/net/themcbrothers/uselessmod/client/renderer/blockentity/UselessBedRenderer.java +++ b/src/main/java/net/themcbrothers/uselessmod/client/renderer/blockentity/UselessBedRenderer.java @@ -1,16 +1,17 @@ package net.themcbrothers.uselessmod.client.renderer.blockentity; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; import net.minecraft.client.model.geom.ModelLayers; import net.minecraft.client.model.geom.ModelPart; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.Sheets; +import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.blockentity.BrightnessCombiner; +import net.minecraft.client.renderer.blockentity.state.BedRenderState; +import net.minecraft.client.renderer.state.CameraRenderState; import net.minecraft.client.resources.model.Material; import net.minecraft.core.Direction; import net.minecraft.world.level.Level; @@ -24,7 +25,7 @@ import net.themcbrothers.uselessmod.UselessMod; import net.themcbrothers.uselessmod.world.level.block.entity.UselessBedBlockEntity; -public class UselessBedRenderer implements BlockEntityRenderer { +public class UselessBedRenderer implements BlockEntityRenderer { private final ModelPart headRoot; private final ModelPart footRoot; @@ -33,9 +34,8 @@ public UselessBedRenderer(BlockEntityRendererProvider.Context context) { this.footRoot = context.bakeLayer(ModelLayers.BED_FOOT); } - @Override public void render(UselessBedBlockEntity bedBlockEntity, float idk, PoseStack poseStack, MultiBufferSource buffer, int combinedLight, int combinedOverlay) { - Material material = new Material(Sheets.BED_SHEET, UselessMod.rl("entity/bed/useless")); + Material material = new Material(Sheets.BED_SHEET, UselessMod.id("entity/bed/useless")); Level level = bedBlockEntity.getLevel(); if (level != null) { BlockState blockstate = bedBlockEntity.getBlockState(); @@ -55,8 +55,18 @@ private void renderPiece(PoseStack poseStack, MultiBufferSource buffer, ModelPar poseStack.translate(0.5D, 0.5D, 0.5D); poseStack.mulPose(Axis.ZP.rotationDegrees(180.0F + direction.toYRot())); poseStack.translate(-0.5D, -0.5D, -0.5D); - VertexConsumer vertexconsumer = material.buffer(buffer, RenderType::entitySolid); - modelPart.render(poseStack, vertexconsumer, combinedLight, combinedOverlay); +// VertexConsumer vertexconsumer = material.buffer(buffer, RenderTypes::entitySolid); +// modelPart.render(poseStack, vertexconsumer, combinedLight, combinedOverlay); poseStack.popPose(); } + + @Override + public BedRenderState createRenderState() { + return new BedRenderState(); + } + + @Override + public void submit(BedRenderState renderState, PoseStack poseStack, SubmitNodeCollector nodeCollector, CameraRenderState cameraRenderState) { + // TODO: useless bed renderer + } } diff --git a/src/main/java/net/themcbrothers/uselessmod/client/renderer/blockentity/package-info.java b/src/main/java/net/themcbrothers/uselessmod/client/renderer/blockentity/package-info.java index 00ad01a7..55e99e12 100644 --- a/src/main/java/net/themcbrothers/uselessmod/client/renderer/blockentity/package-info.java +++ b/src/main/java/net/themcbrothers/uselessmod/client/renderer/blockentity/package-info.java @@ -1,7 +1,2 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package net.themcbrothers.uselessmod.client.renderer.blockentity; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file +@org.jspecify.annotations.NullMarked +package net.themcbrothers.uselessmod.client.renderer.blockentity; \ No newline at end of file diff --git a/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/UselessChickenRenderer.java b/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/UselessChickenRenderer.java index df8a41b0..a3053186 100644 --- a/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/UselessChickenRenderer.java +++ b/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/UselessChickenRenderer.java @@ -1,24 +1,24 @@ package net.themcbrothers.uselessmod.client.renderer.entity; -import net.minecraft.client.model.ChickenModel; +import net.minecraft.client.model.animal.chicken.ChickenModel; import net.minecraft.client.model.geom.ModelLayers; import net.minecraft.client.renderer.entity.AgeableMobRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.entity.state.ChickenRenderState; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.util.Mth; import net.themcbrothers.uselessmod.UselessMod; import net.themcbrothers.uselessmod.world.entity.animal.UselessChicken; public class UselessChickenRenderer extends AgeableMobRenderer { - private static final ResourceLocation TEXTURE = UselessMod.rl("textures/entity/useless_chicken.png"); + private static final Identifier TEXTURE = UselessMod.id("textures/entity/useless_chicken.png"); public UselessChickenRenderer(EntityRendererProvider.Context context) { super(context, new ChickenModel(context.bakeLayer(ModelLayers.CHICKEN)), new ChickenModel(context.bakeLayer(ModelLayers.CHICKEN_BABY)), 0.3F); } @Override - public ResourceLocation getTextureLocation(ChickenRenderState renderState) { + public Identifier getTextureLocation(ChickenRenderState renderState) { return TEXTURE; } @@ -32,5 +32,6 @@ public void extractRenderState(UselessChicken chicken, ChickenRenderState render super.extractRenderState(chicken, renderState, partialTick); renderState.flap = Mth.lerp(partialTick, chicken.oFlap, chicken.flap); renderState.flapSpeed = Mth.lerp(partialTick, chicken.oFlapSpeed, chicken.flapSpeed); + renderState.variant = chicken.getVariant().value(); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/UselessCowRenderer.java b/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/UselessCowRenderer.java index 7a60ce32..24e22595 100644 --- a/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/UselessCowRenderer.java +++ b/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/UselessCowRenderer.java @@ -1,34 +1,34 @@ package net.themcbrothers.uselessmod.client.renderer.entity; -import net.minecraft.client.model.CowModel; +import net.minecraft.client.model.animal.cow.CowModel; import net.minecraft.client.model.geom.ModelLayers; import net.minecraft.client.renderer.entity.AgeableMobRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider; -import net.minecraft.client.renderer.entity.state.ChickenRenderState; -import net.minecraft.client.renderer.entity.state.LivingEntityRenderState; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.client.renderer.entity.state.CowRenderState; +import net.minecraft.resources.Identifier; import net.themcbrothers.uselessmod.UselessMod; import net.themcbrothers.uselessmod.world.entity.animal.UselessCow; -public class UselessCowRenderer extends AgeableMobRenderer { - private static final ResourceLocation TEXTURE = UselessMod.rl("textures/entity/useless_cow.png"); +public class UselessCowRenderer extends AgeableMobRenderer { + private static final Identifier TEXTURE = UselessMod.id("textures/entity/useless_cow.png"); public UselessCowRenderer(EntityRendererProvider.Context context) { super(context, new CowModel(context.bakeLayer(ModelLayers.COW)), new CowModel(context.bakeLayer(ModelLayers.COW_BABY)), 0.7F); } @Override - public LivingEntityRenderState createRenderState() { - return new ChickenRenderState(); + public CowRenderState createRenderState() { + return new CowRenderState(); } @Override - public void extractRenderState(UselessCow cow, LivingEntityRenderState renderState, float partialTick) { + public void extractRenderState(UselessCow cow, CowRenderState renderState, float partialTick) { super.extractRenderState(cow, renderState, partialTick); + renderState.variant = cow.getVariant().value(); } @Override - public ResourceLocation getTextureLocation(LivingEntityRenderState renderState) { + public Identifier getTextureLocation(CowRenderState renderState) { return TEXTURE; } } diff --git a/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/UselessPigRenderer.java b/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/UselessPigRenderer.java index 11c69b3c..c3c7ead0 100644 --- a/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/UselessPigRenderer.java +++ b/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/UselessPigRenderer.java @@ -1,26 +1,30 @@ package net.themcbrothers.uselessmod.client.renderer.entity; -import net.minecraft.client.model.PigModel; +import net.minecraft.client.model.animal.pig.PigModel; import net.minecraft.client.model.geom.ModelLayers; import net.minecraft.client.renderer.entity.AgeableMobRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider; -import net.minecraft.client.renderer.entity.layers.SaddleLayer; +import net.minecraft.client.renderer.entity.layers.SimpleEquipmentLayer; import net.minecraft.client.renderer.entity.state.PigRenderState; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.client.resources.model.EquipmentClientInfo; +import net.minecraft.resources.Identifier; +import net.minecraft.world.entity.EquipmentSlot; import net.themcbrothers.uselessmod.UselessMod; import net.themcbrothers.uselessmod.world.entity.animal.UselessPig; public class UselessPigRenderer extends AgeableMobRenderer { - private static final ResourceLocation TEXTURE = UselessMod.rl("textures/entity/useless_pig.png"); + private static final Identifier TEXTURE = UselessMod.id("textures/entity/useless_pig.png"); public UselessPigRenderer(EntityRendererProvider.Context context) { super(context, new PigModel(context.bakeLayer(ModelLayers.PIG)), new PigModel(context.bakeLayer(ModelLayers.PIG_BABY)), 0.7F); this.addLayer( - new SaddleLayer<>( + new SimpleEquipmentLayer<>( this, + context.getEquipmentRenderer(), + EquipmentClientInfo.LayerType.PIG_SADDLE, + pigRenderState -> pigRenderState.saddle, new PigModel(context.bakeLayer(ModelLayers.PIG_SADDLE)), - new PigModel(context.bakeLayer(ModelLayers.PIG_BABY_SADDLE)), - ResourceLocation.withDefaultNamespace("textures/entity/pig/pig_saddle.png") + new PigModel(context.bakeLayer(ModelLayers.PIG_BABY_SADDLE)) ) ); } @@ -31,13 +35,14 @@ public PigRenderState createRenderState() { } @Override - public ResourceLocation getTextureLocation(PigRenderState renderState) { + public Identifier getTextureLocation(PigRenderState renderState) { return TEXTURE; } @Override public void extractRenderState(UselessPig pig, PigRenderState renderState, float partialTick) { super.extractRenderState(pig, renderState, partialTick); - renderState.isSaddled = pig.isSaddled(); + renderState.saddle = pig.getItemBySlot(EquipmentSlot.SADDLE).copy(); + renderState.variant = pig.getVariant().value(); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/UselessSheepRenderer.java b/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/UselessSheepRenderer.java index 4b2794fe..4e7c58ce 100644 --- a/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/UselessSheepRenderer.java +++ b/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/UselessSheepRenderer.java @@ -1,17 +1,17 @@ package net.themcbrothers.uselessmod.client.renderer.entity; -import net.minecraft.client.model.SheepModel; +import net.minecraft.client.model.animal.sheep.SheepModel; import net.minecraft.client.model.geom.ModelLayers; import net.minecraft.client.renderer.entity.AgeableMobRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.entity.state.SheepRenderState; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.themcbrothers.uselessmod.UselessMod; import net.themcbrothers.uselessmod.client.renderer.entity.layers.UselessSheepWoolLayer; import net.themcbrothers.uselessmod.world.entity.animal.UselessSheep; public class UselessSheepRenderer extends AgeableMobRenderer { - private static final ResourceLocation TEXTURE = UselessMod.rl("textures/entity/useless_sheep.png"); + private static final Identifier TEXTURE = UselessMod.id("textures/entity/useless_sheep.png"); public UselessSheepRenderer(EntityRendererProvider.Context context) { super(context, new SheepModel(context.bakeLayer(ModelLayers.SHEEP)), new SheepModel(context.bakeLayer(ModelLayers.SHEEP_BABY)), 0.7F); @@ -24,7 +24,7 @@ public SheepRenderState createRenderState() { } @Override - public ResourceLocation getTextureLocation(SheepRenderState renderState) { + public Identifier getTextureLocation(SheepRenderState renderState) { return TEXTURE; } @@ -35,6 +35,5 @@ public void extractRenderState(UselessSheep sheep, SheepRenderState renderState, renderState.headEatPositionScale = sheep.getHeadEatPositionScale(partialTick); renderState.isSheared = sheep.isSheared(); renderState.woolColor = sheep.getColor(); - renderState.id = sheep.getId(); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/UselessSkeletonRenderer.java b/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/UselessSkeletonRenderer.java index e68c5514..a3ceacd8 100644 --- a/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/UselessSkeletonRenderer.java +++ b/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/UselessSkeletonRenderer.java @@ -4,15 +4,15 @@ import net.minecraft.client.renderer.entity.AbstractSkeletonRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.entity.state.SkeletonRenderState; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.themcbrothers.uselessmod.UselessMod; import net.themcbrothers.uselessmod.world.entity.monster.UselessSkeleton; public class UselessSkeletonRenderer extends AbstractSkeletonRenderer { - private static final ResourceLocation SKELETON_LOCATION = UselessMod.rl("textures/entity/useless_skeleton.png"); + private static final Identifier SKELETON_LOCATION = UselessMod.id("textures/entity/useless_skeleton.png"); public UselessSkeletonRenderer(EntityRendererProvider.Context context) { - super(context, ModelLayers.SKELETON, ModelLayers.SKELETON_INNER_ARMOR, ModelLayers.SKELETON_OUTER_ARMOR); + super(context, ModelLayers.SKELETON, ModelLayers.SKELETON_ARMOR); } @Override @@ -21,7 +21,7 @@ public SkeletonRenderState createRenderState() { } @Override - public ResourceLocation getTextureLocation(SkeletonRenderState renderState) { + public Identifier getTextureLocation(SkeletonRenderState renderState) { return SKELETON_LOCATION; } } diff --git a/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/layers/UselessElytraLayer.java b/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/layers/UselessElytraLayer.java deleted file mode 100644 index 0812d448..00000000 --- a/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/layers/UselessElytraLayer.java +++ /dev/null @@ -1,62 +0,0 @@ -package net.themcbrothers.uselessmod.client.renderer.entity.layers; - -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.model.ElytraModel; -import net.minecraft.client.model.EntityModel; -import net.minecraft.client.model.geom.EntityModelSet; -import net.minecraft.client.model.geom.ModelLayers; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.RenderLayerParent; -import net.minecraft.client.renderer.entity.layers.EquipmentLayerRenderer; -import net.minecraft.client.renderer.entity.layers.RenderLayer; -import net.minecraft.client.renderer.entity.state.HumanoidRenderState; -import net.minecraft.core.component.DataComponents; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.equipment.EquipmentModel; -import net.minecraft.world.item.equipment.Equippable; -import net.themcbrothers.uselessmod.UselessMod; -import net.themcbrothers.uselessmod.core.UselessItems; - -import javax.annotation.Nonnull; - -public class UselessElytraLayer> extends RenderLayer { - private static final ResourceLocation WINGS_USELESS_LOCATION = UselessMod.rl("textures/entity/elytra/useless.png"); - private static final ResourceLocation WINGS_SUPER_USELESS_LOCATION = UselessMod.rl("textures/entity/elytra/super_useless.png"); - - private final ElytraModel elytraModel; - private final ElytraModel elytraBabyModel; - private final EquipmentLayerRenderer equipmentRenderer; - - public UselessElytraLayer(RenderLayerParent renderLayerParent, EntityModelSet entityModelSet, EquipmentLayerRenderer equipmentRenderer) { - super(renderLayerParent); - - this.elytraModel = new ElytraModel(entityModelSet.bakeLayer(ModelLayers.ELYTRA)); - this.elytraBabyModel = new ElytraModel(entityModelSet.bakeLayer(ModelLayers.ELYTRA_BABY)); - this.equipmentRenderer = equipmentRenderer; - } - - @Nonnull - private static ResourceLocation getPlayerElytraTexture(@Nonnull ItemStack stack) { - // TODO: check if it is a player model - return stack.getItem() == UselessItems.USELESS_ELYTRA.get() ? WINGS_USELESS_LOCATION : WINGS_SUPER_USELESS_LOCATION; - } - - - @Override - public void render(PoseStack poseStack, MultiBufferSource buffer, int i, S renderState, float f, float v) { - ItemStack itemstack = renderState.chestItem; - Equippable equippable = itemstack.get(DataComponents.EQUIPPABLE); - // TODO: check if it is a USELESS elytra - if (equippable != null && equippable.model().isPresent()) { - ResourceLocation resourcelocation = getPlayerElytraTexture(itemstack); - ElytraModel elytramodel = renderState.isBaby ? this.elytraBabyModel : this.elytraModel; - ResourceLocation resourcelocation1 = equippable.model().get(); - poseStack.pushPose(); - poseStack.translate(0.0F, 0.0F, 0.125F); - elytramodel.setupAnim(renderState); - this.equipmentRenderer.renderLayers(EquipmentModel.LayerType.WINGS, resourcelocation1, elytramodel, itemstack, poseStack, buffer, i, resourcelocation); - poseStack.popPose(); - } - } -} diff --git a/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/layers/UselessSheepWoolLayer.java b/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/layers/UselessSheepWoolLayer.java index 2f9cd7dc..a8431ef8 100644 --- a/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/layers/UselessSheepWoolLayer.java +++ b/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/layers/UselessSheepWoolLayer.java @@ -3,21 +3,22 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.model.EntityModel; -import net.minecraft.client.model.SheepFurModel; -import net.minecraft.client.model.SheepModel; +import net.minecraft.client.model.animal.sheep.SheepFurModel; +import net.minecraft.client.model.animal.sheep.SheepModel; import net.minecraft.client.model.geom.EntityModelSet; import net.minecraft.client.model.geom.ModelLayers; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.entity.LivingEntityRenderer; import net.minecraft.client.renderer.entity.RenderLayerParent; import net.minecraft.client.renderer.entity.layers.RenderLayer; import net.minecraft.client.renderer.entity.state.SheepRenderState; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.client.renderer.rendertype.RenderTypes; +import net.minecraft.resources.Identifier; import net.minecraft.util.ARGB; public class UselessSheepWoolLayer extends RenderLayer { - private static final ResourceLocation SHEEP_FUR_LOCATION = ResourceLocation.withDefaultNamespace("textures/entity/sheep/sheep_fur.png"); + private static final Identifier SHEEP_WOOL_LOCATION = Identifier.withDefaultNamespace("textures/entity/sheep/sheep_wool.png"); private final EntityModel adultModel; private final EntityModel babyModel; @@ -28,18 +29,27 @@ public UselessSheepWoolLayer(RenderLayerParent she } @Override - public void render(PoseStack poseStack, MultiBufferSource bufferSource, int packedLight, SheepRenderState sheep, float yRot, float xRot) { + public void submit(PoseStack poseStack, SubmitNodeCollector nodeCollector, int packedLight, SheepRenderState sheep, float yRot, float xRot) { if (!sheep.isSheared) { EntityModel entitymodel = sheep.isBaby ? this.babyModel : this.adultModel; if (sheep.isInvisible) { - if (sheep.appearsGlowing) { - entitymodel.setupAnim(sheep); - VertexConsumer vertexconsumer = bufferSource.getBuffer(RenderType.outline(SHEEP_FUR_LOCATION)); - entitymodel.renderToBuffer(poseStack, vertexconsumer, packedLight, LivingEntityRenderer.getOverlayCoords(sheep, 0.0F), -16777216); + if (sheep.appearsGlowing()) { + nodeCollector.submitModel( + entitymodel, + sheep, + poseStack, + RenderTypes.outline(SHEEP_WOOL_LOCATION), + packedLight, + LivingEntityRenderer.getOverlayCoords(sheep, 0.0F), + -16777216, + null, + sheep.outlineColor, + null + ); } } else { int color = ARGB.color(0xFF, 70, 139, 68); - coloredCutoutModelCopyLayerRender(entitymodel, SHEEP_FUR_LOCATION, poseStack, bufferSource, packedLight, sheep, color); + coloredCutoutModelCopyLayerRender(entitymodel, SHEEP_WOOL_LOCATION, poseStack, nodeCollector, packedLight, sheep, color, 0); } } } diff --git a/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/layers/UselessWingsLayer.java b/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/layers/UselessWingsLayer.java new file mode 100644 index 00000000..9a724891 --- /dev/null +++ b/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/layers/UselessWingsLayer.java @@ -0,0 +1,67 @@ +package net.themcbrothers.uselessmod.client.renderer.entity.layers; + +import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.geom.EntityModelSet; +import net.minecraft.client.model.geom.ModelLayers; +import net.minecraft.client.model.object.equipment.ElytraModel; +import net.minecraft.client.renderer.SubmitNodeCollector; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.EquipmentLayerRenderer; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.client.renderer.entity.state.HumanoidRenderState; +import net.minecraft.client.resources.model.EquipmentClientInfo; +import net.minecraft.core.component.DataComponents; +import net.minecraft.resources.Identifier; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.equipment.Equippable; +import net.themcbrothers.uselessmod.UselessMod; +import net.themcbrothers.uselessmod.core.UselessItems; + +public class UselessWingsLayer> extends RenderLayer { + private static final Identifier WINGS_USELESS_LOCATION = UselessMod.id("textures/entity/elytra/useless.png"); + private static final Identifier WINGS_SUPER_USELESS_LOCATION = UselessMod.id("textures/entity/elytra/super_useless.png"); + + private final ElytraModel elytraModel; + private final ElytraModel elytraBabyModel; + private final EquipmentLayerRenderer equipmentRenderer; + + public UselessWingsLayer(RenderLayerParent renderLayerParent, EntityModelSet entityModelSet, EquipmentLayerRenderer equipmentRenderer) { + super(renderLayerParent); + + this.elytraModel = new ElytraModel(entityModelSet.bakeLayer(ModelLayers.ELYTRA)); + this.elytraBabyModel = new ElytraModel(entityModelSet.bakeLayer(ModelLayers.ELYTRA_BABY)); + this.equipmentRenderer = equipmentRenderer; + } + + @Override + public void submit(PoseStack poseStack, SubmitNodeCollector nodeCollector, int packedLight, S renderState, float yRot, float xRot) { + ItemStack itemstack = renderState.chestEquipment; + Equippable equippable = itemstack.get(DataComponents.EQUIPPABLE); + if (equippable != null && equippable.assetId().isPresent()) { + Identifier identifier = getPlayerElytraTexture(renderState); + ElytraModel elytramodel = renderState.isBaby ? this.elytraBabyModel : this.elytraModel; + poseStack.pushPose(); + poseStack.translate(0.0F, 0.0F, 0.125F); + this.equipmentRenderer + .renderLayers( + EquipmentClientInfo.LayerType.WINGS, + equippable.assetId().get(), + elytramodel, + renderState, + itemstack, + poseStack, + nodeCollector, + packedLight, + identifier, + renderState.outlineColor, + 0 + ); + poseStack.popPose(); + } + } + + private static Identifier getPlayerElytraTexture(HumanoidRenderState renderState) { + return renderState.chestEquipment.is(UselessItems.USELESS_ELYTRA) ? WINGS_USELESS_LOCATION : WINGS_SUPER_USELESS_LOCATION; + } +} diff --git a/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/layers/package-info.java b/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/layers/package-info.java index f43ec20d..8fc5f2c9 100644 --- a/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/layers/package-info.java +++ b/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/layers/package-info.java @@ -1,7 +1,2 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package net.themcbrothers.uselessmod.client.renderer.entity.layers; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file +@org.jspecify.annotations.NullMarked +package net.themcbrothers.uselessmod.client.renderer.entity.layers; \ No newline at end of file diff --git a/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/package-info.java b/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/package-info.java index 31e377fe..be4f8654 100644 --- a/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/package-info.java +++ b/src/main/java/net/themcbrothers/uselessmod/client/renderer/entity/package-info.java @@ -1,7 +1,2 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@org.jspecify.annotations.NullMarked package net.themcbrothers.uselessmod.client.renderer.entity; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/net/themcbrothers/uselessmod/client/renderer/package-info.java b/src/main/java/net/themcbrothers/uselessmod/client/renderer/package-info.java index 381af180..d0ea2569 100644 --- a/src/main/java/net/themcbrothers/uselessmod/client/renderer/package-info.java +++ b/src/main/java/net/themcbrothers/uselessmod/client/renderer/package-info.java @@ -1,7 +1,2 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package net.themcbrothers.uselessmod.client.renderer; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file +@org.jspecify.annotations.NullMarked +package net.themcbrothers.uselessmod.client.renderer; \ No newline at end of file diff --git a/src/main/java/net/themcbrothers/uselessmod/compat/VanillaCompatibility.java b/src/main/java/net/themcbrothers/uselessmod/compat/VanillaCompatibility.java index f41790dd..f1ef47d6 100644 --- a/src/main/java/net/themcbrothers/uselessmod/compat/VanillaCompatibility.java +++ b/src/main/java/net/themcbrothers/uselessmod/compat/VanillaCompatibility.java @@ -1,9 +1,7 @@ package net.themcbrothers.uselessmod.compat; -import com.google.common.collect.Maps; import net.minecraft.core.cauldron.CauldronInteraction; import net.minecraft.world.InteractionResult; -import net.minecraft.world.item.AxeItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; @@ -29,13 +27,9 @@ public static void register() { registerFlammable(UselessBlocks.USELESS_WOOL.get(), 30, 60); registerFlammable(UselessBlocks.PAINTED_WOOL.get(), 30, 60); - // Strippable logs - registerStrippable(UselessBlocks.USELESS_OAK_LOG.get(), UselessBlocks.STRIPPED_USELESS_OAK_LOG.get()); - registerStrippable(UselessBlocks.USELESS_OAK_WOOD.get(), UselessBlocks.STRIPPED_USELESS_OAK_WOOD.get()); - // Cauldron CauldronInteraction.WATER.map().put(UselessBlocks.PAINTED_WOOL.asItem(), (state, level, pos, player, hand, stack) -> { - if (!level.isClientSide) { + if (!level.isClientSide()) { ItemStack itemStack = new ItemStack(Blocks.WHITE_WOOL); if (!player.getAbilities().instabuild) { @@ -58,7 +52,7 @@ public static void register() { CauldronInteraction.WATER.map().put(UselessItems.PAINT_BRUSH.get(), (state, level, pos, player, hand, stack) -> { if (stack.has(UselessDataComponents.COLOR.get())) { - if (!level.isClientSide) { + if (!level.isClientSide()) { stack.remove(UselessDataComponents.COLOR.get()); LayeredCauldronBlock.lowerFillLevel(state, level, pos); } @@ -70,11 +64,6 @@ public static void register() { }); } - private static void registerStrippable(Block log, Block stripped_log) { - AxeItem.STRIPPABLES = Maps.newHashMap(AxeItem.STRIPPABLES); - AxeItem.STRIPPABLES.put(log, stripped_log); - } - private static void registerFlammable(Block blockIn, int encouragement, int flammability) { FireBlock fireblock = (FireBlock) Blocks.FIRE; fireblock.setFlammable(blockIn, encouragement, flammability); diff --git a/src/main/java/net/themcbrothers/uselessmod/compat/jei/CoffeeRecipeCategory.java b/src/main/java/net/themcbrothers/uselessmod/compat/jei/CoffeeRecipeCategory.java index 4f988192..7d3e8f76 100644 --- a/src/main/java/net/themcbrothers/uselessmod/compat/jei/CoffeeRecipeCategory.java +++ b/src/main/java/net/themcbrothers/uselessmod/compat/jei/CoffeeRecipeCategory.java @@ -12,12 +12,12 @@ import mezz.jei.api.neoforge.NeoForgeTypes; import mezz.jei.api.recipe.IFocusGroup; import mezz.jei.api.recipe.RecipeIngredientRole; -import mezz.jei.api.recipe.RecipeType; import mezz.jei.api.recipe.category.IRecipeCategory; +import mezz.jei.api.recipe.types.IRecipeType; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.core.Holder; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.RecipeHolder; import net.neoforged.neoforge.fluids.FluidStack; @@ -30,8 +30,8 @@ import net.themcbrothers.uselessmod.world.item.crafting.CoffeeRecipe; public class CoffeeRecipeCategory implements IRecipeCategory> { - private static final ResourceLocation TEXTURE = UselessMod.rl("textures/gui/container/coffee_machine.png"); - static final RecipeType> TYPE = RecipeType.createFromVanilla(UselessRecipeTypes.COFFEE.get()); + private static final Identifier TEXTURE = UselessMod.id("textures/gui/container/coffee_machine.png"); + static final IRecipeType> TYPE = IRecipeType.create(UselessRecipeTypes.COFFEE.get()); private final IDrawable background; private final IDrawable icon; @@ -39,7 +39,7 @@ public class CoffeeRecipeCategory implements IRecipeCategory cachedArrows; public CoffeeRecipeCategory(IGuiHelper helper) { - this.background = helper.createDrawable(TEXTURE, 11, 15, 104, 54); + this.background = helper.createDrawable(TEXTURE, 11, 15, 104, 54); // TODO: reduce magic numbers this.icon = helper.createDrawableIngredient(VanillaTypes.ITEM_STACK, new ItemStack(UselessBlocks.COFFEE_MACHINE.get())); this.localizedName = UselessMod.translate("container", "coffee_machine"); this.cachedArrows = CacheBuilder.newBuilder() @@ -74,12 +74,12 @@ public void setRecipe(IRecipeLayoutBuilder builder, RecipeHolder r SizedFluidIngredient waterIngredient = recipeValue.getWaterIngredient(); - builder.addSlot(RecipeIngredientRole.CATALYST, 1, 3) + builder.addSlot(RecipeIngredientRole.CRAFTING_STATION, 1, 3) .setFluidRenderer(waterIngredient.amount(), false, 8, 48) .addIngredients(NeoForgeTypes.FLUID_STACK, waterIngredient.ingredient().fluids().stream().map(Holder::value).map(fluid -> new FluidStack(fluid, FluidType.BUCKET_VOLUME)).toList()); recipeValue.getMilkIngredient().ifPresent(milkIngredient -> - builder.addSlot(RecipeIngredientRole.CATALYST, 19, 3) + builder.addSlot(RecipeIngredientRole.CRAFTING_STATION, 19, 3) .setFluidRenderer(milkIngredient.amount(), false, 8, 48) .addIngredients(NeoForgeTypes.FLUID_STACK, milkIngredient.ingredient().fluids().stream().map(Holder::value).map(fluid -> new FluidStack(fluid, FluidType.BUCKET_VOLUME)).toList())); } @@ -90,8 +90,13 @@ public Component getTitle() { } @Override - public IDrawable getBackground() { - return this.background; + public int getWidth() { + return 104; // TODO: reduce magic numbers + } + + @Override + public int getHeight() { + return 54; // TODO: reduce magic numbers } @Override @@ -100,7 +105,7 @@ public IDrawable getIcon() { } @Override - public RecipeType> getRecipeType() { + public IRecipeType> getRecipeType() { return TYPE; } } diff --git a/src/main/java/net/themcbrothers/uselessmod/compat/jei/UselessJEI.java b/src/main/java/net/themcbrothers/uselessmod/compat/jei/UselessJEI.java index 0337165b..6bcd770b 100644 --- a/src/main/java/net/themcbrothers/uselessmod/compat/jei/UselessJEI.java +++ b/src/main/java/net/themcbrothers/uselessmod/compat/jei/UselessJEI.java @@ -3,12 +3,11 @@ import mezz.jei.api.IModPlugin; import mezz.jei.api.JeiPlugin; import mezz.jei.api.constants.RecipeTypes; -import mezz.jei.api.ingredients.subtypes.IIngredientSubtypeInterpreter; +import mezz.jei.api.ingredients.subtypes.ISubtypeInterpreter; import mezz.jei.api.recipe.vanilla.IVanillaRecipeFactory; import mezz.jei.api.registration.*; -import net.minecraft.client.Minecraft; import net.minecraft.core.Holder; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Blocks; import net.themcbrothers.uselessmod.UselessMod; @@ -16,15 +15,13 @@ import net.themcbrothers.uselessmod.core.*; import net.themcbrothers.uselessmod.world.inventory.CoffeeMachineMenu; -import javax.annotation.Nonnull; import java.util.List; @JeiPlugin public class UselessJEI implements IModPlugin { - @Nonnull @Override - public ResourceLocation getPluginUid() { - return UselessMod.rl("jei_plugin"); + public Identifier getPluginUid() { + return UselessMod.id("jei_plugin"); } @Override @@ -32,7 +29,7 @@ public void registerItemSubtypes(ISubtypeRegistration registration) { registration.registerSubtypeInterpreter(UselessBlocks.WALL_CLOSET.asItem(), (ingredient, context) -> ingredient.getOrDefault(UselessDataComponents.WALL_CLOSET_MATERIAL, Holder.direct(Blocks.AIR)).getRegisteredName()); registration.registerSubtypeInterpreter(UselessBlocks.CUP_COFFEE.asItem(), (ingredient, context) -> ingredient.getOrDefault(UselessDataComponents.COFFEE_TYPE, UselessCoffeeTypes.BLACK.get()).getDescriptionId()); - IIngredientSubtypeInterpreter colorSubtypeInterpreter = (ingredient, context) -> ingredient.getOrDefault(UselessDataComponents.COLOR, -1).toString(); + ISubtypeInterpreter colorSubtypeInterpreter = (ingredient, context) -> ingredient.getOrDefault(UselessDataComponents.COLOR, -1).toString(); registration.registerSubtypeInterpreter(UselessBlocks.PAINTED_WOOL.asItem(), colorSubtypeInterpreter); registration.registerSubtypeInterpreter(UselessItems.PAINT_BRUSH.asItem(), colorSubtypeInterpreter); registration.registerSubtypeInterpreter(UselessItems.BUCKET_PAINT.asItem(), colorSubtypeInterpreter); @@ -58,7 +55,7 @@ public void registerRecipeTransferHandlers(IRecipeTransferRegistration registrat @Override public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) { - registration.addRecipeCatalyst(new ItemStack(UselessBlocks.COFFEE_MACHINE), CoffeeRecipeCategory.TYPE); + registration.addCraftingStation(CoffeeRecipeCategory.TYPE, new ItemStack(UselessBlocks.COFFEE_MACHINE)); } @Override diff --git a/src/main/java/net/themcbrothers/uselessmod/compat/jei/UselessRecipeMaker.java b/src/main/java/net/themcbrothers/uselessmod/compat/jei/UselessRecipeMaker.java index 73013fb5..1e47050b 100644 --- a/src/main/java/net/themcbrothers/uselessmod/compat/jei/UselessRecipeMaker.java +++ b/src/main/java/net/themcbrothers/uselessmod/compat/jei/UselessRecipeMaker.java @@ -2,6 +2,7 @@ import mezz.jei.api.recipe.vanilla.IJeiAnvilRecipe; import mezz.jei.api.recipe.vanilla.IVanillaRecipeFactory; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; @@ -45,7 +46,7 @@ private static Stream getRepairRecipes(RepairData repairData, I List repairables = repairData.getRepairables(); // TODO: JEI 1.21.2+ - List repairMaterials = repairIngredient.items().stream().map(ItemStack::new).toList(); + List repairMaterials = repairIngredient.getValues().stream().map(ItemStack::new).toList(); return repairables.stream() .mapMulti((itemStack, consumer) -> { @@ -54,13 +55,13 @@ private static Stream getRepairRecipes(RepairData repairData, I ItemStack damagedHalf = itemStack.copy(); damagedHalf.setDamageValue(damagedHalf.getMaxDamage() / 2); - IJeiAnvilRecipe repairWithSame = vanillaRecipeFactory.createAnvilRecipe(List.of(damagedThreeQuarters), List.of(damagedThreeQuarters), List.of(damagedHalf)); + IJeiAnvilRecipe repairWithSame = vanillaRecipeFactory.createAnvilRecipe(damagedThreeQuarters, List.of(damagedThreeQuarters), List.of(damagedHalf), Identifier.parse("lll")); // TODO consumer.accept(repairWithSame); if (!repairMaterials.isEmpty()) { ItemStack damagedFully = itemStack.copy(); damagedFully.setDamageValue(damagedFully.getMaxDamage()); - IJeiAnvilRecipe repairWithMaterial = vanillaRecipeFactory.createAnvilRecipe(List.of(damagedFully), repairMaterials, List.of(damagedThreeQuarters)); + IJeiAnvilRecipe repairWithMaterial = vanillaRecipeFactory.createAnvilRecipe(damagedFully, repairMaterials, List.of(damagedThreeQuarters), Identifier.parse("lll")); // TODO consumer.accept(repairWithMaterial); } }); diff --git a/src/main/java/net/themcbrothers/uselessmod/compat/jei/package-info.java b/src/main/java/net/themcbrothers/uselessmod/compat/jei/package-info.java index 0c9448f9..23aa5dea 100644 --- a/src/main/java/net/themcbrothers/uselessmod/compat/jei/package-info.java +++ b/src/main/java/net/themcbrothers/uselessmod/compat/jei/package-info.java @@ -1,7 +1,2 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@org.jspecify.annotations.NullMarked package net.themcbrothers.uselessmod.compat.jei; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/net/themcbrothers/uselessmod/core/Registration.java b/src/main/java/net/themcbrothers/uselessmod/core/Registration.java index 7be80190..1efe9fbe 100644 --- a/src/main/java/net/themcbrothers/uselessmod/core/Registration.java +++ b/src/main/java/net/themcbrothers/uselessmod/core/Registration.java @@ -2,7 +2,7 @@ import net.minecraft.core.component.DataComponentType; import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.RecipeType; @@ -27,7 +27,7 @@ public final class Registration { public static final DeferredRegister> RECIPE_TYPES = DeferredRegister.create(Registries.RECIPE_TYPE, UselessMod.MOD_ID); public static final DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister.create(Registries.RECIPE_SERIALIZER, UselessMod.MOD_ID); public static final DeferredRegister COFFEE_TYPES = DeferredRegister.create(UselessRegistries.COFFEE_KEY, UselessMod.MOD_ID); - public static final DeferredRegister CUSTOM_STATS = DeferredRegister.create(Registries.CUSTOM_STAT, UselessMod.MOD_ID); + public static final DeferredRegister CUSTOM_STATS = DeferredRegister.create(Registries.CUSTOM_STAT, UselessMod.MOD_ID); public static final DeferredRegister FLUID_TYPES = DeferredRegister.create(NeoForgeRegistries.Keys.FLUID_TYPES, UselessMod.MOD_ID); public static final DeferredRegister FLUIDS = DeferredRegister.create(Registries.FLUID, UselessMod.MOD_ID); public static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, UselessMod.MOD_ID); diff --git a/src/main/java/net/themcbrothers/uselessmod/core/UselessArmorMaterials.java b/src/main/java/net/themcbrothers/uselessmod/core/UselessArmorMaterials.java index f1d91764..a2c64f93 100644 --- a/src/main/java/net/themcbrothers/uselessmod/core/UselessArmorMaterials.java +++ b/src/main/java/net/themcbrothers/uselessmod/core/UselessArmorMaterials.java @@ -1,11 +1,11 @@ package net.themcbrothers.uselessmod.core; -import net.minecraft.Util; import net.minecraft.sounds.SoundEvents; import net.minecraft.tags.ItemTags; +import net.minecraft.util.Util; import net.minecraft.world.item.equipment.ArmorMaterial; import net.minecraft.world.item.equipment.ArmorType; -import net.minecraft.world.item.equipment.EquipmentModels; +import net.minecraft.world.item.equipment.EquipmentAssets; import java.util.EnumMap; @@ -19,7 +19,7 @@ static void register() { defense.put(ArmorType.CHESTPLATE, 7); defense.put(ArmorType.HELMET, 3); defense.put(ArmorType.BODY, 7); - }), 11, SoundEvents.ARMOR_EQUIP_IRON, 0.25F, 0.025F, ItemTags.REPAIRS_IRON_ARMOR, EquipmentModels.IRON); // TODO: useless model + }), 11, SoundEvents.ARMOR_EQUIP_IRON, 0.25F, 0.025F, ItemTags.REPAIRS_IRON_ARMOR, EquipmentAssets.IRON); // TODO: useless model ArmorMaterial SUPER_USELESS = new ArmorMaterial(22, Util.make(new EnumMap<>(ArmorType.class), defense -> { defense.put(ArmorType.BOOTS, 3); @@ -27,5 +27,5 @@ static void register() { defense.put(ArmorType.CHESTPLATE, 7); defense.put(ArmorType.HELMET, 3); defense.put(ArmorType.BODY, 8); - }), 11, SoundEvents.ARMOR_EQUIP_IRON, 0.25F, 0.025F, ItemTags.REPAIRS_IRON_ARMOR, EquipmentModels.IRON); // TODO: super-useless model + }), 11, SoundEvents.ARMOR_EQUIP_IRON, 0.25F, 0.025F, ItemTags.REPAIRS_IRON_ARMOR, EquipmentAssets.IRON); // TODO: super-useless model } diff --git a/src/main/java/net/themcbrothers/uselessmod/core/UselessBlocks.java b/src/main/java/net/themcbrothers/uselessmod/core/UselessBlocks.java index f3db9859..9e42125a 100644 --- a/src/main/java/net/themcbrothers/uselessmod/core/UselessBlocks.java +++ b/src/main/java/net/themcbrothers/uselessmod/core/UselessBlocks.java @@ -2,6 +2,8 @@ import net.minecraft.core.Holder; import net.minecraft.core.component.DataComponents; +import net.minecraft.core.particles.ColorParticleOption; +import net.minecraft.core.particles.ParticleTypes; import net.minecraft.util.valueproviders.ConstantInt; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.item.*; @@ -10,13 +12,11 @@ import net.minecraft.world.level.block.state.properties.BlockSetType; import net.minecraft.world.level.material.MapColor; import net.neoforged.neoforge.registries.DeferredBlock; -import net.themcbrothers.uselessmod.world.item.CupBlockItem; -import net.themcbrothers.uselessmod.world.item.LightSwitchBlockItem; +import net.themcbrothers.uselessmod.world.item.*; import net.themcbrothers.uselessmod.world.level.block.*; import net.themcbrothers.uselessmod.world.level.block.entity.CoffeeMachineBlockEntity; import net.themcbrothers.uselessmod.world.level.block.grower.UselessOakTreeGrower; -import static net.minecraft.world.level.block.state.BlockBehaviour.Properties.of; import static net.minecraft.world.level.block.state.BlockBehaviour.Properties.ofFullCopy; import static net.themcbrothers.uselessmod.core.Registration.BLOCKS; @@ -25,101 +25,101 @@ static void register() { } // Metal - public static final DeferredBlock USELESS_ORE = BLOCKS.registerBlock("useless_ore", props -> new DropExperienceBlock(ConstantInt.of(0), props), ofFullCopy(Blocks.IRON_ORE)); - public static final DeferredBlock DEEPSLATE_USELESS_ORE = BLOCKS.registerBlock("deepslate_useless_ore", props -> new DropExperienceBlock(ConstantInt.of(0), props), ofFullCopy(Blocks.DEEPSLATE_IRON_ORE)); - public static final DeferredBlock NETHER_USELESS_ORE = BLOCKS.registerBlock("nether_useless_ore", props -> new DropExperienceBlock(ConstantInt.of(0), props), ofFullCopy(Blocks.NETHER_QUARTZ_ORE)); - public static final DeferredBlock END_USELESS_ORE = BLOCKS.registerBlock("end_useless_ore", props -> new DropExperienceBlock(ConstantInt.of(0), props), ofFullCopy(Blocks.END_STONE)); - public static final DeferredBlock SUPER_USELESS_ORE = BLOCKS.registerBlock("super_useless_ore", props -> new DropExperienceBlock(ConstantInt.of(0), props), ofFullCopy(Blocks.GOLD_ORE)); - public static final DeferredBlock DEEPSLATE_SUPER_USELESS_ORE = BLOCKS.registerBlock("deepslate_super_useless_ore", props -> new DropExperienceBlock(ConstantInt.of(0), props), ofFullCopy(Blocks.DEEPSLATE_GOLD_ORE)); - public static final DeferredBlock NETHER_SUPER_USELESS_ORE = BLOCKS.registerBlock("nether_super_useless_ore", props -> new DropExperienceBlock(ConstantInt.of(0), props), ofFullCopy(Blocks.NETHER_QUARTZ_ORE)); - public static final DeferredBlock END_SUPER_USELESS_ORE = BLOCKS.registerBlock("end_super_useless_ore", props -> new DropExperienceBlock(ConstantInt.of(0), props), ofFullCopy(Blocks.END_STONE)); - public static final DeferredBlock USELESS_BLOCK = BLOCKS.registerSimpleBlock("useless_block", ofFullCopy(Blocks.IRON_BLOCK)); - public static final DeferredBlock RAW_USELESS_BLOCK = BLOCKS.registerSimpleBlock("raw_useless_block", ofFullCopy(Blocks.RAW_IRON_BLOCK)); - public static final DeferredBlock SUPER_USELESS_BLOCK = BLOCKS.registerSimpleBlock("super_useless_block", ofFullCopy(Blocks.GOLD_BLOCK)); - public static final DeferredBlock RAW_SUPER_USELESS_BLOCK = BLOCKS.registerSimpleBlock("raw_super_useless_block", ofFullCopy(Blocks.RAW_GOLD_BLOCK)); - public static final DeferredBlock USELESS_BARS = BLOCKS.registerBlock("useless_bars", IronBarsBlock::new, ofFullCopy(Blocks.IRON_BARS)); - public static final DeferredBlock SUPER_USELESS_BARS = BLOCKS.registerBlock("super_useless_bars", IronBarsBlock::new, ofFullCopy(Blocks.IRON_BARS)); - public static final DeferredBlock USELESS_DOOR = BLOCKS.registerBlock("useless_door", props -> new DoorBlock(BlockSetType.IRON, props), ofFullCopy(Blocks.IRON_DOOR), DoubleHighBlockItem::new); - public static final DeferredBlock SUPER_USELESS_DOOR = BLOCKS.registerBlock("super_useless_door", props -> new DoorBlock(BlockSetType.IRON, props), ofFullCopy(Blocks.IRON_DOOR), DoubleHighBlockItem::new); - public static final DeferredBlock USELESS_TRAPDOOR = BLOCKS.registerBlock("useless_trapdoor", props -> new TrapDoorBlock(BlockSetType.IRON, props), ofFullCopy(Blocks.IRON_TRAPDOOR)); - public static final DeferredBlock SUPER_USELESS_TRAPDOOR = BLOCKS.registerBlock("super_useless_trapdoor", props -> new TrapDoorBlock(BlockSetType.IRON, props), ofFullCopy(Blocks.IRON_TRAPDOOR)); + public static final DeferredBlock USELESS_ORE = BLOCKS.registerBlock("useless_ore", props -> new DropExperienceBlock(ConstantInt.of(0), props), () -> ofFullCopy(Blocks.IRON_ORE)); + public static final DeferredBlock DEEPSLATE_USELESS_ORE = BLOCKS.registerBlock("deepslate_useless_ore", props -> new DropExperienceBlock(ConstantInt.of(0), props), () -> ofFullCopy(Blocks.DEEPSLATE_IRON_ORE)); + public static final DeferredBlock NETHER_USELESS_ORE = BLOCKS.registerBlock("nether_useless_ore", props -> new DropExperienceBlock(ConstantInt.of(0), props), () -> ofFullCopy(Blocks.NETHER_QUARTZ_ORE)); + public static final DeferredBlock END_USELESS_ORE = BLOCKS.registerBlock("end_useless_ore", props -> new DropExperienceBlock(ConstantInt.of(0), props), () -> ofFullCopy(Blocks.END_STONE)); + public static final DeferredBlock SUPER_USELESS_ORE = BLOCKS.registerBlock("super_useless_ore", props -> new DropExperienceBlock(ConstantInt.of(0), props), () -> ofFullCopy(Blocks.GOLD_ORE)); + public static final DeferredBlock DEEPSLATE_SUPER_USELESS_ORE = BLOCKS.registerBlock("deepslate_super_useless_ore", props -> new DropExperienceBlock(ConstantInt.of(0), props), () -> ofFullCopy(Blocks.DEEPSLATE_GOLD_ORE)); + public static final DeferredBlock NETHER_SUPER_USELESS_ORE = BLOCKS.registerBlock("nether_super_useless_ore", props -> new DropExperienceBlock(ConstantInt.of(0), props), () -> ofFullCopy(Blocks.NETHER_QUARTZ_ORE)); + public static final DeferredBlock END_SUPER_USELESS_ORE = BLOCKS.registerBlock("end_super_useless_ore", props -> new DropExperienceBlock(ConstantInt.of(0), props), () -> ofFullCopy(Blocks.END_STONE)); + public static final DeferredBlock USELESS_BLOCK = BLOCKS.registerSimpleBlock("useless_block", () -> ofFullCopy(Blocks.IRON_BLOCK)); + public static final DeferredBlock RAW_USELESS_BLOCK = BLOCKS.registerSimpleBlock("raw_useless_block", () -> ofFullCopy(Blocks.RAW_IRON_BLOCK)); + public static final DeferredBlock SUPER_USELESS_BLOCK = BLOCKS.registerSimpleBlock("super_useless_block", () -> ofFullCopy(Blocks.GOLD_BLOCK)); + public static final DeferredBlock RAW_SUPER_USELESS_BLOCK = BLOCKS.registerSimpleBlock("raw_super_useless_block", () -> ofFullCopy(Blocks.RAW_GOLD_BLOCK)); + public static final DeferredBlock USELESS_BARS = BLOCKS.registerBlock("useless_bars", IronBarsBlock::new, () -> ofFullCopy(Blocks.IRON_BARS)); + public static final DeferredBlock SUPER_USELESS_BARS = BLOCKS.registerBlock("super_useless_bars", IronBarsBlock::new, () -> ofFullCopy(Blocks.IRON_BARS)); + public static final DeferredBlock USELESS_DOOR = BLOCKS.registerBlock("useless_door", props -> new DoorBlock(BlockSetType.IRON, props), () -> ofFullCopy(Blocks.IRON_DOOR), DoubleHighBlockItem::new); + public static final DeferredBlock SUPER_USELESS_DOOR = BLOCKS.registerBlock("super_useless_door", props -> new DoorBlock(BlockSetType.IRON, props), () -> ofFullCopy(Blocks.IRON_DOOR), DoubleHighBlockItem::new); + public static final DeferredBlock USELESS_TRAPDOOR = BLOCKS.registerBlock("useless_trapdoor", props -> new TrapDoorBlock(BlockSetType.IRON, props), () -> ofFullCopy(Blocks.IRON_TRAPDOOR)); + public static final DeferredBlock SUPER_USELESS_TRAPDOOR = BLOCKS.registerBlock("super_useless_trapdoor", props -> new TrapDoorBlock(BlockSetType.IRON, props), () -> ofFullCopy(Blocks.IRON_TRAPDOOR)); // Natural - public static final DeferredBlock RED_ROSE = BLOCKS.registerBlock("red_rose", props -> new FlowerBlock(MobEffects.NIGHT_VISION, 5, props), ofFullCopy(Blocks.POPPY)); - public static final DeferredBlock BLUE_ROSE = BLOCKS.registerBlock("blue_rose", props -> new FlowerBlock(MobEffects.SATURATION, 7, props), ofFullCopy(Blocks.POPPY)); - public static final DeferredBlock USELESS_ROSE = BLOCKS.registerBlock("useless_rose", props -> new FlowerBlock(MobEffects.LUCK, 2, props), ofFullCopy(Blocks.POPPY)); - public static final DeferredBlock USELESS_OAK_SAPLING = BLOCKS.registerBlock("useless_oak_sapling", props -> new SaplingBlock(UselessOakTreeGrower.USELESS_OAK_TREE_GROWER, props), ofFullCopy(Blocks.OAK_SAPLING)); - public static final DeferredBlock USELESS_OAK_LEAVES = BLOCKS.registerBlock("useless_oak_leaves", LeavesBlock::new, ofFullCopy(Blocks.OAK_LEAVES)); - public static final DeferredBlock USELESS_OAK_LOG = BLOCKS.registerBlock("useless_oak_log", RotatedPillarBlock::new, ofFullCopy(Blocks.OAK_LOG)); - public static final DeferredBlock USELESS_OAK_WOOD = BLOCKS.registerBlock("useless_oak_wood", RotatedPillarBlock::new, ofFullCopy(Blocks.OAK_WOOD)); - public static final DeferredBlock STRIPPED_USELESS_OAK_LOG = BLOCKS.registerBlock("stripped_useless_oak_log", RotatedPillarBlock::new, ofFullCopy(Blocks.STRIPPED_OAK_LOG)); - public static final DeferredBlock STRIPPED_USELESS_OAK_WOOD = BLOCKS.registerBlock("stripped_useless_oak_wood", RotatedPillarBlock::new, ofFullCopy(Blocks.STRIPPED_OAK_WOOD)); - public static final DeferredBlock USELESS_OAK_PLANKS = BLOCKS.registerSimpleBlock("useless_oak_planks", ofFullCopy(Blocks.OAK_PLANKS)); - public static final DeferredBlock USELESS_OAK_STAIRS = BLOCKS.registerBlock("useless_oak_stairs", props -> new StairBlock(USELESS_OAK_PLANKS.get().defaultBlockState(), props), ofFullCopy(Blocks.OAK_STAIRS)); - public static final DeferredBlock USELESS_OAK_SLAB = BLOCKS.registerBlock("useless_oak_slab", SlabBlock::new, ofFullCopy(Blocks.OAK_SLAB)); - public static final DeferredBlock USELESS_OAK_FENCE = BLOCKS.registerBlock("useless_oak_fence", FenceBlock::new, ofFullCopy(Blocks.OAK_FENCE)); - public static final DeferredBlock USELESS_OAK_FENCE_GATE = BLOCKS.registerBlock("useless_oak_fence_gate", props -> new FenceGateBlock(UselessWoodTypes.USELESS_OAK, props), ofFullCopy(Blocks.OAK_FENCE_GATE)); - public static final DeferredBlock USELESS_OAK_DOOR = BLOCKS.registerBlock("useless_oak_door", props -> new DoorBlock(BlockSetType.OAK, props), ofFullCopy(Blocks.OAK_DOOR), DoubleHighBlockItem::new); - public static final DeferredBlock USELESS_OAK_TRAPDOOR = BLOCKS.registerBlock("useless_oak_trapdoor", props -> new TrapDoorBlock(BlockSetType.OAK, props), ofFullCopy(Blocks.OAK_TRAPDOOR)); - public static final DeferredBlock USELESS_OAK_PRESSURE_PLATE = BLOCKS.registerBlock("useless_oak_pressure_plate", props -> new PressurePlateBlock(BlockSetType.OAK, props), ofFullCopy(Blocks.OAK_PRESSURE_PLATE)); - public static final DeferredBlock USELESS_OAK_BUTTON = BLOCKS.registerBlock("useless_oak_button", props -> new ButtonBlock(BlockSetType.OAK, 30, props), ofFullCopy(Blocks.OAK_BUTTON)); - public static final DeferredBlock USELESS_OAK_SIGN = BLOCKS.registerBlock("useless_oak_sign", props -> new UselessStandingSignBlock(UselessWoodTypes.USELESS_OAK, props), ofFullCopy(Blocks.OAK_SIGN), (block, props) -> new SignItem(block, UselessBlocks.USELESS_OAK_WALL_SIGN.get(), props.stacksTo(16))); + public static final DeferredBlock RED_ROSE = BLOCKS.registerBlock("red_rose", props -> new FlowerBlock(MobEffects.NIGHT_VISION, 5, props), () -> ofFullCopy(Blocks.POPPY)); + public static final DeferredBlock BLUE_ROSE = BLOCKS.registerBlock("blue_rose", props -> new FlowerBlock(MobEffects.SATURATION, 7, props), () -> ofFullCopy(Blocks.POPPY)); + public static final DeferredBlock USELESS_ROSE = BLOCKS.registerBlock("useless_rose", props -> new FlowerBlock(MobEffects.LUCK, 2, props), () -> ofFullCopy(Blocks.POPPY)); + public static final DeferredBlock USELESS_OAK_SAPLING = BLOCKS.registerBlock("useless_oak_sapling", props -> new SaplingBlock(UselessOakTreeGrower.USELESS_OAK_TREE_GROWER, props), () -> ofFullCopy(Blocks.OAK_SAPLING)); + public static final DeferredBlock USELESS_OAK_LEAVES = BLOCKS.registerBlock("useless_oak_leaves", properties -> new UntintedParticleLeavesBlock(0.2F, ColorParticleOption.create(ParticleTypes.TINTED_LEAVES, -9399763), properties), () -> ofFullCopy(Blocks.OAK_LEAVES)); + public static final DeferredBlock USELESS_OAK_LOG = BLOCKS.registerBlock("useless_oak_log", RotatedPillarBlock::new, () -> ofFullCopy(Blocks.OAK_LOG)); + public static final DeferredBlock USELESS_OAK_WOOD = BLOCKS.registerBlock("useless_oak_wood", RotatedPillarBlock::new, () -> ofFullCopy(Blocks.OAK_WOOD)); + public static final DeferredBlock STRIPPED_USELESS_OAK_LOG = BLOCKS.registerBlock("stripped_useless_oak_log", RotatedPillarBlock::new, () -> ofFullCopy(Blocks.STRIPPED_OAK_LOG)); + public static final DeferredBlock STRIPPED_USELESS_OAK_WOOD = BLOCKS.registerBlock("stripped_useless_oak_wood", RotatedPillarBlock::new, () -> ofFullCopy(Blocks.STRIPPED_OAK_WOOD)); + public static final DeferredBlock USELESS_OAK_PLANKS = BLOCKS.registerSimpleBlock("useless_oak_planks", () -> ofFullCopy(Blocks.OAK_PLANKS)); + public static final DeferredBlock USELESS_OAK_STAIRS = BLOCKS.registerBlock("useless_oak_stairs", props -> new StairBlock(USELESS_OAK_PLANKS.get().defaultBlockState(), props), () -> ofFullCopy(Blocks.OAK_STAIRS)); + public static final DeferredBlock USELESS_OAK_SLAB = BLOCKS.registerBlock("useless_oak_slab", SlabBlock::new, () -> ofFullCopy(Blocks.OAK_SLAB)); + public static final DeferredBlock USELESS_OAK_FENCE = BLOCKS.registerBlock("useless_oak_fence", FenceBlock::new, () -> ofFullCopy(Blocks.OAK_FENCE)); + public static final DeferredBlock USELESS_OAK_FENCE_GATE = BLOCKS.registerBlock("useless_oak_fence_gate", props -> new FenceGateBlock(UselessWoodTypes.USELESS_OAK, props), () -> ofFullCopy(Blocks.OAK_FENCE_GATE)); + public static final DeferredBlock USELESS_OAK_DOOR = BLOCKS.registerBlock("useless_oak_door", props -> new DoorBlock(BlockSetType.OAK, props), () -> ofFullCopy(Blocks.OAK_DOOR), DoubleHighBlockItem::new); + public static final DeferredBlock USELESS_OAK_TRAPDOOR = BLOCKS.registerBlock("useless_oak_trapdoor", props -> new TrapDoorBlock(BlockSetType.OAK, props), () -> ofFullCopy(Blocks.OAK_TRAPDOOR)); + public static final DeferredBlock USELESS_OAK_PRESSURE_PLATE = BLOCKS.registerBlock("useless_oak_pressure_plate", props -> new PressurePlateBlock(BlockSetType.OAK, props), () -> ofFullCopy(Blocks.OAK_PRESSURE_PLATE)); + public static final DeferredBlock USELESS_OAK_BUTTON = BLOCKS.registerBlock("useless_oak_button", props -> new ButtonBlock(BlockSetType.OAK, 30, props), () -> ofFullCopy(Blocks.OAK_BUTTON)); + public static final DeferredBlock USELESS_OAK_SIGN = BLOCKS.registerBlock("useless_oak_sign", props -> new UselessStandingSignBlock(UselessWoodTypes.USELESS_OAK, props), () -> ofFullCopy(Blocks.OAK_SIGN), (block, props) -> new SignItem(block, UselessBlocks.USELESS_OAK_WALL_SIGN.get(), props.stacksTo(16))); public static final DeferredBlock USELESS_OAK_WALL_SIGN = BLOCKS.registerNoItem("useless_oak_wall_sign", props -> new UselessWallSignBlock(UselessWoodTypes.USELESS_OAK, props.overrideLootTable(UselessBlocks.USELESS_OAK_SIGN.get().getLootTable()).overrideDescription(UselessBlocks.USELESS_OAK_SIGN.get().getDescriptionId())), ofFullCopy(Blocks.OAK_WALL_SIGN)); - public static final DeferredBlock USELESS_OAK_HANGING_SIGN = BLOCKS.registerBlock("useless_oak_hanging_sign", props -> new UselessCeilingHangingSignBlock(UselessWoodTypes.USELESS_OAK, props), ofFullCopy(Blocks.OAK_HANGING_SIGN), (block, props) -> new HangingSignItem(block, UselessBlocks.USELESS_OAK_WALL_HANGING_SIGN.get(), props.stacksTo(16))); - public static final DeferredBlock USELESS_OAK_WALL_HANGING_SIGN = BLOCKS.registerNoItem("useless_oak_wall_hanging_sign", props -> new UselessWallHangingSignBlock(UselessWoodTypes.USELESS_OAK, props.overrideLootTable(UselessBlocks.USELESS_OAK_HANGING_SIGN.get().getLootTable()).overrideDescription(UselessBlocks.USELESS_OAK_HANGING_SIGN.get().getDescriptionId())), ofFullCopy(Blocks.OAK_WALL_HANGING_SIGN)); + public static final DeferredBlock USELESS_OAK_HANGING_SIGN = BLOCKS.registerBlock("useless_oak_hanging_sign", props -> new UselessCeilingHangingSignBlock(UselessWoodTypes.USELESS_OAK, props), () -> ofFullCopy(Blocks.OAK_HANGING_SIGN), (block, props) -> new HangingSignItem(block, UselessBlocks.USELESS_OAK_WALL_HANGING_SIGN.get(), props.stacksTo(16))); + public static final DeferredBlock USELESS_OAK_WALL_HANGING_SIGN = BLOCKS.registerNoItem("useless_oak_wall_hanging_sign", props -> new UselessWallHangingSignBlock(UselessWoodTypes.USELESS_OAK, props.overrideLootTable(UselessBlocks.USELESS_OAK_HANGING_SIGN.get().getLootTable()).overrideDescription(UselessBlocks.USELESS_OAK_HANGING_SIGN.get().getDescriptionId())), () -> ofFullCopy(Blocks.OAK_WALL_HANGING_SIGN)); // Colorful Blocks - public static final DeferredBlock USELESS_WOOL = BLOCKS.registerSimpleBlock("useless_wool", ofFullCopy(Blocks.WHITE_WOOL)); - public static final DeferredBlock USELESS_CARPET = BLOCKS.registerBlock("useless_carpet", props -> new WoolCarpetBlock(DyeColor.LIME, props), ofFullCopy(Blocks.WHITE_CARPET)); - public static final DeferredBlock USELESS_BED = BLOCKS.registerBlock("useless_bed", props -> new UselessBedBlock(DyeColor.LIME, props), ofFullCopy(Blocks.WHITE_CARPET), (block, properties) -> new BedItem(block, properties.stacksTo(1))); - public static final DeferredBlock PAINTED_WOOL = BLOCKS.registerBlock("painted_wool", PaintedWoolBlock::new, ofFullCopy(Blocks.WHITE_WOOL)); - public static final DeferredBlock PAINT_BUCKET = BLOCKS.registerBlock("paint_bucket", PaintBucketBlock::new, of().strength(2.5F).sound(SoundType.LANTERN)); + public static final DeferredBlock USELESS_WOOL = BLOCKS.registerSimpleBlock("useless_wool", () -> ofFullCopy(Blocks.WHITE_WOOL)); + public static final DeferredBlock USELESS_CARPET = BLOCKS.registerBlock("useless_carpet", props -> new WoolCarpetBlock(DyeColor.LIME, props), () -> ofFullCopy(Blocks.WHITE_CARPET)); + public static final DeferredBlock USELESS_BED = BLOCKS.registerBlock("useless_bed", props -> new UselessBedBlock(DyeColor.LIME, props), () -> ofFullCopy(Blocks.WHITE_CARPET), BedItem::new, props -> props.stacksTo(1)); + public static final DeferredBlock PAINTED_WOOL = BLOCKS.registerBlock("painted_wool", PaintedWoolBlock::new, () -> ofFullCopy(Blocks.WHITE_WOOL), ColorBlockItem::new); + public static final DeferredBlock PAINT_BUCKET = BLOCKS.registerBlock("paint_bucket", PaintBucketBlock::new, props -> props.strength(2.5F).sound(SoundType.LANTERN)); // Rails - public static final DeferredBlock USELESS_RAIL = BLOCKS.registerBlock("useless_rail", UselessRailBlock::new, ofFullCopy(Blocks.RAIL)); - public static final DeferredBlock USELESS_POWERED_RAIL = BLOCKS.registerBlock("useless_powered_rail", props -> new UselessPoweredRailBlock(props, true), ofFullCopy(Blocks.POWERED_RAIL)); - public static final DeferredBlock USELESS_DETECTOR_RAIL = BLOCKS.registerBlock("useless_detector_rail", UselessDetectorRailBlock::new, ofFullCopy(Blocks.DETECTOR_RAIL)); - public static final DeferredBlock USELESS_ACTIVATOR_RAIL = BLOCKS.registerBlock("useless_activator_rail", UselessPoweredRailBlock::new, ofFullCopy(Blocks.ACTIVATOR_RAIL)); + public static final DeferredBlock USELESS_RAIL = BLOCKS.registerBlock("useless_rail", UselessRailBlock::new, () -> ofFullCopy(Blocks.RAIL)); + public static final DeferredBlock USELESS_POWERED_RAIL = BLOCKS.registerBlock("useless_powered_rail", props -> new UselessPoweredRailBlock(props, true), () -> ofFullCopy(Blocks.POWERED_RAIL)); + public static final DeferredBlock USELESS_DETECTOR_RAIL = BLOCKS.registerBlock("useless_detector_rail", UselessDetectorRailBlock::new, () -> ofFullCopy(Blocks.DETECTOR_RAIL)); + public static final DeferredBlock USELESS_ACTIVATOR_RAIL = BLOCKS.registerBlock("useless_activator_rail", UselessPoweredRailBlock::new, () -> ofFullCopy(Blocks.ACTIVATOR_RAIL)); // Functional Blocks - public static final DeferredBlock WALL_CLOSET = BLOCKS.registerBlock("wall_closet", WallClosetBlock::new, of().strength(.5F), - (block, props) -> new BlockItem(block, props.component(UselessDataComponents.WALL_CLOSET_MATERIAL.get(), Holder.direct(Blocks.AIR)))); - public static final DeferredBlock MACHINE_SUPPLIER = BLOCKS.registerBlock("machine_supplier", MachineSupplierBlock::new, of().strength(0.5F).dynamicShape().noOcclusion()); - public static final DeferredBlock COFFEE_MACHINE = BLOCKS.registerBlock("coffee_machine", CoffeeMachineBlock::new, of().mapColor(MapColor.METAL).requiresCorrectToolForDrops().strength(3.0F).sound(SoundType.METAL), + public static final DeferredBlock WALL_CLOSET = BLOCKS.registerBlock("wall_closet", WallClosetBlock::new, props -> props.strength(.5F), + (block, props) -> new WallClosetBlockItem(block, props.component(UselessDataComponents.WALL_CLOSET_MATERIAL.get(), Holder.direct(Blocks.AIR)))); + public static final DeferredBlock MACHINE_SUPPLIER = BLOCKS.registerBlock("machine_supplier", MachineSupplierBlock::new, props -> props.strength(0.5F).dynamicShape().noOcclusion(), MachineSupplierBlockItem::new); + public static final DeferredBlock COFFEE_MACHINE = BLOCKS.registerBlock("coffee_machine", CoffeeMachineBlock::new, props -> props.mapColor(MapColor.METAL).requiresCorrectToolForDrops().strength(3.0F).sound(SoundType.METAL), (block, props) -> new BlockItem(block, props.component(DataComponents.CONTAINER, ItemContainerContents.EMPTY).component(UselessDataComponents.COFFEE_MACHINE_CONTENTS.get(), CoffeeMachineBlockEntity.Contents.EMPTY))); - public static final DeferredBlock CUP = BLOCKS.registerBlock("cup", CupBlock::new, of().strength(0.5F), (block, props) -> new CupBlockItem(block, props, false)); - public static final DeferredBlock CUP_COFFEE = BLOCKS.registerBlock("cup_coffee", CupCoffeeBlock::new, of().strength(0.5F), (block, props) -> new CupBlockItem(block, props.usingConvertsTo(CUP.asItem()), true)); + public static final DeferredBlock CUP = BLOCKS.registerBlock("cup", CupBlock::new, props -> props.strength(0.5F), (block, props) -> new CupBlockItem(block, props, false)); + public static final DeferredBlock CUP_COFFEE = BLOCKS.registerBlock("cup_coffee", CupCoffeeBlock::new, props -> props.strength(0.5F), (block, props) -> new CupBlockItem(block, props.usingConvertsTo(CUP.asItem()), true)); // Lights - public static final DeferredBlock LIGHT_SWITCH = BLOCKS.registerBlock("light_switch", LightSwitchBlock::new, of().noCollission().strength(.25F), LightSwitchBlockItem::new); - public static final DeferredBlock LIGHT_SWITCH_BLOCK = BLOCKS.registerBlock("light_switch_block", LightSwitchBlockBlock::new, of().strength(.5F), LightSwitchBlockItem::new); - public static final DeferredBlock WHITE_LAMP = BLOCKS.registerBlock("white_lamp", RedstoneLampBlock::new, ofFullCopy(Blocks.REDSTONE_LAMP)); - public static final DeferredBlock ORANGE_LAMP = BLOCKS.registerBlock("orange_lamp", RedstoneLampBlock::new, ofFullCopy(Blocks.REDSTONE_LAMP)); - public static final DeferredBlock MAGENTA_LAMP = BLOCKS.registerBlock("magenta_lamp", RedstoneLampBlock::new, ofFullCopy(Blocks.REDSTONE_LAMP)); - public static final DeferredBlock LIGHT_BLUE_LAMP = BLOCKS.registerBlock("light_blue_lamp", RedstoneLampBlock::new, ofFullCopy(Blocks.REDSTONE_LAMP)); - public static final DeferredBlock YELLOW_LAMP = BLOCKS.registerBlock("yellow_lamp", RedstoneLampBlock::new, ofFullCopy(Blocks.REDSTONE_LAMP)); - public static final DeferredBlock LIME_LAMP = BLOCKS.registerBlock("lime_lamp", RedstoneLampBlock::new, ofFullCopy(Blocks.REDSTONE_LAMP)); - public static final DeferredBlock PINK_LAMP = BLOCKS.registerBlock("pink_lamp", RedstoneLampBlock::new, ofFullCopy(Blocks.REDSTONE_LAMP)); - public static final DeferredBlock GRAY_LAMP = BLOCKS.registerBlock("gray_lamp", RedstoneLampBlock::new, ofFullCopy(Blocks.REDSTONE_LAMP)); - public static final DeferredBlock LIGHT_GRAY_LAMP = BLOCKS.registerBlock("light_gray_lamp", RedstoneLampBlock::new, ofFullCopy(Blocks.REDSTONE_LAMP)); - public static final DeferredBlock CYAN_LAMP = BLOCKS.registerBlock("cyan_lamp", RedstoneLampBlock::new, ofFullCopy(Blocks.REDSTONE_LAMP)); - public static final DeferredBlock PURPLE_LAMP = BLOCKS.registerBlock("purple_lamp", RedstoneLampBlock::new, ofFullCopy(Blocks.REDSTONE_LAMP)); - public static final DeferredBlock BLUE_LAMP = BLOCKS.registerBlock("blue_lamp", RedstoneLampBlock::new, ofFullCopy(Blocks.REDSTONE_LAMP)); - public static final DeferredBlock BROWN_LAMP = BLOCKS.registerBlock("brown_lamp", RedstoneLampBlock::new, ofFullCopy(Blocks.REDSTONE_LAMP)); - public static final DeferredBlock GREEN_LAMP = BLOCKS.registerBlock("green_lamp", RedstoneLampBlock::new, ofFullCopy(Blocks.REDSTONE_LAMP)); - public static final DeferredBlock RED_LAMP = BLOCKS.registerBlock("red_lamp", RedstoneLampBlock::new, ofFullCopy(Blocks.REDSTONE_LAMP)); - public static final DeferredBlock BLACK_LAMP = BLOCKS.registerBlock("black_lamp", RedstoneLampBlock::new, ofFullCopy(Blocks.REDSTONE_LAMP)); + public static final DeferredBlock LIGHT_SWITCH = BLOCKS.registerBlock("light_switch", LightSwitchBlock::new, props -> props.noCollision().strength(.25F), LightSwitchBlockItem::new); + public static final DeferredBlock LIGHT_SWITCH_BLOCK = BLOCKS.registerBlock("light_switch_block", LightSwitchBlockBlock::new, props -> props.strength(.5F), LightSwitchBlockItem::new); + public static final DeferredBlock WHITE_LAMP = BLOCKS.registerBlock("white_lamp", RedstoneLampBlock::new, () -> ofFullCopy(Blocks.REDSTONE_LAMP)); + public static final DeferredBlock ORANGE_LAMP = BLOCKS.registerBlock("orange_lamp", RedstoneLampBlock::new, () -> ofFullCopy(Blocks.REDSTONE_LAMP)); + public static final DeferredBlock MAGENTA_LAMP = BLOCKS.registerBlock("magenta_lamp", RedstoneLampBlock::new, () -> ofFullCopy(Blocks.REDSTONE_LAMP)); + public static final DeferredBlock LIGHT_BLUE_LAMP = BLOCKS.registerBlock("light_blue_lamp", RedstoneLampBlock::new, () -> ofFullCopy(Blocks.REDSTONE_LAMP)); + public static final DeferredBlock YELLOW_LAMP = BLOCKS.registerBlock("yellow_lamp", RedstoneLampBlock::new, () -> ofFullCopy(Blocks.REDSTONE_LAMP)); + public static final DeferredBlock LIME_LAMP = BLOCKS.registerBlock("lime_lamp", RedstoneLampBlock::new, () -> ofFullCopy(Blocks.REDSTONE_LAMP)); + public static final DeferredBlock PINK_LAMP = BLOCKS.registerBlock("pink_lamp", RedstoneLampBlock::new, () -> ofFullCopy(Blocks.REDSTONE_LAMP)); + public static final DeferredBlock GRAY_LAMP = BLOCKS.registerBlock("gray_lamp", RedstoneLampBlock::new, () -> ofFullCopy(Blocks.REDSTONE_LAMP)); + public static final DeferredBlock LIGHT_GRAY_LAMP = BLOCKS.registerBlock("light_gray_lamp", RedstoneLampBlock::new, () -> ofFullCopy(Blocks.REDSTONE_LAMP)); + public static final DeferredBlock CYAN_LAMP = BLOCKS.registerBlock("cyan_lamp", RedstoneLampBlock::new, () -> ofFullCopy(Blocks.REDSTONE_LAMP)); + public static final DeferredBlock PURPLE_LAMP = BLOCKS.registerBlock("purple_lamp", RedstoneLampBlock::new, () -> ofFullCopy(Blocks.REDSTONE_LAMP)); + public static final DeferredBlock BLUE_LAMP = BLOCKS.registerBlock("blue_lamp", RedstoneLampBlock::new, () -> ofFullCopy(Blocks.REDSTONE_LAMP)); + public static final DeferredBlock BROWN_LAMP = BLOCKS.registerBlock("brown_lamp", RedstoneLampBlock::new, () -> ofFullCopy(Blocks.REDSTONE_LAMP)); + public static final DeferredBlock GREEN_LAMP = BLOCKS.registerBlock("green_lamp", RedstoneLampBlock::new, () -> ofFullCopy(Blocks.REDSTONE_LAMP)); + public static final DeferredBlock RED_LAMP = BLOCKS.registerBlock("red_lamp", RedstoneLampBlock::new, () -> ofFullCopy(Blocks.REDSTONE_LAMP)); + public static final DeferredBlock BLACK_LAMP = BLOCKS.registerBlock("black_lamp", RedstoneLampBlock::new, () -> ofFullCopy(Blocks.REDSTONE_LAMP)); // Blocks without Item - public static final DeferredBlock POTTED_RED_ROSE = BLOCKS.registerNoItem("potted_red_rose", props -> new FlowerPotBlock(() -> (FlowerPotBlock) Blocks.FLOWER_POT, RED_ROSE, props), ofFullCopy(Blocks.POTTED_POPPY)); - public static final DeferredBlock POTTED_BLUE_ROSE = BLOCKS.registerNoItem("potted_blue_rose", props -> new FlowerPotBlock(() -> (FlowerPotBlock) Blocks.FLOWER_POT, BLUE_ROSE, props), ofFullCopy(Blocks.POTTED_POPPY)); - public static final DeferredBlock POTTED_USELESS_ROSE = BLOCKS.registerNoItem("potted_useless_rose", props -> new FlowerPotBlock(() -> (FlowerPotBlock) Blocks.FLOWER_POT, USELESS_ROSE, props), ofFullCopy(Blocks.POTTED_POPPY)); - public static final DeferredBlock POTTED_USELESS_OAK_SAPLING = BLOCKS.registerNoItem("potted_useless_oak_sapling", props -> new FlowerPotBlock(() -> (FlowerPotBlock) Blocks.FLOWER_POT, USELESS_OAK_SAPLING, props), ofFullCopy(Blocks.POTTED_OAK_SAPLING)); - public static final DeferredBlock USELESS_WHEAT = BLOCKS.registerNoItem("useless_wheat", props -> new UselessCropBlock(false, UselessItems.USELESS_WHEAT_SEEDS, props), ofFullCopy(Blocks.WHEAT)); - public static final DeferredBlock WILD_USELESS_WHEAT = BLOCKS.registerNoItem("wild_useless_wheat", props -> new UselessCropBlock(true, UselessItems.USELESS_WHEAT_SEEDS, props), ofFullCopy(Blocks.WHEAT)); - public static final DeferredBlock COFFEE_BEANS = BLOCKS.registerNoItem("coffee_beans", props -> new UselessCropBlock(false, UselessItems.COFFEE_SEEDS, props), ofFullCopy(Blocks.WHEAT)); - public static final DeferredBlock WILD_COFFEE_BEANS = BLOCKS.registerNoItem("wild_coffee_beans", props -> new UselessCropBlock(true, UselessItems.COFFEE_SEEDS, props), ofFullCopy(Blocks.WHEAT)); - public static final DeferredBlock USELESS_SKELETON_SKULL = BLOCKS.registerNoItem("useless_skeleton_skull", props -> new UselessSkullBlock(UselessSkullBlock.Types.USELESS_SKELETON, props), ofFullCopy(Blocks.SKELETON_SKULL)); - public static final DeferredBlock USELESS_SKELETON_WALL_SKULL = BLOCKS.registerNoItem("useless_skeleton_wall_skull", props -> new UselessWallSkullBlock(UselessSkullBlock.Types.USELESS_SKELETON, props.overrideLootTable(USELESS_SKELETON_SKULL.get().getLootTable())), ofFullCopy(Blocks.SKELETON_WALL_SKULL)); - public static final DeferredBlock LANTERN = BLOCKS.registerNoItem("lantern", UselessLanternBlock::new, ofFullCopy(Blocks.LANTERN).lightLevel(state -> 0)); + public static final DeferredBlock POTTED_RED_ROSE = BLOCKS.registerNoItem("potted_red_rose", props -> new FlowerPotBlock(() -> (FlowerPotBlock) Blocks.FLOWER_POT, RED_ROSE, props), () -> ofFullCopy(Blocks.POTTED_POPPY)); + public static final DeferredBlock POTTED_BLUE_ROSE = BLOCKS.registerNoItem("potted_blue_rose", props -> new FlowerPotBlock(() -> (FlowerPotBlock) Blocks.FLOWER_POT, BLUE_ROSE, props), () -> ofFullCopy(Blocks.POTTED_POPPY)); + public static final DeferredBlock POTTED_USELESS_ROSE = BLOCKS.registerNoItem("potted_useless_rose", props -> new FlowerPotBlock(() -> (FlowerPotBlock) Blocks.FLOWER_POT, USELESS_ROSE, props), () -> ofFullCopy(Blocks.POTTED_POPPY)); + public static final DeferredBlock POTTED_USELESS_OAK_SAPLING = BLOCKS.registerNoItem("potted_useless_oak_sapling", props -> new FlowerPotBlock(() -> (FlowerPotBlock) Blocks.FLOWER_POT, USELESS_OAK_SAPLING, props), () -> ofFullCopy(Blocks.POTTED_OAK_SAPLING)); + public static final DeferredBlock USELESS_WHEAT = BLOCKS.registerNoItem("useless_wheat", props -> new UselessCropBlock(false, UselessItems.USELESS_WHEAT_SEEDS, props), () -> ofFullCopy(Blocks.WHEAT)); + public static final DeferredBlock WILD_USELESS_WHEAT = BLOCKS.registerNoItem("wild_useless_wheat", props -> new UselessCropBlock(true, UselessItems.USELESS_WHEAT_SEEDS, props), () -> ofFullCopy(Blocks.WHEAT)); + public static final DeferredBlock COFFEE_BEANS = BLOCKS.registerNoItem("coffee_beans", props -> new UselessCropBlock(false, UselessItems.COFFEE_SEEDS, props), () -> ofFullCopy(Blocks.WHEAT)); + public static final DeferredBlock WILD_COFFEE_BEANS = BLOCKS.registerNoItem("wild_coffee_beans", props -> new UselessCropBlock(true, UselessItems.COFFEE_SEEDS, props), () -> ofFullCopy(Blocks.WHEAT)); + public static final DeferredBlock USELESS_SKELETON_SKULL = BLOCKS.registerNoItem("useless_skeleton_skull", props -> new UselessSkullBlock(UselessSkullBlock.Types.USELESS_SKELETON, props), () -> ofFullCopy(Blocks.SKELETON_SKULL)); + public static final DeferredBlock USELESS_SKELETON_WALL_SKULL = BLOCKS.registerNoItem("useless_skeleton_wall_skull", props -> new UselessWallSkullBlock(UselessSkullBlock.Types.USELESS_SKELETON, props.overrideLootTable(USELESS_SKELETON_SKULL.get().getLootTable())), () -> ofFullCopy(Blocks.SKELETON_WALL_SKULL)); + public static final DeferredBlock LANTERN = BLOCKS.registerNoItem("lantern", UselessLanternBlock::new, () -> ofFullCopy(Blocks.LANTERN).lightLevel(state -> 0)); } diff --git a/src/main/java/net/themcbrothers/uselessmod/core/UselessCreativeModeTabs.java b/src/main/java/net/themcbrothers/uselessmod/core/UselessCreativeModeTabs.java index 0d965a4d..7e7f744a 100644 --- a/src/main/java/net/themcbrothers/uselessmod/core/UselessCreativeModeTabs.java +++ b/src/main/java/net/themcbrothers/uselessmod/core/UselessCreativeModeTabs.java @@ -23,7 +23,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -@EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD, modid = UselessMod.MOD_ID) +@EventBusSubscriber(modid = UselessMod.MOD_ID) public final class UselessCreativeModeTabs { static void register() { } diff --git a/src/main/java/net/themcbrothers/uselessmod/core/UselessDataComponents.java b/src/main/java/net/themcbrothers/uselessmod/core/UselessDataComponents.java index ab140213..c227185f 100644 --- a/src/main/java/net/themcbrothers/uselessmod/core/UselessDataComponents.java +++ b/src/main/java/net/themcbrothers/uselessmod/core/UselessDataComponents.java @@ -48,10 +48,4 @@ static void register() { () -> DataComponentType.>builder() .persistent(BuiltInRegistries.BLOCK.holderByNameCodec()) .build()); - - public static final DeferredHolder, DataComponentType> FLUID_CONTENTS = Registration.DATA_COMPONENT_TYPES.register("fluid_contents", - () -> DataComponentType.builder() - .persistent(SimpleFluidContent.CODEC) - .networkSynchronized(SimpleFluidContent.STREAM_CODEC) - .build()); } diff --git a/src/main/java/net/themcbrothers/uselessmod/core/UselessEntityTypes.java b/src/main/java/net/themcbrothers/uselessmod/core/UselessEntityTypes.java index 7c0b19b6..1e6af81a 100644 --- a/src/main/java/net/themcbrothers/uselessmod/core/UselessEntityTypes.java +++ b/src/main/java/net/themcbrothers/uselessmod/core/UselessEntityTypes.java @@ -17,15 +17,15 @@ static void register() { // CREATURES public static final DeferredHolder, EntityType> USELESS_SHEEP = ENTITY_TYPES.registerWithEgg("useless_sheep", () -> - EntityType.Builder.of(UselessSheep::new, MobCategory.CREATURE).sized(0.9F, 1.3F).clientTrackingRange(10), 0x5EAF5B, 0xABD5A9); + EntityType.Builder.of(UselessSheep::new, MobCategory.CREATURE).sized(0.9F, 1.3F).clientTrackingRange(10)); public static final DeferredHolder, EntityType> USELESS_PIG = ENTITY_TYPES.registerWithEgg("useless_pig", () -> - EntityType.Builder.of(UselessPig::new, MobCategory.CREATURE).sized(0.9F, 0.9F).clientTrackingRange(10), 0x5DAF5A, 0x41823F); + EntityType.Builder.of(UselessPig::new, MobCategory.CREATURE).sized(0.9F, 0.9F).clientTrackingRange(10)); public static final DeferredHolder, EntityType> USELESS_CHICKEN = ENTITY_TYPES.registerWithEgg("useless_chicken", () -> - EntityType.Builder.of(UselessChicken::new, MobCategory.CREATURE).sized(0.4F, 0.7F).clientTrackingRange(10), 0xBFDFBE, 0x82C180); + EntityType.Builder.of(UselessChicken::new, MobCategory.CREATURE).sized(0.4F, 0.7F).clientTrackingRange(10)); public static final DeferredHolder, EntityType> USELESS_COW = ENTITY_TYPES.registerWithEgg("useless_cow", () -> - EntityType.Builder.of(UselessCow::new, MobCategory.CREATURE).sized(0.9F, 1.4F).clientTrackingRange(10), 0x183017, 0x478D44); + EntityType.Builder.of(UselessCow::new, MobCategory.CREATURE).sized(0.9F, 1.4F).clientTrackingRange(10)); // MONSTERS public static final DeferredHolder, EntityType> USELESS_SKELETON = ENTITY_TYPES.registerWithEgg("useless_skeleton", () -> - EntityType.Builder.of(UselessSkeleton::new, MobCategory.MONSTER).sized(0.6F, 1.99F).clientTrackingRange(8), 0x66B363, 0x285027); + EntityType.Builder.of(UselessSkeleton::new, MobCategory.MONSTER).sized(0.6F, 1.99F).clientTrackingRange(8)); } diff --git a/src/main/java/net/themcbrothers/uselessmod/core/UselessItems.java b/src/main/java/net/themcbrothers/uselessmod/core/UselessItems.java index 8e1534d9..9fe9a422 100644 --- a/src/main/java/net/themcbrothers/uselessmod/core/UselessItems.java +++ b/src/main/java/net/themcbrothers/uselessmod/core/UselessItems.java @@ -8,15 +8,15 @@ import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.item.*; import net.minecraft.world.item.equipment.ArmorType; -import net.minecraft.world.item.equipment.EquipmentModels; +import net.minecraft.world.item.equipment.EquipmentAssets; import net.minecraft.world.item.equipment.Equippable; import net.neoforged.neoforge.registries.DeferredItem; -import net.themcbrothers.uselessmod.UselessTags; import net.themcbrothers.uselessmod.world.item.BucketWithPaintItem; import net.themcbrothers.uselessmod.world.item.PaintBrushItem; import static net.themcbrothers.uselessmod.core.Registration.ITEMS; +// TODO: add new content public final class UselessItems { static void register() { } @@ -32,31 +32,31 @@ static void register() { public static final DeferredItem SUPER_USELESS_NUGGET = ITEMS.registerSimpleItem("super_useless_nugget"); // Weapons and Tools - public static final DeferredItem USELESS_SHEARS = ITEMS.registerItem("useless_shears", ShearsItem::new, new Item.Properties().durability(320)); - public static final DeferredItem USELESS_SHIELD = ITEMS.registerItem("useless_shield", props -> new ShieldItem(props.durability(420).repairable(ItemTags.REPAIRS_IRON_ARMOR).equippableUnswappable(EquipmentSlot.OFFHAND))); // TODO: repairable - public static final DeferredItem USELESS_SWORD = ITEMS.registerItem("useless_sword", props -> new SwordItem(UselessToolMaterials.USELESS, 3, -2.4F, props)); + public static final DeferredItem USELESS_SHEARS = ITEMS.registerItem("useless_shears", ShearsItem::new, props -> props.durability(320)); + public static final DeferredItem USELESS_SHIELD = ITEMS.registerItem("useless_shield", ShieldItem::new, props -> props.durability(420).repairable(ItemTags.REPAIRS_IRON_ARMOR).equippableUnswappable(EquipmentSlot.OFFHAND)); // TODO: repairable + public static final DeferredItem USELESS_SWORD = ITEMS.registerSimpleItem("useless_sword", props -> props.sword(UselessToolMaterials.USELESS, 3, -2.4F)); public static final DeferredItem USELESS_SHOVEL = ITEMS.registerItem("useless_shovel", props -> new ShovelItem(UselessToolMaterials.USELESS, 1.5F, -3.0F, props)); - public static final DeferredItem USELESS_PICKAXE = ITEMS.registerItem("useless_pickaxe", props -> new PickaxeItem(UselessToolMaterials.USELESS, 1, -2.8F, props)); + public static final DeferredItem USELESS_PICKAXE = ITEMS.registerSimpleItem("useless_pickaxe", props -> props.pickaxe(UselessToolMaterials.USELESS, 1, -2.8F)); public static final DeferredItem USELESS_AXE = ITEMS.registerItem("useless_axe", props -> new AxeItem(UselessToolMaterials.USELESS, 6.0F, -3.1F, props)); public static final DeferredItem USELESS_HOE = ITEMS.registerItem("useless_hoe", props -> new HoeItem(UselessToolMaterials.USELESS, -2, -1.0F, props)); public static final DeferredItem SUPER_USELESS_SHIELD = ITEMS.registerItem("super_useless_shield", props -> new ShieldItem(props.durability(640).repairable(ItemTags.REPAIRS_IRON_ARMOR).equippableUnswappable(EquipmentSlot.OFFHAND))); // TODO: repairable - public static final DeferredItem SUPER_USELESS_SWORD = ITEMS.registerItem("super_useless_sword", props -> new SwordItem(UselessToolMaterials.SUPER_USELESS, 3, -2.4F, props)); + public static final DeferredItem SUPER_USELESS_SWORD = ITEMS.registerSimpleItem("super_useless_sword", props -> props.sword(UselessToolMaterials.SUPER_USELESS, 3, -2.4F)); public static final DeferredItem SUPER_USELESS_SHOVEL = ITEMS.registerItem("super_useless_shovel", props -> new ShovelItem(UselessToolMaterials.SUPER_USELESS, 1.5F, -3.0F, props)); - public static final DeferredItem SUPER_USELESS_PICKAXE = ITEMS.registerItem("super_useless_pickaxe", props -> new PickaxeItem(UselessToolMaterials.SUPER_USELESS, 1, -2.8F, props)); + public static final DeferredItem SUPER_USELESS_PICKAXE = ITEMS.registerSimpleItem("super_useless_pickaxe", props -> props.pickaxe(UselessToolMaterials.SUPER_USELESS, 1, -2.8F)); public static final DeferredItem SUPER_USELESS_AXE = ITEMS.registerItem("super_useless_axe", props -> new AxeItem(UselessToolMaterials.SUPER_USELESS, 6.0F, -3.1F, props)); public static final DeferredItem SUPER_USELESS_HOE = ITEMS.registerItem("super_useless_hoe", props -> new HoeItem(UselessToolMaterials.SUPER_USELESS, -2, -1.0F, props)); // Armor - public static final DeferredItem USELESS_ELYTRA = ITEMS.registerSimpleItem("useless_elytra", new Item.Properties().durability(540).rarity(Rarity.EPIC).component(DataComponents.GLIDER, Unit.INSTANCE).component(DataComponents.EQUIPPABLE, Equippable.builder(EquipmentSlot.CHEST).setEquipSound(SoundEvents.ARMOR_EQUIP_ELYTRA).setModel(EquipmentModels.ELYTRA).setDamageOnHurt(false).build()).repairable(Items.PHANTOM_MEMBRANE)); - public static final DeferredItem USELESS_HELMET = ITEMS.registerItem("useless_helmet", props -> new ArmorItem(UselessArmorMaterials.USELESS, ArmorType.HELMET, props)); - public static final DeferredItem USELESS_CHESTPLATE = ITEMS.registerItem("useless_chestplate", props -> new ArmorItem(UselessArmorMaterials.USELESS, ArmorType.CHESTPLATE, props)); - public static final DeferredItem USELESS_LEGGINGS = ITEMS.registerItem("useless_leggings", props -> new ArmorItem(UselessArmorMaterials.USELESS, ArmorType.LEGGINGS, props)); - public static final DeferredItem USELESS_BOOTS = ITEMS.registerItem("useless_boots", props -> new ArmorItem(UselessArmorMaterials.USELESS, ArmorType.BOOTS, props)); - public static final DeferredItem SUPER_USELESS_ELYTRA = ITEMS.registerSimpleItem("super_useless_elytra", new Item.Properties().durability(864).rarity(Rarity.EPIC).component(DataComponents.GLIDER, Unit.INSTANCE).component(DataComponents.EQUIPPABLE, Equippable.builder(EquipmentSlot.CHEST).setEquipSound(SoundEvents.ARMOR_EQUIP_ELYTRA).setModel(EquipmentModels.ELYTRA).setDamageOnHurt(false).build()).repairable(Items.PHANTOM_MEMBRANE)); - public static final DeferredItem SUPER_USELESS_HELMET = ITEMS.registerItem("super_useless_helmet", props -> new ArmorItem(UselessArmorMaterials.SUPER_USELESS, ArmorType.HELMET, props)); - public static final DeferredItem SUPER_USELESS_CHESTPLATE = ITEMS.registerItem("super_useless_chestplate", props -> new ArmorItem(UselessArmorMaterials.SUPER_USELESS, ArmorType.CHESTPLATE, props)); - public static final DeferredItem SUPER_USELESS_LEGGINGS = ITEMS.registerItem("super_useless_leggings", props -> new ArmorItem(UselessArmorMaterials.SUPER_USELESS, ArmorType.LEGGINGS, props)); - public static final DeferredItem SUPER_USELESS_BOOTS = ITEMS.registerItem("super_useless_boots", props -> new ArmorItem(UselessArmorMaterials.SUPER_USELESS, ArmorType.BOOTS, props)); + public static final DeferredItem USELESS_ELYTRA = ITEMS.registerSimpleItem("useless_elytra", props -> props.durability(540).rarity(Rarity.EPIC).component(DataComponents.GLIDER, Unit.INSTANCE).component(DataComponents.EQUIPPABLE, Equippable.builder(EquipmentSlot.CHEST).setEquipSound(SoundEvents.ARMOR_EQUIP_ELYTRA).setAsset(EquipmentAssets.ELYTRA).setDamageOnHurt(false).build()).repairable(Items.PHANTOM_MEMBRANE)); + public static final DeferredItem USELESS_HELMET = ITEMS.registerSimpleItem("useless_helmet", props -> props.humanoidArmor(UselessArmorMaterials.USELESS, ArmorType.HELMET)); + public static final DeferredItem USELESS_CHESTPLATE = ITEMS.registerSimpleItem("useless_chestplate", props -> props.humanoidArmor(UselessArmorMaterials.USELESS, ArmorType.CHESTPLATE)); + public static final DeferredItem USELESS_LEGGINGS = ITEMS.registerSimpleItem("useless_leggings", props -> props.humanoidArmor(UselessArmorMaterials.USELESS, ArmorType.LEGGINGS)); + public static final DeferredItem USELESS_BOOTS = ITEMS.registerSimpleItem("useless_boots", props -> props.humanoidArmor(UselessArmorMaterials.USELESS, ArmorType.BOOTS)); + public static final DeferredItem SUPER_USELESS_ELYTRA = ITEMS.registerSimpleItem("super_useless_elytra", props -> props.durability(864).rarity(Rarity.EPIC).component(DataComponents.GLIDER, Unit.INSTANCE).component(DataComponents.EQUIPPABLE, Equippable.builder(EquipmentSlot.CHEST).setEquipSound(SoundEvents.ARMOR_EQUIP_ELYTRA).setAsset(EquipmentAssets.ELYTRA).setDamageOnHurt(false).build()).repairable(Items.PHANTOM_MEMBRANE)); + public static final DeferredItem SUPER_USELESS_HELMET = ITEMS.registerSimpleItem("super_useless_helmet", props -> props.humanoidArmor(UselessArmorMaterials.SUPER_USELESS, ArmorType.HELMET)); + public static final DeferredItem SUPER_USELESS_CHESTPLATE = ITEMS.registerSimpleItem("super_useless_chestplate", props -> props.humanoidArmor(UselessArmorMaterials.SUPER_USELESS, ArmorType.CHESTPLATE)); + public static final DeferredItem SUPER_USELESS_LEGGINGS = ITEMS.registerSimpleItem("super_useless_leggings", props -> props.humanoidArmor(UselessArmorMaterials.SUPER_USELESS, ArmorType.LEGGINGS)); + public static final DeferredItem SUPER_USELESS_BOOTS = ITEMS.registerSimpleItem("super_useless_boots", props -> props.humanoidArmor(UselessArmorMaterials.SUPER_USELESS, ArmorType.BOOTS)); public static final DeferredItem USELESS_SKELETON_SKULL = ITEMS.registerItem("useless_skeleton_skull", props -> new StandingAndWallBlockItem(UselessBlocks.USELESS_SKELETON_SKULL.get(), UselessBlocks.USELESS_SKELETON_WALL_SKULL.get(), Direction.DOWN, props.rarity(Rarity.UNCOMMON).useBlockDescriptionPrefix())); @@ -70,8 +70,8 @@ static void register() { public static final DeferredItem USELESS_FEATHER = ITEMS.registerSimpleItem("useless_feather"); // Color - public static final DeferredItem PAINT_BRUSH = ITEMS.registerItem("paint_brush", PaintBrushItem::new, new Item.Properties().durability(16)); - public static final DeferredItem BUCKET_PAINT = ITEMS.registerItem("bucket_paint", props -> new BucketWithPaintItem(UselessFluids.PAINT.get(), props), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1)); + public static final DeferredItem PAINT_BRUSH = ITEMS.registerItem("paint_brush", PaintBrushItem::new, props -> props.durability(16)); + public static final DeferredItem BUCKET_PAINT = ITEMS.registerItem("bucket_paint", props -> new BucketWithPaintItem(UselessFluids.PAINT.get(), props), props -> props.craftRemainder(Items.BUCKET).stacksTo(1)); // Spawn Eggs (registered via Entity Type Deferred Register) public static final DeferredItem USELESS_SKELETON_SPAWN_EGG = DeferredItem.createItem(UselessEntityTypes.USELESS_SKELETON.getId().withSuffix("_spawn_egg")); diff --git a/src/main/java/net/themcbrothers/uselessmod/core/UselessPaintingVariants.java b/src/main/java/net/themcbrothers/uselessmod/core/UselessPaintingVariants.java index 97d8464b..b4d1ae92 100644 --- a/src/main/java/net/themcbrothers/uselessmod/core/UselessPaintingVariants.java +++ b/src/main/java/net/themcbrothers/uselessmod/core/UselessPaintingVariants.java @@ -3,7 +3,7 @@ import net.minecraft.core.registries.Registries; import net.minecraft.data.worldgen.BootstrapContext; import net.minecraft.resources.ResourceKey; -import net.minecraft.world.entity.decoration.PaintingVariant; +import net.minecraft.world.entity.decoration.painting.PaintingVariant; import net.themcbrothers.uselessmod.UselessMod; import java.util.Optional; @@ -22,10 +22,10 @@ public static void bootstrap(BootstrapContext context) { } private static void register(BootstrapContext context, ResourceKey key, int width, int height) { - context.register(key, new PaintingVariant(width, height, key.location(), Optional.empty(), Optional.empty())); + context.register(key, new PaintingVariant(width, height, key.identifier(), Optional.empty(), Optional.empty())); } private static ResourceKey createKey(String name) { - return ResourceKey.create(Registries.PAINTING_VARIANT, UselessMod.rl(name)); + return ResourceKey.create(Registries.PAINTING_VARIANT, UselessMod.id(name)); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/core/UselessRecipePropertySet.java b/src/main/java/net/themcbrothers/uselessmod/core/UselessRecipePropertySet.java index 3db715c3..d05163a5 100644 --- a/src/main/java/net/themcbrothers/uselessmod/core/UselessRecipePropertySet.java +++ b/src/main/java/net/themcbrothers/uselessmod/core/UselessRecipePropertySet.java @@ -10,6 +10,6 @@ public class UselessRecipePropertySet { public static final ResourceKey COFFEE_MACHINE_EXTRA = register("coffee_machine_extra"); private static ResourceKey register(String name) { - return ResourceKey.create(RecipePropertySet.TYPE_KEY, UselessMod.rl(name)); + return ResourceKey.create(RecipePropertySet.TYPE_KEY, UselessMod.id(name)); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/core/UselessStats.java b/src/main/java/net/themcbrothers/uselessmod/core/UselessStats.java index c1b54ea1..ece5de46 100644 --- a/src/main/java/net/themcbrothers/uselessmod/core/UselessStats.java +++ b/src/main/java/net/themcbrothers/uselessmod/core/UselessStats.java @@ -1,6 +1,6 @@ package net.themcbrothers.uselessmod.core; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.neoforged.neoforge.registries.DeferredHolder; import net.themcbrothers.uselessmod.UselessMod; @@ -10,10 +10,10 @@ public final class UselessStats { static void register() { } - public static final DeferredHolder OPEN_WALL_CLOSET = customStat("open_wall_closet"); - public static final DeferredHolder INTERACT_WITH_COFFEE_MACHINE = customStat("interact_with_coffee_machine"); + public static final DeferredHolder OPEN_WALL_CLOSET = customStat("open_wall_closet"); + public static final DeferredHolder INTERACT_WITH_COFFEE_MACHINE = customStat("interact_with_coffee_machine"); - private static DeferredHolder customStat(String key) { - return CUSTOM_STATS.register(key, () -> UselessMod.rl(key)); + private static DeferredHolder customStat(String key) { + return CUSTOM_STATS.register(key, () -> UselessMod.id(key)); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/core/UselessToolMaterials.java b/src/main/java/net/themcbrothers/uselessmod/core/UselessToolMaterials.java index 8c15a98e..55d07f60 100644 --- a/src/main/java/net/themcbrothers/uselessmod/core/UselessToolMaterials.java +++ b/src/main/java/net/themcbrothers/uselessmod/core/UselessToolMaterials.java @@ -5,6 +5,7 @@ import net.themcbrothers.uselessmod.UselessTags; public final class UselessToolMaterials { + // TODO: tool material public static final ToolMaterial USELESS = ToolMaterial.IRON; // new ToolMaterial(BlockTags.INCORRECT_FOR_IRON_TOOL, 300, 7.0F, 2.5F, 15, UselessTags.Items.INGOTS_USELESS); public static final ToolMaterial SUPER_USELESS = ToolMaterial.DIAMOND; // new ToolMaterial(BlockTags.INCORRECT_FOR_DIAMOND_TOOL, 1200, 9.0F, 3.0F, 14, UselessTags.Items.INGOTS_SUPER_USELESS); } diff --git a/src/main/java/net/themcbrothers/uselessmod/core/package-info.java b/src/main/java/net/themcbrothers/uselessmod/core/package-info.java index f5d41d56..2cde6958 100644 --- a/src/main/java/net/themcbrothers/uselessmod/core/package-info.java +++ b/src/main/java/net/themcbrothers/uselessmod/core/package-info.java @@ -1,9 +1,2 @@ -@FieldsAreNonnullByDefault -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package net.themcbrothers.uselessmod.core; - -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file +@org.jspecify.annotations.NullMarked +package net.themcbrothers.uselessmod.core; \ No newline at end of file diff --git a/src/main/java/net/themcbrothers/uselessmod/datagen/UselessAdvancementProvider.java b/src/main/java/net/themcbrothers/uselessmod/datagen/UselessAdvancementProvider.java index 12f68e1b..1e09393a 100644 --- a/src/main/java/net/themcbrothers/uselessmod/datagen/UselessAdvancementProvider.java +++ b/src/main/java/net/themcbrothers/uselessmod/datagen/UselessAdvancementProvider.java @@ -4,18 +4,18 @@ import net.minecraft.advancements.AdvancementHolder; import net.minecraft.advancements.AdvancementType; import net.minecraft.advancements.DisplayInfo; -import net.minecraft.advancements.critereon.InventoryChangeTrigger; -import net.minecraft.advancements.critereon.LocationPredicate; -import net.minecraft.advancements.critereon.PlayerTrigger; +import net.minecraft.advancements.criterion.InventoryChangeTrigger; +import net.minecraft.advancements.criterion.LocationPredicate; +import net.minecraft.advancements.criterion.PlayerTrigger; +import net.minecraft.core.ClientAsset; import net.minecraft.core.HolderGetter; import net.minecraft.core.HolderLookup; import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.data.advancements.AdvancementSubProvider; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.biome.Biome; -import net.neoforged.neoforge.common.data.AdvancementProvider; -import net.neoforged.neoforge.common.data.ExistingFileHelper; import net.themcbrothers.uselessmod.UselessMod; import net.themcbrothers.uselessmod.core.UselessBlocks; import net.themcbrothers.uselessmod.core.UselessItems; @@ -25,21 +25,21 @@ import java.util.Optional; import java.util.function.Consumer; -import static net.themcbrothers.uselessmod.UselessMod.rl; +import static net.themcbrothers.uselessmod.UselessMod.id; + +public class UselessAdvancementProvider implements AdvancementSubProvider { + private DisplayInfo info(ItemLike icon, String name, @Nullable Identifier background, AdvancementType type, boolean showToast, boolean announceChat, boolean hidden) { + return new DisplayInfo(new ItemStack(icon.asItem()), UselessMod.translate("advancement", name + ".title"), + UselessMod.translate("advancement", name + ".description"), Optional.ofNullable(background).map(ClientAsset.ResourceTexture::new), type, showToast, announceChat, hidden); + } -public class UselessAdvancementProvider implements AdvancementProvider.AdvancementGenerator { @Override - public void generate(HolderLookup.Provider registries, Consumer saver, ExistingFileHelper existingFileHelper) { + public void generate(HolderLookup.Provider registries, Consumer writer) { HolderGetter holderGetter = registries.lookupOrThrow(Registries.BIOME); - AdvancementHolder root = Advancement.Builder.advancement().display(info(UselessItems.USELESS_INGOT, "root", rl("textures/gui/advancements/backgrounds/uselessmod.png"), AdvancementType.TASK, false, false, false)).addCriterion("what", InventoryChangeTrigger.TriggerInstance.hasItems(UselessItems.USELESS_INGOT)).save(saver, rl("root"), existingFileHelper); - Advancement.Builder.advancement().display(info(UselessBlocks.USELESS_ORE, "mine_ore", null, AdvancementType.TASK, true, true, false)).parent(root).addCriterion("has_ingot", InventoryChangeTrigger.TriggerInstance.hasItems(UselessItems.USELESS_INGOT)).save(saver, rl("mine_ore"), existingFileHelper); - AdvancementHolder biome = Advancement.Builder.advancement().display(info(UselessBlocks.USELESS_OAK_SAPLING, "visit_useless_forest", null, AdvancementType.TASK, true, true, false)).parent(root).addCriterion("useless_forest", PlayerTrigger.TriggerInstance.located(LocationPredicate.Builder.inBiome(holderGetter.getOrThrow(UselessBiomes.USELESS_FOREST)))).save(saver, rl("visit_useless_forest"), existingFileHelper); - Advancement.Builder.advancement().display(info(UselessBlocks.USELESS_ROSE, "collect_roses", null, AdvancementType.GOAL, true, true, false)).parent(biome).addCriterion("has_roses", InventoryChangeTrigger.TriggerInstance.hasItems(UselessBlocks.RED_ROSE, UselessBlocks.BLUE_ROSE, UselessBlocks.USELESS_ROSE)).save(saver, rl("collect_roses"), existingFileHelper); - } - - private DisplayInfo info(ItemLike icon, String name, @Nullable ResourceLocation background, AdvancementType type, boolean showToast, boolean announceChat, boolean hidden) { - return new DisplayInfo(new ItemStack(icon.asItem()), UselessMod.translate("advancement", name + ".title"), - UselessMod.translate("advancement", name + ".description"), Optional.ofNullable(background), type, showToast, announceChat, hidden); + AdvancementHolder root = Advancement.Builder.advancement().display(info(UselessItems.USELESS_INGOT, "root", id("gui/advancements/backgrounds/uselessmod"), AdvancementType.TASK, false, false, false)).addCriterion("what", InventoryChangeTrigger.TriggerInstance.hasItems(UselessItems.USELESS_INGOT)).save(writer, id("root")); + Advancement.Builder.advancement().display(info(UselessBlocks.USELESS_ORE, "mine_ore", null, AdvancementType.TASK, true, true, false)).parent(root).addCriterion("has_ingot", InventoryChangeTrigger.TriggerInstance.hasItems(UselessItems.USELESS_INGOT)).save(writer, id("mine_ore")); + AdvancementHolder biome = Advancement.Builder.advancement().display(info(UselessBlocks.USELESS_OAK_SAPLING, "visit_useless_forest", null, AdvancementType.TASK, true, true, false)).parent(root).addCriterion("useless_forest", PlayerTrigger.TriggerInstance.located(LocationPredicate.Builder.inBiome(holderGetter.getOrThrow(UselessBiomes.USELESS_FOREST)))).save(writer, id("visit_useless_forest")); + Advancement.Builder.advancement().display(info(UselessBlocks.USELESS_ROSE, "collect_roses", null, AdvancementType.GOAL, true, true, false)).parent(biome).addCriterion("has_roses", InventoryChangeTrigger.TriggerInstance.hasItems(UselessBlocks.RED_ROSE, UselessBlocks.BLUE_ROSE, UselessBlocks.USELESS_ROSE)).save(writer, id("collect_roses")); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/datagen/UselessBlockStateProvider.java b/src/main/java/net/themcbrothers/uselessmod/datagen/UselessBlockStateProvider.java deleted file mode 100644 index 4bcced1a..00000000 --- a/src/main/java/net/themcbrothers/uselessmod/datagen/UselessBlockStateProvider.java +++ /dev/null @@ -1,373 +0,0 @@ -package net.themcbrothers.uselessmod.datagen; - -import net.minecraft.core.Direction; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.data.PackOutput; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.state.properties.AttachFace; -import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraft.world.level.block.state.properties.RailShape; -import net.neoforged.neoforge.client.model.generators.*; -import net.neoforged.neoforge.common.data.ExistingFileHelper; -import net.themcbrothers.uselessmod.UselessMod; -import net.themcbrothers.uselessmod.world.level.block.UselessCropBlock; - -import static net.neoforged.neoforge.client.model.generators.ModelProvider.BLOCK_FOLDER; -import static net.themcbrothers.uselessmod.core.UselessBlocks.*; - -public class UselessBlockStateProvider extends BlockStateProvider { - public UselessBlockStateProvider(PackOutput packOutput, ExistingFileHelper exFileHelper) { - super(packOutput, UselessMod.MOD_ID, exFileHelper); - } - - @Override - protected void registerStatesAndModels() { - // Block and Item Models - simpleBlockWithItem(USELESS_ORE.get()); - simpleBlockWithItem(SUPER_USELESS_ORE.get()); - simpleBlockWithItem(DEEPSLATE_USELESS_ORE.get()); - simpleBlockWithItem(DEEPSLATE_SUPER_USELESS_ORE.get()); - simpleBlockWithItem(NETHER_USELESS_ORE.get()); - simpleBlockWithItem(NETHER_SUPER_USELESS_ORE.get()); - simpleBlockWithItem(END_USELESS_ORE.get()); - simpleBlockWithItem(END_SUPER_USELESS_ORE.get()); - simpleBlockWithItem(USELESS_BLOCK.get()); - simpleBlockWithItem(SUPER_USELESS_BLOCK.get()); - simpleBlockWithItem(RAW_USELESS_BLOCK.get()); - simpleBlockWithItem(RAW_SUPER_USELESS_BLOCK.get()); - axisBlock((RotatedPillarBlock) USELESS_OAK_LOG.get(), modLoc("block/useless_oak_log"), modLoc("block/useless_oak_log_top")); - axisBlock((RotatedPillarBlock) USELESS_OAK_WOOD.get(), modLoc("block/useless_oak_log"), modLoc("block/useless_oak_log")); - axisBlock((RotatedPillarBlock) STRIPPED_USELESS_OAK_LOG.get(), modLoc("block/stripped_useless_oak_log"), modLoc("block/stripped_useless_oak_log_top")); - axisBlock((RotatedPillarBlock) STRIPPED_USELESS_OAK_WOOD.get(), modLoc("block/stripped_useless_oak_log"), modLoc("block/stripped_useless_oak_log")); - crossPlant(RED_ROSE.get()); - crossPlant(BLUE_ROSE.get()); - crossPlant(USELESS_ROSE.get()); - pottedPlant(POTTED_RED_ROSE.get(), RED_ROSE.get()); - pottedPlant(POTTED_BLUE_ROSE.get(), BLUE_ROSE.get()); - pottedPlant(POTTED_USELESS_ROSE.get(), USELESS_ROSE.get()); - pottedPlant(POTTED_USELESS_OAK_SAPLING.get(), USELESS_OAK_SAPLING.get()); - wildCropPlant((UselessCropBlock) USELESS_WHEAT.get(), (UselessCropBlock) WILD_USELESS_WHEAT.get(), "useless_wheat"); - wildCropPlant((UselessCropBlock) COFFEE_BEANS.get(), (UselessCropBlock) WILD_COFFEE_BEANS.get(), "coffee_beans"); - crossPlant(USELESS_OAK_SAPLING.get()); - simpleBlockWithItem(USELESS_OAK_LEAVES.get()); - simpleBlockWithItem(USELESS_OAK_PLANKS.get()); - stairsBlock((StairBlock) USELESS_OAK_STAIRS.get(), blockTexture(USELESS_OAK_PLANKS.get())); - slabBlock((SlabBlock) USELESS_OAK_SLAB.get(), blockTexture(USELESS_OAK_PLANKS.get()), blockTexture(USELESS_OAK_PLANKS.get())); - fenceBlock((FenceBlock) USELESS_OAK_FENCE.get(), blockTexture(USELESS_OAK_PLANKS.get())); - fenceGateBlock((FenceGateBlock) USELESS_OAK_FENCE_GATE.get(), blockTexture(USELESS_OAK_PLANKS.get())); - simpleBlock(PAINT_BUCKET.get(), models().getExistingFile(blockTexture(PAINT_BUCKET.get()))); - simpleBlock(PAINTED_WOOL.get(), models().getExistingFile(blockTexture(PAINTED_WOOL.get()))); - doorBlockWithRenderType((DoorBlock) USELESS_OAK_DOOR.get(), modLoc("block/useless_oak_door_bottom"), modLoc("block/useless_oak_door_top"), "cutout"); - trapdoorBlockWithRenderType((TrapDoorBlock) USELESS_OAK_TRAPDOOR.get(), blockTexture(USELESS_OAK_TRAPDOOR.get()), true, "cutout"); - buttonBlock((ButtonBlock) USELESS_OAK_BUTTON.get(), blockTexture(USELESS_OAK_PLANKS.get())); - pressurePlateBlock((PressurePlateBlock) USELESS_OAK_PRESSURE_PLATE.get(), blockTexture(USELESS_OAK_PLANKS.get())); - signBlock((StandingSignBlock) USELESS_OAK_SIGN.get(), (WallSignBlock) USELESS_OAK_WALL_SIGN.get(), blockTexture(USELESS_OAK_PLANKS.get())); - signBlock((CeilingHangingSignBlock) USELESS_OAK_HANGING_SIGN.get(), (WallHangingSignBlock) USELESS_OAK_WALL_HANGING_SIGN.get(), blockTexture(USELESS_OAK_PLANKS.get())); - ironBars((IronBarsBlock) USELESS_BARS.get(), "useless_bars"); - ironBars((IronBarsBlock) SUPER_USELESS_BARS.get(), "super_useless_bars"); - doorBlockWithRenderType((DoorBlock) USELESS_DOOR.get(), modLoc("block/useless_door_bottom"), modLoc("block/useless_door_top"), "cutout"); - doorBlockWithRenderType((DoorBlock) SUPER_USELESS_DOOR.get(), modLoc("block/super_useless_door_bottom"), modLoc("block/super_useless_door_top"), "cutout"); - trapdoorBlockWithRenderType((TrapDoorBlock) USELESS_TRAPDOOR.get(), blockTexture(USELESS_TRAPDOOR.get()), false, "cutout"); - trapdoorBlockWithRenderType((TrapDoorBlock) SUPER_USELESS_TRAPDOOR.get(), blockTexture(SUPER_USELESS_TRAPDOOR.get()), false, "cutout"); - simpleBlockWithItem(USELESS_WOOL.get()); - simpleBlock(USELESS_CARPET.get(), models().carpet("useless_carpet", modLoc("block/useless_wool"))); - simpleBlock(USELESS_BED.get(), models().getExistingFile(mcLoc("block/bed"))); - simpleBlock(USELESS_SKELETON_SKULL.get(), this.models().getExistingFile(mcLoc(BLOCK_FOLDER + "/skull"))); - simpleBlock(USELESS_SKELETON_WALL_SKULL.get(), this.models().getExistingFile(mcLoc(BLOCK_FOLDER + "/skull"))); - lampBlock(WHITE_LAMP.get()); - lampBlock(ORANGE_LAMP.get()); - lampBlock(MAGENTA_LAMP.get()); - lampBlock(LIGHT_BLUE_LAMP.get()); - lampBlock(YELLOW_LAMP.get()); - lampBlock(LIME_LAMP.get()); - lampBlock(PINK_LAMP.get()); - lampBlock(GRAY_LAMP.get()); - lampBlock(LIGHT_GRAY_LAMP.get()); - lampBlock(CYAN_LAMP.get()); - lampBlock(PURPLE_LAMP.get()); - lampBlock(BLUE_LAMP.get()); - lampBlock(BROWN_LAMP.get()); - lampBlock(GREEN_LAMP.get()); - lampBlock(RED_LAMP.get()); - lampBlock(BLACK_LAMP.get()); - getVariantBuilder(LIGHT_SWITCH_BLOCK.get()) - .partialState().with(BlockStateProperties.POWERED, Boolean.FALSE).modelForState().modelFile(models().cubeAll("light_switch_block", modLoc(BLOCK_FOLDER + "/light_switch"))).addModel() - .partialState().with(BlockStateProperties.POWERED, Boolean.TRUE).modelForState().modelFile(models().cubeAll("light_switch_block_powered", modLoc(BLOCK_FOLDER + "/light_switch_powered"))).addModel(); - - // Special Blocks - waterloggedHorizontalFacingBlock(COFFEE_MACHINE.get(), models().getExistingFile(blockTexture(COFFEE_MACHINE.get()))); - waterloggedHorizontalFacingBlock(CUP.get(), models().getExistingFile(blockTexture(CUP.get()))); - waterloggedHorizontalFacingBlock(CUP_COFFEE.get(), models().getExistingFile(blockTexture(CUP_COFFEE.get()))); - lightSwitch(LIGHT_SWITCH.get()); - - // Lantern - final ModelFile lantern = models().withExistingParent("lantern", mcLoc(BLOCK_FOLDER + "/template_lantern")) - .texture("lantern", mcLoc(BLOCK_FOLDER + "/lantern")).renderType(mcLoc("cutout")); - final ModelFile lanternHanging = models().withExistingParent("lantern_hanging", mcLoc(BLOCK_FOLDER + "/template_hanging_lantern")) - .texture("lantern", mcLoc(BLOCK_FOLDER + "/lantern")).renderType(mcLoc("cutout")); - getVariantBuilder(LANTERN.get()) - .partialState().with(BlockStateProperties.HANGING, Boolean.FALSE).modelForState().modelFile(lantern).addModel() - .partialState().with(BlockStateProperties.HANGING, Boolean.TRUE).modelForState().modelFile(lanternHanging).addModel(); - - getVariantBuilder(WALL_CLOSET.get()) - .forAllStatesExcept(state -> { - final boolean isOpen = state.getValue(BlockStateProperties.OPEN); - final ModelFile model = models().getExistingFile(blockTexture(WALL_CLOSET.get())); - final ModelFile modelOpen = models().getExistingFile(blockTexture(WALL_CLOSET.get()).withSuffix("_open")); - - return ConfiguredModel.builder() - .modelFile(isOpen ? modelOpen : model) - .rotationY(((int) state.getValue(BlockStateProperties.HORIZONTAL_FACING).toYRot() + 180) % 360) - .build(); - }, BlockStateProperties.WATERLOGGED); - - // Machine Supplier - final ModelFile machineSupplierModelBase = models().cubeAll("machine_supplier_base", modLoc(BLOCK_FOLDER + "/machine_supplier")); - final ModelFile machineSupplierModel = models().getBuilder("machine_supplier") - .parent(machineSupplierModelBase).customLoader((blockModelBuilder, existingFileHelper) -> - new CustomLoaderBuilder(UselessMod.rl("machine_supplier"), blockModelBuilder, existingFileHelper, false) { - }).end(); - simpleBlock(MACHINE_SUPPLIER.get(), machineSupplierModel); - simpleBlockItem(MACHINE_SUPPLIER.get()); - - // Block Item Models - simpleBlockItem(USELESS_OAK_LOG.get()); - simpleBlockItem(USELESS_OAK_WOOD.get()); - simpleBlockItem(STRIPPED_USELESS_OAK_LOG.get()); - simpleBlockItem(STRIPPED_USELESS_OAK_WOOD.get()); - simpleBlockItem(USELESS_OAK_STAIRS.get()); - simpleBlockItem(USELESS_OAK_SLAB.get()); - itemModels().getBuilder("useless_oak_trapdoor").parent(models().getExistingFile(modLoc("block/useless_oak_trapdoor_bottom"))); - itemModels().buttonInventory("useless_oak_button", blockTexture(USELESS_OAK_PLANKS.get())); - simpleBlockItem(USELESS_OAK_PRESSURE_PLATE.get()); - itemModels().fenceInventory("useless_oak_fence", blockTexture(USELESS_OAK_PLANKS.get())); - simpleBlockItem(USELESS_OAK_FENCE_GATE.get()); - simpleItemItem(USELESS_OAK_DOOR.get()); - simpleItemItem(USELESS_OAK_SIGN.get()); - simpleItemItem(USELESS_OAK_HANGING_SIGN.get()); - simpleItemItem(USELESS_DOOR.get()); - simpleItemItem(SUPER_USELESS_DOOR.get()); - itemModels().getBuilder("useless_trapdoor").parent(models().getExistingFile(modLoc("block/useless_trapdoor_bottom"))); - itemModels().getBuilder("super_useless_trapdoor").parent(models().getExistingFile(modLoc("block/super_useless_trapdoor_bottom"))); - simpleBlockItem(CUP.get()); - simpleBlockItem(CUP_COFFEE.get()); - simpleBlockItem(PAINT_BUCKET.get(), models().getExistingFile(blockTexture(PAINT_BUCKET.get()).withSuffix("_inventory"))); - simpleBlockItem(PAINTED_WOOL.get()); - simpleBlockItem(USELESS_CARPET.get()); - itemModels().withExistingParent("useless_bed", mcLoc("item/template_bed")).texture("particle", modLoc("block/useless_wool")); - simpleBlockItem(LIGHT_SWITCH_BLOCK.get()); - - // rail pain - simpleItem(USELESS_RAIL.get()); - simpleItem(USELESS_POWERED_RAIL.get()); - simpleItem(USELESS_DETECTOR_RAIL.get()); - simpleItem(USELESS_ACTIVATOR_RAIL.get()); - rail(USELESS_RAIL.get(), "useless_rail"); - rail(USELESS_POWERED_RAIL.get(), "useless_powered_rail"); - rail(USELESS_DETECTOR_RAIL.get(), "useless_detector_rail"); - rail(USELESS_ACTIVATOR_RAIL.get(), "useless_activator_rail"); - } - - private String id(String path) { - return modLoc(path).toString(); - } - - private ResourceLocation key(Block block) { - return BuiltInRegistries.BLOCK.getKey(block); - } - - private String name(Block block) { - return key(block).getPath(); - } - - private void simpleItem(Block block) { - final ResourceLocation id = key(block); - this.itemModels().singleTexture(id.getPath(), mcLoc("item/generated"), "layer0", blockTexture(block)); - } - - private void crossPlant(Block block) { - ResourceLocation id = key(block); - simpleItem(block); - simpleBlock(block, this.models().cross(id.getPath(), blockTexture(block)).renderType(mcLoc("cutout"))); - } - - private void pottedPlant(Block block, Block plant) { - ResourceLocation id = key(block); - simpleBlock(block, this.models().withExistingParent(id.getPath(), mcLoc("block/flower_pot_cross")).texture("plant", blockTexture(plant)).renderType(mcLoc("cutout"))); - } - - private void waterloggedHorizontalFacingBlock(Block block, ModelFile model) { - getVariantBuilder(block) - .forAllStatesExcept(state -> ConfiguredModel.builder() - .modelFile(model) - .rotationY(((int) state.getValue(BlockStateProperties.HORIZONTAL_FACING).toYRot() + 180) % 360) - .build(), BlockStateProperties.WATERLOGGED); - } - - private void lightSwitch(Block block) { - final ResourceLocation blockLoc = blockTexture(block); - final ModelFile model = models().getExistingFile(blockLoc); - final ModelFile modelPowered = models().getExistingFile(blockLoc.withSuffix("_pressed")); - - getVariantBuilder(block).forAllStates(state -> { - Direction facing = state.getValue(BlockStateProperties.HORIZONTAL_FACING); - AttachFace face = state.getValue(BlockStateProperties.ATTACH_FACE); - boolean powered = state.getValue(BlockStateProperties.POWERED); - - return ConfiguredModel.builder() - .modelFile(powered ? modelPowered : model) - .rotationX(face == AttachFace.FLOOR ? 0 : (face == AttachFace.WALL ? 90 : 180)) - .rotationY((int) (face == AttachFace.CEILING ? facing : facing.getOpposite()).toYRot()) - .uvLock(face == AttachFace.WALL) - .build(); - }); - - itemModels().withExistingParent(String.valueOf(key(block)), blockLoc); - } - - private void lampBlock(Block block) { - ResourceLocation blockLoc = blockTexture(block); - ModelFile modelOff = models().cubeAll(blockLoc.toString(), blockLoc); - ModelFile modelOn = models().cubeAll(blockLoc + "_on", blockLoc.withSuffix("_on")); - - getVariantBuilder(block) - .partialState().with(BlockStateProperties.LIT, Boolean.TRUE).modelForState().modelFile(modelOn).addModel() - .partialState().with(BlockStateProperties.LIT, Boolean.FALSE).modelForState().modelFile(modelOff).addModel(); - - itemModels().withExistingParent(String.valueOf(key(block)), blockLoc); - } - - private void simpleItemItem(Block block) { - final ResourceLocation id = key(block); - this.itemModels().singleTexture(id.getPath(), mcLoc("item/generated"), "layer0", modLoc("item/" + id.getPath())); - } - - private void simpleBlockWithItem(Block block) { - simpleBlock(block); - simpleBlockItem(block); - } - - private void simpleBlockItem(Block block) { - simpleBlockItem(block, models().getExistingFile(blockTexture(block))); - } - - private void wildCropPlant(UselessCropBlock crop, UselessCropBlock wildCrop, String name) { - final ModelFile stage0 = models().withExistingParent(id("block/" + name + "_stage0"), "block/crop") - .texture("crop", modLoc("block/" + name + "_stage0")).renderType(mcLoc("cutout")); - final ModelFile stage1 = models().withExistingParent(id("block/" + name + "_stage1"), "block/crop") - .texture("crop", modLoc("block/" + name + "_stage1")).renderType(mcLoc("cutout")); - final ModelFile stage2 = models().withExistingParent(id("block/" + name + "_stage2"), "block/crop") - .texture("crop", modLoc("block/" + name + "_stage2")).renderType(mcLoc("cutout")); - final ModelFile stage3 = models().withExistingParent(id("block/" + name + "_stage3"), "block/crop") - .texture("crop", modLoc("block/" + name + "_stage3")).renderType(mcLoc("cutout")); - final ModelFile stage4 = models().withExistingParent(id("block/" + name + "_stage4"), "block/crop") - .texture("crop", modLoc("block/" + name + "_stage4")).renderType(mcLoc("cutout")); - final ModelFile stage5 = models().withExistingParent(id("block/" + name + "_stage5"), "block/crop") - .texture("crop", modLoc("block/" + name + "_stage5")).renderType(mcLoc("cutout")); - final ModelFile stage6 = models().withExistingParent(id("block/" + name + "_stage6"), "block/crop") - .texture("crop", modLoc("block/" + name + "_stage6")).renderType(mcLoc("cutout")); - final ModelFile stage7 = models().withExistingParent(id("block/" + name + "_stage7"), "block/crop") - .texture("crop", modLoc("block/" + name + "_stage7")).renderType(mcLoc("cutout")); - - getVariantBuilder(crop).forAllStates(state -> ConfiguredModel.builder().modelFile( - switch (state.getValue(CropBlock.AGE)) { - case 0 -> stage0; - case 1 -> stage1; - case 2 -> stage2; - case 3 -> stage3; - case 4 -> stage4; - case 5 -> stage5; - case 6 -> stage6; - default -> stage7; - }).build()); - getVariantBuilder(wildCrop).forAllStates(state -> ConfiguredModel.builder().modelFile( - switch (state.getValue(CropBlock.AGE)) { - case 0 -> stage0; - case 1 -> stage1; - case 2 -> stage2; - case 3 -> stage3; - case 4 -> stage4; - case 5 -> stage5; - case 6 -> stage6; - default -> stage7; - }).build()); - } - - private void ironBars(IronBarsBlock block, String name) { - simpleItem(block); - - final ResourceLocation texture = modLoc("block/" + name); - final ModelFile ironBarsPostEnds = models().getBuilder(id("block/" + name + "_post_ends")).parent(models().getExistingFile(mcLoc("block/iron_bars_post_ends"))).texture("edge", texture).texture("particle", texture).renderType("cutout_mipped"); - final ModelFile ironBarsPost = models().getBuilder(id("block/" + name + "_post")).parent(models().getExistingFile(mcLoc("block/iron_bars_post"))).texture("bars", texture).texture("particle", texture).renderType("cutout_mipped"); - final ModelFile ironBarsCap = models().getBuilder(id("block/" + name + "_cap")).parent(models().getExistingFile(mcLoc("block/iron_bars_cap"))).texture("bars", texture).texture("edge", texture).texture("particle", texture).renderType("cutout_mipped"); - final ModelFile ironBarsCapAlt = models().getBuilder(id("block/" + name + "_cap_alt")).parent(models().getExistingFile(mcLoc("block/iron_bars_cap_alt"))).texture("bars", texture).texture("edge", texture).texture("particle", texture).renderType("cutout_mipped"); - final ModelFile ironBarsSide = models().getBuilder(id("block/" + name + "_side")).parent(models().getExistingFile(mcLoc("block/iron_bars_side"))).texture("bars", texture).texture("edge", texture).texture("particle", texture).renderType("cutout_mipped"); - final ModelFile ironBarsSideAlt = models().getBuilder(id("block/" + name + "_side_alt")).parent(models().getExistingFile(mcLoc("block/iron_bars_side_alt"))).texture("bars", texture).texture("edge", texture).texture("particle", texture).renderType("cutout_mipped"); - - getMultipartBuilder(block) - .part().modelFile(ironBarsPostEnds).addModel().end() - .part().modelFile(ironBarsPost).addModel().condition(IronBarsBlock.NORTH, false).condition(IronBarsBlock.WEST, false).condition(IronBarsBlock.SOUTH, false).condition(IronBarsBlock.EAST, false).end() - .part().modelFile(ironBarsCap).addModel().condition(IronBarsBlock.NORTH, true).condition(IronBarsBlock.WEST, false).condition(IronBarsBlock.SOUTH, false).condition(IronBarsBlock.EAST, false).end() - .part().modelFile(ironBarsCap).rotationY(90).addModel().condition(IronBarsBlock.NORTH, false).condition(IronBarsBlock.WEST, false).condition(IronBarsBlock.SOUTH, false).condition(IronBarsBlock.EAST, true).end() - .part().modelFile(ironBarsCapAlt).addModel().condition(IronBarsBlock.NORTH, false).condition(IronBarsBlock.WEST, false).condition(IronBarsBlock.SOUTH, true).condition(IronBarsBlock.EAST, false).end() - .part().modelFile(ironBarsCapAlt).rotationY(90).addModel().condition(IronBarsBlock.NORTH, false).condition(IronBarsBlock.WEST, true).condition(IronBarsBlock.SOUTH, false).condition(IronBarsBlock.EAST, false).end() - .part().modelFile(ironBarsSide).addModel().condition(IronBarsBlock.NORTH, true).end() - .part().modelFile(ironBarsSide).rotationY(90).addModel().condition(IronBarsBlock.EAST, true).end() - .part().modelFile(ironBarsSideAlt).addModel().condition(IronBarsBlock.SOUTH, true).end() - .part().modelFile(ironBarsSideAlt).rotationY(90).addModel().condition(IronBarsBlock.WEST, true).end(); - } - - private void rail(Block block, String name) { - getVariantBuilder(block).forAllStatesExcept(state -> { - final ModelFile rail = models().getBuilder(id("block/" + name)).parent(models().getExistingFile(mcLoc("block/rail_flat"))).texture("rail", modLoc("block/" + name)).renderType(mcLoc("cutout")); - final ModelFile railRaisedNE = models().getBuilder(id("block/" + name + "_raised_ne")).parent(models().getExistingFile(mcLoc("block/template_rail_raised_ne"))).texture("rail", modLoc("block/" + name)).renderType(mcLoc("cutout")); - final ModelFile railRaisedSW = models().getBuilder(id("block/" + name + "_raised_sw")).parent(models().getExistingFile(mcLoc("block/template_rail_raised_sw"))).texture("rail", modLoc("block/" + name)).renderType(mcLoc("cutout")); - ModelFile railOn = null; - ModelFile railRaisedOnNE = null; - ModelFile railRaisedOnSW = null; - ModelFile railCorner = null; - if (state.hasProperty(BlockStateProperties.POWERED)) { - railOn = models().getBuilder(id("block/" + name + "_on")).parent(models().getExistingFile(mcLoc("block/rail_flat"))).texture("rail", modLoc("block/" + name + "_on")).renderType(mcLoc("cutout")); - railRaisedOnNE = models().getBuilder(id("block/" + name + "_on_raised_ne")).parent(models().getExistingFile(mcLoc("block/template_rail_raised_ne"))).texture("rail", modLoc("block/" + name + "_on")).renderType(mcLoc("cutout")); - railRaisedOnSW = models().getBuilder(id("block/" + name + "_on_raised_sw")).parent(models().getExistingFile(mcLoc("block/template_rail_raised_sw"))).texture("rail", modLoc("block/" + name + "_on")).renderType(mcLoc("cutout")); - } - if (state.hasProperty(BlockStateProperties.RAIL_SHAPE)) { - railCorner = models().getBuilder(id("block/useless_rail_corner")).parent(models().getExistingFile(mcLoc("block/rail_curved"))).texture("rail", modLoc("block/useless_rail_corner")).renderType(mcLoc("cutout")); - } - final RailShape shape = state.hasProperty(BlockStateProperties.RAIL_SHAPE_STRAIGHT) ? state.getValue(BlockStateProperties.RAIL_SHAPE_STRAIGHT) : state.getValue(BlockStateProperties.RAIL_SHAPE); - final boolean powered = state.hasProperty(BlockStateProperties.POWERED) && state.getValue(BlockStateProperties.POWERED); - - if (shape == RailShape.EAST_WEST) { - return ConfiguredModel.builder().modelFile(powered ? railOn : rail).rotationY(90).build(); - } else if (shape == RailShape.ASCENDING_EAST) { - return ConfiguredModel.builder().modelFile(powered ? railRaisedOnNE : railRaisedNE).rotationY(90).build(); - } else if (shape == RailShape.ASCENDING_WEST) { - return ConfiguredModel.builder().modelFile(powered ? railRaisedOnSW : railRaisedSW).rotationY(90).build(); - } else if (shape == RailShape.ASCENDING_NORTH) { - return ConfiguredModel.builder().modelFile(powered ? railRaisedOnNE : railRaisedNE).build(); - } else if (shape == RailShape.ASCENDING_SOUTH) { - return ConfiguredModel.builder().modelFile(powered ? railRaisedOnSW : railRaisedSW).build(); - } else if (shape == RailShape.SOUTH_EAST) { - return ConfiguredModel.builder().modelFile(railCorner).build(); - } else if (shape == RailShape.SOUTH_WEST) { - return ConfiguredModel.builder().modelFile(railCorner).rotationY(90).build(); - } else if (shape == RailShape.NORTH_WEST) { - return ConfiguredModel.builder().modelFile(railCorner).rotationY(180).build(); - } else if (shape == RailShape.NORTH_EAST) { - return ConfiguredModel.builder().modelFile(railCorner).rotationY(270).build(); - } - return ConfiguredModel.builder().modelFile(powered ? railOn : rail).build(); - }, BlockStateProperties.WATERLOGGED); - } - - private void signBlock(CeilingHangingSignBlock signBlock, WallHangingSignBlock wallSignBlock, ResourceLocation texture) { - ModelFile sign = models().sign(name(signBlock), texture); - signBlock(signBlock, wallSignBlock, sign); - } - - private void signBlock(CeilingHangingSignBlock signBlock, WallHangingSignBlock wallSignBlock, ModelFile sign) { - simpleBlock(signBlock, sign); - simpleBlock(wallSignBlock, sign); - } -} diff --git a/src/main/java/net/themcbrothers/uselessmod/datagen/UselessDataGen.java b/src/main/java/net/themcbrothers/uselessmod/datagen/UselessDataGen.java index 856ce374..b44857b1 100644 --- a/src/main/java/net/themcbrothers/uselessmod/datagen/UselessDataGen.java +++ b/src/main/java/net/themcbrothers/uselessmod/datagen/UselessDataGen.java @@ -5,17 +5,19 @@ import net.minecraft.core.registries.Registries; import net.minecraft.data.DataGenerator; import net.minecraft.data.PackOutput; +import net.minecraft.data.advancements.AdvancementProvider; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.neoforge.common.data.AdvancementProvider; import net.neoforged.neoforge.common.data.BlockTagsProvider; import net.neoforged.neoforge.common.data.DatapackBuiltinEntriesProvider; -import net.neoforged.neoforge.common.data.ExistingFileHelper; import net.neoforged.neoforge.data.event.GatherDataEvent; import net.neoforged.neoforge.registries.NeoForgeRegistries; import net.themcbrothers.uselessmod.UselessMod; import net.themcbrothers.uselessmod.core.UselessPaintingVariants; import net.themcbrothers.uselessmod.datagen.loot.UselessLootTableProvider; +import net.themcbrothers.uselessmod.datagen.models.BlockModelProvider; +import net.themcbrothers.uselessmod.datagen.models.ItemModelProvider; +import net.themcbrothers.uselessmod.datagen.models.UselessModelProvider; import net.themcbrothers.uselessmod.datagen.worldgen.biome.UselessBiomeData; import net.themcbrothers.uselessmod.datagen.worldgen.biome.UselessBiomeModifiers; import net.themcbrothers.uselessmod.world.worldgen.*; @@ -24,13 +26,12 @@ import java.util.Set; import java.util.concurrent.CompletableFuture; -@EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD, modid = UselessMod.MOD_ID) +@EventBusSubscriber(modid = UselessMod.MOD_ID) public class UselessDataGen { @SubscribeEvent - public static void dataGen(final GatherDataEvent event) { + public static void dataGen(final GatherDataEvent.Client event) { final DataGenerator generator = event.getGenerator(); final PackOutput packOutput = generator.getPackOutput(); - final ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); // Data driven registries RegistrySetBuilder registrySetBuilder = new RegistrySetBuilder() @@ -49,26 +50,28 @@ public static void dataGen(final GatherDataEvent event) { .add(NeoForgeRegistries.Keys.BIOME_MODIFIERS, UselessBiomeModifiers::bootstrap); DatapackBuiltinEntriesProvider datapackBuiltinEntriesProvider = new DatapackBuiltinEntriesProvider(packOutput, event.getLookupProvider(), registrySetBuilder, Set.of(UselessMod.MOD_ID)); - generator.addProvider(event.includeServer(), datapackBuiltinEntriesProvider); + generator.addProvider(true, datapackBuiltinEntriesProvider); // Now we can actually use this data final CompletableFuture lookupProvider = datapackBuiltinEntriesProvider.getRegistryProvider(); - generator.addProvider(event.includeServer(), new UselessRecipeProvider.Runner(packOutput, lookupProvider)); - generator.addProvider(event.includeServer(), new UselessLanguageProvider(packOutput)); - generator.addProvider(event.includeServer(), new AdvancementProvider(packOutput, lookupProvider, existingFileHelper, List.of(new UselessAdvancementProvider()))); - generator.addProvider(event.includeServer(), UselessLootTableProvider.create(packOutput, lookupProvider)); - final BlockTagsProvider blockTagsProvider = new UselessTagsProvider.Blocks(packOutput, lookupProvider, existingFileHelper); - generator.addProvider(event.includeServer(), blockTagsProvider); - generator.addProvider(event.includeServer(), new UselessTagsProvider.Items(packOutput, lookupProvider, blockTagsProvider.contentsGetter(), existingFileHelper)); - generator.addProvider(event.includeServer(), new UselessTagsProvider.Fluids(packOutput, lookupProvider, existingFileHelper)); - generator.addProvider(event.includeServer(), new UselessTagsProvider.Entities(packOutput, lookupProvider, existingFileHelper)); - generator.addProvider(event.includeServer(), new UselessTagsProvider.Paintings(packOutput, lookupProvider, existingFileHelper)); - generator.addProvider(event.includeServer(), new UselessDataMapsProvider(packOutput, lookupProvider)); + generator.addProvider(true, new UselessRecipeProvider.Runner(packOutput, lookupProvider)); + generator.addProvider(true, new UselessLanguageProvider(packOutput)); + generator.addProvider(true, new AdvancementProvider(packOutput, lookupProvider, List.of(new UselessAdvancementProvider()))); + generator.addProvider(true, UselessLootTableProvider.create(packOutput, lookupProvider)); + final BlockTagsProvider blockTagsProvider = new UselessTagsProvider.Blocks(packOutput, lookupProvider); + generator.addProvider(true, blockTagsProvider); + generator.addProvider(true, new UselessTagsProvider.Items(packOutput, lookupProvider, blockTagsProvider.contentsGetter())); + generator.addProvider(true, new UselessTagsProvider.Fluids(packOutput, lookupProvider)); + generator.addProvider(true, new UselessTagsProvider.Entities(packOutput, lookupProvider)); + generator.addProvider(true, new UselessTagsProvider.Paintings(packOutput, lookupProvider)); + generator.addProvider(true, new UselessDataMapsProvider(packOutput, lookupProvider)); // Resources - generator.addProvider(event.includeClient(), new UselessSpriteSourceProvider(packOutput, lookupProvider, existingFileHelper)); - generator.addProvider(event.includeClient(), new UselessBlockStateProvider(packOutput, existingFileHelper)); - generator.addProvider(event.includeClient(), new UselessItemModelProvider(packOutput, existingFileHelper)); + generator.addProvider(true, new UselessSpriteSourceProvider(packOutput, lookupProvider)); + generator.addProvider(true, UselessModelProvider.create( + BlockModelProvider::new, + ItemModelProvider::new + )); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/datagen/UselessDataMapsProvider.java b/src/main/java/net/themcbrothers/uselessmod/datagen/UselessDataMapsProvider.java index c046d0e6..6d49bff8 100644 --- a/src/main/java/net/themcbrothers/uselessmod/datagen/UselessDataMapsProvider.java +++ b/src/main/java/net/themcbrothers/uselessmod/datagen/UselessDataMapsProvider.java @@ -6,6 +6,7 @@ import net.neoforged.neoforge.common.data.DataMapProvider; import net.neoforged.neoforge.registries.datamaps.builtin.Compostable; import net.neoforged.neoforge.registries.datamaps.builtin.NeoForgeDataMaps; +import net.neoforged.neoforge.registries.datamaps.builtin.Strippable; import net.themcbrothers.uselessmod.core.UselessBlocks; import net.themcbrothers.uselessmod.core.UselessItems; @@ -28,5 +29,10 @@ protected void gather(HolderLookup.Provider provider) { .add(BuiltInRegistries.ITEM.wrapAsHolder(UselessItems.USELESS_WHEAT.asItem()), new Compostable(0.65F), false) .add(BuiltInRegistries.ITEM.wrapAsHolder(UselessItems.COFFEE_BEANS.asItem()), new Compostable(0.65F), false) ; + + this.builder(NeoForgeDataMaps.STRIPPABLES) + .add(UselessBlocks.USELESS_OAK_LOG.getKey(), new Strippable(UselessBlocks.STRIPPED_USELESS_OAK_LOG.get()), false) + .add(UselessBlocks.USELESS_OAK_WOOD.getKey(), new Strippable(UselessBlocks.STRIPPED_USELESS_OAK_WOOD.get()), false) + ; } } diff --git a/src/main/java/net/themcbrothers/uselessmod/datagen/UselessItemModelProvider.java b/src/main/java/net/themcbrothers/uselessmod/datagen/UselessItemModelProvider.java deleted file mode 100644 index 0ee2729c..00000000 --- a/src/main/java/net/themcbrothers/uselessmod/datagen/UselessItemModelProvider.java +++ /dev/null @@ -1,138 +0,0 @@ -package net.themcbrothers.uselessmod.datagen; - -import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.data.PackOutput; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemDisplayContext; -import net.minecraft.world.level.ItemLike; -import net.neoforged.neoforge.client.model.generators.ItemModelProvider; -import net.neoforged.neoforge.client.model.generators.ModelFile; -import net.neoforged.neoforge.client.model.generators.loaders.DynamicFluidContainerModelBuilder; -import net.neoforged.neoforge.common.data.ExistingFileHelper; -import net.neoforged.neoforge.internal.versions.neoforge.NeoForgeVersion; -import net.themcbrothers.uselessmod.UselessMod; -import net.themcbrothers.uselessmod.core.UselessBlocks; -import net.themcbrothers.uselessmod.core.UselessFluids; -import net.themcbrothers.uselessmod.core.UselessItems; - -public class UselessItemModelProvider extends ItemModelProvider { - public UselessItemModelProvider(PackOutput packOutput, ExistingFileHelper existingFileHelper) { - super(packOutput, UselessMod.MOD_ID, existingFileHelper); - } - - @Override - protected void registerModels() { - basicItem(UselessItems.RAW_USELESS.get()); - basicItem(UselessItems.RAW_SUPER_USELESS.get()); - basicItem(UselessItems.USELESS_DUST.get()); - basicItem(UselessItems.SUPER_USELESS_DUST.get()); - basicItem(UselessItems.USELESS_INGOT.get()); - basicItem(UselessItems.SUPER_USELESS_INGOT.get()); - basicItem(UselessItems.USELESS_NUGGET.get()); - basicItem(UselessItems.SUPER_USELESS_NUGGET.get()); - basicItem(UselessBlocks.USELESS_OAK_DOOR.asItem()); - basicItem(UselessItems.USELESS_SHEARS.get()); - basicTool(UselessItems.USELESS_SWORD.get()); - basicTool(UselessItems.SUPER_USELESS_SWORD.get()); - basicTool(UselessItems.USELESS_SHOVEL.get()); - basicTool(UselessItems.SUPER_USELESS_SHOVEL.get()); - basicTool(UselessItems.USELESS_PICKAXE.get()); - basicTool(UselessItems.SUPER_USELESS_PICKAXE.get()); - basicTool(UselessItems.USELESS_AXE.get()); - basicTool(UselessItems.SUPER_USELESS_AXE.get()); - basicTool(UselessItems.USELESS_HOE.get()); - basicTool(UselessItems.SUPER_USELESS_HOE.get()); - basicItem(UselessItems.USELESS_HELMET.get()); - basicItem(UselessItems.SUPER_USELESS_HELMET.get()); - basicItem(UselessItems.USELESS_CHESTPLATE.get()); - basicItem(UselessItems.SUPER_USELESS_CHESTPLATE.get()); - basicItem(UselessItems.USELESS_LEGGINGS.get()); - basicItem(UselessItems.SUPER_USELESS_LEGGINGS.get()); - basicItem(UselessItems.USELESS_BOOTS.get()); - basicItem(UselessItems.SUPER_USELESS_BOOTS.get()); - basicItem(UselessItems.USELESS_WHEAT_SEEDS.get()); - basicItem(UselessItems.USELESS_WHEAT.get()); - basicItem(UselessItems.COFFEE_SEEDS.get()); - basicItem(UselessItems.COFFEE_BEANS.get()); - basicItem(UselessItems.USELESS_BONE.get()); - basicItem(UselessItems.USELESS_LEATHER.get()); - basicItem(UselessItems.USELESS_FEATHER.get()); - - final ModelFile brokenUselessElytra = basicItem(UselessMod.rl("broken_useless_elytra")); - basicItem(UselessItems.USELESS_ELYTRA.get()).override().predicate(mcLoc("broken"), 1).model(brokenUselessElytra).end(); - final ModelFile brokenSuperUselessElytra = basicItem(UselessMod.rl("broken_super_useless_elytra")); - basicItem(UselessItems.SUPER_USELESS_ELYTRA.get()).override().predicate(mcLoc("broken"), 1).model(brokenSuperUselessElytra).end(); - - withExistingParent("paint_brush", mcLoc(ITEM_FOLDER + "/handheld")) - .texture("layer0", modLoc(ITEM_FOLDER + "/paint_brush_0")) - .texture("layer1", modLoc(ITEM_FOLDER + "/paint_brush_1")); - - getBuilder(String.valueOf(UselessItems.USELESS_SKELETON_SKULL.getId())).parent(getExistingFile(mcLoc(ITEM_FOLDER + "/template_skull"))); - - this.withExistingParent("useless_sheep_spawn_egg", mcLoc(ITEM_FOLDER + "/template_spawn_egg")); - this.withExistingParent("useless_pig_spawn_egg", mcLoc(ITEM_FOLDER + "/template_spawn_egg")); - this.withExistingParent("useless_chicken_spawn_egg", mcLoc(ITEM_FOLDER + "/template_spawn_egg")); - this.withExistingParent("useless_cow_spawn_egg", mcLoc(ITEM_FOLDER + "/template_spawn_egg")); - this.withExistingParent("useless_skeleton_spawn_egg", mcLoc(ITEM_FOLDER + "/template_spawn_egg")); - - this.withExistingParent("bucket_paint", ResourceLocation.fromNamespaceAndPath(NeoForgeVersion.MOD_ID, "item/bucket")) - .customLoader(DynamicFluidContainerModelBuilder::begin) - .fluid(UselessFluids.PAINT.get()).end(); - - // Items with special renderer - final ModelFile builtInEntityModel = new ModelFile.UncheckedModelFile("builtin/entity"); - - final ModelFile uselessShieldBlocking = shieldBlockingModel("useless_shield_blocking", builtInEntityModel, "useless_block"); - shieldModel("useless_shield", builtInEntityModel, "useless_block", uselessShieldBlocking); - - final ModelFile superUselessShieldBlocking = shieldBlockingModel("super_useless_shield_blocking", builtInEntityModel, "super_useless_block"); - shieldModel("super_useless_shield", builtInEntityModel, "super_useless_block", superUselessShieldBlocking); - } - - private void basicTool(ItemLike item) { - final ResourceLocation id = BuiltInRegistries.ITEM.getKey(item.asItem()); - this.singleTexture(id.getPath(), mcLoc(ITEM_FOLDER + "/handheld"), "layer0", modLoc(ITEM_FOLDER + "/" + id.getPath())); - } - - private void shieldModel(String path, ModelFile parent, String particleTexture, ModelFile blockingModel) { - getBuilder(path) - .parent(parent).guiLight(BlockModel.GuiLight.FRONT) - .texture("particle", modLoc(BLOCK_FOLDER + "/" + particleTexture)) - .transforms() - .transform(ItemDisplayContext.THIRD_PERSON_RIGHT_HAND) - .rotation(0, 90, 0).translation(10, 6, -4).scale(1, 1, 1).end() - .transform(ItemDisplayContext.THIRD_PERSON_LEFT_HAND) - .rotation(0, 90, 0).translation(10, 6, 12).scale(1, 1, 1).end() - .transform(ItemDisplayContext.FIRST_PERSON_RIGHT_HAND) - .rotation(0, 180, 5).translation(-10, 2, -10).scale(1.25F, 1.25F, 1.25F).end() - .transform(ItemDisplayContext.FIRST_PERSON_LEFT_HAND) - .rotation(0, 180, 5).translation(10, 0, -10).scale(1.25F, 1.25F, 1.25F).end() - .transform(ItemDisplayContext.GUI) - .rotation(15, -25, -5).translation(2, 3, 0).scale(0.65F, 0.65F, 0.65F).end() - .transform(ItemDisplayContext.FIXED) - .rotation(0, 180, 0).translation(-2, 4, -5).scale(0.5F, 0.5F, 0.5F).end() - .transform(ItemDisplayContext.GROUND) - .rotation(0, 0, 0).translation(4, 4, 2).scale(0.25F, 0.25F, 0.25F).end() - .end() - .override().predicate(mcLoc("blocking"), 1).model(blockingModel).end(); - } - - private ModelFile shieldBlockingModel(String path, ModelFile parent, String particleTexture) { - return getBuilder(path) - .parent(parent).guiLight(BlockModel.GuiLight.FRONT) - .texture("particle", modLoc(BLOCK_FOLDER + "/" + particleTexture)) - .transforms() - .transform(ItemDisplayContext.THIRD_PERSON_RIGHT_HAND) - .rotation(45, 135, 0).translation(3.51F, 11, -2).scale(1, 1, 1).end() - .transform(ItemDisplayContext.THIRD_PERSON_LEFT_HAND) - .rotation(45, 135, 0).translation(13.51F, 3, 5).scale(1, 1, 1).end() - .transform(ItemDisplayContext.FIRST_PERSON_RIGHT_HAND) - .rotation(0, 180, -5).translation(-15, 5, -11).scale(1.25F, 1.25F, 1.25F).end() - .transform(ItemDisplayContext.FIRST_PERSON_LEFT_HAND) - .rotation(0, 180, -5).translation(5, 5, -11).scale(1.25F, 1.25F, 1.25F).end() - .transform(ItemDisplayContext.GUI) - .rotation(15, -25, -5).translation(2, 3, 0).scale(0.65F, 0.65F, 0.65F).end() - .end(); - } -} diff --git a/src/main/java/net/themcbrothers/uselessmod/datagen/UselessLanguageProvider.java b/src/main/java/net/themcbrothers/uselessmod/datagen/UselessLanguageProvider.java index e41c0a58..607e96da 100644 --- a/src/main/java/net/themcbrothers/uselessmod/datagen/UselessLanguageProvider.java +++ b/src/main/java/net/themcbrothers/uselessmod/datagen/UselessLanguageProvider.java @@ -1,7 +1,7 @@ package net.themcbrothers.uselessmod.datagen; import net.minecraft.data.PackOutput; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.neoforged.neoforge.common.data.LanguageProvider; import net.themcbrothers.uselessmod.UselessMod; import net.themcbrothers.uselessmod.api.CoffeeType; @@ -196,7 +196,7 @@ private void addAdvancement(String id, String title, String description) { this.add("advancement." + UselessMod.MOD_ID + "." + id + ".description", description); } - private void addStat(Supplier key, String name) { + private void addStat(Supplier key, String name) { this.add(String.format("stat.%s.%s", key.get().getNamespace(), key.get().getPath()), name); } diff --git a/src/main/java/net/themcbrothers/uselessmod/datagen/UselessRecipeProvider.java b/src/main/java/net/themcbrothers/uselessmod/datagen/UselessRecipeProvider.java index 4e36de48..d29bccef 100644 --- a/src/main/java/net/themcbrothers/uselessmod/datagen/UselessRecipeProvider.java +++ b/src/main/java/net/themcbrothers/uselessmod/datagen/UselessRecipeProvider.java @@ -145,7 +145,7 @@ protected void buildRecipes() { CoffeeRecipeBuilder.coffee(CoffeeUtils.createCoffeeStack(UselessCoffeeTypes.MILK_SUGAR.get()), Ingredient.of(UselessBlocks.CUP), this.tag(UselessTags.Items.CROPS_COFFEEBEAN), Ingredient.of(Items.SUGAR), SizedFluidIngredient.of(Fluids.WATER, 250), SizedFluidIngredient.of(NeoForgeMod.MILK.value(), 100), 100).unlockedBy("has_sugar", has(Items.SUGAR)).save(output, key("coffee_milk_sugar")); // Special Recipes - SpecialRecipeBuilder.special(LightSwitchConvertRecipe::new).save(output, UselessMod.rl("light_switch_convert").toString()); + SpecialRecipeBuilder.special(LightSwitchConvertRecipe::new).save(output, UselessMod.id("light_switch_convert").toString()); // Usages of Items shapeless(RecipeCategory.DECORATIONS, Items.RED_DYE).requires(UselessBlocks.RED_ROSE).group("red_dye").unlockedBy("has_red_flower", has(UselessBlocks.RED_ROSE)).save(output, key("red_dye_from_rose")); @@ -154,7 +154,7 @@ protected void buildRecipes() { } private ResourceKey> key(String path) { - return ResourceKey.create(Registries.RECIPE, UselessMod.rl(path)); + return ResourceKey.create(Registries.RECIPE, UselessMod.id(path)); } static final class Runner extends RecipeProvider.Runner { diff --git a/src/main/java/net/themcbrothers/uselessmod/datagen/UselessSpriteSourceProvider.java b/src/main/java/net/themcbrothers/uselessmod/datagen/UselessSpriteSourceProvider.java index e4bea285..53341dcf 100644 --- a/src/main/java/net/themcbrothers/uselessmod/datagen/UselessSpriteSourceProvider.java +++ b/src/main/java/net/themcbrothers/uselessmod/datagen/UselessSpriteSourceProvider.java @@ -2,23 +2,23 @@ import net.minecraft.client.renderer.texture.atlas.sources.SingleFile; import net.minecraft.core.HolderLookup; +import net.minecraft.data.AtlasIds; import net.minecraft.data.PackOutput; -import net.neoforged.neoforge.common.data.ExistingFileHelper; -import net.neoforged.neoforge.common.data.SpriteSourceProvider; +import net.neoforged.neoforge.client.data.SpriteSourceProvider; import net.themcbrothers.uselessmod.UselessMod; import java.util.Optional; import java.util.concurrent.CompletableFuture; public class UselessSpriteSourceProvider extends SpriteSourceProvider { - public UselessSpriteSourceProvider(PackOutput output, CompletableFuture lookupProvider, ExistingFileHelper fileHelper) { - super(output, lookupProvider, UselessMod.MOD_ID, fileHelper); + public UselessSpriteSourceProvider(PackOutput output, CompletableFuture lookupProvider) { + super(output, lookupProvider, UselessMod.MOD_ID); } @Override protected void gather() { - this.atlas(BEDS_ATLAS).addSource(new SingleFile(UselessMod.rl("entity/bed/useless"), Optional.empty())); - this.atlas(BLOCKS_ATLAS).addSource(new SingleFile(UselessMod.rl("entity/shield/useless"), Optional.empty())); - this.atlas(BLOCKS_ATLAS).addSource(new SingleFile(UselessMod.rl("entity/shield/super_useless"), Optional.empty())); + this.atlas(AtlasIds.BEDS).addSource(new SingleFile(UselessMod.id("entity/bed/useless"), Optional.empty())); + this.atlas(AtlasIds.BLOCKS).addSource(new SingleFile(UselessMod.id("entity/shield/useless"), Optional.empty())); + this.atlas(AtlasIds.BLOCKS).addSource(new SingleFile(UselessMod.id("entity/shield/super_useless"), Optional.empty())); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/datagen/UselessTagsProvider.java b/src/main/java/net/themcbrothers/uselessmod/datagen/UselessTagsProvider.java index 033d4d4e..b178e7ff 100644 --- a/src/main/java/net/themcbrothers/uselessmod/datagen/UselessTagsProvider.java +++ b/src/main/java/net/themcbrothers/uselessmod/datagen/UselessTagsProvider.java @@ -4,7 +4,6 @@ import net.minecraft.data.PackOutput; import net.minecraft.data.tags.EntityTypeTagsProvider; import net.minecraft.data.tags.FluidTagsProvider; -import net.minecraft.data.tags.ItemTagsProvider; import net.minecraft.data.tags.PaintingVariantTagsProvider; import net.minecraft.tags.BlockTags; import net.minecraft.tags.EntityTypeTags; @@ -12,19 +11,18 @@ import net.minecraft.tags.PaintingVariantTags; import net.minecraft.world.level.block.Block; import net.neoforged.neoforge.common.Tags; +import net.neoforged.neoforge.common.data.BlockTagCopyingItemTagProvider; import net.neoforged.neoforge.common.data.BlockTagsProvider; -import net.neoforged.neoforge.common.data.ExistingFileHelper; import net.themcbrothers.uselessmod.UselessMod; import net.themcbrothers.uselessmod.UselessTags; import net.themcbrothers.uselessmod.core.*; -import org.jetbrains.annotations.Nullable; import java.util.concurrent.CompletableFuture; public class UselessTagsProvider { public static class Blocks extends BlockTagsProvider { - public Blocks(PackOutput output, CompletableFuture lookupProvider, @Nullable ExistingFileHelper existingFileHelper) { - super(output, lookupProvider, UselessMod.MOD_ID, existingFileHelper); + public Blocks(PackOutput output, CompletableFuture lookupProvider) { + super(output, lookupProvider, UselessMod.MOD_ID); } @Override @@ -44,7 +42,7 @@ protected void addTags(HolderLookup.Provider lookupProvider) { this.tag(UselessTags.Blocks.STORAGE_BLOCKS_RAW_SUPER_USELESS).add(UselessBlocks.RAW_SUPER_USELESS_BLOCK.get()); this.tag(Tags.Blocks.STORAGE_BLOCKS).addTag(UselessTags.Blocks.STORAGE_BLOCKS_USELESS).addTag(UselessTags.Blocks.STORAGE_BLOCKS_RAW_USELESS).addTag(UselessTags.Blocks.STORAGE_BLOCKS_SUPER_USELESS).addTag(UselessTags.Blocks.STORAGE_BLOCKS_RAW_SUPER_USELESS); - this.tag(BlockTags.MINEABLE_WITH_AXE).add(UselessBlocks.USELESS_WHEAT.get(), UselessBlocks.WILD_USELESS_WHEAT.get(), UselessBlocks.COFFEE_BEANS.get(), UselessBlocks.WILD_COFFEE_BEANS.get()); + this.tag(BlockTags.MAINTAINS_FARMLAND).add(UselessBlocks.USELESS_WHEAT.get(), UselessBlocks.WILD_USELESS_WHEAT.get(), UselessBlocks.COFFEE_BEANS.get(), UselessBlocks.WILD_COFFEE_BEANS.get()); this.tag(BlockTags.MINEABLE_WITH_PICKAXE).add(UselessBlocks.USELESS_ORE.get(), UselessBlocks.DEEPSLATE_USELESS_ORE.get(), UselessBlocks.NETHER_USELESS_ORE.get(), UselessBlocks.END_USELESS_ORE.get(), UselessBlocks.SUPER_USELESS_ORE.get(), UselessBlocks.DEEPSLATE_SUPER_USELESS_ORE.get(), UselessBlocks.NETHER_SUPER_USELESS_ORE.get(), UselessBlocks.END_SUPER_USELESS_ORE.get(), UselessBlocks.USELESS_BLOCK.get(), UselessBlocks.SUPER_USELESS_BLOCK.get(), UselessBlocks.RAW_USELESS_BLOCK.get(), UselessBlocks.RAW_SUPER_USELESS_BLOCK.get(), UselessBlocks.USELESS_BARS.get(), UselessBlocks.SUPER_USELESS_BARS.get(), UselessBlocks.USELESS_DOOR.get(), UselessBlocks.SUPER_USELESS_DOOR.get(), UselessBlocks.USELESS_TRAPDOOR.get(), UselessBlocks.SUPER_USELESS_TRAPDOOR.get(), UselessBlocks.PAINT_BUCKET.get(), UselessBlocks.COFFEE_MACHINE.get()); this.tag(BlockTags.MINEABLE_WITH_HOE).add(UselessBlocks.USELESS_OAK_LEAVES.get()); this.tag(BlockTags.NEEDS_STONE_TOOL).add(UselessBlocks.USELESS_ORE.get(), UselessBlocks.DEEPSLATE_USELESS_ORE.get(), UselessBlocks.NETHER_USELESS_ORE.get(), UselessBlocks.END_USELESS_ORE.get(), UselessBlocks.USELESS_BLOCK.get()); @@ -80,9 +78,9 @@ protected void addTags(HolderLookup.Provider lookupProvider) { } } - public static class Items extends ItemTagsProvider { - public Items(PackOutput packOutput, CompletableFuture lookupProvider, CompletableFuture> blockTags, @Nullable ExistingFileHelper existingFileHelper) { - super(packOutput, lookupProvider, blockTags, UselessMod.MOD_ID, existingFileHelper); + public static class Items extends BlockTagCopyingItemTagProvider { + public Items(PackOutput output, CompletableFuture lookupProvider, CompletableFuture> blockTags) { + super(output, lookupProvider, blockTags, UselessMod.MOD_ID); } @Override @@ -165,8 +163,8 @@ protected void addTags(HolderLookup.Provider lookupProvider) { } public static class Fluids extends FluidTagsProvider { - public Fluids(PackOutput packOutput, CompletableFuture lookupProvider, @Nullable ExistingFileHelper existingFileHelper) { - super(packOutput, lookupProvider, UselessMod.MOD_ID, existingFileHelper); + public Fluids(PackOutput packOutput, CompletableFuture lookupProvider) { + super(packOutput, lookupProvider, UselessMod.MOD_ID); } @Override @@ -176,30 +174,29 @@ protected void addTags(HolderLookup.Provider lookupProvider) { } public static class Entities extends EntityTypeTagsProvider { - public Entities(PackOutput packOutput, CompletableFuture lookupProvider, @Nullable ExistingFileHelper existingFileHelper) { - super(packOutput, lookupProvider, UselessMod.MOD_ID, existingFileHelper); + public Entities(PackOutput packOutput, CompletableFuture lookupProvider) { + super(packOutput, lookupProvider, UselessMod.MOD_ID); } @Override protected void addTags(HolderLookup.Provider lookupProvider) { this.tag(EntityTypeTags.SKELETONS).add(UselessEntityTypes.USELESS_SKELETON.get()); + this.tag(EntityTypeTags.BURN_IN_DAYLIGHT).add(UselessEntityTypes.USELESS_SKELETON.get()); } } public static class Paintings extends PaintingVariantTagsProvider { - public Paintings(PackOutput packOutput, CompletableFuture lookupProvider, @Nullable ExistingFileHelper existingFileHelper) { - super(packOutput, lookupProvider, UselessMod.MOD_ID, existingFileHelper); + public Paintings(PackOutput packOutput, CompletableFuture lookupProvider) { + super(packOutput, lookupProvider, UselessMod.MOD_ID); } @Override protected void addTags(HolderLookup.Provider lookupProvider) { this.tag(PaintingVariantTags.PLACEABLE) - .add( - UselessPaintingVariants.LARGE_LOGO_RED, - UselessPaintingVariants.LARGE_LOGO_BLUE, - UselessPaintingVariants.SMALL_LOGO_RED, - UselessPaintingVariants.SMALL_LOGO_BLUE - ); + .add(UselessPaintingVariants.LARGE_LOGO_RED) + .add(UselessPaintingVariants.LARGE_LOGO_BLUE) + .add(UselessPaintingVariants.SMALL_LOGO_RED) + .add(UselessPaintingVariants.SMALL_LOGO_BLUE); } } } diff --git a/src/main/java/net/themcbrothers/uselessmod/datagen/builder/CoffeeRecipeBuilder.java b/src/main/java/net/themcbrothers/uselessmod/datagen/builder/CoffeeRecipeBuilder.java index 5e7b79c8..0d46e260 100644 --- a/src/main/java/net/themcbrothers/uselessmod/datagen/builder/CoffeeRecipeBuilder.java +++ b/src/main/java/net/themcbrothers/uselessmod/datagen/builder/CoffeeRecipeBuilder.java @@ -4,7 +4,7 @@ import net.minecraft.advancements.AdvancementRequirements; import net.minecraft.advancements.AdvancementRewards; import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.critereon.RecipeUnlockedTrigger; +import net.minecraft.advancements.criterion.RecipeUnlockedTrigger; import net.minecraft.data.recipes.RecipeBuilder; import net.minecraft.data.recipes.RecipeOutput; import net.minecraft.resources.ResourceKey; @@ -81,12 +81,12 @@ public void save(RecipeOutput output, @NotNull ResourceKey> resourceKe output.accept(resourceKey, new CoffeeRecipe(this.group == null ? "" : this.group, this.cupIngredient, this.beanIngredient, Optional.ofNullable(this.extraIngredient), this.waterIngredient, Optional.ofNullable(this.milkIngredient), this.result, this.cookingTime), - advancement.build(resourceKey.location().withPrefix("recipes/coffee/"))); + advancement.build(resourceKey.identifier().withPrefix("recipes/coffee/"))); } private void ensureValid(ResourceKey> id) { if (this.criteria.isEmpty()) { - throw new IllegalStateException("No way of obtaining recipe " + id.location()); + throw new IllegalStateException("No way of obtaining recipe " + id.identifier()); } } } diff --git a/src/main/java/net/themcbrothers/uselessmod/datagen/loot/UselessBlockLoot.java b/src/main/java/net/themcbrothers/uselessmod/datagen/loot/UselessBlockLoot.java index 01da2824..8a48d0fa 100644 --- a/src/main/java/net/themcbrothers/uselessmod/datagen/loot/UselessBlockLoot.java +++ b/src/main/java/net/themcbrothers/uselessmod/datagen/loot/UselessBlockLoot.java @@ -1,7 +1,7 @@ package net.themcbrothers.uselessmod.datagen.loot; -import net.minecraft.advancements.critereon.ItemPredicate; -import net.minecraft.advancements.critereon.StatePropertiesPredicate; +import net.minecraft.advancements.criterion.ItemPredicate; +import net.minecraft.advancements.criterion.StatePropertiesPredicate; import net.minecraft.core.Holder; import net.minecraft.core.HolderLookup; import net.minecraft.core.component.DataComponents; @@ -10,8 +10,6 @@ import net.minecraft.world.flag.FeatureFlags; import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; -import net.minecraft.world.item.enchantment.Enchantment; -import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.block.BedBlock; import net.minecraft.world.level.block.Block; @@ -21,14 +19,11 @@ import net.minecraft.world.level.storage.loot.LootTable; import net.minecraft.world.level.storage.loot.entries.LootItem; import net.minecraft.world.level.storage.loot.functions.CopyComponentsFunction; -import net.minecraft.world.level.storage.loot.functions.CopyNameFunction; -import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction; -import net.minecraft.world.level.storage.loot.predicates.BonusLevelTableCondition; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.level.storage.loot.predicates.LootItemBlockStatePropertyCondition; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; import net.minecraft.world.level.storage.loot.predicates.MatchTool; import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; -import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; import net.neoforged.neoforge.common.Tags; import net.themcbrothers.uselessmod.core.Registration; import net.themcbrothers.uselessmod.core.UselessDataComponents; @@ -91,7 +86,7 @@ protected void generate() { this.dropPottedContents(POTTED_BLUE_ROSE.get()); this.dropPottedContents(POTTED_USELESS_ROSE.get()); this.dropPottedContents(POTTED_USELESS_OAK_SAPLING.get()); - LootItemCondition.Builder condition1 = LootItemBlockStatePropertyCondition.hasBlockStateProperties(USELESS_WHEAT.get()).setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(CropBlock.AGE, 7)); + LootItemCondition.Builder condition1 = LootItemBlockStatePropertyCondition.hasBlockStateProperties(USELESS_WHEAT.get()).setProperties(net.minecraft.advancements.criterion.StatePropertiesPredicate.Builder.properties().hasProperty(CropBlock.AGE, 7)); this.add(USELESS_WHEAT.get(), createCropDrops(USELESS_WHEAT.get(), UselessItems.USELESS_WHEAT.get(), UselessItems.USELESS_WHEAT_SEEDS.get(), condition1)); LootItemCondition.Builder condition2 = LootItemBlockStatePropertyCondition.hasBlockStateProperties(WILD_USELESS_WHEAT.get()).setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(CropBlock.AGE, 7)); this.add(WILD_USELESS_WHEAT.get(), createCropDrops(USELESS_WHEAT.get(), UselessItems.USELESS_WHEAT.get(), UselessItems.USELESS_WHEAT_SEEDS.get(), condition2)); @@ -159,28 +154,28 @@ protected void generate() { private LootTable.Builder createCopyLightsDrop(ItemLike itemLike) { return LootTable.lootTable().withPool(applyExplosionCondition(itemLike, LootPool.lootPool() .setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(itemLike)) - .apply(CopyComponentsFunction.copyComponents(CopyComponentsFunction.Source.BLOCK_ENTITY) + .apply(CopyComponentsFunction.copyComponentsFromBlockEntity(LootContextParams.BLOCK_ENTITY) .include(UselessDataComponents.LIGHTS.get())))); } private LootTable.Builder createCopyColorDrop(ItemLike itemLike) { return LootTable.lootTable().withPool(applyExplosionCondition(itemLike, LootPool.lootPool() .setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(itemLike)) - .apply(CopyComponentsFunction.copyComponents(CopyComponentsFunction.Source.BLOCK_ENTITY) + .apply(CopyComponentsFunction.copyComponentsFromBlockEntity(LootContextParams.BLOCK_ENTITY) .include(UselessDataComponents.COLOR.get())))); } private LootTable.Builder mimicDrop(ItemLike itemLike) { return LootTable.lootTable().withPool(applyExplosionCondition(itemLike, LootPool.lootPool() .setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(itemLike)) - .apply(CopyComponentsFunction.copyComponents(CopyComponentsFunction.Source.BLOCK_ENTITY) + .apply(CopyComponentsFunction.copyComponentsFromBlockEntity(LootContextParams.BLOCK_ENTITY) .include(UselessDataComponents.MIMIC.get())))); } private LootTable.Builder copyCoffeeDrop(ItemLike itemLike) { return LootTable.lootTable().withPool(applyExplosionCondition(itemLike, LootPool.lootPool() .setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(itemLike)) - .apply(CopyComponentsFunction.copyComponents(CopyComponentsFunction.Source.BLOCK_ENTITY) + .apply(CopyComponentsFunction.copyComponentsFromBlockEntity(LootContextParams.BLOCK_ENTITY) .include(UselessDataComponents.COFFEE_TYPE.get()) .include(DataComponents.CONSUMABLE)))); } @@ -188,7 +183,7 @@ private LootTable.Builder copyCoffeeDrop(ItemLike itemLike) { private LootTable.Builder createCoffeeMachineDrop(ItemLike itemLike) { return LootTable.lootTable().withPool(applyExplosionCondition(itemLike, LootPool.lootPool() .setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(itemLike)) - .apply(CopyComponentsFunction.copyComponents(CopyComponentsFunction.Source.BLOCK_ENTITY) + .apply(CopyComponentsFunction.copyComponentsFromBlockEntity(LootContextParams.BLOCK_ENTITY) .include(DataComponents.CUSTOM_NAME) .include(DataComponents.CONTAINER) .include(DataComponents.LOCK) @@ -199,9 +194,10 @@ private LootTable.Builder createCoffeeMachineDrop(ItemLike itemLike) { private LootTable.Builder wallClosetDrop(Block block) { return LootTable.lootTable().withPool(applyExplosionCondition(block, LootPool.lootPool() .setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(block) - .apply(CopyNameFunction.copyName(CopyNameFunction.NameSource.BLOCK_ENTITY)) - .apply(CopyComponentsFunction.copyComponents(CopyComponentsFunction.Source.BLOCK_ENTITY) - .include(UselessDataComponents.WALL_CLOSET_MATERIAL.get()))))); + .apply(CopyComponentsFunction.copyComponentsFromBlockEntity(LootContextParams.BLOCK_ENTITY) + .include(DataComponents.CUSTOM_NAME) + .include(UselessDataComponents.WALL_CLOSET_MATERIAL.get()) + )))); } @Override diff --git a/src/main/java/net/themcbrothers/uselessmod/datagen/loot/package-info.java b/src/main/java/net/themcbrothers/uselessmod/datagen/loot/package-info.java index 69bb35f0..ff379339 100644 --- a/src/main/java/net/themcbrothers/uselessmod/datagen/loot/package-info.java +++ b/src/main/java/net/themcbrothers/uselessmod/datagen/loot/package-info.java @@ -1,7 +1,2 @@ -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@org.jspecify.annotations.NullMarked package net.themcbrothers.uselessmod.datagen.loot; - -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/net/themcbrothers/uselessmod/datagen/models/BlockModelProvider.java b/src/main/java/net/themcbrothers/uselessmod/datagen/models/BlockModelProvider.java new file mode 100644 index 00000000..6a250fe8 --- /dev/null +++ b/src/main/java/net/themcbrothers/uselessmod/datagen/models/BlockModelProvider.java @@ -0,0 +1,327 @@ +package net.themcbrothers.uselessmod.datagen.models; + +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import net.minecraft.client.data.models.BlockModelGenerators; +import net.minecraft.client.data.models.ItemModelGenerators; +import net.minecraft.client.data.models.MultiVariant; +import net.minecraft.client.data.models.blockstates.MultiVariantGenerator; +import net.minecraft.client.data.models.blockstates.PropertyDispatch; +import net.minecraft.client.data.models.model.*; +import net.minecraft.resources.Identifier; +import net.minecraft.world.item.DyeColor; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.Property; +import net.minecraft.world.level.block.state.properties.RailShape; +import net.themcbrothers.uselessmod.client.PaintTintSource; +import net.themcbrothers.uselessmod.core.UselessBlocks; +import net.themcbrothers.uselessmod.world.level.block.UselessSkullBlock; + +import java.util.function.Function; + +import static net.minecraft.client.data.models.BlockModelGenerators.*; + +public class BlockModelProvider extends ModelSubProvider { + public BlockModelProvider(BlockModelGenerators blockModels, ItemModelGenerators itemModels) { + super(blockModels, itemModels); + } + + @Override + protected void register() { + blockModels.createTrivialCube(UselessBlocks.USELESS_BLOCK.value()); + blockModels.createTrivialCube(UselessBlocks.SUPER_USELESS_BLOCK.value()); + blockModels.createTrivialCube(UselessBlocks.RAW_USELESS_BLOCK.value()); + blockModels.createTrivialCube(UselessBlocks.RAW_SUPER_USELESS_BLOCK.value()); + blockModels.createTrivialCube(UselessBlocks.USELESS_ORE.value()); + blockModels.createTrivialCube(UselessBlocks.DEEPSLATE_USELESS_ORE.value()); + blockModels.createTrivialCube(UselessBlocks.NETHER_USELESS_ORE.value()); + blockModels.createTrivialCube(UselessBlocks.END_USELESS_ORE.value()); + blockModels.createTrivialCube(UselessBlocks.SUPER_USELESS_ORE.value()); + blockModels.createTrivialCube(UselessBlocks.DEEPSLATE_SUPER_USELESS_ORE.value()); + blockModels.createTrivialCube(UselessBlocks.NETHER_SUPER_USELESS_ORE.value()); + blockModels.createTrivialCube(UselessBlocks.END_SUPER_USELESS_ORE.value()); + this.createPassiveRail(UselessBlocks.USELESS_RAIL.value()); + this.createActiveRail(UselessBlocks.USELESS_POWERED_RAIL.value()); + this.createActiveRail(UselessBlocks.USELESS_DETECTOR_RAIL.value()); + this.createActiveRail(UselessBlocks.USELESS_ACTIVATOR_RAIL.value()); + this.createBarsAndItem(UselessBlocks.USELESS_BARS.value()); + this.createBarsAndItem(UselessBlocks.SUPER_USELESS_BARS.value()); + this.createPlantWithDefaultItem(UselessBlocks.RED_ROSE.value(), UselessBlocks.POTTED_RED_ROSE.value(), BlockModelGenerators.PlantType.NOT_TINTED); + this.createPlantWithDefaultItem(UselessBlocks.BLUE_ROSE.value(), UselessBlocks.POTTED_BLUE_ROSE.value(), BlockModelGenerators.PlantType.NOT_TINTED); + this.createPlantWithDefaultItem(UselessBlocks.USELESS_ROSE.value(), UselessBlocks.POTTED_USELESS_ROSE.value(), BlockModelGenerators.PlantType.NOT_TINTED); + this.createPlantWithDefaultItem(UselessBlocks.USELESS_OAK_SAPLING.value(), UselessBlocks.POTTED_USELESS_OAK_SAPLING.value(), BlockModelGenerators.PlantType.NOT_TINTED); + blockModels.createTrivialCube(UselessBlocks.USELESS_OAK_LEAVES.value()); + blockModels.woodProvider(UselessBlocks.USELESS_OAK_LOG.value()).logWithHorizontal(UselessBlocks.USELESS_OAK_LOG.value()).wood(UselessBlocks.USELESS_OAK_WOOD.value()); + blockModels.woodProvider(UselessBlocks.STRIPPED_USELESS_OAK_LOG.value()).logWithHorizontal(UselessBlocks.STRIPPED_USELESS_OAK_LOG.value()).wood(UselessBlocks.STRIPPED_USELESS_OAK_WOOD.value()); + blockModels.createHangingSign(UselessBlocks.STRIPPED_USELESS_OAK_LOG.value(), UselessBlocks.USELESS_OAK_HANGING_SIGN.value(), UselessBlocks.USELESS_OAK_WALL_HANGING_SIGN.value()); + blockModels.family(UselessBlocks.USELESS_OAK_PLANKS.value()) + .button(UselessBlocks.USELESS_OAK_BUTTON.value()) + .fence(UselessBlocks.USELESS_OAK_FENCE.value()) + .fenceGate(UselessBlocks.USELESS_OAK_FENCE_GATE.value()) + .pressurePlate(UselessBlocks.USELESS_OAK_PRESSURE_PLATE.value()) + .slab(UselessBlocks.USELESS_OAK_SLAB.value()) + .stairs(UselessBlocks.USELESS_OAK_STAIRS.value()) + ; + blockModels.createFullAndCarpetBlocks(UselessBlocks.USELESS_WOOL.value(), UselessBlocks.USELESS_CARPET.value()); + blockModels.createBed(UselessBlocks.USELESS_BED.value(), UselessBlocks.USELESS_WOOL.value(), DyeColor.LIME); // TODO: custom bed + this.createCropBlock(UselessBlocks.USELESS_WHEAT.value(), BlockStateProperties.AGE_7, 0, 1, 2, 3, 4, 5, 6, 7); + this.createCropBlock(UselessBlocks.COFFEE_BEANS.value(), BlockStateProperties.AGE_7, 0, 1, 2, 3, 4, 5, 6, 7); + this.createWildCropBlock(UselessBlocks.WILD_USELESS_WHEAT.value(), UselessBlocks.USELESS_WHEAT.value(), BlockStateProperties.AGE_7, 0, 1, 2, 3, 4, 5, 6, 7); + this.createWildCropBlock(UselessBlocks.WILD_COFFEE_BEANS.value(), UselessBlocks.COFFEE_BEANS.value(), BlockStateProperties.AGE_7, 0, 1, 2, 3, 4, 5, 6, 7); + this.createSign(UselessBlocks.USELESS_OAK_SIGN.value(), UselessBlocks.USELESS_OAK_WALL_SIGN.value(), UselessBlocks.USELESS_OAK_PLANKS.value()); + this.createDoor(UselessBlocks.USELESS_DOOR.value()); + this.createDoor(UselessBlocks.SUPER_USELESS_DOOR.value()); + this.createDoor(UselessBlocks.USELESS_OAK_DOOR.value()); + this.createTrapdoor(UselessBlocks.USELESS_TRAPDOOR.value()); + this.createTrapdoor(UselessBlocks.SUPER_USELESS_TRAPDOOR.value()); + this.createTrapdoor(UselessBlocks.USELESS_OAK_TRAPDOOR.value()); + this.createPaintedWool(); + this.createLamp(UselessBlocks.WHITE_LAMP.value()); + this.createLamp(UselessBlocks.ORANGE_LAMP.value()); + this.createLamp(UselessBlocks.MAGENTA_LAMP.value()); + this.createLamp(UselessBlocks.LIGHT_BLUE_LAMP.value()); + this.createLamp(UselessBlocks.YELLOW_LAMP.value()); + this.createLamp(UselessBlocks.LIME_LAMP.value()); + this.createLamp(UselessBlocks.PINK_LAMP.value()); + this.createLamp(UselessBlocks.GRAY_LAMP.value()); + this.createLamp(UselessBlocks.LIGHT_GRAY_LAMP.value()); + this.createLamp(UselessBlocks.CYAN_LAMP.value()); + this.createLamp(UselessBlocks.PURPLE_LAMP.value()); + this.createLamp(UselessBlocks.BLUE_LAMP.value()); + this.createLamp(UselessBlocks.BROWN_LAMP.value()); + this.createLamp(UselessBlocks.GREEN_LAMP.value()); + this.createLamp(UselessBlocks.RED_LAMP.value()); + this.createLamp(UselessBlocks.BLACK_LAMP.value()); + this.createLantern(UselessBlocks.LANTERN.value()); + + blockModels.createNonTemplateModelBlock(UselessBlocks.PAINT_BUCKET.value()); + blockModels.createNonTemplateModelBlock(UselessBlocks.WALL_CLOSET.value()); + blockModels.createNonTemplateModelBlock(UselessBlocks.MACHINE_SUPPLIER.value()); + blockModels.createNonTemplateModelBlock(UselessBlocks.COFFEE_MACHINE.value()); + blockModels.createNonTemplateModelBlock(UselessBlocks.CUP.value()); + blockModels.createNonTemplateModelBlock(UselessBlocks.CUP_COFFEE.value()); + blockModels.createNonTemplateModelBlock(UselessBlocks.LIGHT_SWITCH.value()); + blockModels.createTrivialCube(UselessBlocks.LIGHT_SWITCH_BLOCK.value()); + + Identifier skullParent = ModelLocationUtils.decorateItemModelLocation("template_skull"); + blockModels.createHead(UselessBlocks.USELESS_SKELETON_SKULL.value(), UselessBlocks.USELESS_SKELETON_WALL_SKULL.value(), UselessSkullBlock.Types.USELESS_SKELETON, skullParent); + } + + private void createLamp(Block lamp) { + MultiVariant multivariant = plainVariant(TexturedModel.CUBE.create(lamp, modelOutput)); + MultiVariant multivariant1 = plainVariant(blockModels.createSuffixedVariant(lamp, "_on", ModelTemplates.CUBE_ALL, TextureMapping::cube)); + blockStateOutput + .accept( + MultiVariantGenerator.dispatch(lamp).with(BlockModelGenerators.createBooleanModelDispatch(BlockStateProperties.LIT, multivariant1, multivariant)) + ); + } + + private void createPaintedWool() { + Identifier blockModel = ModelLocationUtils.getModelLocation(UselessBlocks.PAINTED_WOOL.value()); + blockStateOutput.accept(createSimpleBlock(UselessBlocks.PAINTED_WOOL.value(), plainVariant(blockModel))); + blockModels.itemModelOutput.accept(UselessBlocks.PAINTED_WOOL.asItem(), ItemModelUtils.tintedModel(blockModel, PaintTintSource.INSTANCE)); + } + + private void createTrapdoor(Block trapdoorBlock) { + TextureMapping texturemapping = TextureMapping.defaultTexture(trapdoorBlock); + MultiVariant multivariant = plainVariant(cutout(ModelTemplates.TRAPDOOR_TOP).create(trapdoorBlock, texturemapping, modelOutput)); + Identifier identifier = cutout(ModelTemplates.TRAPDOOR_BOTTOM).create(trapdoorBlock, texturemapping, modelOutput); + MultiVariant multivariant1 = plainVariant(cutout(ModelTemplates.TRAPDOOR_OPEN).create(trapdoorBlock, texturemapping, modelOutput)); + blockStateOutput.accept(BlockModelGenerators.createTrapdoor(trapdoorBlock, multivariant, plainVariant(identifier), multivariant1)); + blockModels.registerSimpleItemModel(trapdoorBlock, identifier); + } + + private void createWildCropBlock(Block wildCropBlock, Block cropBlock, Property ageProperty, int... ageToVisualStageMapping) { + if (ageProperty.getPossibleValues().size() != ageToVisualStageMapping.length) { + throw new IllegalArgumentException(); + } else { + Int2ObjectMap int2objectmap = new Int2ObjectOpenHashMap<>(); + blockStateOutput + .accept( + MultiVariantGenerator.dispatch(wildCropBlock) + .with( + PropertyDispatch.initial(ageProperty) + .generate( + stage -> { + int i = ageToVisualStageMapping[stage]; + return plainVariant( + int2objectmap.computeIfAbsent( + i, + stage1 -> createWildCropVariant( + wildCropBlock, cropBlock, "_stage" + stage1, cutout(ModelTemplates.CROP), TextureMapping::crop + ) + ) + ); + } + ) + ) + ); + } + } + + private Identifier createWildCropVariant(Block wildCrop, Block crop, String suffix, ModelTemplate modelTemplate, Function textureMappingGetter) { + return modelTemplate.createWithSuffix(wildCrop, suffix, textureMappingGetter.apply(TextureMapping.getBlockTexture(crop, suffix)), this.modelOutput); + } + + private void createCropBlock(Block cropBlock, Property ageProperty, int... ageToVisualStageMapping) { + this.registerSimpleFlatItemModel(cropBlock.asItem()); + if (ageProperty.getPossibleValues().size() != ageToVisualStageMapping.length) { + throw new IllegalArgumentException(); + } else { + Int2ObjectMap int2objectmap = new Int2ObjectOpenHashMap<>(); + blockStateOutput + .accept( + MultiVariantGenerator.dispatch(cropBlock) + .with( + PropertyDispatch.initial(ageProperty) + .generate( + stage -> { + int i = ageToVisualStageMapping[stage]; + return plainVariant( + int2objectmap.computeIfAbsent( + i, + stage1 -> blockModels.createSuffixedVariant( + cropBlock, "_stage" + stage1, cutout(ModelTemplates.CROP), TextureMapping::crop + ) + ) + ); + } + ) + ) + ); + } + } + + private void createPassiveRail(Block railBlock) { + TextureMapping textureMapping = TextureMapping.rail(railBlock); + TextureMapping textureMapping1 = TextureMapping.rail(TextureMapping.getBlockTexture(railBlock, "_corner")); + MultiVariant multiVariant = plainVariant(cutout(ModelTemplates.RAIL_FLAT).create(railBlock, textureMapping, modelOutput)); + MultiVariant multiVariant1 = plainVariant(cutout(ModelTemplates.RAIL_CURVED).create(railBlock, textureMapping1, modelOutput)); + MultiVariant multiVariant2 = plainVariant(cutout(ModelTemplates.RAIL_RAISED_NE).create(railBlock, textureMapping, modelOutput)); + MultiVariant multiVariant3 = plainVariant(cutout(ModelTemplates.RAIL_RAISED_SW).create(railBlock, textureMapping, modelOutput)); + this.registerSimpleFlatItemModel(railBlock); + this.blockStateOutput + .accept( + MultiVariantGenerator.dispatch(railBlock) + .with( + PropertyDispatch.initial(BlockStateProperties.RAIL_SHAPE) + .select(RailShape.NORTH_SOUTH, multiVariant) + .select(RailShape.EAST_WEST, multiVariant.with(Y_ROT_90)) + .select(RailShape.ASCENDING_EAST, multiVariant2.with(Y_ROT_90)) + .select(RailShape.ASCENDING_WEST, multiVariant3.with(Y_ROT_90)) + .select(RailShape.ASCENDING_NORTH, multiVariant2) + .select(RailShape.ASCENDING_SOUTH, multiVariant3) + .select(RailShape.SOUTH_EAST, multiVariant1) + .select(RailShape.SOUTH_WEST, multiVariant1.with(Y_ROT_90)) + .select(RailShape.NORTH_WEST, multiVariant1.with(Y_ROT_180)) + .select(RailShape.NORTH_EAST, multiVariant1.with(Y_ROT_270)) + ) + ); + } + + private void createActiveRail(Block railBlock) { + MultiVariant multiVariant = plainVariant(blockModels.createSuffixedVariant(railBlock, "", cutout(ModelTemplates.RAIL_FLAT), TextureMapping::rail)); + MultiVariant multiVariant1 = plainVariant(blockModels.createSuffixedVariant(railBlock, "", cutout(ModelTemplates.RAIL_RAISED_NE), TextureMapping::rail)); + MultiVariant multiVariant2 = plainVariant(blockModels.createSuffixedVariant(railBlock, "", cutout(ModelTemplates.RAIL_RAISED_SW), TextureMapping::rail)); + MultiVariant multiVariant3 = plainVariant(blockModels.createSuffixedVariant(railBlock, "_on", cutout(ModelTemplates.RAIL_FLAT), TextureMapping::rail)); + MultiVariant multiVariant4 = plainVariant(blockModels.createSuffixedVariant(railBlock, "_on", cutout(ModelTemplates.RAIL_RAISED_NE), TextureMapping::rail)); + MultiVariant multiVariant5 = plainVariant(blockModels.createSuffixedVariant(railBlock, "_on", cutout(ModelTemplates.RAIL_RAISED_SW), TextureMapping::rail)); + this.registerSimpleFlatItemModel(railBlock); + this.blockStateOutput + .accept( + MultiVariantGenerator.dispatch(railBlock) + .with(PropertyDispatch.initial(BlockStateProperties.POWERED, BlockStateProperties.RAIL_SHAPE_STRAIGHT).generate((p_403947_, p_403948_) -> { + return switch (p_403948_) { + case NORTH_SOUTH -> p_403947_ ? multiVariant3 : multiVariant; + case EAST_WEST -> (p_403947_ ? multiVariant3 : multiVariant).with(Y_ROT_90); + case ASCENDING_EAST -> + (p_403947_ ? multiVariant4 : multiVariant1).with(Y_ROT_90); + case ASCENDING_WEST -> + (p_403947_ ? multiVariant5 : multiVariant2).with(Y_ROT_90); + case ASCENDING_NORTH -> p_403947_ ? multiVariant4 : multiVariant1; + case ASCENDING_SOUTH -> p_403947_ ? multiVariant5 : multiVariant2; + default -> throw new UnsupportedOperationException("Fix you generator!"); + }; + })) + ); + } + + private void createBarsAndItem(Block block) { + TextureMapping textureMapping = TextureMapping.bars(block); + blockModels.createBars( + block, + cutout(ModelTemplates.BARS_POST_ENDS).create(block, textureMapping, this.modelOutput), + cutout(ModelTemplates.BARS_POST).create(block, textureMapping, this.modelOutput), + cutout(ModelTemplates.BARS_CAP).create(block, textureMapping, this.modelOutput), + cutout(ModelTemplates.BARS_CAP_ALT).create(block, textureMapping, this.modelOutput), + cutout(ModelTemplates.BARS_POST_SIDE).create(block, textureMapping, this.modelOutput), + cutout(ModelTemplates.BARS_POST_SIDE_ALT).create(block, textureMapping, this.modelOutput) + ); + this.registerSimpleFlatItemModel(block); + } + + private void createDoor(Block doorBlock) { + TextureMapping textureMapping = TextureMapping.door(doorBlock); + MultiVariant multiVariant = plainVariant(cutout(ModelTemplates.DOOR_BOTTOM_LEFT).create(doorBlock, textureMapping, this.modelOutput)); + MultiVariant multiVariant1 = plainVariant(cutout(ModelTemplates.DOOR_BOTTOM_LEFT_OPEN).create(doorBlock, textureMapping, this.modelOutput)); + MultiVariant multiVariant2 = plainVariant(cutout(ModelTemplates.DOOR_BOTTOM_RIGHT).create(doorBlock, textureMapping, this.modelOutput)); + MultiVariant multiVariant3 = plainVariant(cutout(ModelTemplates.DOOR_BOTTOM_RIGHT_OPEN).create(doorBlock, textureMapping, this.modelOutput)); + MultiVariant multiVariant4 = plainVariant(cutout(ModelTemplates.DOOR_TOP_LEFT).create(doorBlock, textureMapping, this.modelOutput)); + MultiVariant multiVariant5 = plainVariant(cutout(ModelTemplates.DOOR_TOP_LEFT_OPEN).create(doorBlock, textureMapping, this.modelOutput)); + MultiVariant multiVariant6 = plainVariant(cutout(ModelTemplates.DOOR_TOP_RIGHT).create(doorBlock, textureMapping, this.modelOutput)); + MultiVariant multiVariant7 = plainVariant(cutout(ModelTemplates.DOOR_TOP_RIGHT_OPEN).create(doorBlock, textureMapping, this.modelOutput)); + this.registerSimpleFlatItemModel(doorBlock.asItem()); + this.blockStateOutput + .accept( + BlockModelGenerators.createDoor(doorBlock, multiVariant, multiVariant1, multiVariant2, multiVariant3, multiVariant4, multiVariant5, multiVariant6, multiVariant7) + ); + } + + private void createPlantWithDefaultItem(Block block, Block pottedBlock, BlockModelGenerators.PlantType plantType) { + this.registerSimpleItemModel(block.asItem(), plantType.createItemModel(this.blockModels, block)); + + TextureMapping textureMapping = plantType.getTextureMapping(block); + MultiVariant multiVariant = plainVariant(cutout(plantType.getCross()).create(block, textureMapping, this.modelOutput)); + this.blockStateOutput.accept(createSimpleBlock(block, multiVariant)); + + TextureMapping textureMappingPotted = plantType.getPlantTextureMapping(block); + MultiVariant multiVariantPotted = plainVariant(cutout(plantType.getCrossPot()).create(pottedBlock, textureMappingPotted, this.modelOutput)); + this.blockStateOutput.accept(createSimpleBlock(pottedBlock, multiVariantPotted)); + } + + private void createLantern(Block lanternBlock) { + MultiVariant multivariant = plainVariant(TexturedModel.LANTERN.updateTemplate(this::cutout).create(lanternBlock, this.modelOutput)); + MultiVariant multivariant1 = plainVariant(TexturedModel.HANGING_LANTERN.updateTemplate(this::cutout).create(lanternBlock, this.modelOutput)); + this.registerSimpleFlatItemModel(lanternBlock.asItem()); + this.blockStateOutput + .accept(MultiVariantGenerator.dispatch(lanternBlock).with(createBooleanModelDispatch(BlockStateProperties.HANGING, multivariant1, multivariant))); + } + + private void createSign(Block standingSignBlock, Block wallSignBlock, Block plankForParticlesBlock) { + TextureMapping textureMapping = TextureMapping.cube(plankForParticlesBlock); + MultiVariant multivariant = BlockModelGenerators.plainVariant( + ModelTemplates.PARTICLE_ONLY.create(standingSignBlock, textureMapping, this.modelOutput) + ); + this.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(standingSignBlock, multivariant)); + this.blockStateOutput.accept(BlockModelGenerators.createSimpleBlock(wallSignBlock, multivariant)); + this.registerSimpleFlatItemModel(standingSignBlock.asItem()); + } + + private void registerSimpleFlatItemModel(Block block) { + this.blockModels.registerSimpleFlatItemModel(block); + } + + private void registerSimpleFlatItemModel(Item item) { + this.blockModels.registerSimpleFlatItemModel(item); + } + + public void registerSimpleItemModel(Item item, Identifier model) { + this.blockModels.itemModelOutput.accept(item, ItemModelUtils.plainModel(model)); + } + + private ModelTemplate cutout(ModelTemplate modelTemplate) { + return modelTemplate.extend().renderType("cutout").build(); + } +} diff --git a/src/main/java/net/themcbrothers/uselessmod/datagen/models/ItemModelProvider.java b/src/main/java/net/themcbrothers/uselessmod/datagen/models/ItemModelProvider.java new file mode 100644 index 00000000..236087f4 --- /dev/null +++ b/src/main/java/net/themcbrothers/uselessmod/datagen/models/ItemModelProvider.java @@ -0,0 +1,92 @@ +package net.themcbrothers.uselessmod.datagen.models; + +import net.minecraft.client.data.models.BlockModelGenerators; +import net.minecraft.client.data.models.ItemModelGenerators; +import net.minecraft.client.data.models.model.*; +import net.minecraft.resources.Identifier; +import net.minecraft.world.item.Item; +import net.neoforged.neoforge.client.model.item.DynamicFluidContainerModel; +import net.neoforged.neoforge.common.NeoForgeMod; +import net.themcbrothers.uselessmod.client.PaintTintSource; +import net.themcbrothers.uselessmod.core.UselessFluids; +import net.themcbrothers.uselessmod.core.UselessItems; + +import java.util.Optional; + +import static net.minecraft.client.data.models.model.ModelTemplates.createItem; + +public class ItemModelProvider extends ModelSubProvider { + public static final ModelTemplate TWO_LAYERED_HANDHELD_ITEM = createItem("handheld", TextureSlot.LAYER0, TextureSlot.LAYER1); + + public ItemModelProvider(BlockModelGenerators blockModels, ItemModelGenerators itemModels) { + super(blockModels, itemModels); + } + + @Override + protected void register() { + itemModels.generateFlatItem(UselessItems.RAW_USELESS.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.RAW_SUPER_USELESS.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_DUST.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.SUPER_USELESS_DUST.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_INGOT.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.SUPER_USELESS_INGOT.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_NUGGET.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.SUPER_USELESS_NUGGET.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_SHEARS.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_SWORD.get(), ModelTemplates.FLAT_HANDHELD_ITEM); + itemModels.generateFlatItem(UselessItems.SUPER_USELESS_SWORD.get(), ModelTemplates.FLAT_HANDHELD_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_SHOVEL.get(), ModelTemplates.FLAT_HANDHELD_ITEM); + itemModels.generateFlatItem(UselessItems.SUPER_USELESS_SHOVEL.get(), ModelTemplates.FLAT_HANDHELD_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_PICKAXE.get(), ModelTemplates.FLAT_HANDHELD_ITEM); + itemModels.generateFlatItem(UselessItems.SUPER_USELESS_PICKAXE.get(), ModelTemplates.FLAT_HANDHELD_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_AXE.get(), ModelTemplates.FLAT_HANDHELD_ITEM); + itemModels.generateFlatItem(UselessItems.SUPER_USELESS_AXE.get(), ModelTemplates.FLAT_HANDHELD_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_HOE.get(), ModelTemplates.FLAT_HANDHELD_ITEM); + itemModels.generateFlatItem(UselessItems.SUPER_USELESS_HOE.get(), ModelTemplates.FLAT_HANDHELD_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_HELMET.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.SUPER_USELESS_HELMET.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_CHESTPLATE.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.SUPER_USELESS_CHESTPLATE.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_LEGGINGS.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.SUPER_USELESS_LEGGINGS.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_BOOTS.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.SUPER_USELESS_BOOTS.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_WHEAT.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.COFFEE_BEANS.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_BONE.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_LEATHER.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_FEATHER.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_SHEEP_SPAWN_EGG.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_PIG_SPAWN_EGG.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_CHICKEN_SPAWN_EGG.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_COW_SPAWN_EGG.get(), ModelTemplates.FLAT_ITEM); + itemModels.generateFlatItem(UselessItems.USELESS_SKELETON_SPAWN_EGG.get(), ModelTemplates.FLAT_ITEM); + + this.generatePaintBrush(UselessItems.PAINT_BRUSH.value()); + + itemModels.itemModelOutput.accept(UselessItems.BUCKET_PAINT.value(), new DynamicFluidContainerModel.Unbaked(new DynamicFluidContainerModel.Textures( + Optional.of(Identifier.withDefaultNamespace("item/bucket")), + Optional.of(Identifier.withDefaultNamespace("item/bucket")), + Optional.of(Identifier.fromNamespaceAndPath(NeoForgeMod.MOD_ID, "item/mask/bucket_fluid")), + Optional.of(Identifier.fromNamespaceAndPath(NeoForgeMod.MOD_ID, "item/mask/bucket_fluid_cover")) + ), UselessFluids.PAINT.get(), false, true, true)); + + // TODO: special renderers + itemModels.generateShield(UselessItems.USELESS_SHIELD.value()); + itemModels.generateShield(UselessItems.SUPER_USELESS_SHIELD.value()); + itemModels.generateElytra(UselessItems.USELESS_ELYTRA.value()); + itemModels.generateElytra(UselessItems.SUPER_USELESS_ELYTRA.value()); + } + + private void generatePaintBrush(Item item) { + itemModels.itemModelOutput.accept(item, + ItemModelUtils.tintedModel( + TWO_LAYERED_HANDHELD_ITEM.create(item, + TextureMapping.layered( + TextureMapping.getItemTexture(item, "_0"), + TextureMapping.getItemTexture(item, "_1")), + itemModels.modelOutput), + ItemModelGenerators.BLANK_LAYER, PaintTintSource.INSTANCE + )); + } +} diff --git a/src/main/java/net/themcbrothers/uselessmod/datagen/models/ModelSubProvider.java b/src/main/java/net/themcbrothers/uselessmod/datagen/models/ModelSubProvider.java new file mode 100644 index 00000000..48483929 --- /dev/null +++ b/src/main/java/net/themcbrothers/uselessmod/datagen/models/ModelSubProvider.java @@ -0,0 +1,26 @@ +package net.themcbrothers.uselessmod.datagen.models; + +import net.minecraft.client.data.models.BlockModelGenerators; +import net.minecraft.client.data.models.ItemModelGenerators; +import net.minecraft.client.data.models.blockstates.BlockModelDefinitionGenerator; +import net.minecraft.client.data.models.model.ModelInstance; +import net.minecraft.resources.Identifier; + +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +public abstract class ModelSubProvider { + protected final BlockModelGenerators blockModels; + protected final Consumer blockStateOutput; + protected final ItemModelGenerators itemModels; + protected final BiConsumer modelOutput; + + protected ModelSubProvider(BlockModelGenerators blockModels, ItemModelGenerators itemModels) { + this.blockModels = blockModels; + this.blockStateOutput = blockModels.blockStateOutput; + this.itemModels = itemModels; + this.modelOutput = blockModels.modelOutput; + } + + protected abstract void register(); +} diff --git a/src/main/java/net/themcbrothers/uselessmod/datagen/models/UselessModelProvider.java b/src/main/java/net/themcbrothers/uselessmod/datagen/models/UselessModelProvider.java new file mode 100644 index 00000000..bea44220 --- /dev/null +++ b/src/main/java/net/themcbrothers/uselessmod/datagen/models/UselessModelProvider.java @@ -0,0 +1,37 @@ +package net.themcbrothers.uselessmod.datagen.models; + +import net.minecraft.client.data.models.BlockModelGenerators; +import net.minecraft.client.data.models.ItemModelGenerators; +import net.minecraft.client.data.models.ModelProvider; +import net.minecraft.data.DataProvider; +import net.minecraft.data.PackOutput; +import net.themcbrothers.uselessmod.UselessMod; + +import java.util.List; + +public class UselessModelProvider extends ModelProvider { + private final List subProviders; + + private UselessModelProvider(PackOutput output, List subProviders) { + super(output, UselessMod.MOD_ID); + this.subProviders = subProviders; + } + + @Override + protected void registerModels(BlockModelGenerators blockModels, ItemModelGenerators itemModels) { + for (var subProvider : this.subProviders) { + subProvider.create(blockModels, itemModels).register(); + } + } + + public static Factory create(ModelSubProviderFactory... subProviders) { + var subProviderList = List.of(subProviders); + return output -> new UselessModelProvider(output, subProviderList); + } + + // This matches the super-class constructor of ModelSubProvider + @FunctionalInterface + public interface ModelSubProviderFactory { + ModelSubProvider create(BlockModelGenerators blockModels, ItemModelGenerators itemModels); + } +} diff --git a/src/main/java/net/themcbrothers/uselessmod/datagen/models/package-info.java b/src/main/java/net/themcbrothers/uselessmod/datagen/models/package-info.java new file mode 100644 index 00000000..783acad7 --- /dev/null +++ b/src/main/java/net/themcbrothers/uselessmod/datagen/models/package-info.java @@ -0,0 +1,2 @@ +@org.jspecify.annotations.NullMarked +package net.themcbrothers.uselessmod.datagen.models; \ No newline at end of file diff --git a/src/main/java/net/themcbrothers/uselessmod/datagen/package-info.java b/src/main/java/net/themcbrothers/uselessmod/datagen/package-info.java index 3bd7d3be..103b6093 100644 --- a/src/main/java/net/themcbrothers/uselessmod/datagen/package-info.java +++ b/src/main/java/net/themcbrothers/uselessmod/datagen/package-info.java @@ -1,9 +1,2 @@ -@FieldsAreNonnullByDefault -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@org.jspecify.annotations.NullMarked package net.themcbrothers.uselessmod.datagen; - -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/net/themcbrothers/uselessmod/datagen/worldgen/biome/UselessBiomeData.java b/src/main/java/net/themcbrothers/uselessmod/datagen/worldgen/biome/UselessBiomeData.java index f6b83305..952d6675 100644 --- a/src/main/java/net/themcbrothers/uselessmod/datagen/worldgen/biome/UselessBiomeData.java +++ b/src/main/java/net/themcbrothers/uselessmod/datagen/worldgen/biome/UselessBiomeData.java @@ -5,7 +5,10 @@ import net.minecraft.data.worldgen.BiomeDefaultFeatures; import net.minecraft.data.worldgen.BootstrapContext; import net.minecraft.world.entity.MobCategory; -import net.minecraft.world.level.biome.*; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeGenerationSettings; +import net.minecraft.world.level.biome.BiomeSpecialEffects; +import net.minecraft.world.level.biome.MobSpawnSettings; import net.minecraft.world.level.levelgen.GenerationStep; import net.minecraft.world.level.levelgen.carver.ConfiguredWorldCarver; import net.minecraft.world.level.levelgen.placement.PlacedFeature; @@ -34,20 +37,22 @@ private static Biome createUselessBiome(HolderGetter placedFeatur BiomeDefaultFeatures.addDefaultSoftDisks(biomeGenerationSettings); BiomeDefaultFeatures.addForestGrass(biomeGenerationSettings); BiomeDefaultFeatures.addDefaultMushrooms(biomeGenerationSettings); - BiomeDefaultFeatures.addDefaultExtraVegetation(biomeGenerationSettings); + BiomeDefaultFeatures.addDefaultExtraVegetation(biomeGenerationSettings, true); biomeGenerationSettings.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, UselessVegetationPlacements.FLOWER_USELESS); biomeGenerationSettings.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, UselessVegetationPlacements.TREES_USELESS_OAK); MobSpawnSettings.Builder mobSpawnSettings = new MobSpawnSettings.Builder(); - mobSpawnSettings.addSpawn(MobCategory.CREATURE, new MobSpawnSettings.SpawnerData(UselessEntityTypes.USELESS_SHEEP.get(), 12, 4, 4)); - mobSpawnSettings.addSpawn(MobCategory.CREATURE, new MobSpawnSettings.SpawnerData(UselessEntityTypes.USELESS_PIG.get(), 10, 4, 4)); - mobSpawnSettings.addSpawn(MobCategory.CREATURE, new MobSpawnSettings.SpawnerData(UselessEntityTypes.USELESS_CHICKEN.get(), 10, 4, 4)); - mobSpawnSettings.addSpawn(MobCategory.CREATURE, new MobSpawnSettings.SpawnerData(UselessEntityTypes.USELESS_COW.get(), 8, 4, 4)); + mobSpawnSettings.addSpawn(MobCategory.CREATURE, 12, new MobSpawnSettings.SpawnerData(UselessEntityTypes.USELESS_SHEEP.get(), 4, 4)); + mobSpawnSettings.addSpawn(MobCategory.CREATURE, 10, new MobSpawnSettings.SpawnerData(UselessEntityTypes.USELESS_PIG.get(), 4, 4)); + mobSpawnSettings.addSpawn(MobCategory.CREATURE, 10, new MobSpawnSettings.SpawnerData(UselessEntityTypes.USELESS_CHICKEN.get(), 4, 4)); + mobSpawnSettings.addSpawn(MobCategory.CREATURE, 8, new MobSpawnSettings.SpawnerData(UselessEntityTypes.USELESS_COW.get(), 4, 4)); BiomeDefaultFeatures.commonSpawns(mobSpawnSettings); + + // TODO: environment attributes return new Biome.BiomeBuilder() .temperature(0.7F).downfall(0.8F).specialEffects(new BiomeSpecialEffects.Builder() - .waterColor(0x468b44).waterFogColor(0x468b44).fogColor(12638463).skyColor(0x40B45F).grassColorOverride(0x40B45F) - .ambientMoodSound(AmbientMoodSettings.LEGACY_CAVE_SETTINGS).backgroundMusic(null).build()) + .waterColor(0x468b44)/*.waterFogColor(0x468b44).fogColor(12638463).skyColor(0x40B45F)*/.grassColorOverride(0x40B45F) + /*.ambientMoodSound(AmbientMoodSettings.LEGACY_CAVE_SETTINGS).backgroundMusic(null)*/.build()) .generationSettings(biomeGenerationSettings.build()) .mobSpawnSettings(mobSpawnSettings.build()).build(); } diff --git a/src/main/java/net/themcbrothers/uselessmod/datagen/worldgen/biome/UselessBiomeModifiers.java b/src/main/java/net/themcbrothers/uselessmod/datagen/worldgen/biome/UselessBiomeModifiers.java index fbce08b9..85cd9692 100644 --- a/src/main/java/net/themcbrothers/uselessmod/datagen/worldgen/biome/UselessBiomeModifiers.java +++ b/src/main/java/net/themcbrothers/uselessmod/datagen/worldgen/biome/UselessBiomeModifiers.java @@ -33,6 +33,6 @@ public static void bootstrap(BootstrapContext context) { private static void registerOreModifier(BootstrapContext context, HolderGetter placedFeatures, ResourceKey key, HolderSet biomes) { BiomeModifiers.AddFeaturesBiomeModifier modifier = new BiomeModifiers.AddFeaturesBiomeModifier(biomes, HolderSet.direct(placedFeatures.getOrThrow(key)), GenerationStep.Decoration.UNDERGROUND_ORES); - context.register(ResourceKey.create(NeoForgeRegistries.Keys.BIOME_MODIFIERS, key.location().withSuffix("_generation")), modifier); + context.register(ResourceKey.create(NeoForgeRegistries.Keys.BIOME_MODIFIERS, key.identifier().withSuffix("_generation")), modifier); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/event/UselessGameEvents.java b/src/main/java/net/themcbrothers/uselessmod/event/UselessGameEvents.java index 019b8be0..73b6a1f2 100644 --- a/src/main/java/net/themcbrothers/uselessmod/event/UselessGameEvents.java +++ b/src/main/java/net/themcbrothers/uselessmod/event/UselessGameEvents.java @@ -7,7 +7,7 @@ import net.themcbrothers.uselessmod.UselessMod; import net.themcbrothers.uselessmod.world.entity.animal.UselessSheep; -@EventBusSubscriber(bus = EventBusSubscriber.Bus.GAME, modid = UselessMod.MOD_ID) +@EventBusSubscriber(modid = UselessMod.MOD_ID) public class UselessGameEvents { @SubscribeEvent static void onEntityInteract(final PlayerInteractEvent.EntityInteract event) { diff --git a/src/main/java/net/themcbrothers/uselessmod/network/UselessPacketHandler.java b/src/main/java/net/themcbrothers/uselessmod/network/UselessPacketHandler.java index b4f8d39d..877bc6b5 100644 --- a/src/main/java/net/themcbrothers/uselessmod/network/UselessPacketHandler.java +++ b/src/main/java/net/themcbrothers/uselessmod/network/UselessPacketHandler.java @@ -1,26 +1,40 @@ package net.themcbrothers.uselessmod.network; -import net.neoforged.bus.api.IEventBus; -import net.themcbrothers.lib.network.BasePacketHandler; -import net.themcbrothers.lib.util.Version; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.ModContainer; +import net.neoforged.neoforge.client.network.event.RegisterClientPayloadHandlersEvent; +import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; +import net.neoforged.neoforge.network.registration.PayloadRegistrar; +import net.themcbrothers.lib.network.PacketMessage; +import net.themcbrothers.uselessmod.UselessMod; import net.themcbrothers.uselessmod.network.packets.BlockEntitySyncPacket; import net.themcbrothers.uselessmod.network.packets.CoffeeMachineMilkUpdatePacket; import net.themcbrothers.uselessmod.network.packets.CoffeeMachineStartPacket; +import org.apache.maven.artifact.versioning.ArtifactVersion; -public class UselessPacketHandler extends BasePacketHandler { - public UselessPacketHandler(IEventBus modEventBus, String modId, Version version) { - super(modEventBus, modId, version); +public class UselessPacketHandler { + private final String version; + + public UselessPacketHandler(ModContainer modContainer) { + ArtifactVersion version = modContainer.getModInfo().getVersion(); + this.version = "%d.%d".formatted(version.getMajorVersion(), version.getMinorVersion()); } - @Override - protected void registerPackets(PacketRegistrar registrar) { - registrar.playToServer(CoffeeMachineStartPacket.TYPE, CoffeeMachineStartPacket.STREAM_CODEC); - registrar.playToServer(CoffeeMachineMilkUpdatePacket.TYPE, CoffeeMachineMilkUpdatePacket.STREAM_CODEC); + @SubscribeEvent + private void registerPayloadHandlers(RegisterPayloadHandlersEvent event) { + PayloadRegistrar registrar = event.registrar(this.version); + + registrar.playToServer(CoffeeMachineStartPacket.TYPE, CoffeeMachineStartPacket.STREAM_CODEC, PacketMessage::handle); + registrar.playToServer(CoffeeMachineMilkUpdatePacket.TYPE, CoffeeMachineMilkUpdatePacket.STREAM_CODEC, PacketMessage::handle); + + registrar.playBidirectional(BlockEntitySyncPacket.TYPE, BlockEntitySyncPacket.STREAM_CODEC, PacketMessage::handle); - registrar.playBidirectional(BlockEntitySyncPacket.TYPE, BlockEntitySyncPacket.STREAM_CODEC); + UselessMod.LOGGER.info("Registered common payloads"); } - @Override - protected void registerPacketsNetworkThread(PacketRegistrar registrar) { + @SubscribeEvent + private void registerClientPayloadHandlers(RegisterClientPayloadHandlersEvent event) { + event.register(BlockEntitySyncPacket.TYPE, PacketMessage::handle); + UselessMod.LOGGER.info("Registered client payloads"); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/network/package-info.java b/src/main/java/net/themcbrothers/uselessmod/network/package-info.java index 60adac30..9733bc75 100644 --- a/src/main/java/net/themcbrothers/uselessmod/network/package-info.java +++ b/src/main/java/net/themcbrothers/uselessmod/network/package-info.java @@ -1,9 +1,2 @@ -@FieldsAreNonnullByDefault -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@org.jspecify.annotations.NullMarked package net.themcbrothers.uselessmod.network; - -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/net/themcbrothers/uselessmod/network/packets/BlockEntitySyncPacket.java b/src/main/java/net/themcbrothers/uselessmod/network/packets/BlockEntitySyncPacket.java index 1bbc971c..60506b04 100644 --- a/src/main/java/net/themcbrothers/uselessmod/network/packets/BlockEntitySyncPacket.java +++ b/src/main/java/net/themcbrothers/uselessmod/network/packets/BlockEntitySyncPacket.java @@ -18,7 +18,7 @@ import java.util.Objects; public record BlockEntitySyncPacket(BlockPos pos, CompoundTag tag) implements PacketMessage { - public static final Type TYPE = new Type<>(UselessMod.rl("block_entity_sync")); + public static final Type TYPE = new Type<>(UselessMod.id("block_entity_sync")); public static final StreamCodec STREAM_CODEC = new StreamCodec<>() { @Override public BlockEntitySyncPacket decode(FriendlyByteBuf buf) { @@ -48,7 +48,7 @@ public void handle(IPayloadContext context) { } } } else { - if (FMLEnvironment.dist == Dist.CLIENT) { + if (FMLEnvironment.getDist() == Dist.CLIENT) { MessageProxy.receiveServerUpdates(this.pos, this.tag).run(); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/network/packets/CoffeeMachineMilkUpdatePacket.java b/src/main/java/net/themcbrothers/uselessmod/network/packets/CoffeeMachineMilkUpdatePacket.java index 61cde9d4..10a5fd9c 100644 --- a/src/main/java/net/themcbrothers/uselessmod/network/packets/CoffeeMachineMilkUpdatePacket.java +++ b/src/main/java/net/themcbrothers/uselessmod/network/packets/CoffeeMachineMilkUpdatePacket.java @@ -11,7 +11,7 @@ import net.themcbrothers.uselessmod.world.level.block.entity.CoffeeMachineBlockEntity; public record CoffeeMachineMilkUpdatePacket(boolean useMilk) implements PacketMessage { - public static final Type TYPE = new Type<>(UselessMod.rl("coffee_machine_milk_update")); + public static final Type TYPE = new Type<>(UselessMod.id("coffee_machine_milk_update")); public static final StreamCodec STREAM_CODEC = new StreamCodec<>() { @Override public CoffeeMachineMilkUpdatePacket decode(FriendlyByteBuf buf) { diff --git a/src/main/java/net/themcbrothers/uselessmod/network/packets/CoffeeMachineStartPacket.java b/src/main/java/net/themcbrothers/uselessmod/network/packets/CoffeeMachineStartPacket.java index 32032813..130b2e94 100644 --- a/src/main/java/net/themcbrothers/uselessmod/network/packets/CoffeeMachineStartPacket.java +++ b/src/main/java/net/themcbrothers/uselessmod/network/packets/CoffeeMachineStartPacket.java @@ -11,7 +11,7 @@ import net.themcbrothers.uselessmod.world.level.block.entity.CoffeeMachineBlockEntity; public record CoffeeMachineStartPacket(boolean start) implements PacketMessage { - public static final Type TYPE = new Type<>(UselessMod.rl("coffee_machine_start")); + public static final Type TYPE = new Type<>(UselessMod.id("coffee_machine_start")); public static final StreamCodec STREAM_CODEC = new StreamCodec<>() { @Override public CoffeeMachineStartPacket decode(FriendlyByteBuf buf) { diff --git a/src/main/java/net/themcbrothers/uselessmod/network/packets/package-info.java b/src/main/java/net/themcbrothers/uselessmod/network/packets/package-info.java index e8cb0b96..37592e3e 100644 --- a/src/main/java/net/themcbrothers/uselessmod/network/packets/package-info.java +++ b/src/main/java/net/themcbrothers/uselessmod/network/packets/package-info.java @@ -1,9 +1,2 @@ -@FieldsAreNonnullByDefault -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault +@org.jspecify.annotations.NullMarked package net.themcbrothers.uselessmod.network.packets; - -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/net/themcbrothers/uselessmod/setup/ClientSetup.java b/src/main/java/net/themcbrothers/uselessmod/setup/ClientSetup.java index f68c6763..0bf6355b 100644 --- a/src/main/java/net/themcbrothers/uselessmod/setup/ClientSetup.java +++ b/src/main/java/net/themcbrothers/uselessmod/setup/ClientSetup.java @@ -1,23 +1,16 @@ package net.themcbrothers.uselessmod.setup; import net.minecraft.client.color.block.BlockColors; -import net.minecraft.client.color.item.ItemColors; -import net.minecraft.client.model.SkullModel; import net.minecraft.client.model.geom.ModelLayers; import net.minecraft.client.renderer.Sheets; import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; import net.minecraft.client.renderer.blockentity.HangingSignRenderer; import net.minecraft.client.renderer.blockentity.SignRenderer; import net.minecraft.client.renderer.blockentity.SkullBlockRenderer; -import net.minecraft.client.renderer.entity.player.PlayerRenderer; -import net.minecraft.client.renderer.item.ItemProperties; -import net.minecraft.client.resources.PlayerSkin; -import net.minecraft.core.Holder; -import net.minecraft.core.component.DataComponents; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.client.renderer.entity.player.AvatarRenderer; +import net.minecraft.resources.Identifier; import net.minecraft.util.ARGB; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Block; +import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.block.state.BlockState; import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.IEventBus; @@ -31,22 +24,19 @@ import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent; import net.neoforged.neoforge.client.extensions.common.IClientFluidTypeExtensions; import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent; -import net.neoforged.neoforge.client.model.DynamicFluidContainerModel; import net.neoforged.neoforge.fluids.FluidStack; import net.themcbrothers.uselessmod.UselessMod; import net.themcbrothers.uselessmod.api.CoffeeType; +import net.themcbrothers.uselessmod.client.CoffeeTintSource; +import net.themcbrothers.uselessmod.client.PaintTintSource; import net.themcbrothers.uselessmod.client.gui.screens.inventory.CoffeeMachineScreen; -import net.themcbrothers.uselessmod.client.model.MachineSupplierModel; -import net.themcbrothers.uselessmod.client.model.WallClosetModel; -import net.themcbrothers.uselessmod.client.renderer.UselessItemStackRendererProvider; import net.themcbrothers.uselessmod.client.renderer.blockentity.CoffeeMachineRenderer; import net.themcbrothers.uselessmod.client.renderer.blockentity.PaintBucketRenderer; import net.themcbrothers.uselessmod.client.renderer.blockentity.UselessBedRenderer; import net.themcbrothers.uselessmod.client.renderer.entity.*; -import net.themcbrothers.uselessmod.client.renderer.entity.layers.UselessElytraLayer; +import net.themcbrothers.uselessmod.client.renderer.entity.layers.UselessWingsLayer; import net.themcbrothers.uselessmod.config.ClientConfig; import net.themcbrothers.uselessmod.core.*; -import net.themcbrothers.uselessmod.util.CoffeeUtils; import net.themcbrothers.uselessmod.world.level.block.UselessSkullBlock; import net.themcbrothers.uselessmod.world.level.block.entity.CupBlockEntity; import net.themcbrothers.uselessmod.world.level.block.entity.MachineSupplierBlockEntity; @@ -67,7 +57,6 @@ public ClientSetup(IEventBus bus, ModContainer modContainer) { bus.addListener(this::entityAddLayers); bus.addListener(this::entityCreateSkullModels); bus.addListener(this::modelRegistry); - bus.addListener(UselessItemStackRendererProvider::initialize); } private void clientSetup(final FMLClientSetupEvent event) { @@ -83,14 +72,6 @@ private void clientSetup(final FMLClientSetupEvent event) { // Wood Type event.enqueueWork(() -> Sheets.addWoodType(UselessWoodTypes.USELESS_OAK)); - - // Item Properties - event.enqueueWork(() -> { - ItemProperties.register(UselessItems.USELESS_SHIELD.get(), ResourceLocation.withDefaultNamespace("blocking"), - (stack, level, entity, seed) -> entity != null && entity.isUsingItem() && entity.getUseItem() == stack ? 1 : 0); - ItemProperties.register(UselessItems.SUPER_USELESS_SHIELD.get(), ResourceLocation.withDefaultNamespace("blocking"), - (stack, level, entity, seed) -> entity != null && entity.isUsingItem() && entity.getUseItem() == stack ? 1 : 0); - }); } private void menuScreens(final RegisterMenuScreensEvent event) { @@ -98,20 +79,17 @@ private void menuScreens(final RegisterMenuScreensEvent event) { } private void extensions(final RegisterClientExtensionsEvent event) { - event.registerItem(UselessItemStackRendererProvider.blockEntity(), UselessBlocks.COFFEE_MACHINE.asItem(), UselessBlocks.USELESS_BED.asItem()); - event.registerItem(UselessItemStackRendererProvider.shield(), UselessItems.USELESS_SHIELD.asItem(), UselessItems.SUPER_USELESS_SHIELD.asItem()); - event.registerFluidType(new IClientFluidTypeExtensions() { - private static final ResourceLocation PAINT_STILL = UselessMod.rl("block/paint_still"), - PAINT_FLOW = UselessMod.rl("block/paint_flow"); + private static final Identifier PAINT_STILL = UselessMod.id("block/paint_still"), + PAINT_FLOW = UselessMod.id("block/paint_flow"); @Override - public ResourceLocation getStillTexture() { + public Identifier getStillTexture() { return PAINT_STILL; } @Override - public ResourceLocation getFlowingTexture() { + public Identifier getFlowingTexture() { return PAINT_FLOW; } @@ -159,36 +137,9 @@ private void blockColors(final RegisterColorHandlersEvent.Block event) { }, UselessBlocks.WALL_CLOSET.get()); } - private void itemColors(final RegisterColorHandlersEvent.Item event) { - final ItemColors colors = event.getItemColors(); - - event.register(((stack, layer) -> { - Integer color = stack.get(UselessDataComponents.COLOR.get()); - return layer == 1 && color != null ? ARGB.color(0xFF, color) : -1; - }), UselessItems.PAINT_BRUSH); - - event.register(((stack, layer) -> { - Integer color = stack.get(UselessDataComponents.COLOR.get()); - return color != null ? ARGB.color(0xFF, color) : -1; - }), UselessBlocks.PAINTED_WOOL); - - event.register((stack, layer) -> CoffeeUtils.getCoffeeType(stack) - .map(CoffeeType::getColor) - .map(color -> ARGB.color(0xFF, color)) - .orElse(-1), - UselessBlocks.CUP_COFFEE); - - event.register((stack, layer) -> { - BlockState mimic = stack.get(UselessDataComponents.MIMIC.get()); - return mimic != null ? colors.getColor(new ItemStack(mimic.getBlock()), layer) : -1; - }, UselessBlocks.MACHINE_SUPPLIER); - - event.register((stack, layer) -> { - Holder block = stack.get(UselessDataComponents.WALL_CLOSET_MATERIAL.get()); - return block != null ? colors.getColor(new ItemStack(block.value()), layer) : -1; - }); - - event.register(new DynamicFluidContainerModel.Colors(), UselessItems.BUCKET_PAINT); + private void itemColors(final RegisterColorHandlersEvent.ItemTintSources event) { + event.register(UselessMod.id("paint"), PaintTintSource.MAP_CODEC); + event.register(UselessMod.id("coffee"), CoffeeTintSource.MAP_CODEC); } private void entityRegisterRenders(final EntityRenderersEvent.RegisterRenderers event) { @@ -200,20 +151,18 @@ private void entityRegisterRenders(final EntityRenderersEvent.RegisterRenderers } private void entityAddLayers(final EntityRenderersEvent.AddLayers event) { - for (PlayerSkin.Model skin : event.getSkins()) { - if (event.getSkin(skin) instanceof PlayerRenderer renderer) { - renderer.addLayer(new UselessElytraLayer<>(renderer, event.getEntityModels(), event.getContext().getEquipmentRenderer())); - } + if (event.getRenderer(EntityType.PLAYER) instanceof AvatarRenderer renderer) { + renderer.addLayer(new UselessWingsLayer<>(renderer, event.getEntityModels(), event.getContext().getEquipmentRenderer())); } } private void entityCreateSkullModels(final EntityRenderersEvent.CreateSkullModels event) { - SkullBlockRenderer.SKIN_BY_TYPE.put(UselessSkullBlock.Types.USELESS_SKELETON, UselessMod.rl("textures/entity/useless_skeleton.png")); - event.registerSkullModel(UselessSkullBlock.Types.USELESS_SKELETON, new SkullModel(event.getEntityModelSet().bakeLayer(ModelLayers.SKELETON_SKULL))); + event.registerSkullModel(UselessSkullBlock.Types.USELESS_SKELETON, ModelLayers.SKELETON_SKULL, UselessMod.id("textures/entity/useless_skeleton.png")); } - private void modelRegistry(final ModelEvent.RegisterGeometryLoaders event) { - event.register(UselessMod.rl("machine_supplier"), MachineSupplierModel.Loader.INSTANCE); - event.register(UselessMod.rl("wall_closet"), WallClosetModel.Loader.INSTANCE); + private void modelRegistry(final ModelEvent.RegisterLoaders event) { + // TODO: custom loaders +// event.register(UselessMod.id("machine_supplier"), MachineSupplierModel.Loader.INSTANCE); +// event.register(UselessMod.id("wall_closet"), WallClosetModel.Loader.INSTANCE); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/setup/CommonSetup.java b/src/main/java/net/themcbrothers/uselessmod/setup/CommonSetup.java index 0f336505..fb5a20d8 100644 --- a/src/main/java/net/themcbrothers/uselessmod/setup/CommonSetup.java +++ b/src/main/java/net/themcbrothers/uselessmod/setup/CommonSetup.java @@ -1,13 +1,12 @@ package net.themcbrothers.uselessmod.setup; -import net.minecraft.core.Direction; import net.minecraft.core.Holder; import net.minecraft.stats.Stats; -import net.minecraft.world.entity.animal.Chicken; -import net.minecraft.world.entity.animal.Cow; -import net.minecraft.world.entity.animal.Pig; -import net.minecraft.world.entity.animal.Sheep; -import net.minecraft.world.entity.monster.AbstractSkeleton; +import net.minecraft.world.entity.animal.chicken.Chicken; +import net.minecraft.world.entity.animal.cow.Cow; +import net.minecraft.world.entity.animal.pig.Pig; +import net.minecraft.world.entity.animal.sheep.Sheep; +import net.minecraft.world.entity.monster.skeleton.AbstractSkeleton; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.FlowerPotBlock; import net.minecraft.world.level.block.state.properties.BlockStateProperties; @@ -16,21 +15,19 @@ import net.neoforged.fml.common.Mod; import net.neoforged.fml.config.ModConfig; import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; -import net.neoforged.neoforge.capabilities.Capabilities; import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.event.entity.EntityAttributeCreationEvent; -import net.neoforged.neoforge.items.wrapper.SidedInvWrapper; -import net.themcbrothers.lib.util.Version; import net.themcbrothers.uselessmod.UselessMod; import net.themcbrothers.uselessmod.api.LampRegistry; import net.themcbrothers.uselessmod.compat.VanillaCompatibility; import net.themcbrothers.uselessmod.config.ServerConfig; -import net.themcbrothers.uselessmod.core.*; +import net.themcbrothers.uselessmod.core.Registration; +import net.themcbrothers.uselessmod.core.UselessBlocks; +import net.themcbrothers.uselessmod.core.UselessEntityTypes; import net.themcbrothers.uselessmod.network.UselessPacketHandler; import net.themcbrothers.uselessmod.util.RecipeHelper; import net.themcbrothers.uselessmod.util.WallClosetRecipeManager; -import net.themcbrothers.uselessmod.world.item.BucketWithPaintItem; @Mod(value = UselessMod.MOD_ID) public class CommonSetup { @@ -46,7 +43,7 @@ public CommonSetup(IEventBus bus, ModContainer modContainer) { NeoForge.EVENT_BUS.register(new WallClosetRecipeManager()); // Networking - new UselessPacketHandler(bus, UselessMod.MOD_ID, new Version(modContainer)); + bus.register(new UselessPacketHandler(modContainer)); } private void setup(final FMLCommonSetupEvent event) { @@ -101,8 +98,9 @@ private void entityAttributes(final EntityAttributeCreationEvent event) { } private void registerCapabilities(final RegisterCapabilitiesEvent event) { + // TODO: capabilities // Blocks - event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, UselessBlockEntityTypes.COFFEE_MACHINE.get(), SidedInvWrapper::new); + /*event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, UselessBlockEntityTypes.COFFEE_MACHINE.get(), SidedInvWrapper::new); event.registerBlockEntity(Capabilities.FluidHandler.BLOCK, UselessBlockEntityTypes.COFFEE_MACHINE.get(), (blockEntity, side) -> blockEntity.tankHandler); event.registerBlockEntity(Capabilities.EnergyStorage.BLOCK, UselessBlockEntityTypes.COFFEE_MACHINE.get(), (blockEntity, side) -> blockEntity.energyStorage); @@ -114,6 +112,6 @@ private void registerCapabilities(final RegisterCapabilitiesEvent event) { event.registerBlock(Capabilities.EnergyStorage.BLOCK, (level, pos, state, blockEntity, context) -> level.getCapability(Capabilities.EnergyStorage.BLOCK, pos.above(), context), UselessBlocks.MACHINE_SUPPLIER.get()); // Items - event.registerItem(Capabilities.FluidHandler.ITEM, (container, context) -> new BucketWithPaintItem.PaintFluidBucketWrapper(container), UselessItems.BUCKET_PAINT); + event.registerItem(Capabilities.FluidHandler.ITEM, (container, context) -> new BucketWithPaintItem.PaintFluidBucketWrapper(container), UselessItems.BUCKET_PAINT);*/ } } diff --git a/src/main/java/net/themcbrothers/uselessmod/setup/package-info.java b/src/main/java/net/themcbrothers/uselessmod/setup/package-info.java new file mode 100644 index 00000000..7d4ec650 --- /dev/null +++ b/src/main/java/net/themcbrothers/uselessmod/setup/package-info.java @@ -0,0 +1,2 @@ +@org.jspecify.annotations.NullMarked +package net.themcbrothers.uselessmod.setup; \ No newline at end of file diff --git a/src/main/java/net/themcbrothers/uselessmod/util/RecipeHelper.java b/src/main/java/net/themcbrothers/uselessmod/util/RecipeHelper.java index 260e322e..c1d4992e 100644 --- a/src/main/java/net/themcbrothers/uselessmod/util/RecipeHelper.java +++ b/src/main/java/net/themcbrothers/uselessmod/util/RecipeHelper.java @@ -3,7 +3,7 @@ import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.RecipeManager; import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.neoforge.event.AddReloadListenerEvent; +import net.neoforged.neoforge.event.AddServerReloadListenersEvent; import net.themcbrothers.uselessmod.core.UselessRecipePropertySet; import net.themcbrothers.uselessmod.world.item.crafting.CoffeeRecipe; @@ -13,7 +13,7 @@ public class RecipeHelper { private static RecipeManager recipeManager; @SubscribeEvent - public void onAddReloadListeners(AddReloadListenerEvent event) { + public void onAddReloadListeners(AddServerReloadListenersEvent event) { recipeManager = event.getServerResources().getRecipeManager(); net.themcbrothers.lib.util.RecipeHelper.addPropertySet(UselessRecipePropertySet.COFFEE_MACHINE_CUP, diff --git a/src/main/java/net/themcbrothers/uselessmod/util/WallClosetRecipeManager.java b/src/main/java/net/themcbrothers/uselessmod/util/WallClosetRecipeManager.java index 76abdef9..cea09ba7 100644 --- a/src/main/java/net/themcbrothers/uselessmod/util/WallClosetRecipeManager.java +++ b/src/main/java/net/themcbrothers/uselessmod/util/WallClosetRecipeManager.java @@ -4,8 +4,8 @@ import net.minecraft.core.HolderSet; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; +import net.minecraft.resources.Identifier; import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.server.packs.resources.ResourceManagerReloadListener; import net.minecraft.world.item.ItemStack; @@ -14,7 +14,7 @@ import net.minecraft.world.level.block.Blocks; import net.neoforged.bus.api.EventPriority; import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.neoforge.event.AddReloadListenerEvent; +import net.neoforged.neoforge.event.AddServerReloadListenersEvent; import net.themcbrothers.uselessmod.UselessMod; import net.themcbrothers.uselessmod.UselessTags; import net.themcbrothers.uselessmod.core.UselessBlocks; @@ -26,10 +26,9 @@ import java.util.Optional; public class WallClosetRecipeManager implements ResourceManagerReloadListener { - @SubscribeEvent(priority = EventPriority.LOWEST) - public void addReloadListeners(final AddReloadListenerEvent event) { - event.addListener(this); + public void addReloadListeners(final AddServerReloadListenersEvent event) { + event.addListener(UselessMod.id("wall_closet_recipes"), this); } @Override @@ -74,7 +73,7 @@ private static RecipeHolder createWallClosetRecipe(Block material) output.set(UselessDataComponents.WALL_CLOSET_MATERIAL, blockHolder); ShapedRecipePattern pattern = new ShapedRecipePattern(3, 3, ingredients, Optional.empty()); - ResourceLocation id = UselessMod.rl("closet." + blockHolder.getRegisteredName().replace(':', '.')); + Identifier id = UselessMod.id("closet." + blockHolder.getRegisteredName().replace(':', '.')); ResourceKey> key = ResourceKey.create(Registries.RECIPE, id); ShapedRecipe recipe = new ShapedRecipe("uselessmod:closets", CraftingBookCategory.MISC, pattern, output); @@ -83,7 +82,7 @@ private static RecipeHolder createWallClosetRecipe(Block material) @NotNull public static Block getSlab(Block block) { - ResourceLocation blockReg = BuiltInRegistries.BLOCK.getKey(block); + Identifier blockReg = BuiltInRegistries.BLOCK.getKey(block); Block result = Blocks.AIR; String namespace = blockReg.getNamespace(); @@ -91,12 +90,12 @@ public static Block getSlab(Block block) { if (path.endsWith("_planks")) { String newPath = path.substring(0, path.length() - "_planks".length()) + "_slab"; - ResourceLocation newReg = ResourceLocation.fromNamespaceAndPath(namespace, newPath); + Identifier newReg = Identifier.fromNamespaceAndPath(namespace, newPath); result = BuiltInRegistries.BLOCK.getValue(newReg); } else if (path.endsWith("s")) { String newPath = path.substring(0, path.length() - 1) + "_slab"; - ResourceLocation newReg = ResourceLocation.fromNamespaceAndPath(namespace, newPath); + Identifier newReg = Identifier.fromNamespaceAndPath(namespace, newPath); result = BuiltInRegistries.BLOCK.getValue(newReg); } @@ -105,7 +104,7 @@ public static Block getSlab(Block block) { return result; } - ResourceLocation newReg = ResourceLocation.fromNamespaceAndPath(namespace, path + "_slab"); + Identifier newReg = Identifier.fromNamespaceAndPath(namespace, path + "_slab"); return BuiltInRegistries.BLOCK.getValue(newReg); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/entity/animal/UselessChicken.java b/src/main/java/net/themcbrothers/uselessmod/world/entity/animal/UselessChicken.java index ba7b64f1..98a8c04f 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/entity/animal/UselessChicken.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/entity/animal/UselessChicken.java @@ -4,7 +4,7 @@ import net.minecraft.world.entity.AgeableMob; import net.minecraft.world.entity.EntitySpawnReason; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.animal.Chicken; +import net.minecraft.world.entity.animal.chicken.Chicken; import net.minecraft.world.level.Level; import net.themcbrothers.uselessmod.core.UselessEntityTypes; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/net/themcbrothers/uselessmod/world/entity/animal/UselessCow.java b/src/main/java/net/themcbrothers/uselessmod/world/entity/animal/UselessCow.java index 006ac0f6..ab564978 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/entity/animal/UselessCow.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/entity/animal/UselessCow.java @@ -4,7 +4,7 @@ import net.minecraft.world.entity.AgeableMob; import net.minecraft.world.entity.EntitySpawnReason; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.animal.Cow; +import net.minecraft.world.entity.animal.cow.Cow; import net.minecraft.world.level.Level; import net.themcbrothers.uselessmod.core.UselessEntityTypes; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/net/themcbrothers/uselessmod/world/entity/animal/UselessPig.java b/src/main/java/net/themcbrothers/uselessmod/world/entity/animal/UselessPig.java index 622fc0b4..2e350694 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/entity/animal/UselessPig.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/entity/animal/UselessPig.java @@ -4,7 +4,7 @@ import net.minecraft.world.entity.AgeableMob; import net.minecraft.world.entity.EntitySpawnReason; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.animal.Pig; +import net.minecraft.world.entity.animal.pig.Pig; import net.minecraft.world.level.Level; import net.themcbrothers.uselessmod.core.UselessEntityTypes; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/net/themcbrothers/uselessmod/world/entity/animal/UselessSheep.java b/src/main/java/net/themcbrothers/uselessmod/world/entity/animal/UselessSheep.java index 80bf092d..ac98d5d6 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/entity/animal/UselessSheep.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/entity/animal/UselessSheep.java @@ -6,7 +6,7 @@ import net.minecraft.world.entity.AgeableMob; import net.minecraft.world.entity.EntitySpawnReason; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.animal.Sheep; +import net.minecraft.world.entity.animal.sheep.Sheep; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; diff --git a/src/main/java/net/themcbrothers/uselessmod/world/entity/animal/package-info.java b/src/main/java/net/themcbrothers/uselessmod/world/entity/animal/package-info.java index df382514..c8979edb 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/entity/animal/package-info.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/entity/animal/package-info.java @@ -1,9 +1,2 @@ -@FieldsAreNonnullByDefault -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package net.themcbrothers.uselessmod.world.entity.animal; - -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file +@org.jspecify.annotations.NullMarked +package net.themcbrothers.uselessmod.world.entity.animal; \ No newline at end of file diff --git a/src/main/java/net/themcbrothers/uselessmod/world/entity/monster/UselessSkeleton.java b/src/main/java/net/themcbrothers/uselessmod/world/entity/monster/UselessSkeleton.java index df147197..a66d505b 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/entity/monster/UselessSkeleton.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/entity/monster/UselessSkeleton.java @@ -5,10 +5,8 @@ import net.minecraft.sounds.SoundEvents; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.monster.AbstractSkeleton; -import net.minecraft.world.entity.monster.Creeper; +import net.minecraft.world.entity.monster.skeleton.AbstractSkeleton; import net.minecraft.world.level.Level; -import net.themcbrothers.uselessmod.core.UselessBlocks; import org.jetbrains.annotations.Nullable; public class UselessSkeleton extends AbstractSkeleton { @@ -19,10 +17,7 @@ public UselessSkeleton(EntityType type, Level level) @Override protected void dropCustomDeathLoot(ServerLevel level, DamageSource damageSource, boolean flag) { super.dropCustomDeathLoot(level, damageSource, flag); - if (damageSource.getEntity() instanceof Creeper creeper && creeper.canDropMobsSkull()) { - creeper.increaseDroppedSkulls(); - this.spawnAtLocation(level, UselessBlocks.USELESS_SKELETON_SKULL); - } + // TODO: loot table skull drop } @Override diff --git a/src/main/java/net/themcbrothers/uselessmod/world/entity/monster/package-info.java b/src/main/java/net/themcbrothers/uselessmod/world/entity/monster/package-info.java index 73c8ed2a..be87208a 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/entity/monster/package-info.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/entity/monster/package-info.java @@ -1,9 +1,2 @@ -@FieldsAreNonnullByDefault -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package net.themcbrothers.uselessmod.world.entity.monster; - -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file +@org.jspecify.annotations.NullMarked +package net.themcbrothers.uselessmod.world.entity.monster; \ No newline at end of file diff --git a/src/main/java/net/themcbrothers/uselessmod/world/inventory/CoffeeMachineMenu.java b/src/main/java/net/themcbrothers/uselessmod/world/inventory/CoffeeMachineMenu.java index 7c0db43a..47ff4a39 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/inventory/CoffeeMachineMenu.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/inventory/CoffeeMachineMenu.java @@ -1,45 +1,32 @@ package net.themcbrothers.uselessmod.world.inventory; -import com.mojang.datafixers.util.Pair; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.FluidTags; +import net.minecraft.resources.Identifier; import net.minecraft.world.Container; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.*; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.RecipePropertySet; -import net.neoforged.neoforge.capabilities.Capabilities; -import net.neoforged.neoforge.common.Tags; -import net.neoforged.neoforge.energy.IEnergyStorage; -import net.neoforged.neoforge.fluids.FluidStack; import net.neoforged.neoforge.fluids.capability.IFluidHandler; import net.themcbrothers.lib.energy.EnergyProvider; import net.themcbrothers.uselessmod.UselessMod; import net.themcbrothers.uselessmod.core.UselessBlocks; import net.themcbrothers.uselessmod.core.UselessMenuTypes; import net.themcbrothers.uselessmod.core.UselessRecipePropertySet; -import net.themcbrothers.uselessmod.core.UselessRecipeTypes; -import net.themcbrothers.uselessmod.world.item.crafting.CoffeeRecipe; import net.themcbrothers.uselessmod.world.level.block.entity.CoffeeMachineBlockEntity; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import javax.annotation.Nonnull; -import java.util.List; import java.util.Objects; -import java.util.Optional; -import static net.minecraft.world.inventory.InventoryMenu.BLOCK_ATLAS; import static net.themcbrothers.lib.util.ContainerHelper.getBlockEntity; public class CoffeeMachineMenu extends AbstractContainerMenu implements EnergyProvider { - public static final ResourceLocation EMPTY_COFFEE_MACHINE_SLOT_CUP = UselessMod.rl("item/empty_coffee_machine_slot_cup"); - public static final ResourceLocation EMPTY_COFFEE_MACHINE_SLOT_BEANS = UselessMod.rl("item/empty_coffee_machine_slot_beans"); - public static final ResourceLocation EMPTY_COFFEE_MACHINE_SLOT_EXTRA = UselessMod.rl("item/empty_coffee_machine_slot_extra"); - public static final ResourceLocation EMPTY_COFFEE_MACHINE_SLOT_BUCKET = UselessMod.rl("item/empty_coffee_machine_slot_bucket"); + public static final Identifier EMPTY_COFFEE_MACHINE_SLOT_CUP = UselessMod.id("item/empty_coffee_machine_slot_cup"); + public static final Identifier EMPTY_COFFEE_MACHINE_SLOT_BEANS = UselessMod.id("item/empty_coffee_machine_slot_beans"); + public static final Identifier EMPTY_COFFEE_MACHINE_SLOT_EXTRA = UselessMod.id("item/empty_coffee_machine_slot_extra"); + public static final Identifier EMPTY_COFFEE_MACHINE_SLOT_BUCKET = UselessMod.id("item/empty_coffee_machine_slot_bucket"); private static final int INV_SLOT_START = 7; private static final int INV_SLOT_END = INV_SLOT_START + 27; @@ -163,20 +150,11 @@ private boolean isExtra(ItemStack stack) { } private boolean isFluidItem(ItemStack stack) { - return Optional.ofNullable(stack.getCapability(Capabilities.FluidHandler.ITEM)) - .map(fluidHandlerItem -> { - for (int i = 0; i < fluidHandlerItem.getTanks(); i++) { - FluidStack fluidStack = fluidHandlerItem.getFluidInTank(i); - if (fluidStack.getFluid().is(FluidTags.WATER) || fluidStack.getFluid().is(Tags.Fluids.MILK)) - return true; - } - return false; - }).orElse(false); + return true; // TODO: slot checks } private boolean isEnergyItem(ItemStack stack) { - return Optional.ofNullable(stack.getCapability(Capabilities.EnergyStorage.ITEM)) - .map(IEnergyStorage::canExtract).orElse(false); + return true; // TODO: slot checks } @Override @@ -245,10 +223,9 @@ public boolean mayPlace(@NotNull ItemStack stack) { return CoffeeMachineMenu.this.isCup(stack); } - @Nullable @Override - public Pair getNoItemIcon() { - return Pair.of(BLOCK_ATLAS, EMPTY_COFFEE_MACHINE_SLOT_CUP); + public Identifier getNoItemIcon() { + return EMPTY_COFFEE_MACHINE_SLOT_CUP; } } @@ -262,10 +239,9 @@ public boolean mayPlace(@NotNull ItemStack stack) { return CoffeeMachineMenu.this.isBean(stack); } - @Nullable @Override - public Pair getNoItemIcon() { - return Pair.of(BLOCK_ATLAS, EMPTY_COFFEE_MACHINE_SLOT_BEANS); + public Identifier getNoItemIcon() { + return EMPTY_COFFEE_MACHINE_SLOT_BEANS; } } @@ -279,10 +255,9 @@ public boolean mayPlace(@NotNull ItemStack stack) { return CoffeeMachineMenu.this.isExtra(stack); } - @Nullable @Override - public Pair getNoItemIcon() { - return Pair.of(BLOCK_ATLAS, EMPTY_COFFEE_MACHINE_SLOT_EXTRA); + public Identifier getNoItemIcon() { + return EMPTY_COFFEE_MACHINE_SLOT_EXTRA; } } @@ -296,10 +271,9 @@ public boolean mayPlace(@NotNull ItemStack stack) { return CoffeeMachineMenu.this.isFluidItem(stack); } - @Nullable @Override - public Pair getNoItemIcon() { - return Pair.of(BLOCK_ATLAS, EMPTY_COFFEE_MACHINE_SLOT_BUCKET); + public Identifier getNoItemIcon() { + return EMPTY_COFFEE_MACHINE_SLOT_BUCKET; } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/item/BucketWithPaintItem.java b/src/main/java/net/themcbrothers/uselessmod/world/item/BucketWithPaintItem.java index 4b7e2709..eb797fc5 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/item/BucketWithPaintItem.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/item/BucketWithPaintItem.java @@ -4,43 +4,70 @@ import net.minecraft.network.chat.Component; import net.minecraft.world.item.BucketItem; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.component.TooltipDisplay; import net.minecraft.world.level.material.Fluid; -import net.neoforged.neoforge.fluids.FluidStack; import net.neoforged.neoforge.fluids.FluidType; -import net.neoforged.neoforge.fluids.capability.wrappers.FluidBucketWrapper; +import net.neoforged.neoforge.transfer.ItemAccessResourceHandler; +import net.neoforged.neoforge.transfer.access.ItemAccess; +import net.neoforged.neoforge.transfer.fluid.FluidResource; +import net.neoforged.neoforge.transfer.item.ItemResource; import net.themcbrothers.uselessmod.UselessMod; import net.themcbrothers.uselessmod.core.UselessDataComponents; import net.themcbrothers.uselessmod.core.UselessFluids; -import org.jetbrains.annotations.NotNull; -import java.util.List; +import java.util.Objects; +import java.util.function.Consumer; public class BucketWithPaintItem extends BucketItem { public BucketWithPaintItem(Fluid content, Properties properties) { super(content, properties); } + @SuppressWarnings("deprecation") @Override - public void appendHoverText(ItemStack stack, TooltipContext context, List hoverText, TooltipFlag tooltipFlag) { + public void appendHoverText(ItemStack stack, TooltipContext context, TooltipDisplay tooltipDisplay, Consumer tooltipAdder, TooltipFlag flag) { Integer color = stack.get(UselessDataComponents.COLOR.get()); if (color != null) { String hexColor = String.format("#%06X", (0xFFFFFF & color)); - hoverText.add(UselessMod.translate("misc", "color", hexColor).withStyle(ChatFormatting.GRAY)); + tooltipAdder.accept(UselessMod.translate("misc", "color", hexColor).withStyle(ChatFormatting.GRAY)); } } - public static class PaintFluidBucketWrapper extends FluidBucketWrapper { - public PaintFluidBucketWrapper(@NotNull ItemStack container) { - super(container); + public static class PaintFluidBucketWrapper extends ItemAccessResourceHandler { + public PaintFluidBucketWrapper(ItemAccess itemAccess) { + super(itemAccess, 1); } @Override - public @NotNull FluidStack getFluid() { - FluidStack fluidStack = new FluidStack(UselessFluids.PAINT.get(), FluidType.BUCKET_VOLUME); - fluidStack.applyComponents(this.container.getComponents()); - return fluidStack; + protected FluidResource getResourceFrom(ItemResource accessResource, int index) { + return FluidResource.of(UselessFluids.PAINT.get(), accessResource.getComponentsPatch()); + } + + @Override + protected int getAmountFrom(ItemResource accessResource, int index) { + var resource = getResourceFrom(accessResource, index); + return resource.isEmpty() ? 0 : FluidType.BUCKET_VOLUME; + } + + @Override + protected ItemResource update(ItemResource accessResource, int index, FluidResource newResource, int newAmount) { + if (newAmount == 0) { + return ItemResource.of(Items.BUCKET); + } else if (newAmount != FluidType.BUCKET_VOLUME) { + return ItemResource.EMPTY; + } else { + var newStack = newResource.toStack(newAmount); + return ItemResource.of(newStack.getFluidType().getBucket(newStack)); + } + } + + @Override + protected int getCapacity(int index, FluidResource resource) { + Objects.checkIndex(index, size()); + return FluidType.BUCKET_VOLUME; } } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/item/ColorBlockItem.java b/src/main/java/net/themcbrothers/uselessmod/world/item/ColorBlockItem.java new file mode 100644 index 00000000..a19ec92f --- /dev/null +++ b/src/main/java/net/themcbrothers/uselessmod/world/item/ColorBlockItem.java @@ -0,0 +1,30 @@ +package net.themcbrothers.uselessmod.world.item; + +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.component.TooltipDisplay; +import net.minecraft.world.level.block.Block; +import net.themcbrothers.uselessmod.UselessMod; +import net.themcbrothers.uselessmod.core.UselessDataComponents; + +import java.util.function.Consumer; + +public class ColorBlockItem extends BlockItem { + public ColorBlockItem(Block block, Properties properties) { + super(block, properties); + } + + @SuppressWarnings("deprecation") + @Override + public void appendHoverText(ItemStack stack, TooltipContext context, TooltipDisplay tooltipDisplay, Consumer tooltipAdder, TooltipFlag flag) { + Integer color = stack.get(UselessDataComponents.COLOR.get()); + + if (color != null) { + String hexColor = String.format("#%06X", (0xFFFFFF & color)); + tooltipAdder.accept(UselessMod.translate("misc", "color", hexColor).withStyle(ChatFormatting.GRAY)); + } + } +} diff --git a/src/main/java/net/themcbrothers/uselessmod/world/item/CupBlockItem.java b/src/main/java/net/themcbrothers/uselessmod/world/item/CupBlockItem.java index 1df19b61..a9a0c080 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/item/CupBlockItem.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/item/CupBlockItem.java @@ -1,25 +1,17 @@ package net.themcbrothers.uselessmod.world.item; -import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.core.HolderLookup; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.stats.Stats; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.entity.LivingEntity; +import net.minecraft.resources.Identifier; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.gameevent.GameEvent; import net.themcbrothers.uselessmod.api.CoffeeType; import net.themcbrothers.uselessmod.api.UselessRegistries; -import net.themcbrothers.uselessmod.core.UselessBlocks; import net.themcbrothers.uselessmod.util.CoffeeUtils; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; public class CupBlockItem extends BlockItem { private final boolean drinkable; @@ -56,12 +48,11 @@ public Component getName(ItemStack stack) { .orElse(Component.translatable(this.descriptionId)); } - @Nullable @Override - public String getCreatorModId(ItemStack itemStack) { + public @Nullable String getCreatorModId(HolderLookup.Provider registries, ItemStack itemStack) { return CoffeeUtils.getCoffeeType(itemStack) .map(UselessRegistries.COFFEE_REGISTRY::getKey) - .map(ResourceLocation::getNamespace) - .orElse(super.getCreatorModId(itemStack)); + .map(Identifier::getNamespace) + .orElse(super.getCreatorModId(registries, itemStack)); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/item/LightSwitchBlockItem.java b/src/main/java/net/themcbrothers/uselessmod/world/item/LightSwitchBlockItem.java index e7fb7919..074408d6 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/item/LightSwitchBlockItem.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/item/LightSwitchBlockItem.java @@ -3,6 +3,7 @@ import com.google.common.collect.Lists; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; @@ -12,6 +13,7 @@ import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.component.TooltipDisplay; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; @@ -22,6 +24,7 @@ import org.lwjgl.glfw.GLFW; import java.util.List; +import java.util.function.Consumer; import static net.themcbrothers.uselessmod.UselessMod.translate; @@ -30,27 +33,29 @@ public LightSwitchBlockItem(Block block, Properties properties) { super(block, properties); } + @SuppressWarnings("deprecation") @Override - public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag flag) { + public void appendHoverText(ItemStack stack, TooltipContext context, TooltipDisplay tooltipDisplay, Consumer tooltipAdder, TooltipFlag flag) { List lights = stack.get(UselessDataComponents.LIGHTS.get()); Level level = Minecraft.getInstance().level; + LocalPlayer player = Minecraft.getInstance().player; - if (level != null && lights != null) { - if (GLFW.glfwGetKey(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_KEY_LEFT_SHIFT) == GLFW.GLFW_PRESS) { + if (level != null && lights != null && player != null) { + if (GLFW.glfwGetKey(Minecraft.getInstance().getWindow().handle(), GLFW.GLFW_KEY_LEFT_SHIFT) == GLFW.GLFW_PRESS) { for (BlockPos pos : lights) { final BlockState state = level.getBlockState(pos); - final ItemStack cloneStack = state.getCloneItemStack(Minecraft.getInstance().hitResult, level, pos, Minecraft.getInstance().player); - final String modId = cloneStack.getItem().getCreatorModId(cloneStack); + final ItemStack cloneStack = state.getCloneItemStack(pos, level, false, player); + final String modId = cloneStack.getItem().getCreatorModId(level.registryAccess(), cloneStack); final MutableComponent displayComponent = Component.literal(pos.toShortString()).append(": ").append(state.getBlock().getName()); ModList.get().getModContainerById(modId).ifPresent(modContainer -> displayComponent.append(" (").append(modContainer.getModInfo().getDisplayName()).append(")")); - tooltip.add(displayComponent.withStyle(ChatFormatting.GRAY)); + tooltipAdder.accept(displayComponent.withStyle(ChatFormatting.GRAY)); } - tooltip.add(translate("tooltip", "light_switch.clear").withStyle(ChatFormatting.GRAY, ChatFormatting.ITALIC)); + tooltipAdder.accept(translate("tooltip", "light_switch.clear").withStyle(ChatFormatting.GRAY, ChatFormatting.ITALIC)); } else { - tooltip.add(translate("tooltip", "hold_shift").withStyle(ChatFormatting.GRAY)); + tooltipAdder.accept(translate("tooltip", "hold_shift").withStyle(ChatFormatting.GRAY)); } } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/item/MachineSupplierBlockItem.java b/src/main/java/net/themcbrothers/uselessmod/world/item/MachineSupplierBlockItem.java new file mode 100644 index 00000000..4b696a25 --- /dev/null +++ b/src/main/java/net/themcbrothers/uselessmod/world/item/MachineSupplierBlockItem.java @@ -0,0 +1,32 @@ +package net.themcbrothers.uselessmod.world.item; + +import net.minecraft.ChatFormatting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.component.TooltipDisplay; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.themcbrothers.uselessmod.core.UselessDataComponents; + +import java.util.function.Consumer; + +public class MachineSupplierBlockItem extends BlockItem { + public MachineSupplierBlockItem(Block block, Properties properties) { + super(block, properties); + } + + @SuppressWarnings("deprecation") + @Override + public void appendHoverText(ItemStack stack, TooltipContext context, TooltipDisplay tooltipDisplay, Consumer tooltipAdder, TooltipFlag flag) { + BlockState mimic = stack.get(UselessDataComponents.MIMIC.get()); + ClientLevel clientLevel = Minecraft.getInstance().level; + + if (mimic != null && clientLevel != null) { + tooltipAdder.accept(mimic.getBlock().getName().withStyle(ChatFormatting.GRAY)); + } + } +} diff --git a/src/main/java/net/themcbrothers/uselessmod/world/item/PaintBrushItem.java b/src/main/java/net/themcbrothers/uselessmod/world/item/PaintBrushItem.java index b3314756..8d276e1b 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/item/PaintBrushItem.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/item/PaintBrushItem.java @@ -11,6 +11,7 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.component.TooltipDisplay; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.Level; import net.themcbrothers.uselessmod.UselessMod; @@ -18,20 +19,21 @@ import net.themcbrothers.uselessmod.core.UselessDataComponents; import net.themcbrothers.uselessmod.world.level.block.entity.PaintedWoolBlockEntity; -import java.util.List; +import java.util.function.Consumer; public class PaintBrushItem extends Item { public PaintBrushItem(Properties properties) { super(properties); } + @SuppressWarnings("deprecation") @Override - public void appendHoverText(ItemStack stack, TooltipContext context, List hoverText, TooltipFlag tooltipFlag) { + public void appendHoverText(ItemStack stack, TooltipContext context, TooltipDisplay tooltipDisplay, Consumer tooltipAdder, TooltipFlag flag) { Integer color = stack.get(UselessDataComponents.COLOR.get()); if (color != null) { String hexColor = String.format("#%06X", (0xFFFFFF & color)); - hoverText.add(UselessMod.translate("misc", "color", hexColor).withStyle(ChatFormatting.GRAY)); + tooltipAdder.accept(UselessMod.translate("misc", "color", hexColor).withStyle(ChatFormatting.GRAY)); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/item/WallClosetBlockItem.java b/src/main/java/net/themcbrothers/uselessmod/world/item/WallClosetBlockItem.java new file mode 100644 index 00000000..82a7c491 --- /dev/null +++ b/src/main/java/net/themcbrothers/uselessmod/world/item/WallClosetBlockItem.java @@ -0,0 +1,29 @@ +package net.themcbrothers.uselessmod.world.item; + +import net.minecraft.ChatFormatting; +import net.minecraft.core.Holder; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.component.TooltipDisplay; +import net.minecraft.world.level.block.Block; +import net.themcbrothers.uselessmod.core.UselessDataComponents; + +import java.util.function.Consumer; + +public class WallClosetBlockItem extends BlockItem { + public WallClosetBlockItem(Block block, Properties properties) { + super(block, properties); + } + + @SuppressWarnings("deprecation") + @Override + public void appendHoverText(ItemStack stack, TooltipContext context, TooltipDisplay tooltipDisplay, Consumer tooltipAdder, TooltipFlag flag) { + Holder material = stack.get(UselessDataComponents.WALL_CLOSET_MATERIAL.get()); + + if (material != null) { + tooltipAdder.accept(material.value().getName().withStyle(ChatFormatting.GRAY)); + } + } +} diff --git a/src/main/java/net/themcbrothers/uselessmod/world/item/crafting/package-info.java b/src/main/java/net/themcbrothers/uselessmod/world/item/crafting/package-info.java index 8a56fecc..3c3c59d9 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/item/crafting/package-info.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/item/crafting/package-info.java @@ -1,9 +1,2 @@ -@FieldsAreNonnullByDefault -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package net.themcbrothers.uselessmod.world.item.crafting; - -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file +@org.jspecify.annotations.NullMarked +package net.themcbrothers.uselessmod.world.item.crafting; \ No newline at end of file diff --git a/src/main/java/net/themcbrothers/uselessmod/world/item/package-info.java b/src/main/java/net/themcbrothers/uselessmod/world/item/package-info.java index 55fbb797..0e29d00c 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/item/package-info.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/item/package-info.java @@ -1,9 +1,2 @@ -@FieldsAreNonnullByDefault -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package net.themcbrothers.uselessmod.world.item; - -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file +@org.jspecify.annotations.NullMarked +package net.themcbrothers.uselessmod.world.item; \ No newline at end of file diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/biome/UselessBiomes.java b/src/main/java/net/themcbrothers/uselessmod/world/level/biome/UselessBiomes.java index a3cc30d0..c52d22ff 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/biome/UselessBiomes.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/biome/UselessBiomes.java @@ -6,5 +6,5 @@ import net.themcbrothers.uselessmod.UselessMod; public final class UselessBiomes { - public static final ResourceKey USELESS_FOREST = ResourceKey.create(Registries.BIOME, UselessMod.rl("useless_forest")); + public static final ResourceKey USELESS_FOREST = ResourceKey.create(Registries.BIOME, UselessMod.id("useless_forest")); } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/block/CoffeeMachineBlock.java b/src/main/java/net/themcbrothers/uselessmod/world/level/block/CoffeeMachineBlock.java index 0f5a40d3..970a7b15 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/block/CoffeeMachineBlock.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/block/CoffeeMachineBlock.java @@ -19,6 +19,7 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.gamerules.GameRules; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; import net.minecraft.world.phys.BlockHitResult; @@ -109,17 +110,18 @@ public InteractionResult useWithoutItem(BlockState state, Level level, BlockPos @Override public BlockState playerWillDestroy(Level level, BlockPos pos, BlockState state, Player player) { - if (level instanceof ServerLevel serverLevel && player.isCreative() && serverLevel.getGameRules().getBoolean(GameRules.RULE_DOBLOCKDROPS)) { - if (level.getBlockEntity(pos) instanceof CoffeeMachineBlockEntity blockEntity) { - if (!blockEntity.isEmpty() || - !blockEntity.tankHandler.getWaterTank().isEmpty() || - !blockEntity.tankHandler.getMilkTank().isEmpty()) { - ItemStack stack = new ItemStack(this); - stack.applyComponents(blockEntity.collectComponents()); - ItemEntity itemEntity = new ItemEntity(level, pos.getX(), pos.getY(), pos.getZ(), stack); - itemEntity.setDefaultPickUpDelay(); - level.addFreshEntity(itemEntity); - } + if (level instanceof ServerLevel serverLevel + && player.preventsBlockDrops() + && serverLevel.getGameRules().get(GameRules.BLOCK_DROPS) + && level.getBlockEntity(pos) instanceof CoffeeMachineBlockEntity blockEntity) { + if (!blockEntity.isEmpty() || + !blockEntity.tankHandler.getWaterTank().isEmpty() || + !blockEntity.tankHandler.getMilkTank().isEmpty()) { + ItemStack stack = new ItemStack(this); + stack.applyComponents(blockEntity.collectComponents()); + ItemEntity itemEntity = new ItemEntity(level, pos.getX(), pos.getY(), pos.getZ(), stack); + itemEntity.setDefaultPickUpDelay(); + level.addFreshEntity(itemEntity); } } @@ -145,6 +147,6 @@ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { @Nullable @Override public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { - return level.isClientSide ? null : createTickerHelper(type, UselessBlockEntityTypes.COFFEE_MACHINE.get(), CoffeeMachineBlockEntity::serverTick); + return level.isClientSide() ? null : createTickerHelper(type, UselessBlockEntityTypes.COFFEE_MACHINE.get(), CoffeeMachineBlockEntity::serverTick); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/block/CupCoffeeBlock.java b/src/main/java/net/themcbrothers/uselessmod/world/level/block/CupCoffeeBlock.java index 7161a2d1..cbc2f0ef 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/block/CupCoffeeBlock.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/block/CupCoffeeBlock.java @@ -7,7 +7,6 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.HitResult; import net.themcbrothers.uselessmod.core.UselessBlockEntityTypes; import net.themcbrothers.uselessmod.util.CoffeeUtils; import net.themcbrothers.uselessmod.world.level.block.entity.CupBlockEntity; @@ -27,12 +26,12 @@ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { } @Override - public ItemStack getCloneItemStack(BlockState state, HitResult target, LevelReader level, BlockPos pos, Player player) { + public ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState state, boolean includeData, Player player) { return Optional.ofNullable(level.getBlockEntity(pos)) .map(blockEntity -> blockEntity instanceof CupBlockEntity cup ? cup : null) .map(CupBlockEntity::getCoffeeType) .flatMap(coffeeType -> coffeeType) .map(CoffeeUtils::createCoffeeStack) - .orElse(super.getCloneItemStack(state, target, level, pos, player)); + .orElse(super.getCloneItemStack(level, pos, state, includeData, player)); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/block/LightSwitchBlock.java b/src/main/java/net/themcbrothers/uselessmod/world/level/block/LightSwitchBlock.java index b9c5f3bd..6beb32fa 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/block/LightSwitchBlock.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/block/LightSwitchBlock.java @@ -24,7 +24,7 @@ import net.themcbrothers.uselessmod.world.level.block.entity.LightSwitchBlockEntity; import org.jetbrains.annotations.Nullable; -import java.util.Map; +import java.util.function.Function; /** * Definition of the Light Switch (can be placed on the floor, walls and ceiling) @@ -33,7 +33,7 @@ public class LightSwitchBlock extends FaceAttachedHorizontalDirectionalBlock imp public static final MapCodec CODEC = simpleCodec(LightSwitchBlock::new); public static final BooleanProperty POWERED = BlockStateProperties.POWERED; - private final Map shapesCache; + private final Function shapesCache; public LightSwitchBlock(Properties properties) { super(properties); @@ -68,7 +68,7 @@ protected void createBlockStateDefinition(StateDefinition.Builder CODEC = simpleCodec(MachineSupplierBlock::new); @@ -65,20 +55,10 @@ public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { return UselessBlockEntityTypes.MACHINE_SUPPLIER.get().create(pos, state); } - @Override - public void appendHoverText(ItemStack stack, Item.TooltipContext context, List hoverText, TooltipFlag tooltipFlag) { - BlockState mimic = stack.get(UselessDataComponents.MIMIC.get()); - ClientLevel clientLevel = Minecraft.getInstance().level; - - if (mimic != null && clientLevel != null) { - hoverText.add(mimic.getBlock().getName().withStyle(ChatFormatting.GRAY)); - } - } - @Override protected InteractionResult useItemOn(ItemStack stack, BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { if (this.tryWrench(state, level, pos, player, hand, hit)) { - return level.isClientSide ? InteractionResult.SUCCESS : InteractionResult.SUCCESS_SERVER; + return level.isClientSide() ? InteractionResult.SUCCESS : InteractionResult.SUCCESS_SERVER; } if (level.getBlockEntity(pos) instanceof MachineSupplierBlockEntity blockEntity) { @@ -91,7 +71,7 @@ protected InteractionResult useItemOn(ItemStack stack, BlockState state, Level l stack.shrink(1); } - return level.isClientSide ? InteractionResult.SUCCESS : InteractionResult.SUCCESS_SERVER; + return level.isClientSide() ? InteractionResult.SUCCESS : InteractionResult.SUCCESS_SERVER; } } } @@ -208,8 +188,8 @@ public int getDirectSignal(BlockState p_60559_, BlockGetter level, BlockPos pos, } @Override - public int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos) { - return this.getMimic(level, pos).getAnalogOutputSignal(level, pos); + protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { + return this.getMimic(level, pos).getAnalogOutputSignal(level, pos, direction); } @Override @@ -232,11 +212,6 @@ public boolean canConnectRedstone(BlockState state, BlockGetter level, BlockPos return this.getMimic(level, pos).canRedstoneConnectTo(level, pos, direction); } - @Override - public TriState canSustainPlant(BlockState state, BlockGetter level, BlockPos soilPosition, Direction facing, BlockState plant) { - return this.getMimic(level, soilPosition).canSustainPlant(level, soilPosition, facing, plant); - } - @Override public boolean shouldDisplayFluidOverlay(BlockState state, BlockAndTintGetter level, BlockPos pos, FluidState fluidState) { return this.getMimic(level, pos).shouldDisplayFluidOverlay(level, pos, fluidState); @@ -263,8 +238,8 @@ public float getShadeBrightness(BlockState pState, BlockGetter level, BlockPos p } @Override - public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float distance) { + public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, double fallDistance) { BlockState mimic = this.getMimic(level, pos); - mimic.getBlock().fallOn(level, mimic, pos, entity, distance); + mimic.getBlock().fallOn(level, mimic, pos, entity, fallDistance); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/block/PaintBucketBlock.java b/src/main/java/net/themcbrothers/uselessmod/world/level/block/PaintBucketBlock.java index 94354555..a44702af 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/block/PaintBucketBlock.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/block/PaintBucketBlock.java @@ -3,11 +3,8 @@ import com.mojang.serialization.MapCodec; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.core.NonNullList; -import net.minecraft.server.level.ServerLevel; import net.minecraft.tags.FluidTags; import net.minecraft.util.RandomSource; -import net.minecraft.world.Containers; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; @@ -169,15 +166,6 @@ protected InteractionResult useItemOn(ItemStack p_316304_, BlockState state, Lev return InteractionResult.TRY_WITH_EMPTY_HAND; } - @Override - public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) { - if (level instanceof ServerLevel && !state.is(newState.getBlock()) && level.getBlockEntity(pos) instanceof PaintBucketBlockEntity blockEntity) { - Containers.dropContents(level, pos, NonNullList.of(blockEntity.stackHandler.getStackInSlot(0))); - } - - super.onRemove(state, level, pos, newState, isMoving); - } - @Override public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext collision) { return SHAPE; diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/block/PaintedWoolBlock.java b/src/main/java/net/themcbrothers/uselessmod/world/level/block/PaintedWoolBlock.java index cfdc518c..2e7a55b6 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/block/PaintedWoolBlock.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/block/PaintedWoolBlock.java @@ -1,33 +1,22 @@ package net.themcbrothers.uselessmod.world.level.block; import com.mojang.serialization.MapCodec; -import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; -import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.RandomSource; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.BaseEntityBlock; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.RenderShape; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.phys.HitResult; -import net.themcbrothers.uselessmod.UselessMod; import net.themcbrothers.uselessmod.core.UselessBlockEntityTypes; -import net.themcbrothers.uselessmod.core.UselessDataComponents; import net.themcbrothers.uselessmod.world.level.block.entity.PaintedWoolBlockEntity; import org.jetbrains.annotations.Nullable; -import java.util.List; - -@SuppressWarnings("deprecation") public class PaintedWoolBlock extends BaseEntityBlock { public static final MapCodec CODEC = simpleCodec(PaintedWoolBlock::new); public static final BooleanProperty PAINTED = BooleanProperty.create("painted"); @@ -58,8 +47,8 @@ public void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource } @Override - public ItemStack getCloneItemStack(BlockState state, HitResult target, LevelReader level, BlockPos pos, Player player) { - final ItemStack stack = super.getCloneItemStack(state, target, level, pos, player); + public ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState state, boolean includeData, Player player) { + ItemStack stack = super.getCloneItemStack(level, pos, state, includeData, player); if (level.getBlockEntity(pos) instanceof PaintedWoolBlockEntity paintedWool) { stack.applyComponents(paintedWool.collectComponents()); @@ -68,21 +57,6 @@ public ItemStack getCloneItemStack(BlockState state, HitResult target, LevelRead return stack; } - @Override - public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltip, TooltipFlag tooltipFlag) { - Integer color = stack.get(UselessDataComponents.COLOR.get()); - - if (color != null) { - String hexColor = String.format("#%06X", (0xFFFFFF & color)); - tooltip.add(UselessMod.translate("misc", "color", hexColor).withStyle(ChatFormatting.GRAY)); - } - } - - @Override - public RenderShape getRenderShape(BlockState state) { - return RenderShape.MODEL; - } - @Nullable @Override public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/block/UselessDetectorRailBlock.java b/src/main/java/net/themcbrothers/uselessmod/world/level/block/UselessDetectorRailBlock.java index f4ff813a..ca4f15f4 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/block/UselessDetectorRailBlock.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/block/UselessDetectorRailBlock.java @@ -1,7 +1,7 @@ package net.themcbrothers.uselessmod.world.level.block; import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.vehicle.AbstractMinecart; +import net.minecraft.world.entity.vehicle.minecart.AbstractMinecart; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.DetectorRailBlock; import net.minecraft.world.level.block.state.BlockState; @@ -13,6 +13,6 @@ public UselessDetectorRailBlock(Properties properties) { @Override public float getRailMaxSpeed(BlockState state, Level world, BlockPos pos, AbstractMinecart cart) { - return 0.6F; + return cart.isInWater() ? 0.4f : 0.6f; } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/block/UselessLanternBlock.java b/src/main/java/net/themcbrothers/uselessmod/world/level/block/UselessLanternBlock.java index 01ad36d0..cef3c343 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/block/UselessLanternBlock.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/block/UselessLanternBlock.java @@ -7,7 +7,6 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.LanternBlock; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.HitResult; public class UselessLanternBlock extends LanternBlock { public UselessLanternBlock(Properties properties) { @@ -15,7 +14,7 @@ public UselessLanternBlock(Properties properties) { } @Override - public ItemStack getCloneItemStack(BlockState state, HitResult target, LevelReader level, BlockPos pos, Player player) { + public ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState state, boolean includeData, Player player) { return new ItemStack(Blocks.LANTERN); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/block/UselessPoweredRailBlock.java b/src/main/java/net/themcbrothers/uselessmod/world/level/block/UselessPoweredRailBlock.java index aec28a63..13c9733d 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/block/UselessPoweredRailBlock.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/block/UselessPoweredRailBlock.java @@ -1,7 +1,7 @@ package net.themcbrothers.uselessmod.world.level.block; import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.vehicle.AbstractMinecart; +import net.minecraft.world.entity.vehicle.minecart.AbstractMinecart; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.PoweredRailBlock; import net.minecraft.world.level.block.state.BlockState; @@ -17,6 +17,6 @@ public UselessPoweredRailBlock(Properties properties, boolean isPoweredRail) { @Override public float getRailMaxSpeed(BlockState state, Level world, BlockPos pos, AbstractMinecart cart) { - return 0.6F; + return cart.isInWater() ? 0.4f : 0.6f; } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/block/UselessRailBlock.java b/src/main/java/net/themcbrothers/uselessmod/world/level/block/UselessRailBlock.java index 0c450ece..7f89ad48 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/block/UselessRailBlock.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/block/UselessRailBlock.java @@ -1,7 +1,7 @@ package net.themcbrothers.uselessmod.world.level.block; import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.vehicle.AbstractMinecart; +import net.minecraft.world.entity.vehicle.minecart.AbstractMinecart; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.RailBlock; import net.minecraft.world.level.block.state.BlockState; @@ -13,6 +13,6 @@ public UselessRailBlock(Properties properties) { @Override public float getRailMaxSpeed(BlockState state, Level world, BlockPos pos, AbstractMinecart cart) { - return 0.6F; + return cart.isInWater() ? 0.4f : 0.6f; } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/block/WallClosetBlock.java b/src/main/java/net/themcbrothers/uselessmod/world/level/block/WallClosetBlock.java index 30ad2bf6..36041829 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/block/WallClosetBlock.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/block/WallClosetBlock.java @@ -1,24 +1,18 @@ package net.themcbrothers.uselessmod.world.level.block; import com.mojang.serialization.MapCodec; -import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.core.Holder; import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; import net.minecraft.stats.Stats; import net.minecraft.util.RandomSource; -import net.minecraft.world.Containers; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.monster.piglin.PiglinAi; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; @@ -31,7 +25,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import net.themcbrothers.uselessmod.core.UselessBlockEntityTypes; @@ -39,8 +32,6 @@ import net.themcbrothers.uselessmod.world.level.block.entity.WallClosetBlockEntity; import org.jetbrains.annotations.Nullable; -import java.util.List; - import static net.minecraft.world.level.block.state.properties.BlockStateProperties.*; public class WallClosetBlock extends BaseEntityBlock { @@ -64,32 +55,24 @@ protected MapCodec codec() { } @Override - public void appendHoverText(ItemStack stack, Item.TooltipContext context, List hoverText, TooltipFlag tooltipFlag) { - Holder material = stack.get(UselessDataComponents.WALL_CLOSET_MATERIAL.get()); - - if (material != null) { - hoverText.add(material.value().getName().withStyle(ChatFormatting.GRAY)); - } - } - - @Override - public ItemStack getCloneItemStack(BlockState state, HitResult target, LevelReader level, BlockPos pos, Player player) { + public ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState state, boolean includeData, Player player) { if (level.getBlockEntity(pos) instanceof WallClosetBlockEntity wallCloset) { final ItemStack stack = new ItemStack(this); stack.set(UselessDataComponents.WALL_CLOSET_MATERIAL.get(), BuiltInRegistries.BLOCK.wrapAsHolder(wallCloset.getMaterial())); return stack; } - return super.getCloneItemStack(state, target, level, pos, player); + return super.getCloneItemStack(level, pos, state, includeData, player); } @Override public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { return switch (state.getValue(HORIZONTAL_FACING)) { - default -> SHAPE_NORTH; + // TODO: improve shapes calculation case SOUTH -> SHAPE_SOUTH; case EAST -> SHAPE_EAST; case WEST -> SHAPE_WEST; + default -> SHAPE_NORTH; }; } @@ -104,12 +87,6 @@ protected InteractionResult useWithoutItem(BlockState state, Level level, BlockP return InteractionResult.SUCCESS; } - @Override - public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean isMoving) { - Containers.dropContentsOnDestroy(state, newState, level, pos); - super.onRemove(state, level, pos, newState, isMoving); - } - @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { builder.add(HORIZONTAL_FACING, OPEN, WATERLOGGED); @@ -138,7 +115,7 @@ public boolean hasAnalogOutputSignal(BlockState state) { } @Override - public int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos) { + protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { return AbstractContainerMenu.getRedstoneSignalFromBlockEntity(level.getBlockEntity(pos)); } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/CoffeeMachineBlockEntity.java b/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/CoffeeMachineBlockEntity.java index 106df8e3..21f246da 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/CoffeeMachineBlockEntity.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/CoffeeMachineBlockEntity.java @@ -2,10 +2,13 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.core.*; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.NonNullList; +import net.minecraft.core.component.DataComponentGetter; import net.minecraft.core.component.DataComponentMap; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.Tag; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.network.codec.ByteBufCodecs; @@ -32,6 +35,8 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BaseContainerBlockEntity; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.neoforged.neoforge.common.Tags; import net.neoforged.neoforge.fluids.FluidActionResult; import net.neoforged.neoforge.fluids.FluidStack; @@ -43,7 +48,6 @@ import net.neoforged.neoforge.items.wrapper.InvWrapper; import net.neoforged.neoforge.network.PacketDistributor; import net.themcbrothers.lib.energy.ExtendedEnergyStorage; -import net.themcbrothers.lib.util.EnergyUtils; import net.themcbrothers.uselessmod.UselessMod; import net.themcbrothers.uselessmod.config.ServerConfig; import net.themcbrothers.uselessmod.core.UselessBlockEntityTypes; @@ -79,8 +83,8 @@ public class CoffeeMachineBlockEntity extends BaseContainerBlockEntity implement ServerConfig.COFFEE_MACHINE_ENERGY_TRANSFER.get(), 0); public final CoffeeMachineTank tankHandler = new CoffeeMachineTank(); private boolean useMilk; - private int litTime; - private int cookingProgress; + private int litTimeRemaining; + private int cookingTimer; private int cookingTotalTime; private final RecipeManager.CachedCheck quickCheck; @@ -88,9 +92,9 @@ public class CoffeeMachineBlockEntity extends BaseContainerBlockEntity implement @Override public int get(int index) { return switch (index) { - case 0 -> CoffeeMachineBlockEntity.this.energyStorage.getEnergyStored(); - case 1 -> CoffeeMachineBlockEntity.this.energyStorage.getMaxEnergyStored(); - case 2 -> CoffeeMachineBlockEntity.this.cookingProgress; + case 0 -> CoffeeMachineBlockEntity.this.energyStorage.getAmountAsInt(); + case 1 -> CoffeeMachineBlockEntity.this.energyStorage.getCapacityAsInt(); + case 2 -> CoffeeMachineBlockEntity.this.cookingTimer; case 3 -> CoffeeMachineBlockEntity.this.cookingTotalTime; case 4 -> CoffeeMachineBlockEntity.this.getCurrentRecipe() != null ? 1 : 0; default -> 0; @@ -114,7 +118,7 @@ public CoffeeMachineBlockEntity(BlockPos pos, BlockState state) { } public static void serverTick(Level level, BlockPos pos, BlockState state, CoffeeMachineBlockEntity coffeeMachine) { - if (!level.isClientSide) { + if (!level.isClientSide()) { // Fluid Slot final ItemStack stackFluidIn = coffeeMachine.getItem(4); @@ -143,38 +147,38 @@ public static void serverTick(Level level, BlockPos pos, BlockState state, Coffe } } - + // TODO: capabilities // Energy Slot ItemStack energySlotStack = coffeeMachine.items.get(6); if (!energySlotStack.isEmpty()) { - int freeEnergySpace = coffeeMachine.energyStorage.getMaxEnergyStored() - coffeeMachine.energyStorage.getEnergyStored(); - int maxReceive = coffeeMachine.energyStorage.getMaxReceive(); + int freeEnergySpace = coffeeMachine.energyStorage.getCapacityAsInt() - coffeeMachine.energyStorage.getAmountAsInt(); + int maxReceive = coffeeMachine.energyStorage.getMaxInsert(); if (freeEnergySpace > 0) { - EnergyUtils.getEnergy(energySlotStack).ifPresent(itemEnergyStorage -> { - if (itemEnergyStorage.canExtract()) { - int extracted = itemEnergyStorage.extractEnergy(Math.min(freeEnergySpace, maxReceive), false); - coffeeMachine.energyStorage.growEnergy(extracted); - } - }); +// EnergyUtils.getEnergy(energySlotStack).ifPresent(itemEnergyStorage -> { +// if (itemEnergyStorage.canExtract()) { +// int extracted = itemEnergyStorage.extractEnergy(Math.min(freeEnergySpace, maxReceive), false); +// coffeeMachine.energyStorage.growEnergy(extracted); +// } +// }); } } - if (coffeeMachine.energyStorage.getEnergyStored() > 0 && coffeeMachine.cookingProgress > 0) { + if (coffeeMachine.energyStorage.getAmountAsInt() > 0 && coffeeMachine.cookingTimer > 0) { if (coffeeMachine.getCurrentRecipe() != null) { coffeeMachine.energyStorage.consumeEnergy(ServerConfig.COFFEE_MACHINE_ENERGY_PER_TICK.get()); - if (coffeeMachine.cookingProgress < coffeeMachine.cookingTotalTime && coffeeMachine.getCurrentRecipe() != null) { - coffeeMachine.cookingProgress++; + if (coffeeMachine.cookingTimer < coffeeMachine.cookingTotalTime && coffeeMachine.getCurrentRecipe() != null) { + coffeeMachine.cookingTimer++; } else { coffeeMachine.process(coffeeMachine.getCurrentRecipe()); - coffeeMachine.cookingProgress = 0; + coffeeMachine.cookingTimer = 0; coffeeMachine.cookingTotalTime = 0; } } else { - coffeeMachine.cookingProgress = 0; + coffeeMachine.cookingTimer = 0; coffeeMachine.cookingTotalTime = 0; } - } else if (coffeeMachine.litTime > 0) { - coffeeMachine.litTime--; + } else if (coffeeMachine.litTimeRemaining > 0) { + coffeeMachine.litTimeRemaining--; } } } @@ -267,12 +271,12 @@ public void startMachine(boolean start) { return; } this.cookingTotalTime = recipe.getCookingTime(); - this.cookingProgress = 1; - this.litTime = recipe.getCookingTime(); + this.cookingTimer = 1; + this.litTimeRemaining = recipe.getCookingTime(); } else { sound = SoundEvents.HOE_TILL; - this.litTime = 0; - this.cookingProgress = 0; + this.litTimeRemaining = 0; + this.cookingTimer = 0; this.cookingTotalTime = 0; } this.setChanged(); @@ -291,19 +295,18 @@ public boolean useMilk() { @Override public void sendSyncPacket(int type) { - if (this.level == null || this.level.isClientSide) { + if (this.level == null || this.level.isClientSide()) { return; } - RegistryAccess lookupProvider = this.level.registryAccess(); CompoundTag nbt = new CompoundTag(); if (type == SYNC_WATER_TANK) { - nbt.put("Fluid", this.tankHandler.getWaterTank().writeToNBT(lookupProvider, new CompoundTag())); + nbt.store("water", FluidStack.CODEC, this.tankHandler.getWaterTank().getFluid()); } else if (type == SYNC_MILK_TANK) { - nbt.put("Milk", this.tankHandler.getMilkTank().writeToNBT(lookupProvider, new CompoundTag())); + nbt.store("milk", FluidStack.CODEC, this.tankHandler.getMilkTank().getFluid()); } else if (type == SYNC_USE_MILK) { - nbt.putBoolean("UseMilk", this.useMilk); + nbt.putBoolean("use_milk", this.useMilk); } PacketDistributor.sendToPlayersTrackingChunk((ServerLevel) this.level, new ChunkPos(this.worldPosition), new BlockEntitySyncPacket(this.worldPosition, nbt)); @@ -311,54 +314,46 @@ public void sendSyncPacket(int type) { @Override public void receiveMessageFromServer(CompoundTag tag, HolderLookup.Provider lookupProvider) { - if (tag.contains("Fluid", Tag.TAG_COMPOUND)) { - this.tankHandler.getWaterTank().readFromNBT(lookupProvider, tag.getCompound("Fluid")); - } - if (tag.contains("Milk", Tag.TAG_COMPOUND)) { - this.tankHandler.getMilkTank().readFromNBT(lookupProvider, tag.getCompound("Milk")); - } - if (tag.contains("UseMilk", Tag.TAG_BYTE)) { - this.useMilk = tag.getBoolean("UseMilk"); - } + tag.read("water", FluidStack.CODEC).ifPresent(fluidStack -> this.tankHandler.getWaterTank().setFluid(fluidStack)); + tag.read("milk", FluidStack.CODEC).ifPresent(fluidStack -> this.tankHandler.getMilkTank().setFluid(fluidStack)); + this.useMilk = tag.getBooleanOr("use_milk", this.useMilk); } @Override - protected void loadAdditional(CompoundTag compound, HolderLookup.Provider lookupProvider) { - super.loadAdditional(compound, lookupProvider); - ContainerHelper.loadAllItems(compound, this.items, lookupProvider); - this.litTime = compound.getInt("BurnTime"); - this.cookingProgress = compound.getInt("CookTime"); - this.cookingTotalTime = compound.getInt("CookTimeTotal"); - this.useMilk = compound.getBoolean("UseMilk"); - this.energyStorage.setEnergyStored(compound.getInt("EnergyStored")); - this.tankHandler.getWaterTank().readFromNBT(lookupProvider, compound.getCompound("Water")); - this.tankHandler.getMilkTank().readFromNBT(lookupProvider, compound.getCompound("Milk")); + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + ContainerHelper.loadAllItems(input, this.items); + this.energyStorage.deserialize(input); + this.cookingTimer = input.getIntOr("cooking_time_spent", 0); + this.cookingTotalTime = input.getIntOr("cooking_total_time", 0); + this.litTimeRemaining = input.getIntOr("lit_time_remaining", 0); + this.useMilk = input.getBooleanOr("use_milk", false); + this.tankHandler.getWaterTank().setFluid(input.read("water", FluidStack.CODEC).orElse(FluidStack.EMPTY)); + this.tankHandler.getMilkTank().setFluid(input.read("milk", FluidStack.CODEC).orElse(FluidStack.EMPTY)); } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider lookupProvider) { - super.saveAdditional(tag, lookupProvider); - ContainerHelper.saveAllItems(tag, this.items, false, lookupProvider); - tag.putInt("BurnTime", this.litTime); - tag.putInt("CookTime", this.cookingProgress); - tag.putInt("CookTimeTotal", this.cookingTotalTime); - tag.putBoolean("UseMilk", this.useMilk); - tag.putInt("EnergyStored", this.energyStorage.getEnergyStored()); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + ContainerHelper.saveAllItems(output, this.items, false); + this.energyStorage.serialize(output); + output.putInt("cooking_time_spent", this.cookingTimer); + output.putInt("cooking_total_time", this.cookingTotalTime); + output.putInt("lit_time_remaining", this.litTimeRemaining); + output.putBoolean("use_milk", this.useMilk); if (!this.tankHandler.getWaterTank().isEmpty()) { - tag.put("Water", this.tankHandler.getWaterTank().writeToNBT(lookupProvider, new CompoundTag())); + output.store("water", FluidStack.CODEC, this.tankHandler.getWaterTank().getFluid()); } if (!this.tankHandler.getMilkTank().isEmpty()) { - tag.put("Milk", this.tankHandler.getMilkTank().writeToNBT(lookupProvider, new CompoundTag())); + output.store("milk", FluidStack.CODEC, this.tankHandler.getMilkTank().getFluid()); } } @Override public CompoundTag getUpdateTag(HolderLookup.Provider lookupProvider) { - CompoundTag tag = new CompoundTag(); - this.saveAdditional(tag, lookupProvider); - return tag; + return this.saveCustomOnly(lookupProvider); } @Nullable @@ -481,16 +476,16 @@ protected AbstractContainerMenu createMenu(int id, Inventory inventory) { } @Override - protected void applyImplicitComponents(DataComponentInput components) { + protected void applyImplicitComponents(DataComponentGetter components) { super.applyImplicitComponents(components); Contents contents = components.get(UselessDataComponents.COFFEE_MACHINE_CONTENTS.get()); if (contents != null) { this.tankHandler.getWaterTank().setFluid(contents.water()); this.tankHandler.getMilkTank().setFluid(contents.milk()); - this.energyStorage.setEnergyStored(contents.energy()); - this.litTime = contents.burnTime(); - this.cookingProgress = contents.cookTime(); + this.energyStorage.set(contents.energy()); + this.litTimeRemaining = contents.burnTime(); + this.cookingTimer = contents.cookTime(); this.cookingTotalTime = contents.cookTimeTotal(); this.useMilk = contents.useMilk(); } @@ -504,27 +499,28 @@ protected void collectImplicitComponents(DataComponentMap.Builder builder) { new Contents( this.tankHandler.getWaterTank().getFluid(), this.tankHandler.getMilkTank().getFluid(), - this.energyStorage.getEnergyStored(), - this.litTime, - this.cookingProgress, + this.energyStorage.getAmountAsInt(), + this.litTimeRemaining, + this.cookingTimer, this.cookingTotalTime, this.useMilk )); } @Override - public void removeComponentsFromTag(CompoundTag tag) { + public void removeComponentsFromTag(ValueOutput tag) { super.removeComponentsFromTag(tag); - tag.remove("EnergyStored"); - tag.remove("Water"); - tag.remove("Milk"); - tag.remove("BurnTime"); - tag.remove("CookTime"); - tag.remove("CookTimeTotal"); - tag.remove("UseMilk"); + tag.discard("EnergyStored"); + tag.discard("Water"); + tag.discard("Milk"); + tag.discard("BurnTime"); + tag.discard("CookTime"); + tag.discard("CookTimeTotal"); + tag.discard("UseMilk"); } + // TODO: replace with new ResourceHandler (capabilities) public class CoffeeMachineTank implements IFluidHandler { final FluidTank waterTank = new FluidTank(ServerConfig.COFFEE_MACHINE_WATER_CAPACITY.get()) { @Override diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/CupBlockEntity.java b/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/CupBlockEntity.java index 794dced6..a538d9dd 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/CupBlockEntity.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/CupBlockEntity.java @@ -1,36 +1,32 @@ package net.themcbrothers.uselessmod.world.level.block.entity; -import com.mojang.datafixers.util.Pair; -import com.mojang.serialization.DataResult; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponentGetter; import net.minecraft.core.component.DataComponentMap; import net.minecraft.core.component.DataComponents; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtOps; -import net.minecraft.nbt.Tag; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.component.Consumable; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.themcbrothers.uselessmod.api.CoffeeType; import net.themcbrothers.uselessmod.api.UselessRegistries; import net.themcbrothers.uselessmod.core.UselessBlockEntityTypes; import net.themcbrothers.uselessmod.core.UselessDataComponents; -import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.Nullable; -import java.util.Objects; import java.util.Optional; public class CupBlockEntity extends BlockEntity { - private static final String TAG_COFFEE = "Coffee"; - private static final String TAG_CONSUMABLE = "Consumable"; + private static final String TAG_COFFEE = "coffee"; + private static final String TAG_CONSUMABLE = "consumable"; @Nullable private Holder type; @@ -60,44 +56,30 @@ public Optional getCoffeeType() { return Optional.of(this.type.value()); } - private void writeCoffeeNbt(CompoundTag tag) { - if (this.type != null) { - this.type.unwrapKey().ifPresent(key -> tag.putString(TAG_COFFEE, key.location().toString())); - } - } - @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider lookupProvider) { - super.loadAdditional(tag, lookupProvider); - if (tag.contains(TAG_COFFEE, Tag.TAG_STRING)) { - var key = ResourceKey.create(UselessRegistries.COFFEE_KEY, Objects.requireNonNull(ResourceLocation.tryParse(tag.getString(TAG_COFFEE)))); - this.type = UselessRegistries.COFFEE_REGISTRY.get(key).orElse(null); - } + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); - if (tag.contains(TAG_CONSUMABLE, Tag.TAG_COMPOUND)) { - DataResult dataResult = Consumable.CODEC.parse(NbtOps.INSTANCE, tag.getCompound(TAG_CONSUMABLE)); - - if (dataResult.isSuccess()) { - this.consumable = dataResult.getOrThrow(); - } - } + input.read(TAG_COFFEE, UselessRegistries.COFFEE_REGISTRY.holderByNameCodec()).ifPresent(coffeeTypeHolder -> this.type = coffeeTypeHolder); + input.read(TAG_CONSUMABLE, Consumable.CODEC).ifPresent(consumable -> this.consumable = consumable); } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.saveAdditional(tag, registries); - this.writeCoffeeNbt(tag); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + + if (this.type != null) { + output.store(TAG_COFFEE, UselessRegistries.COFFEE_REGISTRY.holderByNameCodec(), this.type); + } if (this.consumable != null) { - tag.put(TAG_CONSUMABLE, Consumable.CODEC.encode(this.consumable, registries.createSerializationContext(NbtOps.INSTANCE), new CompoundTag()).getOrThrow()); + output.store(TAG_CONSUMABLE, Consumable.CODEC, this.consumable); } } @Override public CompoundTag getUpdateTag(HolderLookup.Provider lookupProvider) { - CompoundTag tag = super.getUpdateTag(lookupProvider); - this.writeCoffeeNbt(tag); - return tag; + return this.saveCustomOnly(lookupProvider); } @Nullable @@ -107,14 +89,14 @@ public Packet getUpdatePacket() { } @Override - protected void applyImplicitComponents(DataComponentInput components) { - CoffeeType type = components.get(UselessDataComponents.COFFEE_TYPE.get()); + protected void applyImplicitComponents(DataComponentGetter componentGetter) { + CoffeeType type = componentGetter.get(UselessDataComponents.COFFEE_TYPE.get()); if (type != null) { this.type = UselessRegistries.COFFEE_REGISTRY.wrapAsHolder(type); } - this.consumable = components.get(DataComponents.CONSUMABLE); + this.consumable = componentGetter.get(DataComponents.CONSUMABLE); } @Override @@ -130,8 +112,8 @@ protected void collectImplicitComponents(DataComponentMap.Builder builder) { @SuppressWarnings("deprecation") @Override - public void removeComponentsFromTag(CompoundTag tag) { - tag.remove(TAG_COFFEE); - tag.remove(TAG_CONSUMABLE); + public void removeComponentsFromTag(ValueOutput output) { + output.discard(TAG_COFFEE); + output.discard(TAG_CONSUMABLE); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/LightSwitchBlockEntity.java b/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/LightSwitchBlockEntity.java index 7002357f..f3a9e72a 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/LightSwitchBlockEntity.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/LightSwitchBlockEntity.java @@ -1,10 +1,10 @@ package net.themcbrothers.uselessmod.world.level.block.entity; import com.google.common.collect.Lists; +import com.mojang.serialization.Codec; import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponentGetter; import net.minecraft.core.component.DataComponentMap; -import net.minecraft.nbt.CompoundTag; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; @@ -13,13 +13,15 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.themcbrothers.uselessmod.api.LampRegistry; import net.themcbrothers.uselessmod.core.UselessBlockEntityTypes; import net.themcbrothers.uselessmod.core.UselessDataComponents; import net.themcbrothers.uselessmod.world.level.block.LightSwitchBlock; -import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.List; public class LightSwitchBlockEntity extends BlockEntity { @@ -35,26 +37,28 @@ protected void collectImplicitComponents(DataComponentMap.Builder builder) { } @Override - protected void applyImplicitComponents(DataComponentInput components) { - this.setBlockPositions(components.getOrDefault(UselessDataComponents.LIGHTS.get(), List.of())); + protected void applyImplicitComponents(DataComponentGetter componentGetter) { + this.setBlockPositions(componentGetter.getOrDefault(UselessDataComponents.LIGHTS.get(), Collections.emptyList())); } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider lookupProvider) { - super.saveAdditional(tag, lookupProvider); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); if (!this.blockPositions.isEmpty()) { - List packedPositions = this.blockPositions.stream().map(BlockPos::asLong).toList(); - tag.putLongArray("Lights", packedPositions); + ValueOutput.TypedOutputList lights = output.list("lights", Codec.LONG); + this.blockPositions.stream().map(BlockPos::asLong).forEach(lights::add); } } @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider lookupProvider) { - super.loadAdditional(tag, lookupProvider); + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); - this.blockPositions.clear(); - Arrays.stream(tag.getLongArray("Lights")).mapToObj(BlockPos::of).forEach(this.blockPositions::add); + input.list("lights", Codec.LONG).ifPresent(longs -> { + this.blockPositions.clear(); + longs.stream().map(BlockPos::of).forEach(this.blockPositions::add); + }); } public boolean switchLights() { diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/MachineSupplierBlockEntity.java b/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/MachineSupplierBlockEntity.java index 1b58f0ed..d4ac0466 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/MachineSupplierBlockEntity.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/MachineSupplierBlockEntity.java @@ -2,21 +2,22 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponentGetter; import net.minecraft.core.component.DataComponentMap; import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; -import net.minecraft.nbt.Tag; import net.minecraft.network.Connection; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; -import net.neoforged.neoforge.client.model.data.ModelData; -import net.neoforged.neoforge.client.model.data.ModelProperty; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.neoforged.neoforge.model.data.ModelData; +import net.neoforged.neoforge.model.data.ModelProperty; import net.themcbrothers.uselessmod.core.UselessBlockEntityTypes; import net.themcbrothers.uselessmod.core.UselessDataComponents; -import org.jetbrains.annotations.NotNull; import javax.annotation.Nullable; import java.util.Objects; @@ -47,30 +48,23 @@ public void setMimic(@Nullable BlockState mimic) { } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider lookupProvider) { - super.saveAdditional(tag, lookupProvider); - this.writeMimic(tag); - } - - private void writeMimic(CompoundTag tag) { + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); if (this.mimic != null) { - tag.put("Mimic", NbtUtils.writeBlockState(this.mimic)); + output.store("Mimic", CompoundTag.CODEC, NbtUtils.writeBlockState(this.mimic)); } } @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider lookupProvider) { - super.loadAdditional(tag, lookupProvider); - if (tag.contains("Mimic", Tag.TAG_COMPOUND) && this.level != null) { - this.mimic = NbtUtils.readBlockState(this.level.holderLookup(Registries.BLOCK), tag.getCompound("Mimic")); - } + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + input.read("Mimic", CompoundTag.CODEC) + .ifPresent(compoundTag -> this.mimic = NbtUtils.readBlockState(this.level.holderLookup(Registries.BLOCK), compoundTag)); } @Override public CompoundTag getUpdateTag(HolderLookup.Provider lookupProvider) { - CompoundTag tag = new CompoundTag(); - this.writeMimic(tag); - return tag; + return this.saveCustomOnly(lookupProvider); } @Override @@ -79,9 +73,9 @@ public ClientboundBlockEntityDataPacket getUpdatePacket() { } @Override - public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt, HolderLookup.Provider lookupProvider) { + public void onDataPacket(Connection net, ValueInput valueInput) { BlockState oldMimic = this.mimic; - super.onDataPacket(net, pkt, lookupProvider); + super.onDataPacket(net, valueInput); if (!Objects.equals(oldMimic, this.mimic)) { this.requestModelDataUpdate(); if (this.level != null) { @@ -90,15 +84,14 @@ public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt, H } } - @NotNull @Override public ModelData getModelData() { return ModelData.builder().with(MIMIC_PROPERTY, this.mimic).build(); } @Override - protected void applyImplicitComponents(DataComponentInput components) { - this.setMimic(components.get(UselessDataComponents.MIMIC.get())); + protected void applyImplicitComponents(DataComponentGetter componentGetter) { + this.setMimic(componentGetter.get(UselessDataComponents.MIMIC.get())); } @Override @@ -108,7 +101,7 @@ protected void collectImplicitComponents(DataComponentMap.Builder builder) { @SuppressWarnings("deprecation") @Override - public void removeComponentsFromTag(CompoundTag tag) { - tag.remove("Mimic"); + public void removeComponentsFromTag(ValueOutput output) { + output.discard("Mimic"); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/PaintBucketBlockEntity.java b/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/PaintBucketBlockEntity.java index 55ab5b13..87f7985d 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/PaintBucketBlockEntity.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/PaintBucketBlockEntity.java @@ -2,18 +2,24 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; +import net.minecraft.core.NonNullList; +import net.minecraft.core.component.DataComponentGetter; import net.minecraft.core.component.DataComponentMap; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; import net.minecraft.tags.FluidTags; +import net.minecraft.world.Containers; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.neoforged.neoforge.fluids.FluidStack; import net.neoforged.neoforge.fluids.FluidType; import net.neoforged.neoforge.fluids.SimpleFluidContent; import net.neoforged.neoforge.fluids.capability.templates.FluidTank; import net.neoforged.neoforge.items.ItemStackHandler; +import net.themcbrothers.lib.LibDataComponents; import net.themcbrothers.uselessmod.UselessTags; import net.themcbrothers.uselessmod.core.UselessBlockEntityTypes; import net.themcbrothers.uselessmod.core.UselessDataComponents; @@ -39,6 +45,13 @@ public PaintBucketBlockEntity(BlockPos pos, BlockState state) { super(UselessBlockEntityTypes.PAINT_BUCKET.get(), pos, state); } + @Override + public void preRemoveSideEffects(BlockPos pos, BlockState state) { + if (this.level != null) { + Containers.dropContents(level, pos, NonNullList.of(this.stackHandler.getStackInSlot(0))); + } + } + public boolean hasColor() { return !this.colorTank.isEmpty() && this.colorTank.getFluid().getFluid().is(UselessTags.Fluids.PAINT) && this.colorTank.getFluid().has(UselessDataComponents.COLOR.get()); } @@ -64,19 +77,9 @@ public void setColor(int color) { this.setChanged(); } - private void saveColorAndItem(CompoundTag tag, HolderLookup.Provider lookupProvider) { - if (!this.colorTank.isEmpty()) { - tag.put("Tank", this.colorTank.writeToNBT(lookupProvider, new CompoundTag())); - } - - tag.put("Slots", this.stackHandler.serializeNBT(lookupProvider)); - } - @Override public CompoundTag getUpdateTag(HolderLookup.Provider lookupProvider) { - CompoundTag tag = super.getUpdateTag(lookupProvider); - this.saveColorAndItem(tag, lookupProvider); - return tag; + return this.saveCustomOnly(lookupProvider); } @Nullable @@ -86,31 +89,36 @@ public ClientboundBlockEntityDataPacket getUpdatePacket() { } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider lookupProvider) { - super.saveAdditional(tag, lookupProvider); - this.saveColorAndItem(tag, lookupProvider); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + + if (!this.colorTank.isEmpty()) { + this.colorTank.serialize(output.child("Tank")); + } + + this.stackHandler.serialize(output.child("Slots")); } @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider lookupProvider) { - super.loadAdditional(tag, lookupProvider); - this.colorTank.readFromNBT(lookupProvider, tag.getCompound("Tank")); - this.stackHandler.deserializeNBT(lookupProvider, tag.getCompound("Slots")); + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.colorTank.deserialize(input.childOrEmpty("Tank")); + this.stackHandler.deserialize(input.childOrEmpty("Slots")); } @Override protected void collectImplicitComponents(DataComponentMap.Builder builder) { - builder.set(UselessDataComponents.FLUID_CONTENTS.get(), SimpleFluidContent.copyOf(this.colorTank.getFluid())); + builder.set(LibDataComponents.FLUID.get(), SimpleFluidContent.copyOf(this.colorTank.getFluid())); } @Override - protected void applyImplicitComponents(DataComponentInput components) { - this.colorTank.setFluid(components.getOrDefault(UselessDataComponents.FLUID_CONTENTS.get(), SimpleFluidContent.EMPTY).copy()); + protected void applyImplicitComponents(DataComponentGetter componentGetter) { + this.colorTank.setFluid(componentGetter.getOrDefault(LibDataComponents.FLUID.get(), SimpleFluidContent.EMPTY).copy()); } @SuppressWarnings("deprecation") @Override - public void removeComponentsFromTag(CompoundTag tag) { - tag.remove("Tank"); + public void removeComponentsFromTag(ValueOutput output) { + output.discard("Tank"); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/PaintedWoolBlockEntity.java b/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/PaintedWoolBlockEntity.java index 3ce4b917..4c0b6058 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/PaintedWoolBlockEntity.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/PaintedWoolBlockEntity.java @@ -2,6 +2,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponentGetter; import net.minecraft.core.component.DataComponentMap; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; @@ -9,13 +10,18 @@ import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; import net.themcbrothers.uselessmod.core.UselessBlockEntityTypes; import net.themcbrothers.uselessmod.core.UselessDataComponents; import net.themcbrothers.uselessmod.world.level.block.PaintedWoolBlock; import org.jetbrains.annotations.Nullable; public class PaintedWoolBlockEntity extends BlockEntity { - private int color = 0xFFFFFFFF; + public static final String TAG_COLOR = "color"; + public static final int DEFAULT_COLOR = 0xFFFFFFFF; + + private int color = DEFAULT_COLOR; public PaintedWoolBlockEntity(BlockPos pos, BlockState state) { super(UselessBlockEntityTypes.PAINTED_WOOL.get(), pos, state); @@ -24,7 +30,7 @@ public PaintedWoolBlockEntity(BlockPos pos, BlockState state) { @Override public CompoundTag getUpdateTag(HolderLookup.Provider lookupProvider) { CompoundTag tag = super.getUpdateTag(lookupProvider); - tag.putInt("Color", this.color); + tag.putInt(TAG_COLOR, this.color); return tag; } @@ -35,15 +41,15 @@ public Packet getUpdatePacket() { } @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider lookupProvider) { - super.loadAdditional(tag, lookupProvider); - this.color = tag.getInt("Color"); + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); + this.color = input.getIntOr(TAG_COLOR, DEFAULT_COLOR); } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider lookupProvider) { - super.saveAdditional(tag, lookupProvider); - tag.putInt("Color", this.color); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + output.putInt(TAG_COLOR, this.color); } public int getColor() { @@ -59,8 +65,8 @@ public void setColor(int color) { } @Override - protected void applyImplicitComponents(DataComponentInput components) { - this.color = components.getOrDefault(UselessDataComponents.COLOR.get(), 0xFFFFFFFF); + protected void applyImplicitComponents(DataComponentGetter componentGetter) { + this.color = componentGetter.getOrDefault(UselessDataComponents.COLOR.get(), DEFAULT_COLOR); } @Override @@ -70,7 +76,7 @@ protected void collectImplicitComponents(DataComponentMap.Builder builder) { @SuppressWarnings("deprecation") @Override - public void removeComponentsFromTag(CompoundTag tag) { - tag.remove("Color"); + public void removeComponentsFromTag(ValueOutput output) { + output.discard("color"); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/WallClosetBlockEntity.java b/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/WallClosetBlockEntity.java index c92ad3a0..f73efa29 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/WallClosetBlockEntity.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/WallClosetBlockEntity.java @@ -4,19 +4,19 @@ import net.minecraft.core.Holder; import net.minecraft.core.HolderLookup; import net.minecraft.core.NonNullList; +import net.minecraft.core.component.DataComponentGetter; import net.minecraft.core.component.DataComponentMap; import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.world.Container; import net.minecraft.world.ContainerHelper; +import net.minecraft.world.entity.ContainerUser; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; @@ -30,16 +30,15 @@ import net.minecraft.world.level.block.entity.ContainerOpenersCounter; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.neoforged.neoforge.client.model.data.ModelData; -import net.neoforged.neoforge.client.model.data.ModelProperty; +import net.minecraft.world.level.storage.ValueInput; +import net.minecraft.world.level.storage.ValueOutput; +import net.neoforged.neoforge.model.data.ModelData; +import net.neoforged.neoforge.model.data.ModelProperty; import net.themcbrothers.uselessmod.UselessMod; import net.themcbrothers.uselessmod.core.UselessBlockEntityTypes; import net.themcbrothers.uselessmod.core.UselessDataComponents; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Objects; - public class WallClosetBlockEntity extends BaseContainerBlockEntity { public static final ModelProperty MATERIAL_PROPERTY = new ModelProperty<>(); @@ -63,7 +62,7 @@ protected void openerCountChanged(Level level, BlockPos pos, BlockState state, i } @Override - protected boolean isOwnContainer(Player player) { + public boolean isOwnContainer(Player player) { if (player.containerMenu instanceof ChestMenu) { Container container = ((ChestMenu) player.containerMenu).getContainer(); return container == WallClosetBlockEntity.this; @@ -77,7 +76,6 @@ public WallClosetBlockEntity(BlockPos pos, BlockState state) { super(UselessBlockEntityTypes.WALL_CLOSET.get(), pos, state); } - @NotNull @Override public ModelData getModelData() { return ModelData.builder().with(MATERIAL_PROPERTY, this.material).build(); @@ -95,21 +93,20 @@ public ClientboundBlockEntityDataPacket getUpdatePacket() { } @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider lookupProvider) { - super.saveAdditional(tag, lookupProvider); - ContainerHelper.saveAllItems(tag, this.items, lookupProvider); - tag.putString("Material", String.valueOf(BuiltInRegistries.BLOCK.getKey(this.material))); + protected void saveAdditional(ValueOutput output) { + super.saveAdditional(output); + ContainerHelper.saveAllItems(output, this.items); + output.putString("material", String.valueOf(BuiltInRegistries.BLOCK.getKey(this.material))); } @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider lookupProvider) { - super.loadAdditional(tag, lookupProvider); + protected void loadAdditional(ValueInput input) { + super.loadAdditional(input); this.items = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY); - ContainerHelper.loadAllItems(tag, this.items, lookupProvider); - final ResourceLocation key = ResourceLocation.tryParse(tag.getString("Material")); - if (key != null) { - material = BuiltInRegistries.BLOCK.getValue(key); - } + ContainerHelper.loadAllItems(input, this.items); + input.getString("material") + .map(Identifier::tryParse) + .ifPresent(identifier -> this.material = BuiltInRegistries.BLOCK.getValue(identifier)); } public void setMaterial(Holder material) { @@ -121,18 +118,18 @@ public void setMaterial(Holder material) { } @Override - public void startOpen(Player player) { - if (!this.remove && !player.isSpectator()) { + public void startOpen(ContainerUser user) { + if (!this.remove && !user.getLivingEntity().isSpectator()) { //noinspection DataFlowIssue - this.openersCounter.incrementOpeners(player, this.getLevel(), this.getBlockPos(), this.getBlockState()); + this.openersCounter.incrementOpeners(user.getLivingEntity(), this.getLevel(), this.getBlockPos(), this.getBlockState(), user.getContainerInteractionRange()); } } @Override - public void stopOpen(Player player) { - if (!this.remove && !player.isSpectator()) { + public void stopOpen(ContainerUser user) { + if (!this.remove && !user.getLivingEntity().isSpectator()) { //noinspection DataFlowIssue - this.openersCounter.decrementOpeners(player, this.getLevel(), this.getBlockPos(), this.getBlockState()); + this.openersCounter.decrementOpeners(user.getLivingEntity(), this.getLevel(), this.getBlockPos(), this.getBlockState()); } } @@ -219,7 +216,7 @@ public void clearContent() { private void updateBlockState(BlockState state, boolean isOpen) { //noinspection DataFlowIssue - this.getLevel().setBlock(this.getBlockPos(), state.setValue(BlockStateProperties.OPEN, isOpen), 3); + this.getLevel().setBlock(this.getBlockPos(), state.setValue(BlockStateProperties.OPEN, isOpen), Block.UPDATE_NEIGHBORS | Block.UPDATE_CLIENTS); } private void playSound(SoundEvent soundEvent) { @@ -235,7 +232,7 @@ public Block getMaterial() { } @Override - protected void applyImplicitComponents(DataComponentInput components) { + protected void applyImplicitComponents(DataComponentGetter components) { super.applyImplicitComponents(components); this.setMaterial(components.getOrDefault(UselessDataComponents.WALL_CLOSET_MATERIAL.get(), Holder.direct(Blocks.AIR))); } @@ -247,8 +244,7 @@ protected void collectImplicitComponents(DataComponentMap.Builder builder) { } @Override - public void removeComponentsFromTag(CompoundTag tag) { - super.removeComponentsFromTag(tag); - tag.remove("Material"); + public void removeComponentsFromTag(ValueOutput output) { + output.discard("material"); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/package-info.java b/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/package-info.java index f50fcfb7..70ab7925 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/package-info.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/block/entity/package-info.java @@ -1,4 +1,2 @@ -@net.minecraft.MethodsReturnNonnullByDefault -@net.minecraft.FieldsAreNonnullByDefault -@javax.annotation.ParametersAreNonnullByDefault +@org.jspecify.annotations.NullMarked package net.themcbrothers.uselessmod.world.level.block.entity; \ No newline at end of file diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/block/package-info.java b/src/main/java/net/themcbrothers/uselessmod/world/level/block/package-info.java index df7c3726..5b20eac6 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/block/package-info.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/block/package-info.java @@ -1,9 +1,2 @@ -@FieldsAreNonnullByDefault -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -package net.themcbrothers.uselessmod.world.level.block; - -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file +@org.jspecify.annotations.NullMarked +package net.themcbrothers.uselessmod.world.level.block; \ No newline at end of file diff --git a/src/main/java/net/themcbrothers/uselessmod/world/level/storage/loot/UselessLootTables.java b/src/main/java/net/themcbrothers/uselessmod/world/level/storage/loot/UselessLootTables.java index ce0625b2..42a88a04 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/level/storage/loot/UselessLootTables.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/level/storage/loot/UselessLootTables.java @@ -6,6 +6,6 @@ import net.themcbrothers.uselessmod.UselessMod; public class UselessLootTables { - public static final ResourceKey USELESS_SHEEP = ResourceKey.create(Registries.LOOT_TABLE, UselessMod.rl("entities/useless_sheep")); - public static final ResourceKey SHEEP_USELESS = ResourceKey.create(Registries.LOOT_TABLE, UselessMod.rl("entities/useless_sheep/useless")); + public static final ResourceKey USELESS_SHEEP = ResourceKey.create(Registries.LOOT_TABLE, UselessMod.id("entities/useless_sheep")); + public static final ResourceKey SHEEP_USELESS = ResourceKey.create(Registries.LOOT_TABLE, UselessMod.id("entities/useless_sheep/useless")); } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/worldgen/ConfigFeaturePlacement.java b/src/main/java/net/themcbrothers/uselessmod/world/worldgen/ConfigFeaturePlacement.java index 8e361535..805bf5ab 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/worldgen/ConfigFeaturePlacement.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/worldgen/ConfigFeaturePlacement.java @@ -1,7 +1,6 @@ package net.themcbrothers.uselessmod.world.worldgen; import com.mojang.serialization.MapCodec; -import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.util.RandomSource; import net.minecraft.util.StringRepresentable; @@ -11,12 +10,9 @@ import net.themcbrothers.uselessmod.config.ServerConfig; import net.themcbrothers.uselessmod.core.UselessPlacementModifierTypes; -import javax.annotation.ParametersAreNonnullByDefault; import java.util.Locale; import java.util.function.Supplier; -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault public class ConfigFeaturePlacement extends PlacementFilter { public static final MapCodec CODEC = Type.CODEC.fieldOf("dim_type").xmap(ConfigFeaturePlacement::new, placement -> placement.type); diff --git a/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessOreFeatures.java b/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessOreFeatures.java index 37502935..8a8dd540 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessOreFeatures.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessOreFeatures.java @@ -46,6 +46,6 @@ public static void bootstrap(BootstrapContext> context) } private static ResourceKey> createKey(String name) { - return ResourceKey.create(Registries.CONFIGURED_FEATURE, UselessMod.rl(name)); + return ResourceKey.create(Registries.CONFIGURED_FEATURE, UselessMod.id(name)); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessOrePlacements.java b/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessOrePlacements.java index 84778417..0f3a6ca6 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessOrePlacements.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessOrePlacements.java @@ -39,6 +39,6 @@ private static List commonOrePlacement(int count, PlacementMo } private static ResourceKey createKey(String name) { - return ResourceKey.create(Registries.PLACED_FEATURE, UselessMod.rl(name)); + return ResourceKey.create(Registries.PLACED_FEATURE, UselessMod.id(name)); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessTreeFeatures.java b/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessTreeFeatures.java index 58c2dd11..bf70f6f3 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessTreeFeatures.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessTreeFeatures.java @@ -58,6 +58,6 @@ public static void bootstrap(BootstrapContext> context) } private static ResourceKey> createKey(String name) { - return ResourceKey.create(Registries.CONFIGURED_FEATURE, UselessMod.rl(name)); + return ResourceKey.create(Registries.CONFIGURED_FEATURE, UselessMod.id(name)); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessTreePlacements.java b/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessTreePlacements.java index 72f0559c..817cc17c 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessTreePlacements.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessTreePlacements.java @@ -28,6 +28,6 @@ public static void bootstrap(BootstrapContext context) { } private static ResourceKey createKey(String name) { - return ResourceKey.create(Registries.PLACED_FEATURE, UselessMod.rl(name)); + return ResourceKey.create(Registries.PLACED_FEATURE, UselessMod.id(name)); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessVegetationFeatures.java b/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessVegetationFeatures.java index fc79587d..26c59676 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessVegetationFeatures.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessVegetationFeatures.java @@ -6,7 +6,7 @@ import net.minecraft.data.worldgen.features.FeatureUtils; import net.minecraft.data.worldgen.placement.PlacementUtils; import net.minecraft.resources.ResourceKey; -import net.minecraft.util.random.SimpleWeightedRandomList; +import net.minecraft.util.random.WeightedList; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; import net.minecraft.world.level.levelgen.feature.Feature; @@ -33,11 +33,11 @@ private static RandomPatchConfiguration grassPatch(BlockStateProvider toPlace, i public static void bootstrap(BootstrapContext> context) { HolderGetter placedFeatures = context.lookup(Registries.PLACED_FEATURE); - FeatureUtils.register(context, USELESS_FLOWER_DEFAULT, Feature.FLOWER, grassPatch(new WeightedStateProvider(SimpleWeightedRandomList.builder().add(UselessBlocks.RED_ROSE.get().defaultBlockState(), 2).add(UselessBlocks.BLUE_ROSE.get().defaultBlockState(), 2).add(UselessBlocks.USELESS_ROSE.get().defaultBlockState(), 1)), 64)); + FeatureUtils.register(context, USELESS_FLOWER_DEFAULT, Feature.FLOWER, grassPatch(new WeightedStateProvider(WeightedList.builder().add(UselessBlocks.RED_ROSE.get().defaultBlockState(), 2).add(UselessBlocks.BLUE_ROSE.get().defaultBlockState(), 2).add(UselessBlocks.USELESS_ROSE.get().defaultBlockState(), 1)), 64)); FeatureUtils.register(context, USELESS_FOREST_TREES, Feature.RANDOM_SELECTOR, new RandomFeatureConfiguration(List.of(new WeightedPlacedFeature(placedFeatures.getOrThrow(UselessTreePlacements.FANCY_USELESS_OAK_BEES_0002), 0.1F)), placedFeatures.getOrThrow(UselessTreePlacements.USELESS_OAK_BEES_0002))); } private static ResourceKey> createKey(String name) { - return ResourceKey.create(Registries.CONFIGURED_FEATURE, UselessMod.rl(name)); + return ResourceKey.create(Registries.CONFIGURED_FEATURE, UselessMod.id(name)); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessVegetationPlacements.java b/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessVegetationPlacements.java index 42205af6..e91907b7 100644 --- a/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessVegetationPlacements.java +++ b/src/main/java/net/themcbrothers/uselessmod/world/worldgen/UselessVegetationPlacements.java @@ -26,6 +26,6 @@ public static void bootstrap(BootstrapContext context) { } private static ResourceKey createKey(String name) { - return ResourceKey.create(Registries.PLACED_FEATURE, UselessMod.rl(name)); + return ResourceKey.create(Registries.PLACED_FEATURE, UselessMod.id(name)); } } diff --git a/src/main/java/net/themcbrothers/uselessmod/world/worldgen/package-info.java b/src/main/java/net/themcbrothers/uselessmod/world/worldgen/package-info.java new file mode 100644 index 00000000..947bc8be --- /dev/null +++ b/src/main/java/net/themcbrothers/uselessmod/world/worldgen/package-info.java @@ -0,0 +1,2 @@ +@org.jspecify.annotations.NullMarked +package net.themcbrothers.uselessmod.world.worldgen; \ No newline at end of file diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index dd1e6102..56d9464a 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -1,12 +1,5 @@ -public-f net.minecraft.world.item.AxeItem STRIPPABLES public net.minecraft.world.level.block.FireBlock setFlammable(Lnet/minecraft/world/level/block/Block;II)V -protected net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer blockEntityRenderDispatcher -protected net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer entityModelSet - public-f net.minecraft.client.gui.components.AbstractWidget render(Lnet/minecraft/client/gui/GuiGraphics;IIF)V public net.minecraft.client.model.PlayerModel cloak - -public net.minecraft.world.item.crafting.RecipeManager byType -public net.minecraft.world.item.crafting.RecipeManager byName \ No newline at end of file