From f36822952834f47c69fcf29f4e49eae445fa864f Mon Sep 17 00:00:00 2001 From: tomasalias Date: Sun, 15 Nov 2026 21:58:11 +0100 Subject: [PATCH] fix: broken kofola bucket texture --- 1.19.2/.gitattributes | 5 + 1.19.2/.gitignore | 25 + 1.19.2/CREDITS.txt | 65 ++ 1.19.2/LICENSE.txt | 520 +++++++++++++ 1.19.2/README.txt | 46 ++ 1.19.2/build.gradle | 207 ++++++ 1.19.2/changelog.txt | 697 ++++++++++++++++++ 1.19.2/gradle.properties | 23 + 1.19.2/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 62076 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + 1.19.2/gradlew | 245 ++++++ 1.19.2/gradlew.bat | 92 +++ 1.19.2/settings.gradle | 13 + .../src/main/java/cz/kofolamod/KofolaMod.java | 56 ++ .../cz/kofolamod/block/KofolaCrateBlock.java | 33 + .../compat/FarmersDelightCompat.java | 34 + .../cz/kofolamod/fluid/KofolaFluidType.java | 48 ++ .../cz/kofolamod/item/DraftKofolaItem.java | 96 +++ .../java/cz/kofolamod/item/KofoSyrupItem.java | 85 +++ .../cz/kofolamod/item/KofolaBottleItem.java | 95 +++ .../java/cz/kofolamod/item/KofolaCanItem.java | 84 +++ .../kofolamod/recipe/KofolaBrewingRecipe.java | 34 + .../java/cz/kofolamod/registry/ModBlocks.java | 26 + .../registry/ModCreativeModeTab.java | 13 + .../java/cz/kofolamod/registry/ModFluids.java | 39 + .../java/cz/kofolamod/registry/ModFoods.java | 40 + .../java/cz/kofolamod/registry/ModItems.java | 46 ++ 1.19.2/src/main/resources/META-INF/mods.toml | 39 + .../kofola/blockstates/kofola_crate.json | 8 + .../resources/assets/kofola/lang/cs_cz.json | 22 + .../resources/assets/kofola/lang/de_de.json | 22 + .../resources/assets/kofola/lang/en_us.json | 22 + .../resources/assets/kofola/lang/pl_pl.json | 22 + .../resources/assets/kofola/lang/sk_sk.json | 22 + .../kofola/models/block/kofola_crate.json | 12 + .../kofola/models/item/draft_kofola.json | 6 + .../assets/kofola/models/item/kofo_syrup.json | 6 + .../kofola/models/item/kofola_bottle.json | 6 + .../kofola/models/item/kofola_bucket.json | 6 + .../assets/kofola/models/item/kofola_can.json | 6 + .../kofola/models/item/kofola_crate.json | 3 + .../textures/block/kofola_crate_bottom.png | Bin 0 -> 141 bytes .../textures/block/kofola_crate_front.png | Bin 0 -> 214 bytes .../textures/block/kofola_crate_side.png | Bin 0 -> 193 bytes .../textures/block/kofola_crate_top.png | Bin 0 -> 150 bytes .../kofola/textures/block/kofola_flow.png | Bin 0 -> 233 bytes .../kofola/textures/block/kofola_still.png | Bin 0 -> 214 bytes .../kofola/textures/item/draft_kofola.png | Bin 0 -> 292 bytes .../kofola/textures/item/kofo_syrup.png | Bin 0 -> 258 bytes .../kofola/textures/item/kofola_bottle.png | Bin 0 -> 266 bytes .../kofola/textures/item/kofola_bucket.png | Bin 0 -> 366 bytes .../kofola/textures/item/kofola_can.png | Bin 0 -> 270 bytes .../recipes/emptying/emptying_bottle.json | 23 + .../recipes/emptying/emptying_bucket.json | 23 + .../recipes/filling/filling_bottle.json | 23 + .../recipes/filling/filling_bucket.json | 23 + .../create/recipes/filling/filling_can.json | 23 + .../recipes/mixing/mixing_kofola_brewing.json | 34 + .../mixing/mixing_kofola_from_syrup.json | 24 + .../recipes/cooking_kofo_syrup.json | 23 + .../recipes/cooking_kofola_bottle.json | 21 + .../farmersdelight/tags/items/drinks.json | 8 + .../data/forge/tags/fluids/kofola.json | 7 + .../data/forge/tags/items/drinks.json | 8 + .../loot_tables/blocks/kofola_crate.json | 20 + .../data/kofola/recipes/draft_kofola.json | 11 + .../data/kofola/recipes/kofo_syrup.json | 14 + .../data/kofola/recipes/kofola_bottle.json | 14 + .../kofola/recipes/kofola_bottle_alt.json | 12 + .../recipes/kofola_bottles_from_bucket.json | 14 + .../recipes/kofola_bucket_from_bottles.json | 14 + .../data/kofola/recipes/kofola_can.json | 11 + .../data/kofola/recipes/kofola_crate.json | 20 + .../kofola/recipes/kofola_crate_unpack.json | 10 + .../minecraft/tags/blocks/mineable/axe.json | 6 + 1.19.2/src/main/resources/icon.png | Bin 0 -> 455 bytes 1.19.2/src/main/resources/pack.mcmeta | 8 + 1.21.1/.gitattributes | 5 + 1.21.1/.gitignore | 26 + 1.21.1/LICENSE.txt | 523 +++++++++++++ 1.21.1/build.gradle | 53 ++ 1.21.1/changelog.txt | 193 +++++ 1.21.1/gradle.properties | 11 + 1.21.1/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43583 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + 1.21.1/gradlew | 251 +++++++ 1.21.1/gradlew.bat | 94 +++ 1.21.1/settings.gradle | 5 + .../src/main/java/cz/kofolamod/KofolaMod.java | 67 ++ .../cz/kofolamod/block/KofolaCrateBlock.java | 45 ++ .../compat/FarmersDelightCompat.java | 41 ++ .../cz/kofolamod/fluid/KofolaFluidType.java | 48 ++ .../cz/kofolamod/item/DraftKofolaItem.java | 92 +++ .../java/cz/kofolamod/item/KofoSyrupItem.java | 81 ++ .../cz/kofolamod/item/KofolaBottleItem.java | 91 +++ .../java/cz/kofolamod/item/KofolaCanItem.java | 80 ++ .../kofolamod/recipe/KofolaBrewingRecipe.java | 34 + .../java/cz/kofolamod/registry/ModBlocks.java | 32 + .../registry/ModCreativeModeTabs.java | 28 + .../java/cz/kofolamod/registry/ModFluids.java | 39 + .../java/cz/kofolamod/registry/ModFoods.java | 40 + .../java/cz/kofolamod/registry/ModItems.java | 38 + 1.21.1/src/main/resources/META-INF/mods.toml | 39 + .../kofola/blockstates/kofola_crate.json | 8 + .../resources/assets/kofola/lang/cs_cz.json | 22 + .../resources/assets/kofola/lang/de_de.json | 22 + .../resources/assets/kofola/lang/en_us.json | 22 + .../resources/assets/kofola/lang/pl_pl.json | 22 + .../resources/assets/kofola/lang/sk_sk.json | 22 + .../kofola/models/block/kofola_crate.json | 12 + .../kofola/models/item/draft_kofola.json | 6 + .../assets/kofola/models/item/kofo_syrup.json | 6 + .../kofola/models/item/kofola_bottle.json | 6 + .../kofola/models/item/kofola_bucket.json | 6 + .../assets/kofola/models/item/kofola_can.json | 6 + .../kofola/models/item/kofola_crate.json | 3 + .../textures/block/kofola_crate_bottom.png | Bin 0 -> 141 bytes .../textures/block/kofola_crate_front.png | Bin 0 -> 214 bytes .../textures/block/kofola_crate_side.png | Bin 0 -> 193 bytes .../textures/block/kofola_crate_top.png | Bin 0 -> 150 bytes .../kofola/textures/block/kofola_flow.png | Bin 0 -> 233 bytes .../kofola/textures/block/kofola_still.png | Bin 0 -> 214 bytes .../kofola/textures/item/draft_kofola.png | Bin 0 -> 292 bytes .../kofola/textures/item/kofo_syrup.png | Bin 0 -> 258 bytes .../kofola/textures/item/kofola_bottle.png | Bin 0 -> 266 bytes .../kofola/textures/item/kofola_bucket.png | Bin 0 -> 366 bytes .../kofola/textures/item/kofola_can.png | Bin 0 -> 270 bytes .../recipes/emptying/emptying_bottle.json | 23 + .../recipes/emptying/emptying_bucket.json | 23 + .../recipes/filling/filling_bottle.json | 23 + .../recipes/filling/filling_bucket.json | 23 + .../create/recipes/filling/filling_can.json | 23 + .../recipes/mixing/mixing_kofola_brewing.json | 34 + .../mixing/mixing_kofola_from_syrup.json | 24 + .../recipes/cooking_kofo_syrup.json | 23 + .../recipes/cooking_kofola_bottle.json | 21 + .../farmersdelight/tags/items/drinks.json | 8 + .../data/forge/tags/fluids/kofola.json | 7 + .../data/forge/tags/items/drinks.json | 8 + .../loot_tables/blocks/kofola_crate.json | 20 + .../data/kofola/recipes/draft_kofola.json | 15 + .../data/kofola/recipes/kofo_syrup.json | 24 + .../data/kofola/recipes/kofola_bottle.json | 24 + .../kofola/recipes/kofola_bottle_alt.json | 18 + .../recipes/kofola_bottles_from_bucket.json | 24 + .../recipes/kofola_bucket_from_bottles.json | 24 + .../data/kofola/recipes/kofola_can.json | 15 + .../data/kofola/recipes/kofola_crate.json | 20 + .../kofola/recipes/kofola_crate_unpack.json | 12 + .../minecraft/tags/blocks/mineable/axe.json | 6 + 1.21.1/src/main/resources/icon.png | Bin 0 -> 455 bytes 1.21.1/src/main/resources/pack.mcmeta | 6 + dist/kofola-1.19.2-1.0.1.jar | Bin 0 -> 49504 bytes dist/kofola-1.20.1-1.0.1.jar | Bin 0 -> 50010 bytes dist/kofola-1.21.1-1.0.1.jar | Bin 0 -> 48027 bytes gradle.properties | 2 +- .../kofola/textures/item/kofola_bucket.png | Bin 242 -> 366 bytes test_kofola_bucket.png | Bin 0 -> 366 bytes update_bucket_texture.py | 87 +++ 159 files changed, 5930 insertions(+), 1 deletion(-) create mode 100644 1.19.2/.gitattributes create mode 100644 1.19.2/.gitignore create mode 100644 1.19.2/CREDITS.txt create mode 100644 1.19.2/LICENSE.txt create mode 100644 1.19.2/README.txt create mode 100644 1.19.2/build.gradle create mode 100644 1.19.2/changelog.txt create mode 100644 1.19.2/gradle.properties create mode 100644 1.19.2/gradle/wrapper/gradle-wrapper.jar create mode 100644 1.19.2/gradle/wrapper/gradle-wrapper.properties create mode 100644 1.19.2/gradlew create mode 100644 1.19.2/gradlew.bat create mode 100644 1.19.2/settings.gradle create mode 100644 1.19.2/src/main/java/cz/kofolamod/KofolaMod.java create mode 100644 1.19.2/src/main/java/cz/kofolamod/block/KofolaCrateBlock.java create mode 100644 1.19.2/src/main/java/cz/kofolamod/compat/FarmersDelightCompat.java create mode 100644 1.19.2/src/main/java/cz/kofolamod/fluid/KofolaFluidType.java create mode 100644 1.19.2/src/main/java/cz/kofolamod/item/DraftKofolaItem.java create mode 100644 1.19.2/src/main/java/cz/kofolamod/item/KofoSyrupItem.java create mode 100644 1.19.2/src/main/java/cz/kofolamod/item/KofolaBottleItem.java create mode 100644 1.19.2/src/main/java/cz/kofolamod/item/KofolaCanItem.java create mode 100644 1.19.2/src/main/java/cz/kofolamod/recipe/KofolaBrewingRecipe.java create mode 100644 1.19.2/src/main/java/cz/kofolamod/registry/ModBlocks.java create mode 100644 1.19.2/src/main/java/cz/kofolamod/registry/ModCreativeModeTab.java create mode 100644 1.19.2/src/main/java/cz/kofolamod/registry/ModFluids.java create mode 100644 1.19.2/src/main/java/cz/kofolamod/registry/ModFoods.java create mode 100644 1.19.2/src/main/java/cz/kofolamod/registry/ModItems.java create mode 100644 1.19.2/src/main/resources/META-INF/mods.toml create mode 100644 1.19.2/src/main/resources/assets/kofola/blockstates/kofola_crate.json create mode 100644 1.19.2/src/main/resources/assets/kofola/lang/cs_cz.json create mode 100644 1.19.2/src/main/resources/assets/kofola/lang/de_de.json create mode 100644 1.19.2/src/main/resources/assets/kofola/lang/en_us.json create mode 100644 1.19.2/src/main/resources/assets/kofola/lang/pl_pl.json create mode 100644 1.19.2/src/main/resources/assets/kofola/lang/sk_sk.json create mode 100644 1.19.2/src/main/resources/assets/kofola/models/block/kofola_crate.json create mode 100644 1.19.2/src/main/resources/assets/kofola/models/item/draft_kofola.json create mode 100644 1.19.2/src/main/resources/assets/kofola/models/item/kofo_syrup.json create mode 100644 1.19.2/src/main/resources/assets/kofola/models/item/kofola_bottle.json create mode 100644 1.19.2/src/main/resources/assets/kofola/models/item/kofola_bucket.json create mode 100644 1.19.2/src/main/resources/assets/kofola/models/item/kofola_can.json create mode 100644 1.19.2/src/main/resources/assets/kofola/models/item/kofola_crate.json create mode 100644 1.19.2/src/main/resources/assets/kofola/textures/block/kofola_crate_bottom.png create mode 100644 1.19.2/src/main/resources/assets/kofola/textures/block/kofola_crate_front.png create mode 100644 1.19.2/src/main/resources/assets/kofola/textures/block/kofola_crate_side.png create mode 100644 1.19.2/src/main/resources/assets/kofola/textures/block/kofola_crate_top.png create mode 100644 1.19.2/src/main/resources/assets/kofola/textures/block/kofola_flow.png create mode 100644 1.19.2/src/main/resources/assets/kofola/textures/block/kofola_still.png create mode 100644 1.19.2/src/main/resources/assets/kofola/textures/item/draft_kofola.png create mode 100644 1.19.2/src/main/resources/assets/kofola/textures/item/kofo_syrup.png create mode 100644 1.19.2/src/main/resources/assets/kofola/textures/item/kofola_bottle.png create mode 100644 1.19.2/src/main/resources/assets/kofola/textures/item/kofola_bucket.png create mode 100644 1.19.2/src/main/resources/assets/kofola/textures/item/kofola_can.png create mode 100644 1.19.2/src/main/resources/data/create/recipes/emptying/emptying_bottle.json create mode 100644 1.19.2/src/main/resources/data/create/recipes/emptying/emptying_bucket.json create mode 100644 1.19.2/src/main/resources/data/create/recipes/filling/filling_bottle.json create mode 100644 1.19.2/src/main/resources/data/create/recipes/filling/filling_bucket.json create mode 100644 1.19.2/src/main/resources/data/create/recipes/filling/filling_can.json create mode 100644 1.19.2/src/main/resources/data/create/recipes/mixing/mixing_kofola_brewing.json create mode 100644 1.19.2/src/main/resources/data/create/recipes/mixing/mixing_kofola_from_syrup.json create mode 100644 1.19.2/src/main/resources/data/farmersdelight/recipes/cooking_kofo_syrup.json create mode 100644 1.19.2/src/main/resources/data/farmersdelight/recipes/cooking_kofola_bottle.json create mode 100644 1.19.2/src/main/resources/data/farmersdelight/tags/items/drinks.json create mode 100644 1.19.2/src/main/resources/data/forge/tags/fluids/kofola.json create mode 100644 1.19.2/src/main/resources/data/forge/tags/items/drinks.json create mode 100644 1.19.2/src/main/resources/data/kofola/loot_tables/blocks/kofola_crate.json create mode 100644 1.19.2/src/main/resources/data/kofola/recipes/draft_kofola.json create mode 100644 1.19.2/src/main/resources/data/kofola/recipes/kofo_syrup.json create mode 100644 1.19.2/src/main/resources/data/kofola/recipes/kofola_bottle.json create mode 100644 1.19.2/src/main/resources/data/kofola/recipes/kofola_bottle_alt.json create mode 100644 1.19.2/src/main/resources/data/kofola/recipes/kofola_bottles_from_bucket.json create mode 100644 1.19.2/src/main/resources/data/kofola/recipes/kofola_bucket_from_bottles.json create mode 100644 1.19.2/src/main/resources/data/kofola/recipes/kofola_can.json create mode 100644 1.19.2/src/main/resources/data/kofola/recipes/kofola_crate.json create mode 100644 1.19.2/src/main/resources/data/kofola/recipes/kofola_crate_unpack.json create mode 100644 1.19.2/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json create mode 100644 1.19.2/src/main/resources/icon.png create mode 100644 1.19.2/src/main/resources/pack.mcmeta create mode 100644 1.21.1/.gitattributes create mode 100644 1.21.1/.gitignore create mode 100644 1.21.1/LICENSE.txt create mode 100644 1.21.1/build.gradle create mode 100644 1.21.1/changelog.txt create mode 100644 1.21.1/gradle.properties create mode 100644 1.21.1/gradle/wrapper/gradle-wrapper.jar create mode 100644 1.21.1/gradle/wrapper/gradle-wrapper.properties create mode 100644 1.21.1/gradlew create mode 100644 1.21.1/gradlew.bat create mode 100644 1.21.1/settings.gradle create mode 100644 1.21.1/src/main/java/cz/kofolamod/KofolaMod.java create mode 100644 1.21.1/src/main/java/cz/kofolamod/block/KofolaCrateBlock.java create mode 100644 1.21.1/src/main/java/cz/kofolamod/compat/FarmersDelightCompat.java create mode 100644 1.21.1/src/main/java/cz/kofolamod/fluid/KofolaFluidType.java create mode 100644 1.21.1/src/main/java/cz/kofolamod/item/DraftKofolaItem.java create mode 100644 1.21.1/src/main/java/cz/kofolamod/item/KofoSyrupItem.java create mode 100644 1.21.1/src/main/java/cz/kofolamod/item/KofolaBottleItem.java create mode 100644 1.21.1/src/main/java/cz/kofolamod/item/KofolaCanItem.java create mode 100644 1.21.1/src/main/java/cz/kofolamod/recipe/KofolaBrewingRecipe.java create mode 100644 1.21.1/src/main/java/cz/kofolamod/registry/ModBlocks.java create mode 100644 1.21.1/src/main/java/cz/kofolamod/registry/ModCreativeModeTabs.java create mode 100644 1.21.1/src/main/java/cz/kofolamod/registry/ModFluids.java create mode 100644 1.21.1/src/main/java/cz/kofolamod/registry/ModFoods.java create mode 100644 1.21.1/src/main/java/cz/kofolamod/registry/ModItems.java create mode 100644 1.21.1/src/main/resources/META-INF/mods.toml create mode 100644 1.21.1/src/main/resources/assets/kofola/blockstates/kofola_crate.json create mode 100644 1.21.1/src/main/resources/assets/kofola/lang/cs_cz.json create mode 100644 1.21.1/src/main/resources/assets/kofola/lang/de_de.json create mode 100644 1.21.1/src/main/resources/assets/kofola/lang/en_us.json create mode 100644 1.21.1/src/main/resources/assets/kofola/lang/pl_pl.json create mode 100644 1.21.1/src/main/resources/assets/kofola/lang/sk_sk.json create mode 100644 1.21.1/src/main/resources/assets/kofola/models/block/kofola_crate.json create mode 100644 1.21.1/src/main/resources/assets/kofola/models/item/draft_kofola.json create mode 100644 1.21.1/src/main/resources/assets/kofola/models/item/kofo_syrup.json create mode 100644 1.21.1/src/main/resources/assets/kofola/models/item/kofola_bottle.json create mode 100644 1.21.1/src/main/resources/assets/kofola/models/item/kofola_bucket.json create mode 100644 1.21.1/src/main/resources/assets/kofola/models/item/kofola_can.json create mode 100644 1.21.1/src/main/resources/assets/kofola/models/item/kofola_crate.json create mode 100644 1.21.1/src/main/resources/assets/kofola/textures/block/kofola_crate_bottom.png create mode 100644 1.21.1/src/main/resources/assets/kofola/textures/block/kofola_crate_front.png create mode 100644 1.21.1/src/main/resources/assets/kofola/textures/block/kofola_crate_side.png create mode 100644 1.21.1/src/main/resources/assets/kofola/textures/block/kofola_crate_top.png create mode 100644 1.21.1/src/main/resources/assets/kofola/textures/block/kofola_flow.png create mode 100644 1.21.1/src/main/resources/assets/kofola/textures/block/kofola_still.png create mode 100644 1.21.1/src/main/resources/assets/kofola/textures/item/draft_kofola.png create mode 100644 1.21.1/src/main/resources/assets/kofola/textures/item/kofo_syrup.png create mode 100644 1.21.1/src/main/resources/assets/kofola/textures/item/kofola_bottle.png create mode 100644 1.21.1/src/main/resources/assets/kofola/textures/item/kofola_bucket.png create mode 100644 1.21.1/src/main/resources/assets/kofola/textures/item/kofola_can.png create mode 100644 1.21.1/src/main/resources/data/create/recipes/emptying/emptying_bottle.json create mode 100644 1.21.1/src/main/resources/data/create/recipes/emptying/emptying_bucket.json create mode 100644 1.21.1/src/main/resources/data/create/recipes/filling/filling_bottle.json create mode 100644 1.21.1/src/main/resources/data/create/recipes/filling/filling_bucket.json create mode 100644 1.21.1/src/main/resources/data/create/recipes/filling/filling_can.json create mode 100644 1.21.1/src/main/resources/data/create/recipes/mixing/mixing_kofola_brewing.json create mode 100644 1.21.1/src/main/resources/data/create/recipes/mixing/mixing_kofola_from_syrup.json create mode 100644 1.21.1/src/main/resources/data/farmersdelight/recipes/cooking_kofo_syrup.json create mode 100644 1.21.1/src/main/resources/data/farmersdelight/recipes/cooking_kofola_bottle.json create mode 100644 1.21.1/src/main/resources/data/farmersdelight/tags/items/drinks.json create mode 100644 1.21.1/src/main/resources/data/forge/tags/fluids/kofola.json create mode 100644 1.21.1/src/main/resources/data/forge/tags/items/drinks.json create mode 100644 1.21.1/src/main/resources/data/kofola/loot_tables/blocks/kofola_crate.json create mode 100644 1.21.1/src/main/resources/data/kofola/recipes/draft_kofola.json create mode 100644 1.21.1/src/main/resources/data/kofola/recipes/kofo_syrup.json create mode 100644 1.21.1/src/main/resources/data/kofola/recipes/kofola_bottle.json create mode 100644 1.21.1/src/main/resources/data/kofola/recipes/kofola_bottle_alt.json create mode 100644 1.21.1/src/main/resources/data/kofola/recipes/kofola_bottles_from_bucket.json create mode 100644 1.21.1/src/main/resources/data/kofola/recipes/kofola_bucket_from_bottles.json create mode 100644 1.21.1/src/main/resources/data/kofola/recipes/kofola_can.json create mode 100644 1.21.1/src/main/resources/data/kofola/recipes/kofola_crate.json create mode 100644 1.21.1/src/main/resources/data/kofola/recipes/kofola_crate_unpack.json create mode 100644 1.21.1/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json create mode 100644 1.21.1/src/main/resources/icon.png create mode 100644 1.21.1/src/main/resources/pack.mcmeta create mode 100644 dist/kofola-1.19.2-1.0.1.jar create mode 100644 dist/kofola-1.20.1-1.0.1.jar create mode 100644 dist/kofola-1.21.1-1.0.1.jar create mode 100644 test_kofola_bucket.png create mode 100644 update_bucket_texture.py diff --git a/1.19.2/.gitattributes b/1.19.2/.gitattributes new file mode 100644 index 0000000..f811f6a --- /dev/null +++ b/1.19.2/.gitattributes @@ -0,0 +1,5 @@ +# Disable autocrlf on generated files, they always generate with LF +# Add any extra files or paths here to make git stop saying they +# are changed when only line endings change. +src/generated/**/.cache/cache text eol=lf +src/generated/**/*.json text eol=lf diff --git a/1.19.2/.gitignore b/1.19.2/.gitignore new file mode 100644 index 0000000..12f8644 --- /dev/null +++ b/1.19.2/.gitignore @@ -0,0 +1,25 @@ +# eclipse +bin +*.launch +.settings +.metadata +.classpath +.project + +# idea +out +*.ipr +*.iws +*.iml +.idea + +# gradle +build +.gradle + +# other +eclipse +run + +# Files from Forge MDK +forge*changelog.txt diff --git a/1.19.2/CREDITS.txt b/1.19.2/CREDITS.txt new file mode 100644 index 0000000..a70c53d --- /dev/null +++ b/1.19.2/CREDITS.txt @@ -0,0 +1,65 @@ +Minecraft Forge: Credits/Thank You + +Forge is a set of tools and modifications to the Minecraft base game code to assist +mod developers in creating new and exciting content. It has been in development for +several years now, but I would like to take this time thank a few people who have +helped it along it's way. + +First, the people who originally created the Forge projects way back in Minecraft +alpha. Eloraam of RedPower, and SpaceToad of Buildcraft, without their acceptiance +of me taking over the project, who knows what Minecraft modding would be today. + +Secondly, someone who has worked with me, and developed some of the core features +that allow modding to be as functional, and as simple as it is, cpw. For developing +FML, which stabelized the client and server modding ecosystem. As well as the base +loading system that allows us to modify Minecraft's code as elegently as possible. + +Mezz, who has stepped up as the issue and pull request manager. Helping to keep me +sane as well as guiding the community into creating better additions to Forge. + +Searge, Bspks, Fesh0r, ProfMobious, and all the rest over on the MCP team {of which +I am a part}. For creating some of the core tools needed to make Minecraft modding +both possible, and as stable as can be. + On that note, here is some specific information of the MCP data we use: + * Minecraft Coder Pack (MCP) * + Forge Mod Loader and Minecraft Forge have permission to distribute and automatically + download components of MCP and distribute MCP data files. This permission is not + transitive and others wishing to redistribute the Minecraft Forge source independently + should seek permission of MCP or remove the MCP data files and request their users + to download MCP separately. + +And lastly, the countless community members who have spent time submitting bug reports, +pull requests, and just helping out the community in general. Thank you. + +--LexManos + +========================================================================= + +This is Forge Mod Loader. + +You can find the source code at all times at https://github.com/MinecraftForge/MinecraftForge/tree/1.12.x/src/main/java/net/minecraftforge/fml + +This minecraft mod is a clean open source implementation of a mod loader for minecraft servers +and minecraft clients. + +The code is authored by cpw. + +It began by partially implementing an API defined by the client side ModLoader, authored by Risugami. +http://www.minecraftforum.net/topic/75440- +This support has been dropped as of Minecraft release 1.7, as Risugami no longer maintains ModLoader. + +It also contains suggestions and hints and generous helpings of code from LexManos, author of MinecraftForge. +http://www.minecraftforge.net/ + +Additionally, it contains an implementation of topological sort based on that +published at http://keithschwarz.com/interesting/code/?dir=topological-sort + +It also contains code from the Maven project for performing versioned dependency +resolution. http://maven.apache.org/ + +It also contains a partial repackaging of the javaxdelta library from http://sourceforge.net/projects/javaxdelta/ +with credit to it's authors. + +Forge Mod Loader downloads components from the Minecraft Coder Pack +(http://mcp.ocean-labs.de/index.php/Main_Page) with kind permission from the MCP team. + diff --git a/1.19.2/LICENSE.txt b/1.19.2/LICENSE.txt new file mode 100644 index 0000000..b0cbe2b --- /dev/null +++ b/1.19.2/LICENSE.txt @@ -0,0 +1,520 @@ +Unless noted below, Minecraft Forge, Forge Mod Loader, and all +parts herein are licensed under the terms of the LGPL 2.1 found +here http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt and +copied below. + +Homepage: http://minecraftforge.net/ + https://github.com/MinecraftForge/MinecraftForge + + +A note on authorship: +All source artifacts are property of their original author, with +the exclusion of the contents of the patches directory and others +copied from it from time to time. Authorship of the contents of +the patches directory is retained by the Minecraft Forge project. +This is because the patches are partially machine generated +artifacts, and are changed heavily due to the way forge works. +Individual attribution within them is impossible. + +Consent: +All contributions to Forge must consent to the release of any +patch content to the Forge project. + +A note on infectivity: +The LGPL is chosen specifically so that projects may depend on Forge +features without being infected with its license. That is the +purpose of the LGPL. Mods and others using this code via ordinary +Java mechanics for referencing libraries are specifically not bound +by Forge's license for the Mod code. + + +=== MCP Data === +This software includes data from the Minecraft Coder Pack (MCP), with kind permission +from them. The license to MCP data is not transitive - distribution of this data by +third parties requires independent licensing from the MCP team. This data is not +redistributable without permission from the MCP team. + +=== Sharing === +I grant permission for some parts of FML to be redistributed outside the terms of the LGPL, for the benefit of +the minecraft modding community. All contributions to these parts should be licensed under the same additional grant. + +-- Runtime patcher -- +License is granted to redistribute the runtime patcher code (src/main/java/net/minecraftforge/fml/common/patcher +and subdirectories) under any alternative open source license as classified by the OSI (http://opensource.org/licenses) + +-- ASM transformers -- +License is granted to redistribute the ASM transformer code (src/main/java/net/minecraftforge/common/asm/ and subdirectories) +under any alternative open source license as classified by the OSI (http://opensource.org/licenses) + +========================================================================= +This software includes portions from the Apache Maven project at +http://maven.apache.org/ specifically the ComparableVersion.java code. It is +included based on guidelines at +http://www.softwarefreedom.org/resources/2007/gpl-non-gpl-collaboration.html +with notices intact. The only change is a non-functional change of package name. + +This software contains a partial repackaging of javaxdelta, a BSD licensed program for generating +binary differences and applying them, sourced from the subversion at http://sourceforge.net/projects/javaxdelta/ +authored by genman, heikok, pivot. +The only changes are to replace some Trove collection types with standard Java collections, and repackaged. +========================================================================= + + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/1.19.2/README.txt b/1.19.2/README.txt new file mode 100644 index 0000000..abcc8ce --- /dev/null +++ b/1.19.2/README.txt @@ -0,0 +1,46 @@ + +Source installation information for modders +------------------------------------------- +This code follows the Minecraft Forge installation methodology. It will apply +some small patches to the vanilla MCP source code, giving you and it access +to some of the data and functions you need to build a successful mod. + +Note also that the patches are built against "un-renamed" MCP source code (aka +SRG Names) - this means that you will not be able to read them directly against +normal code. + +Setup Process: +============================== + +Step 1: Open your command-line and browse to the folder where you extracted the zip file. + +Step 2: You're left with a choice. +If you prefer to use Eclipse: +1. Run the following command: `./gradlew genEclipseRuns` +2. Open Eclipse, Import > Existing Gradle Project > Select Folder + or run `gradlew eclipse` to generate the project. + +If you prefer to use IntelliJ: +1. Open IDEA, and import project. +2. Select your build.gradle file and have it import. +3. Run the following command: `./gradlew genIntellijRuns` +4. Refresh the Gradle Project in IDEA if required. + +If at any point you are missing libraries in your IDE, or you've run into problems you can +run `gradlew --refresh-dependencies` to refresh the local cache. `gradlew clean` to reset everything +{this does not affect your code} and then start the process again. + +Mapping Names: +============================= +By default, the MDK is configured to use the official mapping names from Mojang for methods and fields +in the Minecraft codebase. These names are covered by a specific license. All modders should be aware of this +license, if you do not agree with it you can change your mapping names to other crowdsourced names in your +build.gradle. For the latest license text, refer to the mapping file itself, or the reference copy here: +https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md + +Additional Resources: +========================= +Community Documentation: https://docs.minecraftforge.net/en/1.19.2/gettingstarted/ +LexManos' Install Video: https://youtu.be/8VEdtQLuLO0 +Forge Forums: https://forums.minecraftforge.net/ +Forge Discord: https://discord.minecraftforge.net/ diff --git a/1.19.2/build.gradle b/1.19.2/build.gradle new file mode 100644 index 0000000..8139547 --- /dev/null +++ b/1.19.2/build.gradle @@ -0,0 +1,207 @@ +plugins { + id 'eclipse' + id 'idea' + id 'maven-publish' + id 'net.minecraftforge.gradle' version '[6.0,6.2)' +} + +version = mod_version +group = mod_group_id + +base { + archivesName = mod_id +} + +// Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17. +java.toolchain.languageVersion = JavaLanguageVersion.of(17) + +println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}" +minecraft { + // The mappings can be changed at any time and must be in the following format. + // Channel: Version: + // official MCVersion Official field/method names from Mojang mapping files + // parchment YYYY.MM.DD-MCVersion Open community-sourced parameter names and javadocs layered on top of official + // + // You must be aware of the Mojang license when using the 'official' or 'parchment' mappings. + // See more information here: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md + // + // Parchment is an unofficial project maintained by ParchmentMC, separate from MinecraftForge + // Additional setup is needed to use their mappings: https://github.com/ParchmentMC/Parchment/wiki/Getting-Started + // + // Use non-default mappings at your own risk. They may not always work. + // Simply re-run your setup task after changing the mappings to update your workspace. + mappings channel: mapping_channel, version: mapping_version + + // When true, this property will have all Eclipse/IntelliJ IDEA run configurations run the "prepareX" task for the given run configuration before launching the game. + // In most cases, it is not necessary to enable. + // enableEclipsePrepareRuns = true + // enableIdeaPrepareRuns = true + + // This property allows configuring Gradle's ProcessResources task(s) to run on IDE output locations before launching the game. + // It is REQUIRED to be set to true for this template to function. + // See https://docs.gradle.org/current/dsl/org.gradle.language.jvm.tasks.ProcessResources.html + copyIdeResources = true + + // When true, this property will add the folder name of all declared run configurations to generated IDE run configurations. + // The folder name can be set on a run configuration using the "folderName" property. + // By default, the folder name of a run configuration is the name of the Gradle project containing it. + // generateRunFolders = true + + // This property enables access transformers for use in development. + // They will be applied to the Minecraft artifact. + // The access transformer file can be anywhere in the project. + // However, it must be at "META-INF/accesstransformer.cfg" in the final mod jar to be loaded by Forge. + // This default location is a best practice to automatically put the file in the right place in the final jar. + // See https://docs.minecraftforge.net/en/latest/advanced/accesstransformers/ for more information. + // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') + + // Default run configurations. + // These can be tweaked, removed, or duplicated as needed. + runs { + // applies to all the run configs below + configureEach { + workingDirectory project.file('run') + + // Recommended logging data for a userdev environment + // The markers can be added/remove as needed separated by commas. + // "SCAN": For mods scan. + // "REGISTRIES": For firing of registry events. + // "REGISTRYDUMP": For getting the contents of all registries. + property 'forge.logging.markers', 'REGISTRIES' + + // Recommended logging level for the console + // You can set various levels here. + // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels + property 'forge.logging.console.level', 'debug' + + // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. + property 'forge.enabledGameTestNamespaces', mod_id + + mods { + "${mod_id}" { + source sourceSets.main + } + } + } + + client { + // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. + property 'forge.enabledGameTestNamespaces', mod_id + } + + server { + property 'forge.enabledGameTestNamespaces', mod_id + args '--nogui' + } + + // This run config launches GameTestServer and runs all registered gametests, then exits. + // By default, the server will crash when no gametests are provided. + // The gametest system is also enabled by default for other run configs under the /test command. + gameTestServer { + property 'forge.enabledGameTestNamespaces', mod_id + } + + data { + // example of overriding the workingDirectory set in configureEach above + workingDirectory project.file('run-data') + + // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources. + args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/') + } + } +} + +// Include resources generated by data generators. +sourceSets.main.resources { srcDir 'src/generated/resources' } + +repositories { + // Put repositories for dependencies here + // ForgeGradle automatically adds the Forge maven and Maven Central for you + + // If you have mod jar dependencies in ./libs, you can declare them as a repository like so: + // flatDir { + // dir 'libs' + // } +} + +dependencies { + // Specify the version of Minecraft to use. + // Any artifact can be supplied so long as it has a "userdev" classifier artifact and is a compatible patcher artifact. + // The "userdev" classifier will be requested and setup by ForgeGradle. + // If the group id is "net.minecraft" and the artifact id is one of ["client", "server", "joined"], + // then special handling is done to allow a setup of a vanilla dependency without the use of an external repository. + minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" + + // Real mod deobf dependency examples - these get remapped to your current mappings + // compileOnly fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}:api") // Adds JEI API as a compile dependency + // runtimeOnly fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}") // Adds the full JEI mod as a runtime dependency + // implementation fg.deobf("com.tterrag.registrate:Registrate:MC${mc_version}-${registrate_version}") // Adds registrate as a dependency + + // Example mod dependency using a mod jar from ./libs with a flat dir repository + // This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar + // The group id is ignored when searching -- in this case, it is "blank" + // implementation fg.deobf("blank:coolmod-${mc_version}:${coolmod_version}") + + // For more info: + // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html + // http://www.gradle.org/docs/current/userguide/dependency_management.html +} + +// This block of code expands all declared replace properties in the specified resource targets. +// A missing property will result in an error. Properties are expanded using ${} Groovy notation. +// When "copyIdeResources" is enabled, this will also run before the game launches in IDE environments. +// See https://docs.gradle.org/current/dsl/org.gradle.language.jvm.tasks.ProcessResources.html +tasks.named('processResources', ProcessResources).configure { + var replaceProperties = [ + minecraft_version: minecraft_version, minecraft_version_range: minecraft_version_range, + forge_version: forge_version, forge_version_range: forge_version_range, + loader_version_range: loader_version_range, + mod_id: mod_id, mod_name: mod_name, mod_license: mod_license, mod_version: mod_version, + mod_authors: mod_authors, mod_description: mod_description, + ] + inputs.properties replaceProperties + + filesMatching(['META-INF/mods.toml', 'pack.mcmeta']) { + expand replaceProperties + [project: project] + } +} + +// Example for how to get properties into the manifest for reading at runtime. +tasks.named('jar', Jar).configure { + manifest { + attributes([ + 'Specification-Title' : mod_id, + 'Specification-Vendor' : mod_authors, + 'Specification-Version' : '1', // We are version 1 of ourselves + 'Implementation-Title' : project.name, + 'Implementation-Version' : project.jar.archiveVersion, + 'Implementation-Vendor' : mod_authors, + 'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") + ]) + } + + // This is the preferred method to reobfuscate your jar file + finalizedBy 'reobfJar' +} + +// However if you are in a multi-project build, dev time needs unobfed jar files, so you can delay the obfuscation until publishing by doing: +// tasks.named('publish').configure { +// dependsOn 'reobfJar' +// } + +publishing { + publications { + register('mavenJava', MavenPublication) { + artifact jar + } + } + repositories { + maven { + url "file://${project.projectDir}/mcmodsrepo" + } + } +} + +tasks.withType(JavaCompile).configureEach { + options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation +} diff --git a/1.19.2/changelog.txt b/1.19.2/changelog.txt new file mode 100644 index 0000000..b86d681 --- /dev/null +++ b/1.19.2/changelog.txt @@ -0,0 +1,697 @@ +1.19.2 Changelog +43.5 +==== + - 43.5.0 1.19.2 RB 5 + https://forums.minecraftforge.net/topic/154385-forge-435-minecraft-1192/ + +43.4 +==== + - 43.4.23 Add '#forge:chorus_additionally_grows_on' tag for similar mechanics to '#minecraft:azalea_grows_on' but for chorus (#10464) + - 43.4.22 Speed up mod annotation scanning by ~30% (#10472) + Co-authored-by: LexManos + - 43.4.21 Fix continuing to use items after dropping or when a shield breaks (#10382) + Fixes MC-231097 and MC-168573 + Cache this.useItem before running item break logic, Fixes #10344 + - 43.4.20 Add fast graphics render type to block model jsons (#10400) + Make modded leaves behave like vanilla leaves by default (Fixes #10389) + - 43.4.19 Backport even more future ResourceLocation methods (#10430) + - 43.4.18 Ensure NetworkConstants is loaded before mod construction (#10448) + - 43.4.17 Add `clientSideOnly` feature to mods.toml (#10085) (backport of #9804 to 1.20.1) (#10367) + Co-authored-by: Paint_Ninja + - 43.4.16 Fix incorrect method reference in TntBlock.explode() (#10333) + - 43.4.15 Fix issue with shields being disabled by an attacker (#10323) + - 43.4.14 Fix issues in VillagerTrades.EmeraldsForVillagerTypeItem related to custom Villager Types (#10360) + Add VillagerType#registerBiomeType + Co-authored-by: Joseph T. McQuigg + - 43.4.13 Fix non-passengers being tickable without checking canUpdate() (#10306) + - 43.4.12 Bump CoreMods to 5.2.4 (#10269) + - 43.4.11 Allow mipmap lowering to be disabled (#10250) + - 43.4.10 Add optional fix of use item duration, disabled by default (#10244) + - 43.4.9 Backport some Vanilla 1.21 `ResourceLocation` methods (#10239) + Co-authored-by: Paint_Ninja + - 43.4.8 Deprecate `@ObjectHolder`, add a couple of fast-paths (#10226) + Co-authored-by: Paint_Ninja + - 43.4.7 Disable clean on TeamCity (#10260) + - 43.4.6 Bump JNA to 5.12.1 (#10186) + - 43.4.5 Bump CoreMods to 5.2 (#10132) + Full Changelog: https://gist.github.com/Jonathing/c3ad28b2a048ac839a7baba5417ee870 + The key features are: + - ES6 language support + - Thoroughly updated ASMAPI, with full documentation + - Bug fixes (some optional for backwards-compatibility) + - Partial internal code cleanup + - Request CoreMods to not apply fix for ASMAPI.findFirstInstructionBefore by default + Related dependency bumps: + - Updated ASM to 9.7.1 + - Updated Nashorn to 15.4 + - Updated Log4J to 2.19.0 (included with installer) + - 43.4.4 Cleanup FML Bindings (backport of #10004 to 1.19.2) (#10105) + - 43.4.3 Optionally supply FMLJavaModLoadingContext as a param to mod constructors (backport of #10074 to 1.19.2) (#10106) + Co-authored-by: RealMangoRage + - 43.4.2 Fixed falling block entities not rendering as moving blocks (#10006) (#10020) + Co-authored-by: Ven + - 43.4.1 Choose default JarJar mod file type based on parent JAR (#10025) + Co-authored-by: thedarkcolour <30441001+thedarkcolour@users.noreply.github.com> + - 43.4.0 1.19.2 RB 4 + https://forums.minecraftforge.net/topic/149548-forge-434-minecraft-1192/ + +43.3 +==== + - 43.3.14 Update Gradle to 8.8 + - 43.3.13 Fix NPE when acceptableValues in defineInList() does not allow nulls, fixes #9300, backport of #9903 (#9909) + Co-authored-by: J-RAP + - 43.3.12 Optimise capabilities a tad, backport of #9886 (#9918) + - 43.3.11 Make common config screen registration tasks easier, backport of #9884 (#9914) + - 43.3.10 Bump ASM, fix userdev, fix crowdin (#9925) + - 43.3.9 Bump some deps (#9878) + - CoreMods 5.0.1 -> 5.1.2 + - ASM 9.5 -> 9.6 + - Installer 2.1 -> 2.2 + - Installer tools 1.3.0 -> 1.4.1 + - 43.3.8 Fix TagsProvider not honoring replace attribute (#9865) + - 43.3.7 Make common DisplayTest registration tasks easier (#9838) + Backport of #9822 to 1.19.2 + - 43.3.6 Optimise ForgeConfigSpec and make Range public (#9827) + Backport of #9810 to 1.19.2 + - 43.3.5 Update to FG6 and Gradle 8, backport 1.20 MDK (#9754) + - 43.3.4 Improve mod description formatting in mods screen (#9771) + Co-authored-by: Su5eD + - 43.3.3 Backport CrashReportAnalyser to 1.19.2 (#9758) + - 43.3.2 Optimise path filter in mod loading (#9712) + Co-authored-by: embeddedt <42941056+embeddedt@users.noreply.github.com> + - 43.3.1 Improve mod loading error message for errors inside mod constructors (#9709) + Co-authored-by: Jab125 <67534807+jab125@users.noreply.github.com> + - 43.3.0 1.19.2 RB 3 + +43.2 +==== + - 43.2.23 Fix `Level` leak in debug HUD (#9701) + - 43.2.22 Keep order of sources in PackRepository (#9704) + Co-authored-by: dhyces <10985914+dhyces@users.noreply.github.com> + - 43.2.21 Fix parameter names in IForgeDimensionSpecialEffects.adjustLightmapColors to better describe what they are. (#9658) + - 43.2.20 Re-add in-game mod menu (#9655) + - 43.2.19 Fixed FluidUtil#tryFillContainer returning invalid result when simulating (#9358) + - 43.2.18 AlterGroundEvent for modifying block placement performed by AlterGroundDecorator (#9635) + - 43.2.17 Bump ASM to 9.5 (#9516) + - 43.2.16 Improve logging for server connections (#9623) + - 43.2.15 Log a proper duplicate mod(s) error message (#9625) + - 43.2.14 Fix erroneous getLevel call when firing SpecialSpawn (#9520) + - 43.2.13 [1.19.2] Fix the rest of the spawn event calls (#9482) + - 43.2.12 Loosen access for BucketItem's canBlockContainFluid (#9429) + - 43.2.11 Fix event result being ignored (#9484) + Co-authored-by: Brennan Ward <3682588+Shadows-of-Fire@users.noreply.github.com> + - 43.2.10 Fix incorrect SpecialSpawn fire location (#9480) + Co-authored-by: Brennan Ward <3682588+Shadows-of-Fire@users.noreply.github.com> + - 43.2.9 [1.19.2] Fix forge grindstone hooks allowing stacks of non-stackable items (#9466) + - 43.2.8 Fix JSON model root transforms (#9411) + - 43.2.7 Fix StemBlock not checking canSustainPlant for the correct block + It now checks for Melons/Pumpkins instead of the stem itself. + - 43.2.6 Fix of inconsistent vaporization in BucketItem & FluidType (#9340) + - 43.2.5 Backport `ClientChatReceivedEvent.System` for 1.19.2. Fixes #9352 (#9355) + - 43.2.4 Fire TickEvent.LevelTickEvent on ClientLevel tick (#9302) + - 43.2.3 Disable guiLight3d for generated item models (#9231) + - 43.2.2 Fix config key used by resource cache (#9253) + This bring it in line with the config key defined in the spec and + default config file in ResourceManagerBootCacheConfigurationHandler. + Fixes #9252 + - 43.2.1 [1.19.2] Fix compatibility checker task configuration (#9233) + * Fix compatibility checker task configuration + The setupCheckJarCompatibility task exists to configure the main + compatibility checker task, checkJarCompatibility, because certain + configuration steps for that task could not be done until after the + configuration phase of Gradle. + However, that setup task previously held all the configuration for the + main check task in its task action. This caused problems because the + main check task's inputs are linked to other tasks, and the previous + situation made it so its configuration (by the setup task) happened + _after_ Gradle built the task dependency model/tree. + This meant that certain tasks which the main check task depended on did + not run before that task, because Gradle was unaware of this inter-task + dependency until it was too late (when it was already executing tasks). + This fixes the issue by moving the bulk of the configuration for the + main check task from the action of the setup task to the main + buildscript, therefore allowing Gradle to know about those task + dependencies and factor them in to its process of determining what tasks + to run and in what order. + The remaining configuration step in the setup task for the main check + task is linked to the setup task, and does not affect the task's + dependencies (because it uses a configuration which it resolves + immediately), so it stays in the setup task. + * Force checker setup task to never be up-to-date + The setup task configures the main check task, so it should always run + before that task. However, because it has an input and output, the setup + task is affected by Gradle's incremental build feature, which leads to + the possibility that Gradle considers the setup task as up-to-date, + therefore not executing its action and causing errors with the main + check task down the line. + - 43.2.0 43.2 Recommended Build. + +43.1 +==== + - 43.1.65 Allow discovering services from the mods folder that use java's modular definition. (#9143) + - 43.1.64 Make Datapack Registries support ICondition(s) (#9113) + - 43.1.63 Enable additional build types to handle pull request validation. (#9159) + - 43.1.62 Check source permission level before selector permission (#9147) + In some situations, such as execution of a function by an advancement as + part of its reward, a command source stack may have a backing source of + a ServerPlayer which may lack the entity selector permission and have an + explicit permission level that should allow the use of entity selectors, + through CommandSourceStack#withPermission. + We now check if the permission level of the command source stack is + sufficient for entity selectors _before_ checking if the source is a + player and if they have the requisite permission. + This means that an operator permission level of 2 will always override + the Forge entity selector permission. + Fixes #9137 + - 43.1.61 Fix fires spreading too/igniting custom portal frames. (#9142) + - 43.1.60 Add supplier to FlowerBlock so it works with custom MobEffects (#9139) + - 43.1.59 Fix some logical bugs related to the Grindstone Event (#9089) + - 43.1.58 Call baked model's `getModelData` before `getRenderTypes` (#9163) + - 43.1.57 Make Util.memoize thread-safe (#9155) + - 43.1.56 Rendering tweaks and fixes: Part 4 (#9065) + - 43.1.55 Fix `Transformation` loading `PoseStack` (#9083) + - 43.1.54 Add simple block appearance API (#9066) + - 43.1.53 Fix invalidated modded packets when on LAN (#9157) + - 43.1.52 Improve extensibility of DetectorRailBlock and PoweredRailBlock (#9130) + - 43.1.51 Fix launch handler minecraft classpath locator (#9120) + - 43.1.50 Add HitResult to `EntityTeleportEvent$EnderPearl` (#9135) + - 43.1.49 Throw aggregate exception for erroneous registry event dispatch (#9111) + This means that exceptions occurring during the dispatch of the registry + events, such as those from the suppliers of RegistryObjects, properly + cause a crash rather than merely being logged and allowing the game to + reach the main menu. + Fixes #8720 + - 43.1.48 Add missing semi-colon near the Dist import statement in example mod. + - 43.1.47 Fix ClientModEvents example not subscribing to client-sided events (#9097) + - 43.1.46 Use GitHub action to lock issues with the `spam` label (#9087) + - 43.1.45 Remove structures slave map to Feature registry (#9091) + - 43.1.44 Improve logging of missing or unsupported dependencies (#9104) + - 43.1.43 [1.19.x] Fix ValueSpec caching the return value incorrectly (#9046) + - 43.1.42 [1.19.x] Add event for registering spawn placements, and modifying existing (#9024) + - 43.1.41 [1.19.x] Add event for items being stacked or swapped in a GUI. (#9050) + - 43.1.40 [1.19.x] Fix PlayerInteractEvent.EntityInteractSpecific not cancelling on a server (#9079) + - 43.1.39 Fix canceling phantom spawns preventing any further attempts that tick. (#9041) + - 43.1.38 Rename fluid type milk translation keys (#9077) + - 43.1.37 Fix minecart speed with water (#9076) + - 43.1.36 Add a cancellable event that gets fired when a Totem of Undying is used (#9069) + - 43.1.35 Fix performance issue and logging when resource caching is enabled (#9029) + - 43.1.34 Fix NPE when feeding wolves and cats (#9074) + - 43.1.33 Fix logically breaking change to ForgeConfigSpec.Builder#comment where modders could not add a empty line to the start of comments. (#9061) + - 43.1.32 Fix ServiceLoader bug + - 43.1.31 Fix ClientChatReceivedEvent for system messages + - 43.1.30 Make ForgeConfigSpec$Builder.comment able to be called multiple times for the same entry. (#9056) + - 43.1.29 Fix control modifier for mac with `KeyMapping`s using Alt instead of Super (#9057) + - 43.1.28 Fix is_desert tag not being applied correctly. (#9051) + - 43.1.27 Fix mob griefing event for SmallFireballs not using owner entity. (#9038) + - 43.1.26 Fix minecarts on rails not properly slowing down in water (#9033) + - 43.1.25 Change codestyle for BookShelves tag. Closes #9027 + Add IS_CAVE tag Closes #8885 + Add IS_DESERT tag Closes #8979 + Simplify Mangrove Swamp tags Closes #8980 + - 43.1.24 Allow faces of an "elements" model to have disabled ambient occlusion (#9019) + - 43.1.23 [1.19.x] Recipe ID-based grouping between modded and vanilla recipes. (#8876) + - 43.1.22 Update fence_gates/wooden (#8936) + - 43.1.21 [1.19.x] Added event for growing fungus (#8981) + - 43.1.20 Added Bookshelves block tag (#8991) + - 43.1.19 Create a Forge EntityType Tag for Bosses (#9017) + - 43.1.18 Allow mods to specify shader import namespace (#9021) + - 43.1.17 Grindstone Events (#8934) + One to modify the output, and one to modify the input. + - 43.1.16 Fix the serialized names of the enum (#9014) + - 43.1.15 Fix `tryEmptyContainerAndStow` duping fluids with stackable containers (#9004) + - 43.1.14 Add mod mismatch event (#8989) + - 43.1.13 [1.19.x] add methods with more context to tree growers (#8956) + - 43.1.12 [1.19.X] Adding more precise events for Advancements (#8360) + - 43.1.11 Default IItemHandler capability for shulker box itemstacks (#8827) + Co-authored-by: LexManos + - 43.1.10 [1.19] Add hook for items to remain in the hotbar when picking blocks/entities (#8872) + - 43.1.9 [1.19.x] Block Model Builder Root Transform Support (#8860) + Co-authored-by: sciwhiz12 + - 43.1.8 [1.19.x] Make LivingSetAttackTargetEvent compatible with the Brain/Behavior system. (Port of PR #8918) (#8954) + - 43.1.7 [1.19.x] Add IForgeBlock#onTreeGrow to replace IForgeBlock#onPlantGrow from 1.16 (#8999) + - 43.1.6 [1.19.x] Moved Player.resetAttackStrengthTicker() to the end of Player.attack() (#9000) + - 43.1.5 fix misplaced patch in sapling block (#9005) + - 43.1.4 Fix failed entity interactions consuming the click. (#9007) + - 43.1.3 Fix entity selector permission check to check original source (#8995) + Permission checks should be against the command source and not the + target entity, as is done in vanilla. + Fixes #8994 + - 43.1.2 Hotfix for 1.19.2 item animation bug (#8987) + * [HOT FIX]: Fixes #8985 by no-oping for vanilla models instead of throwing error + - 43.1.1 Add ability to Auto register capabilities via annotation (#8972) + - 43.1.0 1.19.2 RB + +43.0 +==== + - 43.0.22 Added ItemDecorator API (#8794) + - 43.0.21 [1.19.x] Custom usage animations for items (#8932) + - 43.0.20 Allow registering custom `ColorResolver`s (#8880) + - 43.0.19 [1.19] Allow custom outline rendering on EntityRenderers and BlockEntityRenderers (#8938) + - 43.0.18 Redirect checks for entity selector use to a permission (#8947) + This allows greater flexibility for configuring servers with + operator-like permissions to user groups through the permissions API and + their permissions handler of choice without needing to grant the + vanilla operator permission to any player. + The new permission is "forge:use_entity_selectors", which is granted by + default to players with permission level 2 (GAMEMASTERS) and above. + The hook falls back to checking the permission level if the source of + the command is not a ServerPlayer, such as for command blocks and + functions. + - 43.0.17 Allow FakePlayer to report its position (#8963) + - 43.0.16 Add alternate version of renderEntityInInventory to allow for directly specifying the angles (#8961) + - 43.0.15 Add cancellable ToastAddEvent (#8952) + - 43.0.14 Modify ScreenEvent.RenderInventoryMobEffects to allow moving the effect stack left or right (#8951) + - 43.0.13 Fix Enchantment#doPostHurt and Enchantment#doPostAttack being called twice for players. Fixes MC-248272 (#8948) + - 43.0.12 Remove reflective implementation of ICustomPacket. (#8973) + Make vanilla custom packets able to be sent multiple times. Closes #8969 + - 43.0.11 Filter name spaces to directories only. Closes #8413 + - 43.0.10 Fix a corner case where the UMLB can not extract a version from a library. (#8967) + - 43.0.9 Fix worlds with removed dimension types unable to load. (#8959) Closes #8800 + - 43.0.8 Fix issue where unknown chunk generators would cause DFU to fail. (#8957) + - 43.0.7 Fix comments and documentation that were missed during the review of #8712 (#8945) + - 43.0.6 Make AnvilUpdateEvent fire even if the second input is empty, which means it fires even if only changing the item name. (#8905) + - 43.0.5 Fix `LivingEntity#isBlocking` to use `ToolActions#SHIELD_BLOCK` instead of `UseAnim#BLOCK` (#8933) + - 43.0.4 Add Custom HolderSet Types allowing for logical combining of sets. (#8928) + - 43.0.3 Add values to VersionSupportMatrix to support loading mods that restrict versions to 1.19.1 on 1.19.2 (#8946) + - 43.0.2 Fix certain particles not updating their bounding box when their position changes (#8925) + - 43.0.1 Update EventBus to address concurrency issue in ModLauncher Factory. Closes #8924 + - 43.0.0 1.19.2 + +42.0 +==== + - 42.0.9 Remove calls to getStepHeight in Player#maybeBackOffFromEdge (#8927) + - 42.0.8 Add forge tags for tools and armors, these DO NOT replace ToolActions, and are designed just for Recipes. (#8914) + - 42.0.7 Add Biomes.BEACH to Tags (#8892) + - 42.0.6 Let NetworkInstance.isRemotePresent check minecraft:register for channel IDs. (#8921) + - 42.0.5 Add an event for when the chunk ticket level is updated (#8909) + - 42.0.4 Re-add PotentialSpawns event (#8712) + - 42.0.3 Fix misplaced patch in ItemEntityRenderer breaking ItemEntityRenderer#shouldBob() (#8919) + - 42.0.2 [1.19] [HotFix] Fix the dedicated server not having access to the JiJ filesystems. (#8931) + - 42.0.1 Match Mojang's action bar fix for MC-72687 (#8917) + - 42.0.0 Forge 1.19.1 + Load natives from classpath + Make command argument types a forge registry + Add `EntityMobGriefingEvent` to `Allay#wantsToPickUp` + Overhaul `ServerChatEvent` to use `ChatDecorator` system + Remove `ClientChatEvent#setMessage` for now + Gradle 7.5 + +41.1 +==== + - 41.1.0 Mark 1.19 RB + +41.0 +==== + - 41.0.113 Allow faces of an "elements" model to be made emissive (#8890) + - 41.0.112 Fix invalid channel names sent from the server causing the network thread to error. (#8902) + - 41.0.111 Fix PlayerEvent.BreakSpeed using magic block position to signify invalid position. Closes #8906 + - 41.0.110 Fix cases where URIs would not work properly with JarInJar (#8900) + - 41.0.109 Add new hook to allow modification of lightmap via Dimension special effects (#8863) + - 41.0.108 Fix Forge's packet handling on play messages. (#8875) + - 41.0.107 Add API for tab list header/footer (#8803) + - 41.0.106 Allow modded blocks overriding canStickTo prevent sticking to vanilla blocks/other modded blocks (#8837) + - 41.0.105 Multiple tweaks and fixes to the recent changes in the client refactor PR: Part 3 (#8864) + Fix weighted baked models not respecting children render types + Allow fluid container model to use base texture as particle + Fix inverted behavior in composite model building. Fixes #8871 + - 41.0.104 Fix crossbows not firing ArrowLooseEvent (#8887) + - 41.0.103 Add User-Agent header to requests made by the update checker (#8881) + Format: Java-http-client/ MinecraftForge/ / + - 41.0.102 Output the full path in a crash report so it is easier to find the outer mod when a crash in Jar-In-Jar occurs. (#8856) + - 41.0.101 Clean up the pick item ("middle mouse click") patches (#8870) + - 41.0.100 [1.19.x] Hotfix for test mods while the refactor is ongoing + - 41.0.99 add event to SugarCaneBlock (#8877) + - 41.0.98 Fix Global Loot Modifiers not using Dispatch Codec (#8859) + - 41.0.97 Allow block render types to be set in datagen (#8852) + - 41.0.96 Fix renderBreakingTexture not using the target's model data (#8849) + - 41.0.95 Multiple tweaks and fixes to the recent changes in the client refactor PR: Part 2 (#8854) + * Add getter for the component names in an unbaked geometry + * Fix render type hint not being copied in BlockGeometryBakingContext + * Ensure BlockRenderDispatches's renderSingleBlock uses the correct buffer + - 41.0.94 [1.19.x] Apply general renames, A SRG is provided for modders. (#8840) + See https://gist.github.com/SizableShrimp/882a671ff74256d150776da08c89ef72 + - 41.0.93 Fix mob block breaking AI not working correctly when chunk 0,0 is unloaded. Closes #8853 + - 41.0.92 Fix crash when breaking blocks with multipart models and remove caching. Closes #8850 + - 41.0.91 Fixed `CompositeModel.Baked.Builder.build()` passing arguments in the wrong order (#8846) + - 41.0.90 Make cutout mipmaps explicitly opt-in for item/entity rendering (#8845) + * Make cutout mipmaps explicitly opt-in for item/entity rendering + * Default render type domain to "minecraft" in model datagens + - 41.0.89 Fixed multipart block models not using the new model driven render type system. (#8844) + - 41.0.88 Update to the latest JarJar to fix a collision issue where multiple jars could provide an exact match. (#8847) + - 41.0.87 Add FML config to disable DFU optimizations client-side. (#8842) + * Add client-side command line argument to disable DFU optimizations. + * Switch to using FMLConfig value instead. + - 41.0.86 [1.19] Fixed broken BufferBuilder.putBulkData(ByteBuffer) added by Forge (#8819) + * Fixes BufferBuilder.putBulkData(ByteBuffer) + * use nextElementByte + * Fixed merge conflict + - 41.0.85 [1.19.x] Fix shulker boxes allowing input of items, that return false for Item#canFitInsideContainerItems, through hoppers. (#8823) + * Make ShulkerBoxBlockEntity#canPlaceItemThroughFace delegate to Item#canFitInsideContainerItems. + * Switch to using Or and add comment. + * Switch Or to And. + - 41.0.84 [1.19.x] Added RenderLevelStageEvent to replace RenderLevelLastEvent (#8820) + * Ported RenderLevelStageEvent from 1.18.2 + * Updated to fix merge conflicts + - 41.0.83 [1.19.x] Fix door datagenerator (#8821) + * Fix door datagenerator + Fix datagenerator for door blocks. Successor to #8687, addresses comments made there about statement complexity. + * Fix extra space around parameter + Fix extra space before comma around a parameter. + - 41.0.82 Create PieceBeardifierModifier to re-enable piecewise beardifier definitions (#8798) + - 41.0.81 Allow blocks to provide a dynamic MaterialColor for display on maps (#8812) + - 41.0.80 [1.19.x] BiomeTags Fixes/Improvements (#8711) + * dimension specific tag fix + * remove forge:is_beach cause vanilla has it already + * remove forge tags for new 1.19 vanilla tags (savanna, beach, overworld, end) + Co-authored-by: Flemmli97 + - 41.0.79 1.19 - Remove GlobalLootModifierSerializer and move to Codecs (#8721) + * convert GLM serializer class to codec + * cleanup + * GLM list needs to be sorted + * datagen + * simplify serialization + * fix test mods (oops) + * properly use suppliers for codec as they are registry obj + - 41.0.78 Implement item hooks for potions and enchantments (#8718) + * Implement item hooks for potions and enchantments + * code style fixes + - 41.0.77 Re-apply missing patch to ServerLevel.EntityCallbacks#onTrackingEnd() (#8828) + - 41.0.76 Double Bar Rendering fixed (#8806) (#8807) + * Double Bar Rendering fixed (#8806) + * Added requested changes by sciwhiz12 + - 41.0.75 Multiple tweaks and fixes to the recent changes in the client refactor PR (#8836) + * Add an easy way to get the NamedGuiOverlay from a vanilla overlay + * Fix static member ordering crash in UnitTextureAtlasSprite + * Allow boss bar rendering to be cancelled + * Make fluid container datagen use the new name + - 41.0.74 Add FogMode to ViewportEvent.RenderFog (#8825) + - 41.0.73 Provide additional context to the getFieldOfView event (#8830) + - 41.0.72 Pass renderType to IForgeBakedModel.useAmbientOcclusion (#8834) + - 41.0.71 Load custom ITransformationServices from the classpath in dev (#8818) + * Add a classpath transformer discoverer to load custom transformation services from the classpath + * Update ClasspathTransformerDiscoverer to 1.18 + * Update license year + * Update license header + * Fix the other license headers + * Update ClasspathTransformerDiscoverer to 1.19 + - 41.0.70 Handle modded packets on the network thread (#8703) + * Handle modded packets on the network thread + - On the server we simply need to remove the call to + ensureRunningOnSameThread. + - On the client side, we now handle the packet at the very start of the + call. We make sure we're running from a network thread to prevent + calling the handling code twice. + While this does mean we no longer call .release(), in practice this + doesn't cause any leaks as ClientboundCustomPayloadPacket releases + for us. + * Clarify behaviour a little in the documentation + * Javadoc formatting + * Add a helper method for handling packets on the main thread + Also rename the network thread one. Should make it clearer the expected + behaviour of the two, and make it clearer there's a potentially breaking + change. + * Add back consumer() methods + Also document EventNetworkChannel, to clarify the thread behaviour + there. + * Add since = "1.19" to deprecated annotations + - 41.0.69 Cache resource listing calls in resource packs (#8829) + * Make the resource lookups cached. + * Include configurability and handle patch cleanup. + * Document and comment the cache manager. + * Make thread selection configurable. + * Implement a configurable loading mechanic that falls back to default behaviour when the config is not bound yet. + * Use boolean supplier and fix wildcard import. + * Clean up the VPR since this is more elegant. + * Clean up the VPR since this is more elegant. + * Address review comments. + * Address more review comments. + * Fix formatting on `getSource` + * Address comments by ichtt + * Adapt to pups requests. + * Stupid idea. + * Attempt this again with a copy on write list. + * Fix a concurrency and loading issue. + * Fix #8813 + Checks if the paths are valid resource paths. + * Move the new methods on vanilla Patch. + - 41.0.68 Update SJH and JIJ + - 41.0.67 Fix #8833 (#8835) + - 41.0.66 Fix backwards fabulous check in SimpleBakedModel (#8832) + Yet another blunder we missed during the review of #8786. + - 41.0.65 Make texture atlas in StandaloneGeometryBakingContext configurable (#8831) + - 41.0.64 [1.19.X] Client code cleanup, updates, and other refactors (#8786) + * Revert "Allow safely registering RenderType predicates at any time (#8685)" + This reverts commit be7275443fd939db9c58bcad47079c3767789ac1. + * Renderable API refactors + - Rename "render values" to "context" + - Rename SimpleRenderable to CompositeRenderable to better reflect its use + - Remove IMultipartRenderValues since it doesn't have any real use + - Add extensive customization options to BakedModelRenderable + * ClientRegistry and MinecraftForgeClient refactors + - Add sprite loader manager and registration event + - Add spectator shader manager and registration event + - Add client tooltip factory manager and registration event + - Add recipe book manager and registration event + - Add key mapping registration event + - Remove ClientRegistry, as everything has been moved out of it + - Remove registration methods from MinecraftForgeClient, as they have dedicated events now + * Dimension special effects refactors + - Fold handlers into an extension class and remove public mutable fields + - Add dimension special effects manager and registration event + * HUD overlay refactors + - Rename to IGuiOverlay match vanilla (instead of Ingame) + - Add overlay manager and registration event + - Move vanilla overlays to a standalone enum + * Model loader refactors + - Rename IModelLoader to IGeometryLoader + - Add loader manager and registration event + - Fold all model events into one + - Move registration of additionally loaded models to an event + - Remove ForgeModelBakery and related classes as they served no purpose anymore + * Render properties refactors + - Rename all render properties to client extensions and relocate accordingly + - Move lookups to the respective interfaces + * Model data refactors + - Convert model data to a final class backed by an immutable map and document mutability requirements. This addresses several thread-safety issues in the current implementation which could result in race conditions + - Transfer ownership of the data manager to the client level. This addresses several issues that arise when multiple levels are used at once + * GUI and widget refactors + - Move all widgets to the correct package + - Rename GuiUtils and children to match vanilla naming + * New vertex pipeline API + - Move to vanilla's VertexConsumer + - Roll back recent PR making VertexConsumer format-aware. This is the opposite of what vanilla does, and should not be relevant with the updated lighting pipeline + * Lighting pipeline refactors + - Move to dedicated lighting package + - Separate flat and smooth lighters + - Convert from a vertex pipeline transformer to a pure vertex source (input is baked quads) + * Model geometry API refactors + - Rename IModelGeometry to IUnbakedGeometry + - Rename IModelConfiguration to IGeometryBakingContext + - Rename other elements to match vanilla naming + - Remove current changes to ModelState, as they do not belong there. Transforms should be specified through vanilla's system. ModelState is intended to transfer state from the blockstate JSON + - Remove multipart geometries and geometry parts. After some discussion, these should not be exposed. Instead, geometries should be baked with only the necessary parts enabled + * Make render types a first-class citizen in baked models + - Add named render types (block + entity + fabulous entity) + - Add named render type manager + registration event + - Make BakedModel aware of render types and transfer control over which ones are used to it instead of ItemBlockRenderTypes (fallback) + - (additional) Add concatenated list view. A wrapper for multiple lists that iterates through them in order without the cost of merging them. Useful for merging lists of baked quads + * General event refactors + - Several renames to either match vanilla or improve clarity + - Relocate client chat event dispatching out of common code + * Forge model type refactors + - Rename SeparatePerspectiveModel to SeparateTransformsModel + - Rename ItemModelMesherForge to ForgeItemModelShaper + - Rename DynamicBucketModel to DynamicFluidContainerModel + - Prefix all OBJ-related classes with "Obj" and decouple parsing from construction + - Extract ElementsModel from model loader registry + - Add EmptyModel (baked, unbaked and loader) + - Refactor CompositeModel to take over ItemMultiLayerBakedModel + - Remove FluidModel as it's not used and isn't compatible with the new fluid rendering in modern versions + - Move model loader registration to a proper event handler + - Update names of several JSON fields (backwards-compatible) + - Update datagens to match + * Miscellaneous changes and overlapping patches + - Dispatch all new registration events + - Convert ExtendedServerListData to a record + - Add/remove hooks from ForgeHooksClient as necessary + * Update test mods + * Fix VertexConsumerWrapper returning parent instead of itself + * Additional event cleanup pass + As discussed on Discord: + - Remove "@hidden" and "@see " javadoc annotations from all client events and replace them with @ApiStatus.Internal annotation + - Make all events that shouldn't be fired directly into abstract classes with protected constructors + - Another styling pass, just in case (caught some missed classes) + * Add proper deprecation javadocs and de-dupe some vertex consumer code + * Replace sets of chunk render types with a faster BitSet-backed collection + This largely addresses potential performance concerns that using a plain HashSet might involve by making lookups and iteration as linear as they can likely be (aside from using a plain byte/int/long for bit storage). Further performance concerns related to the implementation may be addressed separately, as all the implementation details are hidden from the end user + * Requested changes + - Remove MinecraftForgeClient and move members to Minecraft, IForgeMinecraft and StencilManager + - Allow non-default elements to be passed into VertexConsumer and add support to derived classes + - Move array instantiation out of quad processing in lighting pipeline + - Fix flipped fluid container model + - Set default UV1 to the correct values in the remapping pipeline + - Minor documentation changes + * Add/update EXC entries and fix AT comment + * Add test mod as per Orion's request + * Additional requested changes + * Allow custom model types to request the particle texture to be loaded + * Even more requested changes + * Improve generics in ConcatenatedListView and add missing fallbacks + * Fix fluid render types being bound to the fluid and not its holder + * Remove non-contractual nullability in ChunkRenderTypeSet and add isEmpty + Additionally, introduce chunk render type checks in ItemBlockRenderTypes + Co-authored-by: Dennis C + - 41.0.63 Implement full support for IPv6 (#8742) + - 41.0.62 Fix certain user-configured options being overwritten incorrectly due to validators. (#8780) + - 41.0.61 Allow safely registering RenderType predicates at any time (#8685) + - 41.0.60 Fix crash after loading error due to fluid texture gathering and config lookup (#8802) + - 41.0.59 Remove the configuration option for handling empty tags in ingredients. (#8799) + Now empty tags are considered broken in all states. + - 41.0.58 Fix MC-105317 Structure blocks do not rotate entities correctly when loading (#8792) + - 41.0.57 Fire ChunkWatchEvents after sending packets (#8747) + - 41.0.56 Add item handler capability to chest boats (#8787) + - 41.0.55 Add getter for correct BiomeSpecialEffectsBuilder to BiomeInfo$Builder (#8781) + - 41.0.54 Fix BlockToolModificationEvent missing cancelable annotation (#8778) + - 41.0.53 Fix ticking chunk tickets from forge's chunk manager not causing chunks to fully tick (#8775) + - 41.0.52 Fix default audio device config loading string comparison issue (#8767) + - 41.0.51 Fix missed vanilla method overrides in ForgeRegistry (#8766) + - 41.0.50 Add MinecraftServer reference to ServerTickEvent (#8765) + - 41.0.49 Fix TagsProviders for datapack registries not recognizing existing files (#8761) + - 41.0.48 Add callback after a BlockState was changed and the neighbors were updated (#8686) + - 41.0.47 Add biome tag entries for 1.19 biomes (#8684) + - 41.0.46 Make fishing rods use tool actions for relevant logic (#8681) + - 41.0.45 Update BootstrapLauncher to 1.1.1 and remove the forced + merge of text2speech since new BSL does it. + - 41.0.44 Merge text2speech libs together so the natives are part of the jar + - 41.0.43 Make Forge ConfigValues implement Supplier. (#8776) + - 41.0.42 Fix merge derp in AbstractModProvider and logic derp in ModDiscoverer + - 41.0.41 Add "send to mods in order" method to ModList and use it (#8759) + * Add "send to mods in order" method to ModList and use it in RegistryEvents and DataGen.. + * Also preserve order in runAll + * Do better comparator thanks @pupnewfster + * postEvent as well. + - 41.0.40 Update SJH to 2.0.2.. (#8774) + * Update SJH to 2.0.3.. + - 41.0.39 Sanity check the version specified in the mod file (#8749) + * Sanity check the version specified in the mod file to + make sure it's compatible with JPMS standards for + version strings. + Closes #8748 + Requires SPI 6 + - 41.0.38 Fix SP-Devtime world loading crash due to missing server configs (#8757) + - 41.0.37 Remove ForgeWorldPreset and related code (#8756) + Vanilla has a working replacement. + - 41.0.36 Change ConfigValue#get() to throw if called before config loaded (#8236) + This prevents silent issues where a mod gets the value of the setting + before configs are loaded, which means the default value is always + returned. + As there may be situations where the getting the config setting before + configs are loaded is needed, and it is not preferable to hardcode the + default value, the original behavior is made available through #getRaw. + Implements and closes #7716 + * Remove getRaw() method + This is effectively replaced with the expression `spec.isLoaded() ? + configValue.get() : configValue.getDefault()`. + * Remove forceSystemNanoTime config setting + As implemented, it never had any effect as any place where the config + value would be queried happens before the configs are loaded. + - 41.0.35 Fix EnumArgument to use enum names for suggestions (#8728) + Previously, the suggestions used the string representation of the enum + through Enum#toString, which can differ from the name of the enum as + required by Enum#valueOf, causing invalid suggestions (both in gui and + through the error message). + - 41.0.34 Jar-In-Jar (#8715) + - 41.0.33 [1.19] Fix data-gen output path of custom data-pack registries (#8724) + - 41.0.32 Fix player dive and surface animations in custom fluids (#8738) + - 41.0.31 [1.19.x] Affect ItemEntity Motion in Custom Fluids (#8737) + - 41.0.30 [1.19] Add support for items to add enchantments without setting them in NBT (#8719) + - 41.0.29 [1.19.x] Add stock biome modifier types for adding features and spawns (#8697) + - 41.0.28 [1.19.x] Fluid API Overhaul (#8695) + - 41.0.27 Replace StructureSpawnListGatherEvent with StructureModifiers (#8717) + - 41.0.26 Use stack sensitive translation key by default for FluidAttributes. (#8707) + - 41.0.25 Delete LootItemRandomChanceCondition which added looting bonus enchantment incorrectly. (#8733) + - 41.0.24 Update EventBus to 6.0, ModLauncher to 10.0.1 and BootstrapLauncher to 1.1 (#8725) + - 41.0.23 Replace support bot with support action (#8700) + - 41.0.22 Fix Reach Distance / Attack Range being clamped at 6.0 (#8699) + - 41.0.21 [1.19.x] Fix mods' worldgen data not being loaded when creating new singleplayer worlds (#8693) + - 41.0.20 [1.19.x] Fix experimental confirmation screen (#8727) + - 41.0.19 Move is_mountain to forge's tag instead of vanilla's (#8726) + - 41.0.18 [1.19.x] Add CommandBuildContext to Register Command Events (#8716) + - 41.0.17 Only rewrite datagen cache when needed (#8709) + - 41.0.16 Implement a simple feature system for Forge (#8670) + * Implement a simple feature system for Forge. Allows mods to demand certain features are available in the loading system. An example for java_version is provided, but not expected to be used widely. This is more targeted to properties of the display, such as GL version and glsl profile. + Requires https://github.com/MinecraftForge/ForgeSPI/pull/13 to be merged first in ForgeSPI, and the SPI to be updated appropriately in build.gradle files. + * rebase onto 1.19 and add in SPI update + - 41.0.15 displayTest option in mods.toml (#8656) + * displayTest option in mods.toml + * "MATCH_VERSION" (or none) is existing match version string behaviour + * "IGNORE_SERVER_VERSION" accepts anything and sends special SERVERONLY string + * "IGNORE_ALL_VERSION" accepts anything and sends an empty string + * "NONE" allows the mod to supply their own displaytest using the IExtensionPoint mechanism. + * Update display test with feedback and added the mods.toml discussion in mdk. + - 41.0.14 Update forgeSPI to v5 (#8696) + - 41.0.13 Make IVertexConsumers such as the lighting pipeline, be aware of which format they are dealing with. (#8692) + Also fix Lighting pipeline ignoring the overlay coords from the block renderer. + - 41.0.12 Fixed misaligned patch to invalidateCaps in Entity (#8705) + - 41.0.11 Fix readAdditionalLevelSaveData (#8704) + - 41.0.10 Fixes setPos to syncPacketPositionCodec (#8702) + - 41.0.9 Fix wrong param passed to PlayLevelSoundEvent.AtEntity (#8688) + - 41.0.8 Override initialize in SlotItemHandler, so it uses the itemhandler instead of container (#8679) + - 41.0.7 Update MDK for 1.19 changes (#8675) + - 41.0.6 Add helper to RecipeType, and fix eclipse compiler error in test class. + - 41.0.5 Update modlauncher to latest (#8691) + - 41.0.4 Fix getting entity data serializer id crashing due to improper port to new registry system (#8678) + - 41.0.3 Fire registry events in the order vanilla registers to registries (#8677) + Custom registries are still fired in alphabetical order, after all vanilla registries. + Move forge's data_serializers registry to forge namespace. + - 41.0.2 Add method with pre/post wrap to allow setting/clearing mod context. (#8682) + Fixes ActiveContainer in ModContext not being present in registry events. Closes #8680 + - 41.0.1 Fix the Curlie oopsie + - 41.0.0 Forge 1.19 + * Bump pack.mcmeta formats + * 1.19 biome modifiers + * Mark ClientPlayerNetworkEvent.LoggedOutEvent's getters as nullable + * Add docs and package-info to client extension interfaces package + * Move RenderBlockOverlayEvent hooks to ForgeHooksClient + * Add package-infos to client events package + * Rename SoundLoadEvent to SoundEngineLoadEvent + This reduces confusion from consumers which may think the + name SoundLoadEvent refers to an individual sound being loaded rather + than the sound engine. + * Document and change SoundLoadEvent to fire on mod bus + Previously, it fired on both the mod bus and the Forge bus, which is + confusing for consumers. + * Delete SoundSetupEvent + Looking at its original implementation shows that there isn't an + appropriate place in the new sound code to reinsert the event, and the + place of 'sound engine/manager initialization event' is taken already by SoundLoadEvent. + * Perform some cleanup on client events + - Removed nullable annotations from ClientPlayerNetworkEvent + - Renamed #getPartialTicks methods to #getPartialTick, to be consistent + with vanilla's naming of the partial tick + - Cleanup documentation to remove line breaks, use the + spelling 'cancelled' over + 'canceled', and improve docs on existing and + new methods. + * Remove EntityEvent.CanUpdate + Closes MinecraftForge/MinecraftForge#6394 + * Switch to Jetbrains nullability annotations + * New PlayLevelSoundEvent; replaces old PlaySoundAtEntityEvent + * Remove ForgeWorldPresetScreens + * Remove IForgeRegistryEntry + * Remove use of List in FML's CompletableFutures + * Add docs to mod loading stages, stages, and phases + * Gradle 7.4.2 + * Use SLF4J in FMLLoader and other subprojects + * Switch dynamic versions in subprojects to pinned ones + * Switch ForgeRoot and MDK to FG plugin markers + * Configure Forge javadoc task + The task now uses a custom stylesheet with MCForge elements, and + configured to combine the generation from the four FML subprojects + (fmlloader, fmlcore, javafmllanguage, mclanguage) and the Forge project + into the javadoc output. + * Update docs/md files, for 1.19 update and the move away from IRC to Discord. + * Make "Potentially dangerous alternative prefix" a debug warning, not info. + Co-authored-by: Curle + Co-authored-by: sciwhiz12 + diff --git a/1.19.2/gradle.properties b/1.19.2/gradle.properties new file mode 100644 index 0000000..d3fe6a9 --- /dev/null +++ b/1.19.2/gradle.properties @@ -0,0 +1,23 @@ +# Sets default memory used for gradle commands. Can be overridden by user or command line properties. +# This is required to provide enough memory for the Minecraft decompilation process. +org.gradle.jvmargs=-Xmx3G +org.gradle.daemon=false +org.gradle.java.home=C:\\Program Files\\Java\\jdk-17 + +## Environment Properties +minecraft_version=1.19.2 +minecraft_version_range=[1.19.2,1.20) +forge_version=43.5.0 +forge_version_range=[43,) +loader_version_range=[43,) +mapping_channel=official +mapping_version=1.19.2 + +## Mod Properties +mod_id=kofola +mod_name=Kofola Mod +mod_license=MIT +mod_version=1.0.1 +mod_group_id=cz.kofolamod +mod_authors=Dominik +mod_description=Pravá Kofola do Minecraftu 1.19.2! Přidává láhev Kofoly, plechovku, točenou Kofolu, sirup KOFO, přepravku a tekutou Kofolu s kompatibilitou pro Farmer's Delight a Create. diff --git a/1.19.2/gradle/wrapper/gradle-wrapper.jar b/1.19.2/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..c1962a79e29d3e0ab67b14947c167a862655af9b GIT binary patch literal 62076 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 literal 0 HcmV?d00001 diff --git a/1.19.2/gradle/wrapper/gradle-wrapper.properties b/1.19.2/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..2617362 --- /dev/null +++ b/1.19.2/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +networkTimeout=10000 +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/1.19.2/gradlew b/1.19.2/gradlew new file mode 100644 index 0000000..aeb74cb --- /dev/null +++ b/1.19.2/gradlew @@ -0,0 +1,245 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/1.19.2/gradlew.bat b/1.19.2/gradlew.bat new file mode 100644 index 0000000..93e3f59 --- /dev/null +++ b/1.19.2/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/1.19.2/settings.gradle b/1.19.2/settings.gradle new file mode 100644 index 0000000..0077fa7 --- /dev/null +++ b/1.19.2/settings.gradle @@ -0,0 +1,13 @@ +pluginManagement { + repositories { + gradlePluginPortal() + maven { + name = 'MinecraftForge' + url = 'https://maven.minecraftforge.net/' + } + } +} + +plugins { + id 'org.gradle.toolchains.foojay-resolver-convention' version '0.7.0' +} diff --git a/1.19.2/src/main/java/cz/kofolamod/KofolaMod.java b/1.19.2/src/main/java/cz/kofolamod/KofolaMod.java new file mode 100644 index 0000000..9d7c9af --- /dev/null +++ b/1.19.2/src/main/java/cz/kofolamod/KofolaMod.java @@ -0,0 +1,56 @@ +package cz.kofolamod; + +import cz.kofolamod.recipe.KofolaBrewingRecipe; +import cz.kofolamod.registry.ModBlocks; +import cz.kofolamod.registry.ModFluids; +import cz.kofolamod.registry.ModItems; +import net.minecraft.client.renderer.ItemBlockRenderTypes; +import net.minecraft.client.renderer.RenderType; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.brewing.BrewingRecipeRegistry; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Mod(KofolaMod.MOD_ID) +public class KofolaMod { + public static final String MOD_ID = "kofola"; + public static final Logger LOGGER = LoggerFactory.getLogger(KofolaMod.class); + + public KofolaMod() { + IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); + + ModFluids.FLUID_TYPES.register(modEventBus); + ModFluids.FLUIDS.register(modEventBus); + ModBlocks.BLOCKS.register(modEventBus); + ModItems.ITEMS.register(modEventBus); + + modEventBus.addListener(this::commonSetup); + + MinecraftForge.EVENT_BUS.register(this); + LOGGER.info("Kofola Mod (Forge 1.19.2) initialized! Kdyz ji milujes, neni co resit."); + } + + private void commonSetup(final FMLCommonSetupEvent event) { + event.enqueueWork(() -> { + BrewingRecipeRegistry.addRecipe(new KofolaBrewingRecipe()); + LOGGER.info("Kofola brewing recipes registered."); + }); + } + + @Mod.EventBusSubscriber(modid = MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) + public static class ClientModEvents { + @SubscribeEvent + public static void onClientSetup(FMLClientSetupEvent event) { + ItemBlockRenderTypes.setRenderLayer(ModFluids.KOFOLA_SOURCE.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(ModFluids.KOFOLA_FLOWING.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(ModBlocks.KOFOLA_CRATE.get(), RenderType.cutout()); + } + } +} diff --git a/1.19.2/src/main/java/cz/kofolamod/block/KofolaCrateBlock.java b/1.19.2/src/main/java/cz/kofolamod/block/KofolaCrateBlock.java new file mode 100644 index 0000000..8be6bea --- /dev/null +++ b/1.19.2/src/main/java/cz/kofolamod/block/KofolaCrateBlock.java @@ -0,0 +1,33 @@ +package cz.kofolamod.block; + +import net.minecraft.core.Direction; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.material.Material; +import org.jetbrains.annotations.Nullable; + +public class KofolaCrateBlock extends HorizontalDirectionalBlock { + + public KofolaCrateBlock() { + super(BlockBehaviour.Properties.of(Material.WOOD) + .sound(SoundType.WOOD) + .strength(2.0F, 3.0F)); + this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH)); + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING); + } +} diff --git a/1.19.2/src/main/java/cz/kofolamod/compat/FarmersDelightCompat.java b/1.19.2/src/main/java/cz/kofolamod/compat/FarmersDelightCompat.java new file mode 100644 index 0000000..19bbdc9 --- /dev/null +++ b/1.19.2/src/main/java/cz/kofolamod/compat/FarmersDelightCompat.java @@ -0,0 +1,34 @@ +package cz.kofolamod.compat; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.LivingEntity; +import net.minecraftforge.fml.ModList; +import net.minecraftforge.registries.ForgeRegistries; + +public class FarmersDelightCompat { + public static final String MOD_ID = "farmersdelight"; + + public static boolean isLoaded() { + return ModList.get().isLoaded(MOD_ID); + } + + public static void applyComfort(LivingEntity entity, int durationTicks) { + if (!isLoaded()) return; + + MobEffect comfortEffect = ForgeRegistries.MOB_EFFECTS.getValue(new ResourceLocation(MOD_ID, "comfort")); + if (comfortEffect != null) { + entity.addEffect(new MobEffectInstance(comfortEffect, durationTicks, 0)); + } + } + + public static void applyNourishment(LivingEntity entity, int durationTicks) { + if (!isLoaded()) return; + + MobEffect nourishmentEffect = ForgeRegistries.MOB_EFFECTS.getValue(new ResourceLocation(MOD_ID, "nourishment")); + if (nourishmentEffect != null) { + entity.addEffect(new MobEffectInstance(nourishmentEffect, durationTicks, 0)); + } + } +} diff --git a/1.19.2/src/main/java/cz/kofolamod/fluid/KofolaFluidType.java b/1.19.2/src/main/java/cz/kofolamod/fluid/KofolaFluidType.java new file mode 100644 index 0000000..9f64c10 --- /dev/null +++ b/1.19.2/src/main/java/cz/kofolamod/fluid/KofolaFluidType.java @@ -0,0 +1,48 @@ +package cz.kofolamod.fluid; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvents; +import net.minecraftforge.client.extensions.common.IClientFluidTypeExtensions; +import net.minecraftforge.common.SoundActions; +import net.minecraftforge.fluids.FluidType; + +import java.util.function.Consumer; + +public class KofolaFluidType extends FluidType { + private final ResourceLocation stillTexture; + private final ResourceLocation flowingTexture; + private final int tintColor; + + public KofolaFluidType(ResourceLocation stillTexture, ResourceLocation flowingTexture, int tintColor) { + super(FluidType.Properties.create() + .descriptionId("fluid_type.kofola.kofola_fluid") + .density(1050) + .viscosity(1100) + .sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL) + .sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY) + .sound(SoundActions.FLUID_VAPORIZE, SoundEvents.FIRE_EXTINGUISH)); + this.stillTexture = stillTexture; + this.flowingTexture = flowingTexture; + this.tintColor = tintColor; + } + + @Override + public void initializeClient(Consumer consumer) { + consumer.accept(new IClientFluidTypeExtensions() { + @Override + public ResourceLocation getStillTexture() { + return stillTexture; + } + + @Override + public ResourceLocation getFlowingTexture() { + return flowingTexture; + } + + @Override + public int getTintColor() { + return tintColor; + } + }); + } +} diff --git a/1.19.2/src/main/java/cz/kofolamod/item/DraftKofolaItem.java b/1.19.2/src/main/java/cz/kofolamod/item/DraftKofolaItem.java new file mode 100644 index 0000000..b71142f --- /dev/null +++ b/1.19.2/src/main/java/cz/kofolamod/item/DraftKofolaItem.java @@ -0,0 +1,96 @@ +package cz.kofolamod.item; + +import cz.kofolamod.compat.FarmersDelightCompat; +import cz.kofolamod.registry.ModCreativeModeTab; +import cz.kofolamod.registry.ModFoods; +import net.minecraft.ChatFormatting; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.*; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class DraftKofolaItem extends Item { + + public DraftKofolaItem() { + super(new Item.Properties() + .tab(ModCreativeModeTab.KOFOLA_TAB) + .tab(CreativeModeTab.TAB_FOOD) + .stacksTo(16) + .craftRemainder(Items.GLASS_BOTTLE) + .food(ModFoods.DRAFT_KOFOLA)); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity entity) { + super.finishUsingItem(stack, level, entity); + + if (!level.isClientSide) { + entity.removeEffect(MobEffects.MOVEMENT_SLOWDOWN); + entity.removeEffect(MobEffects.DIG_SLOWDOWN); + + FarmersDelightCompat.applyComfort(entity, 900); + FarmersDelightCompat.applyNourishment(entity, 600); + + if (entity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + } + + if (stack.isEmpty()) { + return new ItemStack(Items.GLASS_BOTTLE); + } else { + if (entity instanceof Player player && !player.getAbilities().instabuild) { + ItemStack bottle = new ItemStack(Items.GLASS_BOTTLE); + if (!player.getInventory().add(bottle)) { + player.drop(bottle, false); + } + } + return stack; + } + } + + @Override + public int getUseDuration(ItemStack stack) { + return 32; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; + } + + @Override + public SoundEvent getDrinkingSound() { + return SoundEvents.HONEY_DRINK; + } + + @Override + public SoundEvent getEatingSound() { + return SoundEvents.HONEY_DRINK; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + return ItemUtils.startUsingInstantly(level, player, hand); + } + + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltip, TooltipFlag flag) { + tooltip.add(Component.translatable("item.kofola.draft_kofola.desc").withStyle(ChatFormatting.GOLD, ChatFormatting.ITALIC)); + tooltip.add(Component.translatable("item.kofola.draft_kofola.effect").withStyle(ChatFormatting.AQUA)); + super.appendHoverText(stack, level, tooltip, flag); + } +} diff --git a/1.19.2/src/main/java/cz/kofolamod/item/KofoSyrupItem.java b/1.19.2/src/main/java/cz/kofolamod/item/KofoSyrupItem.java new file mode 100644 index 0000000..41d43ae --- /dev/null +++ b/1.19.2/src/main/java/cz/kofolamod/item/KofoSyrupItem.java @@ -0,0 +1,85 @@ +package cz.kofolamod.item; + +import cz.kofolamod.registry.ModCreativeModeTab; +import cz.kofolamod.registry.ModFoods; +import net.minecraft.ChatFormatting; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.*; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class KofoSyrupItem extends Item { + + public KofoSyrupItem() { + super(new Item.Properties() + .tab(ModCreativeModeTab.KOFOLA_TAB) + .tab(CreativeModeTab.TAB_FOOD) + .stacksTo(16) + .craftRemainder(Items.GLASS_BOTTLE) + .food(ModFoods.KOFO_SYRUP)); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity entity) { + super.finishUsingItem(stack, level, entity); + + if (!level.isClientSide && entity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.GLASS_BOTTLE); + } else { + if (entity instanceof Player player && !player.getAbilities().instabuild) { + ItemStack bottle = new ItemStack(Items.GLASS_BOTTLE); + if (!player.getInventory().add(bottle)) { + player.drop(bottle, false); + } + } + return stack; + } + } + + @Override + public int getUseDuration(ItemStack stack) { + return 32; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; + } + + @Override + public SoundEvent getDrinkingSound() { + return SoundEvents.HONEY_DRINK; + } + + @Override + public SoundEvent getEatingSound() { + return SoundEvents.HONEY_DRINK; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + return ItemUtils.startUsingInstantly(level, player, hand); + } + + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltip, TooltipFlag flag) { + tooltip.add(Component.translatable("item.kofola.kofo_syrup.desc").withStyle(ChatFormatting.DARK_GREEN, ChatFormatting.ITALIC)); + super.appendHoverText(stack, level, tooltip, flag); + } +} diff --git a/1.19.2/src/main/java/cz/kofolamod/item/KofolaBottleItem.java b/1.19.2/src/main/java/cz/kofolamod/item/KofolaBottleItem.java new file mode 100644 index 0000000..cd7961a --- /dev/null +++ b/1.19.2/src/main/java/cz/kofolamod/item/KofolaBottleItem.java @@ -0,0 +1,95 @@ +package cz.kofolamod.item; + +import cz.kofolamod.compat.FarmersDelightCompat; +import cz.kofolamod.registry.ModCreativeModeTab; +import cz.kofolamod.registry.ModFoods; +import net.minecraft.ChatFormatting; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.*; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class KofolaBottleItem extends Item { + + public KofolaBottleItem() { + super(new Item.Properties() + .tab(ModCreativeModeTab.KOFOLA_TAB) + .tab(CreativeModeTab.TAB_FOOD) + .stacksTo(16) + .craftRemainder(Items.GLASS_BOTTLE) + .food(ModFoods.KOFOLA_BOTTLE)); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity entity) { + super.finishUsingItem(stack, level, entity); + + if (!level.isClientSide) { + entity.removeEffect(MobEffects.MOVEMENT_SLOWDOWN); + entity.removeEffect(MobEffects.DIG_SLOWDOWN); + + FarmersDelightCompat.applyComfort(entity, 600); + + if (entity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + } + + if (stack.isEmpty()) { + return new ItemStack(Items.GLASS_BOTTLE); + } else { + if (entity instanceof Player player && !player.getAbilities().instabuild) { + ItemStack emptyBottle = new ItemStack(Items.GLASS_BOTTLE); + if (!player.getInventory().add(emptyBottle)) { + player.drop(emptyBottle, false); + } + } + return stack; + } + } + + @Override + public int getUseDuration(ItemStack stack) { + return 32; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; + } + + @Override + public SoundEvent getDrinkingSound() { + return SoundEvents.HONEY_DRINK; + } + + @Override + public SoundEvent getEatingSound() { + return SoundEvents.HONEY_DRINK; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + return ItemUtils.startUsingInstantly(level, player, hand); + } + + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltip, TooltipFlag flag) { + tooltip.add(Component.translatable("item.kofola.kofola_bottle.desc").withStyle(ChatFormatting.GOLD, ChatFormatting.ITALIC)); + tooltip.add(Component.translatable("item.kofola.kofola_bottle.effect").withStyle(ChatFormatting.BLUE)); + super.appendHoverText(stack, level, tooltip, flag); + } +} diff --git a/1.19.2/src/main/java/cz/kofolamod/item/KofolaCanItem.java b/1.19.2/src/main/java/cz/kofolamod/item/KofolaCanItem.java new file mode 100644 index 0000000..47cafcb --- /dev/null +++ b/1.19.2/src/main/java/cz/kofolamod/item/KofolaCanItem.java @@ -0,0 +1,84 @@ +package cz.kofolamod.item; + +import cz.kofolamod.registry.ModCreativeModeTab; +import cz.kofolamod.registry.ModFoods; +import net.minecraft.ChatFormatting; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.*; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class KofolaCanItem extends Item { + + public KofolaCanItem() { + super(new Item.Properties() + .tab(ModCreativeModeTab.KOFOLA_TAB) + .tab(CreativeModeTab.TAB_FOOD) + .stacksTo(16) + .food(ModFoods.KOFOLA_CAN)); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity entity) { + super.finishUsingItem(stack, level, entity); + + if (!level.isClientSide && entity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.IRON_NUGGET); + } else { + if (entity instanceof Player player && !player.getAbilities().instabuild) { + ItemStack nugget = new ItemStack(Items.IRON_NUGGET); + if (!player.getInventory().add(nugget)) { + player.drop(nugget, false); + } + } + return stack; + } + } + + @Override + public int getUseDuration(ItemStack stack) { + return 20; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; + } + + @Override + public SoundEvent getDrinkingSound() { + return SoundEvents.GENERIC_DRINK; + } + + @Override + public SoundEvent getEatingSound() { + return SoundEvents.GENERIC_DRINK; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + return ItemUtils.startUsingInstantly(level, player, hand); + } + + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltip, TooltipFlag flag) { + tooltip.add(Component.translatable("item.kofola.kofola_can.desc").withStyle(ChatFormatting.YELLOW, ChatFormatting.ITALIC)); + super.appendHoverText(stack, level, tooltip, flag); + } +} diff --git a/1.19.2/src/main/java/cz/kofolamod/recipe/KofolaBrewingRecipe.java b/1.19.2/src/main/java/cz/kofolamod/recipe/KofolaBrewingRecipe.java new file mode 100644 index 0000000..be5d188 --- /dev/null +++ b/1.19.2/src/main/java/cz/kofolamod/recipe/KofolaBrewingRecipe.java @@ -0,0 +1,34 @@ +package cz.kofolamod.recipe; + +import cz.kofolamod.registry.ModItems; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionUtils; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraftforge.common.brewing.IBrewingRecipe; + +public class KofolaBrewingRecipe implements IBrewingRecipe { + + @Override + public boolean isInput(ItemStack input) { + if (!input.is(Items.POTION)) { + return false; + } + Potion potion = PotionUtils.getPotion(input); + return potion == Potions.WATER || potion == Potions.AWKWARD; + } + + @Override + public boolean isIngredient(ItemStack ingredient) { + return ingredient.is(ModItems.KOFO_SYRUP.get()); + } + + @Override + public ItemStack getOutput(ItemStack input, ItemStack ingredient) { + if (isInput(input) && isIngredient(ingredient)) { + return new ItemStack(ModItems.KOFOLA_BOTTLE.get()); + } + return ItemStack.EMPTY; + } +} diff --git a/1.19.2/src/main/java/cz/kofolamod/registry/ModBlocks.java b/1.19.2/src/main/java/cz/kofolamod/registry/ModBlocks.java new file mode 100644 index 0000000..6a12790 --- /dev/null +++ b/1.19.2/src/main/java/cz/kofolamod/registry/ModBlocks.java @@ -0,0 +1,26 @@ +package cz.kofolamod.registry; + +import cz.kofolamod.KofolaMod; +import cz.kofolamod.block.KofolaCrateBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.material.Material; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class ModBlocks { + public static final DeferredRegister BLOCKS = + DeferredRegister.create(ForgeRegistries.BLOCKS, KofolaMod.MOD_ID); + + public static final RegistryObject KOFOLA_CRATE = BLOCKS.register("kofola_crate", + KofolaCrateBlock::new); + + public static final RegistryObject KOFOLA_FLUID_BLOCK = BLOCKS.register("kofola_fluid", + () -> new LiquidBlock(ModFluids.KOFOLA_SOURCE, BlockBehaviour.Properties.of(Material.WATER) + .noCollission() + .strength(100.0F) + .noLootTable())); +} diff --git a/1.19.2/src/main/java/cz/kofolamod/registry/ModCreativeModeTab.java b/1.19.2/src/main/java/cz/kofolamod/registry/ModCreativeModeTab.java new file mode 100644 index 0000000..cad7adc --- /dev/null +++ b/1.19.2/src/main/java/cz/kofolamod/registry/ModCreativeModeTab.java @@ -0,0 +1,13 @@ +package cz.kofolamod.registry; + +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.ItemStack; + +public class ModCreativeModeTab { + public static final CreativeModeTab KOFOLA_TAB = new CreativeModeTab("kofola_tab") { + @Override + public ItemStack makeIcon() { + return new ItemStack(ModItems.KOFOLA_BOTTLE.get()); + } + }; +} diff --git a/1.19.2/src/main/java/cz/kofolamod/registry/ModFluids.java b/1.19.2/src/main/java/cz/kofolamod/registry/ModFluids.java new file mode 100644 index 0000000..568337c --- /dev/null +++ b/1.19.2/src/main/java/cz/kofolamod/registry/ModFluids.java @@ -0,0 +1,39 @@ +package cz.kofolamod.registry; + +import cz.kofolamod.KofolaMod; +import cz.kofolamod.fluid.KofolaFluidType; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.material.FlowingFluid; +import net.minecraft.world.level.material.Fluid; +import net.minecraftforge.fluids.FluidType; +import net.minecraftforge.fluids.ForgeFlowingFluid; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class ModFluids { + public static final DeferredRegister FLUID_TYPES = + DeferredRegister.create(ForgeRegistries.Keys.FLUID_TYPES, KofolaMod.MOD_ID); + + public static final DeferredRegister FLUIDS = + DeferredRegister.create(ForgeRegistries.FLUIDS, KofolaMod.MOD_ID); + + public static final RegistryObject KOFOLA_FLUID_TYPE = FLUID_TYPES.register("kofola_fluid", + () -> new KofolaFluidType( + new ResourceLocation(KofolaMod.MOD_ID, "block/kofola_still"), + new ResourceLocation(KofolaMod.MOD_ID, "block/kofola_flow"), + 0xFFFFFFFF + )); + + public static final RegistryObject KOFOLA_SOURCE = FLUIDS.register("kofola_fluid", + () -> new ForgeFlowingFluid.Source(ModFluids.KOFOLA_PROPERTIES)); + + public static final RegistryObject KOFOLA_FLOWING = FLUIDS.register("flowing_kofola_fluid", + () -> new ForgeFlowingFluid.Flowing(ModFluids.KOFOLA_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties KOFOLA_PROPERTIES = new ForgeFlowingFluid.Properties( + KOFOLA_FLUID_TYPE, + KOFOLA_SOURCE, + KOFOLA_FLOWING + ).slopeFindDistance(4).levelDecreasePerBlock(1).block(ModBlocks.KOFOLA_FLUID_BLOCK).bucket(ModItems.KOFOLA_BUCKET); +} diff --git a/1.19.2/src/main/java/cz/kofolamod/registry/ModFoods.java b/1.19.2/src/main/java/cz/kofolamod/registry/ModFoods.java new file mode 100644 index 0000000..5fb8df6 --- /dev/null +++ b/1.19.2/src/main/java/cz/kofolamod/registry/ModFoods.java @@ -0,0 +1,40 @@ +package cz.kofolamod.registry; + +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.food.FoodProperties; + +public class ModFoods { + public static final FoodProperties KOFOLA_BOTTLE = new FoodProperties.Builder() + .nutrition(6) + .saturationMod(0.7F) + .alwaysEat() + .effect(() -> new MobEffectInstance(MobEffects.MOVEMENT_SPEED, 600, 0), 1.0F) + .effect(() -> new MobEffectInstance(MobEffects.DIG_SPEED, 900, 0), 1.0F) + .build(); + + public static final FoodProperties KOFOLA_CAN = new FoodProperties.Builder() + .nutrition(5) + .saturationMod(0.6F) + .alwaysEat() + .effect(() -> new MobEffectInstance(MobEffects.MOVEMENT_SPEED, 500, 0), 1.0F) + .effect(() -> new MobEffectInstance(MobEffects.DIG_SPEED, 600, 0), 1.0F) + .build(); + + public static final FoodProperties DRAFT_KOFOLA = new FoodProperties.Builder() + .nutrition(8) + .saturationMod(0.8F) + .alwaysEat() + .effect(() -> new MobEffectInstance(MobEffects.MOVEMENT_SPEED, 600, 1), 1.0F) + .effect(() -> new MobEffectInstance(MobEffects.DIG_SPEED, 900, 1), 1.0F) + .effect(() -> new MobEffectInstance(MobEffects.REGENERATION, 300, 0), 1.0F) + .build(); + + public static final FoodProperties KOFO_SYRUP = new FoodProperties.Builder() + .nutrition(3) + .saturationMod(0.3F) + .alwaysEat() + .effect(() -> new MobEffectInstance(MobEffects.DIG_SPEED, 1200, 1), 1.0F) + .effect(() -> new MobEffectInstance(MobEffects.CONFUSION, 100, 0), 0.7F) + .build(); +} diff --git a/1.19.2/src/main/java/cz/kofolamod/registry/ModItems.java b/1.19.2/src/main/java/cz/kofolamod/registry/ModItems.java new file mode 100644 index 0000000..8f548ff --- /dev/null +++ b/1.19.2/src/main/java/cz/kofolamod/registry/ModItems.java @@ -0,0 +1,46 @@ +package cz.kofolamod.registry; + +import cz.kofolamod.KofolaMod; +import cz.kofolamod.item.DraftKofolaItem; +import cz.kofolamod.item.KofoSyrupItem; +import cz.kofolamod.item.KofolaBottleItem; +import cz.kofolamod.item.KofolaCanItem; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.BucketItem; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class ModItems { + public static final DeferredRegister ITEMS = + DeferredRegister.create(ForgeRegistries.ITEMS, KofolaMod.MOD_ID); + + public static final RegistryObject KOFO_SYRUP = ITEMS.register("kofo_syrup", + KofoSyrupItem::new); + + public static final RegistryObject KOFOLA_BOTTLE = ITEMS.register("kofola_bottle", + KofolaBottleItem::new); + + public static final RegistryObject KOFOLA_CAN = ITEMS.register("kofola_can", + KofolaCanItem::new); + + public static final RegistryObject DRAFT_KOFOLA = ITEMS.register("draft_kofola", + DraftKofolaItem::new); + + public static final RegistryObject KOFOLA_BUCKET = ITEMS.register("kofola_bucket", + () -> new BucketItem(ModFluids.KOFOLA_SOURCE, + new Item.Properties() + .tab(ModCreativeModeTab.KOFOLA_TAB) + .tab(CreativeModeTab.TAB_MISC) + .craftRemainder(Items.BUCKET) + .stacksTo(1))); + + public static final RegistryObject KOFOLA_CRATE = ITEMS.register("kofola_crate", + () -> new BlockItem(ModBlocks.KOFOLA_CRATE.get(), + new Item.Properties() + .tab(ModCreativeModeTab.KOFOLA_TAB) + .tab(CreativeModeTab.TAB_DECORATIONS))); +} diff --git a/1.19.2/src/main/resources/META-INF/mods.toml b/1.19.2/src/main/resources/META-INF/mods.toml new file mode 100644 index 0000000..f162a71 --- /dev/null +++ b/1.19.2/src/main/resources/META-INF/mods.toml @@ -0,0 +1,39 @@ +modLoader="javafml" +loaderVersion="${loader_version_range}" +license="${mod_license}" + +[[mods]] +modId="${mod_id}" +version="${mod_version}" +displayName="${mod_name}" +logoFile="icon.png" +authors="${mod_authors}" +description='''${mod_description}''' + +[[dependencies.${mod_id}]] + modId="forge" + mandatory=true + versionRange="${forge_version_range}" + ordering="NONE" + side="BOTH" + +[[dependencies.${mod_id}]] + modId="minecraft" + mandatory=true + versionRange="${minecraft_version_range}" + ordering="NONE" + side="BOTH" + +[[dependencies.${mod_id}]] + modId="farmersdelight" + mandatory=false + versionRange="[1.19.2-1.2.0,)" + ordering="AFTER" + side="BOTH" + +[[dependencies.${mod_id}]] + modId="create" + mandatory=false + versionRange="[0.5.1,)" + ordering="AFTER" + side="BOTH" diff --git a/1.19.2/src/main/resources/assets/kofola/blockstates/kofola_crate.json b/1.19.2/src/main/resources/assets/kofola/blockstates/kofola_crate.json new file mode 100644 index 0000000..e9da639 --- /dev/null +++ b/1.19.2/src/main/resources/assets/kofola/blockstates/kofola_crate.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "kofola:block/kofola_crate" }, + "facing=south": { "model": "kofola:block/kofola_crate", "y": 180 }, + "facing=west": { "model": "kofola:block/kofola_crate", "y": 270 }, + "facing=east": { "model": "kofola:block/kofola_crate", "y": 90 } + } +} diff --git a/1.19.2/src/main/resources/assets/kofola/lang/cs_cz.json b/1.19.2/src/main/resources/assets/kofola/lang/cs_cz.json new file mode 100644 index 0000000..bdd6d98 --- /dev/null +++ b/1.19.2/src/main/resources/assets/kofola/lang/cs_cz.json @@ -0,0 +1,22 @@ +{ + "itemGroup.kofola_tab": "Kofola", + + "item.kofola.kofola_bottle": "Láhev Kofoly", + "item.kofola.kofola_bottle.desc": "Když ji miluješ, není co řešit.", + "item.kofola.kofola_bottle.effect": "Dodává Rychlost, Spěch a zahání únavu", + + "item.kofola.kofola_can": "Plechovka Kofoly", + "item.kofola.kofola_can.desc": "Rychlé osvěžení na cesty.", + + "item.kofola.draft_kofola": "Točená Kofola", + "item.kofola.draft_kofola.desc": "Poctivě vychlazená s jemnou pěnou.", + "item.kofola.draft_kofola.effect": "Poskytuje silnou regeneraci a vitalitu", + + "item.kofola.kofo_syrup": "Sirup KOFO", + "item.kofola.kofo_syrup.desc": "Originální bylinkový extrakt ze 14 ingrediencí.", + + "item.kofola.kofola_bucket": "Kbelík Kofoly", + "block.kofola.kofola_crate": "Přepravka Kofoly", + "block.kofola.kofola_fluid": "Kofola", + "fluid_type.kofola.kofola_fluid": "Kofola" +} diff --git a/1.19.2/src/main/resources/assets/kofola/lang/de_de.json b/1.19.2/src/main/resources/assets/kofola/lang/de_de.json new file mode 100644 index 0000000..3b40611 --- /dev/null +++ b/1.19.2/src/main/resources/assets/kofola/lang/de_de.json @@ -0,0 +1,22 @@ +{ + "itemGroup.kofola_tab": "Kofola", + + "item.kofola.kofola_bottle": "Flasche Kofola", + "item.kofola.kofola_bottle.desc": "Wenn du sie liebst, gibt es nichts zu bereden.", + "item.kofola.kofola_bottle.effect": "Verleiht Schnelligkeit, Eile und heilt Müdigkeit", + + "item.kofola.kofola_can": "Dose Kofola", + "item.kofola.kofola_can.desc": "Schnelle Erfrischung für unterwegs.", + + "item.kofola.draft_kofola": "Gezapfte Kofola", + "item.kofola.draft_kofola.desc": "Perfekt gekühlt mit feiner Schaumkrone.", + "item.kofola.draft_kofola.effect": "Verleiht starke Regeneration und Vitalität", + + "item.kofola.kofo_syrup": "KOFO-Sirup", + "item.kofola.kofo_syrup.desc": "Original Kräuterextrakt aus 14 Zutaten.", + + "item.kofola.kofola_bucket": "Kofola-Eimer", + "block.kofola.kofola_crate": "Kofola-Kiste", + "block.kofola.kofola_fluid": "Kofola", + "fluid_type.kofola.kofola_fluid": "Kofola" +} diff --git a/1.19.2/src/main/resources/assets/kofola/lang/en_us.json b/1.19.2/src/main/resources/assets/kofola/lang/en_us.json new file mode 100644 index 0000000..1abdedc --- /dev/null +++ b/1.19.2/src/main/resources/assets/kofola/lang/en_us.json @@ -0,0 +1,22 @@ +{ + "itemGroup.kofola_tab": "Kofola", + + "item.kofola.kofola_bottle": "Bottle of Kofola", + "item.kofola.kofola_bottle.desc": "When you love it, there's nothing to question.", + "item.kofola.kofola_bottle.effect": "Grants Speed, Haste and cures fatigue", + + "item.kofola.kofola_can": "Can of Kofola", + "item.kofola.kofola_can.desc": "Fast refreshing drink on the go.", + + "item.kofola.draft_kofola": "Draft Kofola", + "item.kofola.draft_kofola.desc": "Chilled to perfection with creamy foam.", + "item.kofola.draft_kofola.effect": "Grants superior regeneration and vitality", + + "item.kofola.kofo_syrup": "KOFO Syrup", + "item.kofola.kofo_syrup.desc": "Original herbal extract made from 14 ingredients.", + + "item.kofola.kofola_bucket": "Kofola Bucket", + "block.kofola.kofola_crate": "Kofola Crate", + "block.kofola.kofola_fluid": "Kofola", + "fluid_type.kofola.kofola_fluid": "Kofola" +} diff --git a/1.19.2/src/main/resources/assets/kofola/lang/pl_pl.json b/1.19.2/src/main/resources/assets/kofola/lang/pl_pl.json new file mode 100644 index 0000000..10321ba --- /dev/null +++ b/1.19.2/src/main/resources/assets/kofola/lang/pl_pl.json @@ -0,0 +1,22 @@ +{ + "itemGroup.kofola_tab": "Kofola", + + "item.kofola.kofola_bottle": "Butelka Kofoli", + "item.kofola.kofola_bottle.desc": "Gdy ją kochasz, nie ma o czym gadać.", + "item.kofola.kofola_bottle.effect": "Daje Szybkość, Pośpiech i usuwa zmęczenie", + + "item.kofola.kofola_can": "Puszka Kofoli", + "item.kofola.kofola_can.desc": "Szybkie orzeźwienie w podróży.", + + "item.kofola.draft_kofola": "Kofola z Nalewaka", + "item.kofola.draft_kofola.desc": "Schłodzona do perfekcji z aksamitną pianką.", + "item.kofola.draft_kofola.effect": "Zapewnia silną regenerację i energię", + + "item.kofola.kofo_syrup": "Syrop KOFO", + "item.kofola.kofo_syrup.desc": "Oryginalny ekstrakt ziołowy z 14 składników.", + + "item.kofola.kofola_bucket": "Wiadro Kofoli", + "block.kofola.kofola_crate": "Skrzynka Kofoli", + "block.kofola.kofola_fluid": "Kofola", + "fluid_type.kofola.kofola_fluid": "Kofola" +} diff --git a/1.19.2/src/main/resources/assets/kofola/lang/sk_sk.json b/1.19.2/src/main/resources/assets/kofola/lang/sk_sk.json new file mode 100644 index 0000000..3a6d445 --- /dev/null +++ b/1.19.2/src/main/resources/assets/kofola/lang/sk_sk.json @@ -0,0 +1,22 @@ +{ + "itemGroup.kofola_tab": "Kofola", + + "item.kofola.kofola_bottle": "Fľaša Kofoly", + "item.kofola.kofola_bottle.desc": "Keď ju miluješ, niet čo riešiť.", + "item.kofola.kofola_bottle.effect": "Dodáva Rýchlosť, Náhlenie a zaháňa únavu", + + "item.kofola.kofola_can": "Plechovka Kofoly", + "item.kofola.kofola_can.desc": "Rýchle osvieženie na cesty.", + + "item.kofola.draft_kofola": "Čapovaná Kofola", + "item.kofola.draft_kofola.desc": "Poctivo vychladená s jemnou penou.", + "item.kofola.draft_kofola.effect": "Poskytuje silnú regeneráciu a vitalitu", + + "item.kofola.kofo_syrup": "Sirup KOFO", + "item.kofola.kofo_syrup.desc": "Originálny bylinkový extrakt zo 14 ingrediencií.", + + "item.kofola.kofola_bucket": "Vedro Kofoly", + "block.kofola.kofola_crate": "Prepravka Kofoly", + "block.kofola.kofola_fluid": "Kofola", + "fluid_type.kofola.kofola_fluid": "Kofola" +} diff --git a/1.19.2/src/main/resources/assets/kofola/models/block/kofola_crate.json b/1.19.2/src/main/resources/assets/kofola/models/block/kofola_crate.json new file mode 100644 index 0000000..db7442c --- /dev/null +++ b/1.19.2/src/main/resources/assets/kofola/models/block/kofola_crate.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "particle": "kofola:block/kofola_crate_side", + "down": "kofola:block/kofola_crate_bottom", + "up": "kofola:block/kofola_crate_top", + "north": "kofola:block/kofola_crate_front", + "south": "kofola:block/kofola_crate_front", + "east": "kofola:block/kofola_crate_side", + "west": "kofola:block/kofola_crate_side" + } +} diff --git a/1.19.2/src/main/resources/assets/kofola/models/item/draft_kofola.json b/1.19.2/src/main/resources/assets/kofola/models/item/draft_kofola.json new file mode 100644 index 0000000..174ef40 --- /dev/null +++ b/1.19.2/src/main/resources/assets/kofola/models/item/draft_kofola.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "kofola:item/draft_kofola" + } +} diff --git a/1.19.2/src/main/resources/assets/kofola/models/item/kofo_syrup.json b/1.19.2/src/main/resources/assets/kofola/models/item/kofo_syrup.json new file mode 100644 index 0000000..fe7929e --- /dev/null +++ b/1.19.2/src/main/resources/assets/kofola/models/item/kofo_syrup.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "kofola:item/kofo_syrup" + } +} diff --git a/1.19.2/src/main/resources/assets/kofola/models/item/kofola_bottle.json b/1.19.2/src/main/resources/assets/kofola/models/item/kofola_bottle.json new file mode 100644 index 0000000..ff66c5d --- /dev/null +++ b/1.19.2/src/main/resources/assets/kofola/models/item/kofola_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "kofola:item/kofola_bottle" + } +} diff --git a/1.19.2/src/main/resources/assets/kofola/models/item/kofola_bucket.json b/1.19.2/src/main/resources/assets/kofola/models/item/kofola_bucket.json new file mode 100644 index 0000000..8b92a68 --- /dev/null +++ b/1.19.2/src/main/resources/assets/kofola/models/item/kofola_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "kofola:item/kofola_bucket" + } +} diff --git a/1.19.2/src/main/resources/assets/kofola/models/item/kofola_can.json b/1.19.2/src/main/resources/assets/kofola/models/item/kofola_can.json new file mode 100644 index 0000000..e2e1efc --- /dev/null +++ b/1.19.2/src/main/resources/assets/kofola/models/item/kofola_can.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "kofola:item/kofola_can" + } +} diff --git a/1.19.2/src/main/resources/assets/kofola/models/item/kofola_crate.json b/1.19.2/src/main/resources/assets/kofola/models/item/kofola_crate.json new file mode 100644 index 0000000..33393e5 --- /dev/null +++ b/1.19.2/src/main/resources/assets/kofola/models/item/kofola_crate.json @@ -0,0 +1,3 @@ +{ + "parent": "kofola:block/kofola_crate" +} diff --git a/1.19.2/src/main/resources/assets/kofola/textures/block/kofola_crate_bottom.png b/1.19.2/src/main/resources/assets/kofola/textures/block/kofola_crate_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..93c08a48775fdbcc75e55e7c08f6bb24171f2ea6 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`A)YRdAr*6yw}grPJMX}lz$hqY z^@(Sa&?27m@q5%d(-~oG9C~wd516 N22WQ%mvv4FO#n3>PVoQ$ literal 0 HcmV?d00001 diff --git a/1.19.2/src/main/resources/assets/kofola/textures/block/kofola_crate_side.png b/1.19.2/src/main/resources/assets/kofola/textures/block/kofola_crate_side.png new file mode 100644 index 0000000000000000000000000000000000000000..56bf62d13984d5332a38731458d42f58ef6d8385 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`9iA?ZAr*6yc{T_9Iq$%jz$m!s zQ4`N3p+!9BbP0l+XkK(X~Oh literal 0 HcmV?d00001 diff --git a/1.19.2/src/main/resources/assets/kofola/textures/block/kofola_crate_top.png b/1.19.2/src/main/resources/assets/kofola/textures/block/kofola_crate_top.png new file mode 100644 index 0000000000000000000000000000000000000000..dda10e596b574b63f88aaf8fcfa2f6cfaba758c0 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`v7RoDAr*6yc{T_9Iq$%jz$iF9 z-`-hJMCd_c#rKEYfk{3*B1~!$k8j<~YRhi72~g=2Om5n|Z(eGG#a_Xy6-q}W92+eb yBpzTg=9CrCKIS4SzDN1e{>3jF(kCoqW_WrsFVdQ&MBb@08t5C?f?J) literal 0 HcmV?d00001 diff --git a/1.19.2/src/main/resources/assets/kofola/textures/block/kofola_still.png b/1.19.2/src/main/resources/assets/kofola/textures/block/kofola_still.png new file mode 100644 index 0000000000000000000000000000000000000000..2eae175f231e8fc423cbd437f6a39437fd5fc071 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`b3I)gLn`JZzu~?3W5c5l&H3y1 z|4qCg^faa7?^p9?4Rh@oZJn{ze`WR9g@m6bHJ&!~y;u2M+Jo8S!cC7^-HnZmYZ%qo zm=vVc*q%8*bx86tVB?sOEFo+b>}lB3IYF3H@|a6k{YD^}_uwE;vXc3Sgd(3OY;tZA z4GflTh7+YL3=YrOFw?6m(PxTE@&<7Y&tnf9RLnmZ7zyt*WMn7}ycX4bbXpG3p$wj` KelF{r5}E)-Sxr9x literal 0 HcmV?d00001 diff --git a/1.19.2/src/main/resources/assets/kofola/textures/item/draft_kofola.png b/1.19.2/src/main/resources/assets/kofola/textures/item/draft_kofola.png new file mode 100644 index 0000000000000000000000000000000000000000..6498031ed3708a593ae3be3eb68eddb8aa6c363e GIT binary patch literal 292 zcmV+<0o(qGP)?5+G%_2PdM0Gf*VhmKBh%mBy#Z^6(bx=NLFT-?f1N>`K@&_f+-G1ASJVU> z0^<`j;QfooV2sQs8ieFk-TD9j|1&=ozW)}IT>q7LS>QAXgX9T@0SwG4@?yXSKo+1I z#DvW8SLK%k(P@3#uo}e3$S4If2&)0eU_)I1+#q~_37NC;_Q&Tic0khxf|@Z50D+ct zHwIh)=6{%1Frv{P8V1M!voO+ literal 0 HcmV?d00001 diff --git a/1.19.2/src/main/resources/assets/kofola/textures/item/kofo_syrup.png b/1.19.2/src/main/resources/assets/kofola/textures/item/kofo_syrup.png new file mode 100644 index 0000000000000000000000000000000000000000..9856334eddfc6e8b42650f40eb960ccbe2fbc926 GIT binary patch literal 258 zcmV+d0sa1oP)j@<}*(pzIpiRCyF@#zu(H(3}L}$YLdF5`IX~73_b6DGn_i{ zl;Mh(0)vj_7ShAu)QP7IW){-;lrUg5VBXF9CqeWoF9n7YAy&KwuwWAec>xp#FMs@F z5a(cm(?q*~6u^j05EO0L#NYh-kD(r`0U&@LWlui*P{F1U0J?QWS+LSV<^TWy07*qo IM6N<$f*9Ry+5i9m literal 0 HcmV?d00001 diff --git a/1.19.2/src/main/resources/assets/kofola/textures/item/kofola_bottle.png b/1.19.2/src/main/resources/assets/kofola/textures/item/kofola_bottle.png new file mode 100644 index 0000000000000000000000000000000000000000..dd00a872967cee657f47e9e4f50bcbe081c3b063 GIT binary patch literal 266 zcmV+l0rmcgP)c|O)V55E7}Vj;=(AH*iv1;hd-e3JS4 zV%`)PKn!5QCJ6Ggfdsem%g?{SeCGfEm2rgw6E@8UUw*xTE{@9(CI)H)c|O)V{}(X) z|9_DEzn>ZhI3a=9ATiQhAmYKWarS=(|G=GKHZH(|P4Hp(udSdceEFFf%vZM93Q@|4 zsTQjXh>3rk20Z-qTjj!wuXkbmS6?7e`InLLE=UetJr+kn0D6F7(+rXT0N7hpNrc8I Qo&W#<07*qoM6N<$f_YtZ=Kufz literal 0 HcmV?d00001 diff --git a/1.19.2/src/main/resources/assets/kofola/textures/item/kofola_bucket.png b/1.19.2/src/main/resources/assets/kofola/textures/item/kofola_bucket.png new file mode 100644 index 0000000000000000000000000000000000000000..79a4caf5aa7b8a5621c047c283addf2293d8c384 GIT binary patch literal 366 zcmV-!0g?WRP)Ohtyu&U2uVV4>RpiI1;FGs#@17T;p&(B@-9O*`@ldqq3kR*0D|3R*AqA2<^fyNOE zFvg@X46AjLB*Nsy0oEUq+ze`t(X6<11X89eY>Lngh^iBvf2PiS0`Ucdm7{!&B>(^b M07*qoM6N<$f?>a(SpWb4 literal 0 HcmV?d00001 diff --git a/1.19.2/src/main/resources/assets/kofola/textures/item/kofola_can.png b/1.19.2/src/main/resources/assets/kofola/textures/item/kofola_can.png new file mode 100644 index 0000000000000000000000000000000000000000..37c71195efc6689602aef8f5a06ee37944e5fdc7 GIT binary patch literal 270 zcmV+p0rCEcP)goq$kwM^IqtC~8%nopcQ%K)QcVgy~_7aILv;Qd{O3%Bkwy!-we zEGERs3T7KQcrt8Sy_6BJ3(g(bj>}hA<(L>K1WXLn1~Q^T|Nr+h{Qv);>Hq(O><|p% z_cQzl$&uuOysUo=4D!`@Eo8zcIcaMxL!Ngt`35jNY-N}<4ZjjbbODe*o%GePrUMXo z^7$rt*!z?JeKPE>3wg>g~ zV!A#(tcqn48#f=g^n+!18lXi@2ROni6r@{>PmjjDZ*HJ`s3cj6aEVT*;63|OV| zk)NUJIp(XL?VWE97ZQBLQK+DldaTNN&CkodsknZxzfNSGnaF;I6Z(u!bIw;CI{0(T^lRKQecmh2 zU+1rWshU>P?0g%AEiJ literal 0 HcmV?d00001 diff --git a/1.19.2/src/main/resources/pack.mcmeta b/1.19.2/src/main/resources/pack.mcmeta new file mode 100644 index 0000000..790b672 --- /dev/null +++ b/1.19.2/src/main/resources/pack.mcmeta @@ -0,0 +1,8 @@ +{ + "pack": { + "description": "Kofola Mod Resources", + "pack_format": 9, + "forge:resource_pack_format": 9, + "forge:data_pack_format": 10 + } +} diff --git a/1.21.1/.gitattributes b/1.21.1/.gitattributes new file mode 100644 index 0000000..f811f6a --- /dev/null +++ b/1.21.1/.gitattributes @@ -0,0 +1,5 @@ +# Disable autocrlf on generated files, they always generate with LF +# Add any extra files or paths here to make git stop saying they +# are changed when only line endings change. +src/generated/**/.cache/cache text eol=lf +src/generated/**/*.json text eol=lf diff --git a/1.21.1/.gitignore b/1.21.1/.gitignore new file mode 100644 index 0000000..c3a6e6d --- /dev/null +++ b/1.21.1/.gitignore @@ -0,0 +1,26 @@ +# eclipse +bin +*.launch +.settings +.metadata +.classpath +.project + +# idea +out +*.ipr +*.iws +*.iml +.idea + +# gradle +build +.gradle + +# other +eclipse +run + +# Files from Forge MDK +forge_README.txt +forge*changelog.txt diff --git a/1.21.1/LICENSE.txt b/1.21.1/LICENSE.txt new file mode 100644 index 0000000..249debe --- /dev/null +++ b/1.21.1/LICENSE.txt @@ -0,0 +1,523 @@ +Unless noted below, Minecraft Forge, Forge Mod Loader, and all +parts herein are licensed under the terms of the LGPL 2.1 found +here http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt and +copied below. + +Homepage: http://minecraftforge.net/ + https://github.com/MinecraftForge/MinecraftForge + + +A note on authorship: +All source artifacts are property of their original author, with +the exclusion of the contents of the patches directory and others +copied from it from time to time. Authorship of the contents of +the patches directory is retained by the Minecraft Forge project. +This is because the patches are partially machine generated +artifacts, and are changed heavily due to the way forge works. +Individual attribution within them is impossible. + +Consent: +All contributions to Forge must consent to the release of any +patch content to the Forge project. + +A note on infectivity: +The LGPL is chosen specifically so that projects may depend on Forge +features without being infected with its license. That is the +purpose of the LGPL. Mods and others using this code via ordinary +Java mechanics for referencing libraries are specifically not bound +by Forge's license for the Mod code. + + +=== MCP Data === +This software includes data from the Minecraft Coder Pack (MCP), with kind permission +from them. The license to MCP data is not transitive - distribution of this data by +third parties requires independent licensing from the MCP team. This data is not +redistributable without permission from the MCP team. + +=== Sharing === +I grant permission for some parts of FML to be redistributed outside the terms of the LGPL, for the benefit of +the minecraft modding community. All contributions to these parts should be licensed under the same additional grant. + +-- Runtime patcher -- +License is granted to redistribute the runtime patcher code (src/main/java/net/minecraftforge/fml/common/patcher +and subdirectories) under any alternative open source license as classified by the OSI (http://opensource.org/licenses) + +-- ASM transformers -- +License is granted to redistribute the ASM transformer code (src/main/java/net/minecraftforge/common/asm/ and subdirectories) +under any alternative open source license as classified by the OSI (http://opensource.org/licenses) + +========================================================================= +This software includes portions from the Apache Maven project at +http://maven.apache.org/ specifically the ComparableVersion.java code. It is +included based on guidelines at +http://www.softwarefreedom.org/resources/2007/gpl-non-gpl-collaboration.html +with notices intact. The only change is a non-functional change of package name. + +This software contains a partial repackaging of javaxdelta, a BSD licensed program for generating +binary differences and applying them, sourced from the subversion at http://sourceforge.net/projects/javaxdelta/ +authored by genman, heikok, pivot. +The only changes are to replace some Trove collection types with standard Java collections, and repackaged. + +This software includes the Monocraft font from https://github.com/IdreesInc/Monocraft/ for use in the early loading +display. +========================================================================= + + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/1.21.1/build.gradle b/1.21.1/build.gradle new file mode 100644 index 0000000..ab1cfaf --- /dev/null +++ b/1.21.1/build.gradle @@ -0,0 +1,53 @@ +plugins { + id 'java' + id 'idea' + id 'eclipse' + id 'net.minecraftforge.gradle' version '[7.0.3,8)' +} + +version = '1.0.1' +group = 'cz.kofolamod' + +base { + archivesName = 'kofola' +} + +java.toolchain.languageVersion = JavaLanguageVersion.of(21) + +sourceSets.main.resources { srcDir 'src/generated/resources' } + +minecraft { + mappings channel: 'official', version: '1.21.1' + + runs { + configureEach { + workingDir = layout.projectDirectory.dir('run') + systemProperty 'forge.enabledGameTestNamespaces', 'kofola' + } + + register('client') + register('server') { + args '--nogui' + } + register('gameTestServer') + register('data') { + workingDir = layout.projectDirectory.dir('run-data') + args '--mod', 'kofola', '--all', '--output', layout.projectDirectory.dir('src/generated/resources'), '--existing', layout.projectDirectory.dir('src/main/resources') + } + } +} + +repositories { + minecraft.mavenizer(it) + maven fg.forgeMaven + maven fg.minecraftLibsMaven + mavenCentral() +} + +dependencies { + implementation minecraft.dependency('net.minecraftforge:forge:1.21.1-52.1.20') +} + +tasks.withType(JavaCompile).configureEach { + options.encoding = 'UTF-8' +} diff --git a/1.21.1/changelog.txt b/1.21.1/changelog.txt new file mode 100644 index 0000000..7795712 --- /dev/null +++ b/1.21.1/changelog.txt @@ -0,0 +1,193 @@ +1.21.1 Changelog +52.1 +==== + - 52.1.20 Add protection against large network channel lists + - 52.1.19 Fix legacy object holders not being fired in the registry specific codepath + Better optimize the scanning for object holders by unrolling streams. + - 52.1.18 Store object holder handlers per registry name (#10899) + Co-authored-by: LexManos + - 52.1.17 Fix generic errors in new Eclipse compiler + - 52.1.16 Update equality check for RegistryObject to include RegistryObject#key. (#10857) + - 52.1.15 Toml parsing errors are now visible in the latest log (#10843) + - 52.1.14 Add support for multiple access transformer configs. + - 52.1.13 Migrate the MDK to ForgeGradle 7 + Backport of d29524b to 1.21.1 + - 52.1.12 Skip processing vanilla classes in RuntimeDistCleaner when running on a client + Backport of #10682 to 1.21.1 + - 52.1.11 Bump ASM and EventBus + - ASM 9.9.1 for Java 26 support + - EventBus 6.2.33 for Event#cancel() convenience method and further performance improvements + - 52.1.10 Update SecureModules to address ZipPath bug with brackets. Closes #10755 + - 52.1.9 Optimize memory allocation for checking entity fluid collisions. Backport of #10745 (#10752) + Co-authored-by: LexManos + - 52.1.8 Mark applyServerBinpatches as a dependency of BundleList. Fixes: #10729 + - 52.1.7 Migrate to Github Actions + - 52.1.6 Fix incorrect blend state for blur effects, followup to #10115 and fix for 10541 (#10678) + - 52.1.5 Fix crafter not inserting into iitemhandler (#10667) (#10669) + Co-authored-by: LexManos + - 52.1.4 Update ASM version from 9.7.1 to 9.8 + - 52.1.3 Allow command suggestions/autocomplete to search all modded paths at once without namespace provided (#10594) + - 52.1.2 Add ForgeLayeredDraw & AddGuiOverlayLayersEvent as API for gui overlay management. (#10583) + - 52.1.1 Add Pumpkin Block and Item Tags (#10511) + Backport of #10482 to 1.21.1 + - 52.1.0 1.21.1 RB 1 + https://forums.minecraftforge.net/topic/154391-forge-521-minecraft-1211/ + +52.0 +==== + - 52.0.57 Add `#forge:chorus_additionally_grows_on` tag for similiar mechanics to `#minecraft:azalea_grows_on` but for chorus (#10461) + - 52.0.56 Speed up mod annotation scanning by ~30% (#10467) + Co-authored-by: LexManos + - 52.0.55 Add missed license headers (#10476) + - 52.0.54 Redstone updates and gametests structure fixes (#10422) + Fix game test structure rotations being inconsistent (#10391) + Fix redstone update order not matching vanilla. (#10392) + Fix redstone updates for comparators going up/down incorrectly. Related: #9973 + Make block pos assertions in GameTestHelper behave like in 1.21.3, thus fixing rotated tests functionality. + This can be disabled in the Forge config if you have old tests that this breaks. Tho it is recommended you update your tests. + --------- + Co-authored-by: LexManos + - 52.0.53 Bump dependencies (#10386) + - CoreMods 5.2.4 -> 5.2.6 + - EventBus 6.2.15 -> 6.2.27 + - Reduced memory usage + - Further performance improvements + - Fixed EventBus#39, unregistered listeners are now immediately reclaimable by the GC + - Apache MavenArtifact 3.8.5 -> 3.8.8 + - NightConfig 3.7.3 -> 3.7.4 + - 52.0.52 Re-introduce ItemStack Capabilities (#10363) + Co-authored-by: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> + Co-authored-by: LexManos + - 52.0.51 Re-introduce IForgeItem.damageItem when an item takes damage, Fixes #10344 (#10373) + - 52.0.50 Add updated tag context to AddReloadListenerEvent (#10421) + Fixes using custom tags in GlobalLootModifiers. + - 52.0.49 Add fast graphics render type to block model jsons (#10396) + Make modded leaves behave like vanilla leaves by default (Fixes #10389) + - 52.0.48 Fix corrupted and invalidly symlinked worlds crashing on level select (#10420) + - 52.0.47 Honor attacker shield disabling status (#10318) + - 52.0.46 Fix issues in VillagerTrades.EmeraldsForVillagerTypeItem related to custom Villager Types (#10300) + Co-authored-by: Joseph T. McQuigg + - 52.0.45 GameTestHelper additions (#10340) + Co-authored-by: LexManos + - 52.0.44 Update Gradle to 8.12.1 (#10354) + Automate IntelliJ download sources in MDK + - 52.0.43 Fix JOpt Simple by bumping ModLauncher (#10349) + - 52.0.42 Fix JOpt Simple needing a strict version requirement declaration (#10313) + - 52.0.41 Fix incorrect method reference in TntBlock.explode() (#10328) + - 52.0.40 Bump dependencies (#10276) + - EventBus 6.2.8 -> 6.2.15 + - Bootstrap 2.1.3 -> 2.1.8 + - SecureModules 2.2.20 -> 2.2.21 + - AccessTransformers 8.2.0 -> 8.2.1 + - ModLauncher 10.2.2 -> 10.2.3 + These bumps include further cleanup and optimisations. + - 52.0.39 Simplify Title Screen Brandings (#10289) + - 52.0.38 Update jline for better darwin/arm64 support + - 52.0.37 Skip Vanilla classes for the CapabilityTokenSubclass transformer (#10224) + Co-authored-by: Paint_Ninja + - 52.0.36 Bump CoreMods to 5.2.4 (#10266) + - 52.0.35 Skip processing Forge classes in `RuntimeDistCleaner` (#10211) + Co-authored-by: Paint_Ninja + - 52.0.34 Skip Forge classes in the RuntimeEnumExtender transformer (#10197) (#10219) + Mod classes are still transformed as usual + Co-authored-by: Paint_Ninja + - 52.0.33 Deprecate `@ObjectHolder`, add a couple of fast-paths (#10195) (#10231) + Co-authored-by: Paint_Ninja + - 52.0.32 Allow mipmap lowering to be disabled (#10255) + - 52.0.31 Simplify memory usage display on loading screen (#10236) + Co-authored-by: Paint_Ninja + - 52.0.30 Fix NightConfig FileWatcher causing dedicated server to hang when exiting (#10215) + - 52.0.29 Pass player argument when firing `OnDatapackSyncEvent` (#10171) + - 52.0.28 Add optional fix of use item duration, disabled by default (#10151) + - 52.0.27 Bump CoreMods to 5.2 (#10160) + Full Changelog: https://gist.github.com/Jonathing/c3ad28b2a048ac839a7baba5417ee870 + The key features are: + - ES6 language support + - Thoroughly updated ASMAPI, with full documentation + - Bug fixes (some optional for backwards-compatibility) + - Partial internal code cleanup + - Request CoreMods to not apply fix for ASMAPI.findFirstInstructionBefore by default + - 52.0.26 Add proper support for JPMS in normal mods.toml mods (#10125) + Make FMLModContainer read and apply Add-Opens and Add-Exports manifest entries from mod files. + Forge is now the `net.minecraftforge.forge` module instead of `forge` + https://forums.minecraftforge.net/topic/153333-proper-java-module-support-in-forge-mods/ + - 52.0.25 Add more `c` fluid tags (#10137) + Replaces the existing `forge`-namespaced tags, which are now deprecated. + Adds `c:experience` + - 52.0.24 Add `c:stripped_logs` and `c:stripped_woods` tags (#10136) + - 52.0.23 [1.21.1] Bump CoreMods and ASM (#10127) + CoreMods 5.1.13 changelog: https://gist.github.com/Jonathing/905d142447ecef670526ae27243adbba + - 52.0.22 Add `c:foods/pie` tag (#10135) + Replaces `forge:foods/pie`, which is now deprecated. + - 52.0.21 Fix back-compat with legacy `forge:` tags (#10126) + - 52.0.20 Implement the de-facto common tags, add many new Forge tags (#9955) + https://forums.minecraftforge.net/topic/152815-common-tags-in-forge/ + - 52.0.19 Patch BlockEntity.java to use getType Method (#10124) + - 52.0.18 Fix and cleanup RuntimeDistCleaner + - 52.0.17 Sync component registry ids + Fix deprecation typo + Bump ModLauncher (better stack traces) + Set Automatic-Module-Name + - 52.0.16 Fix layering of translucent sprites being broken by re-adding blur call Mojang removed (#10115) + - 52.0.15 Cleanup length and size checks (#10108) + - 52.0.14 Update vulnerable `eclipse` dependency (#10109) + - 52.0.13 Add and fire SystemMessageReceivedEvent + Replaces ClientChatReceivedEvent.System which was not fired due to Mojang changing ChatType to a registry. + - 52.0.12 Fix highlighted item tooltip rendering twice. Closes #10112 + - 52.0.11 Fix Network hooks not being initialized on GameTestServer (#10081) + Add rudimentary custom networking tests. + - 52.0.10 Fix inverted logic in TagEmptyCondition (#10069) + - 52.0.9 [1.21.1] Optionally supply `FMLJavaModLoadingContext` as a param to mod constructors (#10074) + Also made `FMLJavaModLoadingContext` extend `ModLoadingContext`. See the PR description for example usage. + - 52.0.8 Fix issues with `QuadBakingVertexConsumer` and Forge's OBJ loader (#10065) + - 52.0.7 Fire `OnDatapackSyncEvent` when a player joins a server (#10076) + - 52.0.6 Add a few Method Helpers onto ResourceKey to make getting Data Driven Entries Simpler (#10071) + - 52.0.5 Fix network channels not initializing during server transfers. Closes #10067 + - 52.0.4 [1.21.1] ModLoading cleanup and optimisations (#10052) + - 52.0.3 Properly ignore unknown mod files (#10063) + - 52.0.2 Add level access to Item.TooltipContext if available. + - 52.0.1 Load mods that declare explicit 1.21 compatibility as 1.21.1 is a minor bugfix. + - 52.0.0 1.21.1 + +51.0 +==== + - 51.0.33 Removed unneeded boat patch related to MC-119811 (#10061) + - 51.0.32 Fix network sync of custom datapack registries. + Add gametest to verify that it functions. + - 51.0.31 Add a way to render tooltips from Formatted text and TooltipComponents elements (#10056) + - 51.0.30 Fix custom creative tabs with search listing all items instead of just their own. + - 51.0.29 Patch CropBlock to use instanceOf FarmBlock check instead of hard coding to Blocks.FARMLAND (#10044) + - 51.0.28 Fix ItemStack sensitive getDefaultAttributeModifiers not being called. + - 51.0.27 Add missed @user_jvm_args.txt to run.bat + - 51.0.26 Fix `onPlaceItemIntoWorld` always resetting item stack when in creative mode (#10047) + - 51.0.25 Fix matrix stack translations for `RenderHighlightEvent` (#10050) + - 51.0.24 Fix Global Loot Modifier deserialization not having registry access. Closes #10042 and #10043 + - 51.0.23 Bump Mixin to 0.8.7 and allocate more ram to java compile tasks. + - 51.0.22 Use the new `fire()` and Result#isAllowed/isDenied/isDefault methods from EventBus (#10028) + - 51.0.21 Some build cleanup + - 51.0.20 Make HangingSignBlockEntity useable with custom BlockEntityTypes. #10038 + - 51.0.19 Send last PoseStack pos to RenderLevelStageEvent AFTER_PARTICLES stage. Fixes #10031 + - 51.0.18 Fix compile errors in MDK (#10029) + - 51.0.17 Fix converting dirt to mud consumes whole bottle (not just emptying) Closes #10027 + - 51.0.16 Add support for named sub-caps + - 51.0.15 Fix conditional checking swallowing decoding errors when loading registry entries from datapacks. Fixes #9995 + - 51.0.14 Apply license headers + - 51.0.13 Some code cleanup in ModInfo/ModFileInfo to use less streams and make things easier to debug. + - 51.0.12 Bump NightConfig to 3.7.3, to fix toml sub-configs being completely broken. Fixes #10015 + - 51.0.11 Make ForgeSpawnEgg assume color is opaque if alpha is set to 0. + Fixes "invisible" spawn eggs by default, but still allows modders to specify partial transparency. + - 51.0.10 Fixed perspective rendering in SeparateTransformsModel (#10014) + - 51.0.9 Fix missed PartEntity patch in Player.attack (#10011) + - 51.0.8 Choose default JarJar mod file type based on parent JAR Closes #9939 + - 51.0.7 Fixed falling block entities not rendering as moving blocks (#10006) + - 51.0.6 Bump Night Config, Should fix #9122 + - 51.0.5 Fix ClientTickEvent not firing properly. + - 51.0.4 Change tick event to have pre/post classes (#9890) + - 51.0.3 Fix Bogged and Wolf armor not being shearable by custom shears. Closes #10005 + - 51.0.2 Set team city branch + - 51.0.1 Remove Non-HolderLookup methods from INBTSerializeable and mark it as deprecated in favor of using Vanilla's new Component system. Closes #9998 + - 51.0.0 1.21 Update + Co-authored-by: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> + Co-authored-by: Daniel Norris + Co-authored-by: Ven + diff --git a/1.21.1/gradle.properties b/1.21.1/gradle.properties new file mode 100644 index 0000000..6102b5c --- /dev/null +++ b/1.21.1/gradle.properties @@ -0,0 +1,11 @@ +org.gradle.caching=true +org.gradle.parallel=true +org.gradle.configureondemand=true +org.gradle.jvmargs=-Xmx3G +org.gradle.java.home=C:\\Program Files\\Java\\jdk-21 + +org.gradle.configuration-cache=true +org.gradle.configuration-cache.parallel=true +org.gradle.configuration-cache.problems=warn + +net.minecraftforge.gradle.merge-source-sets=true diff --git a/1.21.1/gradle/wrapper/gradle-wrapper.jar b/1.21.1/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..a4b76b9530d66f5e68d973ea569d8e19de379189 GIT binary patch literal 43583 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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 GZ~q4|mN%#X literal 0 HcmV?d00001 diff --git a/1.21.1/gradle/wrapper/gradle-wrapper.properties b/1.21.1/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..8d9046d --- /dev/null +++ b/1.21.1/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/1.21.1/gradlew b/1.21.1/gradlew new file mode 100644 index 0000000..f3b75f3 --- /dev/null +++ b/1.21.1/gradlew @@ -0,0 +1,251 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/1.21.1/gradlew.bat b/1.21.1/gradlew.bat new file mode 100644 index 0000000..9d21a21 --- /dev/null +++ b/1.21.1/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/1.21.1/settings.gradle b/1.21.1/settings.gradle new file mode 100644 index 0000000..46f898f --- /dev/null +++ b/1.21.1/settings.gradle @@ -0,0 +1,5 @@ +plugins { + id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0' +} + +rootProject.name = 'examplemod' diff --git a/1.21.1/src/main/java/cz/kofolamod/KofolaMod.java b/1.21.1/src/main/java/cz/kofolamod/KofolaMod.java new file mode 100644 index 0000000..b8bd362 --- /dev/null +++ b/1.21.1/src/main/java/cz/kofolamod/KofolaMod.java @@ -0,0 +1,67 @@ +package cz.kofolamod; + +import cz.kofolamod.recipe.KofolaBrewingRecipe; +import cz.kofolamod.registry.ModBlocks; +import cz.kofolamod.registry.ModCreativeModeTabs; +import cz.kofolamod.registry.ModFluids; +import cz.kofolamod.registry.ModItems; +import net.minecraft.client.renderer.ItemBlockRenderTypes; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.world.item.CreativeModeTabs; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; +import net.minecraftforge.event.brewing.BrewingRecipeRegisterEvent; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Mod(KofolaMod.MOD_ID) +public class KofolaMod { + public static final String MOD_ID = "kofola"; + public static final Logger LOGGER = LoggerFactory.getLogger(KofolaMod.class); + + public KofolaMod(FMLJavaModLoadingContext context) { + IEventBus modEventBus = context.getModEventBus(); + + ModFluids.FLUID_TYPES.register(modEventBus); + ModFluids.FLUIDS.register(modEventBus); + ModBlocks.BLOCKS.register(modEventBus); + ModItems.ITEMS.register(modEventBus); + ModCreativeModeTabs.CREATIVE_MODE_TABS.register(modEventBus); + + modEventBus.addListener(this::addCreative); + + MinecraftForge.EVENT_BUS.register(this); + LOGGER.info("Kofola Mod (Forge 1.21.1) initialized! Kdyz ji milujes, neni co resit."); + } + + @SubscribeEvent + public void onBrewingRecipeRegister(BrewingRecipeRegisterEvent event) { + event.addRecipe(new KofolaBrewingRecipe()); + LOGGER.info("Kofola brewing recipes registered."); + } + + private void addCreative(BuildCreativeModeTabContentsEvent event) { + if (event.getTabKey() == CreativeModeTabs.FOOD_AND_DRINKS) { + event.accept(ModItems.KOFO_SYRUP); + event.accept(ModItems.KOFOLA_BOTTLE); + event.accept(ModItems.KOFOLA_CAN); + event.accept(ModItems.DRAFT_KOFOLA); + } + } + + @Mod.EventBusSubscriber(modid = MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) + public static class ClientModEvents { + @SubscribeEvent + public static void onClientSetup(FMLClientSetupEvent event) { + ItemBlockRenderTypes.setRenderLayer(ModFluids.KOFOLA_SOURCE.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(ModFluids.KOFOLA_FLOWING.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(ModBlocks.KOFOLA_CRATE.get(), RenderType.cutout()); + } + } +} diff --git a/1.21.1/src/main/java/cz/kofolamod/block/KofolaCrateBlock.java b/1.21.1/src/main/java/cz/kofolamod/block/KofolaCrateBlock.java new file mode 100644 index 0000000..0444eb3 --- /dev/null +++ b/1.21.1/src/main/java/cz/kofolamod/block/KofolaCrateBlock.java @@ -0,0 +1,45 @@ +package cz.kofolamod.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.Direction; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.material.MapColor; +import org.jetbrains.annotations.Nullable; + +public class KofolaCrateBlock extends HorizontalDirectionalBlock { + public static final MapCodec CODEC = simpleCodec(KofolaCrateBlock::new); + + public KofolaCrateBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH)); + } + + public KofolaCrateBlock() { + this(BlockBehaviour.Properties.of() + .mapColor(MapColor.WOOD) + .sound(SoundType.WOOD) + .strength(2.0F, 3.0F)); + } + + @Override + protected MapCodec codec() { + return CODEC; + } + + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite()); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(FACING); + } +} diff --git a/1.21.1/src/main/java/cz/kofolamod/compat/FarmersDelightCompat.java b/1.21.1/src/main/java/cz/kofolamod/compat/FarmersDelightCompat.java new file mode 100644 index 0000000..8d879e8 --- /dev/null +++ b/1.21.1/src/main/java/cz/kofolamod/compat/FarmersDelightCompat.java @@ -0,0 +1,41 @@ +package cz.kofolamod.compat; + +import net.minecraft.core.Holder; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.LivingEntity; +import net.minecraftforge.fml.ModList; +import net.minecraftforge.registries.ForgeRegistries; + +public class FarmersDelightCompat { + public static final String MOD_ID = "farmersdelight"; + + public static boolean isLoaded() { + return ModList.get().isLoaded(MOD_ID); + } + + public static void applyComfort(LivingEntity entity, int durationTicks) { + if (!isLoaded()) return; + + MobEffect comfortEffect = ForgeRegistries.MOB_EFFECTS.getValue(ResourceLocation.fromNamespaceAndPath(MOD_ID, "comfort")); + if (comfortEffect != null) { + Holder holder = ForgeRegistries.MOB_EFFECTS.getHolder(comfortEffect).orElse(null); + if (holder != null) { + entity.addEffect(new MobEffectInstance(holder, durationTicks, 0)); + } + } + } + + public static void applyNourishment(LivingEntity entity, int durationTicks) { + if (!isLoaded()) return; + + MobEffect nourishmentEffect = ForgeRegistries.MOB_EFFECTS.getValue(ResourceLocation.fromNamespaceAndPath(MOD_ID, "nourishment")); + if (nourishmentEffect != null) { + Holder holder = ForgeRegistries.MOB_EFFECTS.getHolder(nourishmentEffect).orElse(null); + if (holder != null) { + entity.addEffect(new MobEffectInstance(holder, durationTicks, 0)); + } + } + } +} diff --git a/1.21.1/src/main/java/cz/kofolamod/fluid/KofolaFluidType.java b/1.21.1/src/main/java/cz/kofolamod/fluid/KofolaFluidType.java new file mode 100644 index 0000000..9f64c10 --- /dev/null +++ b/1.21.1/src/main/java/cz/kofolamod/fluid/KofolaFluidType.java @@ -0,0 +1,48 @@ +package cz.kofolamod.fluid; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvents; +import net.minecraftforge.client.extensions.common.IClientFluidTypeExtensions; +import net.minecraftforge.common.SoundActions; +import net.minecraftforge.fluids.FluidType; + +import java.util.function.Consumer; + +public class KofolaFluidType extends FluidType { + private final ResourceLocation stillTexture; + private final ResourceLocation flowingTexture; + private final int tintColor; + + public KofolaFluidType(ResourceLocation stillTexture, ResourceLocation flowingTexture, int tintColor) { + super(FluidType.Properties.create() + .descriptionId("fluid_type.kofola.kofola_fluid") + .density(1050) + .viscosity(1100) + .sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL) + .sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY) + .sound(SoundActions.FLUID_VAPORIZE, SoundEvents.FIRE_EXTINGUISH)); + this.stillTexture = stillTexture; + this.flowingTexture = flowingTexture; + this.tintColor = tintColor; + } + + @Override + public void initializeClient(Consumer consumer) { + consumer.accept(new IClientFluidTypeExtensions() { + @Override + public ResourceLocation getStillTexture() { + return stillTexture; + } + + @Override + public ResourceLocation getFlowingTexture() { + return flowingTexture; + } + + @Override + public int getTintColor() { + return tintColor; + } + }); + } +} diff --git a/1.21.1/src/main/java/cz/kofolamod/item/DraftKofolaItem.java b/1.21.1/src/main/java/cz/kofolamod/item/DraftKofolaItem.java new file mode 100644 index 0000000..822b7d6 --- /dev/null +++ b/1.21.1/src/main/java/cz/kofolamod/item/DraftKofolaItem.java @@ -0,0 +1,92 @@ +package cz.kofolamod.item; + +import cz.kofolamod.compat.FarmersDelightCompat; +import cz.kofolamod.registry.ModFoods; +import net.minecraft.ChatFormatting; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.*; +import net.minecraft.world.level.Level; + +import java.util.List; + +public class DraftKofolaItem extends Item { + + public DraftKofolaItem() { + super(new Item.Properties() + .stacksTo(16) + .craftRemainder(Items.GLASS_BOTTLE) + .food(ModFoods.DRAFT_KOFOLA)); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity entity) { + super.finishUsingItem(stack, level, entity); + + if (!level.isClientSide) { + entity.removeEffect(MobEffects.MOVEMENT_SLOWDOWN); + entity.removeEffect(MobEffects.DIG_SLOWDOWN); + + FarmersDelightCompat.applyComfort(entity, 900); + FarmersDelightCompat.applyNourishment(entity, 600); + + if (entity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + } + + if (stack.isEmpty()) { + return new ItemStack(Items.GLASS_BOTTLE); + } else { + if (entity instanceof Player player && !player.getAbilities().instabuild) { + ItemStack bottle = new ItemStack(Items.GLASS_BOTTLE); + if (!player.getInventory().add(bottle)) { + player.drop(bottle, false); + } + } + return stack; + } + } + + @Override + public int getUseDuration(ItemStack stack, LivingEntity entity) { + return 32; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; + } + + @Override + public SoundEvent getDrinkingSound() { + return SoundEvents.HONEY_DRINK; + } + + @Override + public SoundEvent getEatingSound() { + return SoundEvents.HONEY_DRINK; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + return ItemUtils.startUsingInstantly(level, player, hand); + } + + @Override + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag flag) { + tooltip.add(Component.translatable("item.kofola.draft_kofola.desc").withStyle(ChatFormatting.GOLD, ChatFormatting.ITALIC)); + tooltip.add(Component.translatable("item.kofola.draft_kofola.effect").withStyle(ChatFormatting.AQUA)); + super.appendHoverText(stack, context, tooltip, flag); + } +} diff --git a/1.21.1/src/main/java/cz/kofolamod/item/KofoSyrupItem.java b/1.21.1/src/main/java/cz/kofolamod/item/KofoSyrupItem.java new file mode 100644 index 0000000..a7ffb46 --- /dev/null +++ b/1.21.1/src/main/java/cz/kofolamod/item/KofoSyrupItem.java @@ -0,0 +1,81 @@ +package cz.kofolamod.item; + +import cz.kofolamod.registry.ModFoods; +import net.minecraft.ChatFormatting; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.*; +import net.minecraft.world.level.Level; + +import java.util.List; + +public class KofoSyrupItem extends Item { + + public KofoSyrupItem() { + super(new Item.Properties() + .stacksTo(16) + .craftRemainder(Items.GLASS_BOTTLE) + .food(ModFoods.KOFO_SYRUP)); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity entity) { + super.finishUsingItem(stack, level, entity); + + if (!level.isClientSide && entity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.GLASS_BOTTLE); + } else { + if (entity instanceof Player player && !player.getAbilities().instabuild) { + ItemStack bottle = new ItemStack(Items.GLASS_BOTTLE); + if (!player.getInventory().add(bottle)) { + player.drop(bottle, false); + } + } + return stack; + } + } + + @Override + public int getUseDuration(ItemStack stack, LivingEntity entity) { + return 32; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; + } + + @Override + public SoundEvent getDrinkingSound() { + return SoundEvents.HONEY_DRINK; + } + + @Override + public SoundEvent getEatingSound() { + return SoundEvents.HONEY_DRINK; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + return ItemUtils.startUsingInstantly(level, player, hand); + } + + @Override + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag flag) { + tooltip.add(Component.translatable("item.kofola.kofo_syrup.desc").withStyle(ChatFormatting.DARK_GREEN, ChatFormatting.ITALIC)); + super.appendHoverText(stack, context, tooltip, flag); + } +} diff --git a/1.21.1/src/main/java/cz/kofolamod/item/KofolaBottleItem.java b/1.21.1/src/main/java/cz/kofolamod/item/KofolaBottleItem.java new file mode 100644 index 0000000..78efe6a --- /dev/null +++ b/1.21.1/src/main/java/cz/kofolamod/item/KofolaBottleItem.java @@ -0,0 +1,91 @@ +package cz.kofolamod.item; + +import cz.kofolamod.compat.FarmersDelightCompat; +import cz.kofolamod.registry.ModFoods; +import net.minecraft.ChatFormatting; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.*; +import net.minecraft.world.level.Level; + +import java.util.List; + +public class KofolaBottleItem extends Item { + + public KofolaBottleItem() { + super(new Item.Properties() + .stacksTo(16) + .craftRemainder(Items.GLASS_BOTTLE) + .food(ModFoods.KOFOLA_BOTTLE)); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity entity) { + super.finishUsingItem(stack, level, entity); + + if (!level.isClientSide) { + entity.removeEffect(MobEffects.MOVEMENT_SLOWDOWN); + entity.removeEffect(MobEffects.DIG_SLOWDOWN); + + FarmersDelightCompat.applyComfort(entity, 600); + + if (entity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + } + + if (stack.isEmpty()) { + return new ItemStack(Items.GLASS_BOTTLE); + } else { + if (entity instanceof Player player && !player.getAbilities().instabuild) { + ItemStack emptyBottle = new ItemStack(Items.GLASS_BOTTLE); + if (!player.getInventory().add(emptyBottle)) { + player.drop(emptyBottle, false); + } + } + return stack; + } + } + + @Override + public int getUseDuration(ItemStack stack, LivingEntity entity) { + return 32; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; + } + + @Override + public SoundEvent getDrinkingSound() { + return SoundEvents.HONEY_DRINK; + } + + @Override + public SoundEvent getEatingSound() { + return SoundEvents.HONEY_DRINK; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + return ItemUtils.startUsingInstantly(level, player, hand); + } + + @Override + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag flag) { + tooltip.add(Component.translatable("item.kofola.kofola_bottle.desc").withStyle(ChatFormatting.GOLD, ChatFormatting.ITALIC)); + tooltip.add(Component.translatable("item.kofola.kofola_bottle.effect").withStyle(ChatFormatting.BLUE)); + super.appendHoverText(stack, context, tooltip, flag); + } +} diff --git a/1.21.1/src/main/java/cz/kofolamod/item/KofolaCanItem.java b/1.21.1/src/main/java/cz/kofolamod/item/KofolaCanItem.java new file mode 100644 index 0000000..13d6ef1 --- /dev/null +++ b/1.21.1/src/main/java/cz/kofolamod/item/KofolaCanItem.java @@ -0,0 +1,80 @@ +package cz.kofolamod.item; + +import cz.kofolamod.registry.ModFoods; +import net.minecraft.ChatFormatting; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.stats.Stats; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.*; +import net.minecraft.world.level.Level; + +import java.util.List; + +public class KofolaCanItem extends Item { + + public KofolaCanItem() { + super(new Item.Properties() + .stacksTo(16) + .food(ModFoods.KOFOLA_CAN)); + } + + @Override + public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity entity) { + super.finishUsingItem(stack, level, entity); + + if (!level.isClientSide && entity instanceof ServerPlayer serverPlayer) { + CriteriaTriggers.CONSUME_ITEM.trigger(serverPlayer, stack); + serverPlayer.awardStat(Stats.ITEM_USED.get(this)); + } + + if (stack.isEmpty()) { + return new ItemStack(Items.IRON_NUGGET); + } else { + if (entity instanceof Player player && !player.getAbilities().instabuild) { + ItemStack nugget = new ItemStack(Items.IRON_NUGGET); + if (!player.getInventory().add(nugget)) { + player.drop(nugget, false); + } + } + return stack; + } + } + + @Override + public int getUseDuration(ItemStack stack, LivingEntity entity) { + return 20; + } + + @Override + public UseAnim getUseAnimation(ItemStack stack) { + return UseAnim.DRINK; + } + + @Override + public SoundEvent getDrinkingSound() { + return SoundEvents.GENERIC_DRINK; + } + + @Override + public SoundEvent getEatingSound() { + return SoundEvents.GENERIC_DRINK; + } + + @Override + public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { + return ItemUtils.startUsingInstantly(level, player, hand); + } + + @Override + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag flag) { + tooltip.add(Component.translatable("item.kofola.kofola_can.desc").withStyle(ChatFormatting.YELLOW, ChatFormatting.ITALIC)); + super.appendHoverText(stack, context, tooltip, flag); + } +} diff --git a/1.21.1/src/main/java/cz/kofolamod/recipe/KofolaBrewingRecipe.java b/1.21.1/src/main/java/cz/kofolamod/recipe/KofolaBrewingRecipe.java new file mode 100644 index 0000000..215699d --- /dev/null +++ b/1.21.1/src/main/java/cz/kofolamod/recipe/KofolaBrewingRecipe.java @@ -0,0 +1,34 @@ +package cz.kofolamod.recipe; + +import cz.kofolamod.registry.ModItems; +import net.minecraft.core.component.DataComponents; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.alchemy.PotionContents; +import net.minecraft.world.item.alchemy.Potions; +import net.minecraftforge.common.brewing.IBrewingRecipe; + +public class KofolaBrewingRecipe implements IBrewingRecipe { + + @Override + public boolean isInput(ItemStack input) { + if (!input.is(Items.POTION)) { + return false; + } + PotionContents contents = input.get(DataComponents.POTION_CONTENTS); + return contents != null && (contents.is(Potions.WATER) || contents.is(Potions.AWKWARD)); + } + + @Override + public boolean isIngredient(ItemStack ingredient) { + return ingredient.is(ModItems.KOFO_SYRUP.get()); + } + + @Override + public ItemStack getOutput(ItemStack input, ItemStack ingredient) { + if (isInput(input) && isIngredient(ingredient)) { + return new ItemStack(ModItems.KOFOLA_BOTTLE.get()); + } + return ItemStack.EMPTY; + } +} diff --git a/1.21.1/src/main/java/cz/kofolamod/registry/ModBlocks.java b/1.21.1/src/main/java/cz/kofolamod/registry/ModBlocks.java new file mode 100644 index 0000000..891fa2d --- /dev/null +++ b/1.21.1/src/main/java/cz/kofolamod/registry/ModBlocks.java @@ -0,0 +1,32 @@ +package cz.kofolamod.registry; + +import cz.kofolamod.KofolaMod; +import cz.kofolamod.block.KofolaCrateBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.material.MapColor; +import net.minecraft.world.level.material.PushReaction; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class ModBlocks { + public static final DeferredRegister BLOCKS = + DeferredRegister.create(ForgeRegistries.BLOCKS, KofolaMod.MOD_ID); + + public static final RegistryObject KOFOLA_CRATE = BLOCKS.register("kofola_crate", + KofolaCrateBlock::new); + + public static final RegistryObject KOFOLA_FLUID_BLOCK = BLOCKS.register("kofola_fluid", + () -> new LiquidBlock(ModFluids.KOFOLA_SOURCE.get(), BlockBehaviour.Properties.of() + .mapColor(MapColor.COLOR_BROWN) + .replaceable() + .noCollission() + .strength(100.0F) + .pushReaction(PushReaction.DESTROY) + .noLootTable() + .liquid() + .sound(SoundType.EMPTY))); +} diff --git a/1.21.1/src/main/java/cz/kofolamod/registry/ModCreativeModeTabs.java b/1.21.1/src/main/java/cz/kofolamod/registry/ModCreativeModeTabs.java new file mode 100644 index 0000000..e622bff --- /dev/null +++ b/1.21.1/src/main/java/cz/kofolamod/registry/ModCreativeModeTabs.java @@ -0,0 +1,28 @@ +package cz.kofolamod.registry; + +import cz.kofolamod.KofolaMod; +import net.minecraft.core.registries.Registries; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.RegistryObject; + +public class ModCreativeModeTabs { + public static final DeferredRegister CREATIVE_MODE_TABS = + DeferredRegister.create(Registries.CREATIVE_MODE_TAB, KofolaMod.MOD_ID); + + public static final RegistryObject KOFOLA_TAB = CREATIVE_MODE_TABS.register("kofola_tab", + () -> CreativeModeTab.builder() + .icon(() -> new ItemStack(ModItems.KOFOLA_BOTTLE.get())) + .title(Component.translatable("itemGroup.kofola_tab")) + .displayItems((parameters, output) -> { + output.accept(ModItems.KOFO_SYRUP.get()); + output.accept(ModItems.KOFOLA_BOTTLE.get()); + output.accept(ModItems.KOFOLA_CAN.get()); + output.accept(ModItems.DRAFT_KOFOLA.get()); + output.accept(ModItems.KOFOLA_BUCKET.get()); + output.accept(ModItems.KOFOLA_CRATE.get()); + }) + .build()); +} diff --git a/1.21.1/src/main/java/cz/kofolamod/registry/ModFluids.java b/1.21.1/src/main/java/cz/kofolamod/registry/ModFluids.java new file mode 100644 index 0000000..5d067c0 --- /dev/null +++ b/1.21.1/src/main/java/cz/kofolamod/registry/ModFluids.java @@ -0,0 +1,39 @@ +package cz.kofolamod.registry; + +import cz.kofolamod.KofolaMod; +import cz.kofolamod.fluid.KofolaFluidType; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.material.FlowingFluid; +import net.minecraft.world.level.material.Fluid; +import net.minecraftforge.fluids.FluidType; +import net.minecraftforge.fluids.ForgeFlowingFluid; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class ModFluids { + public static final DeferredRegister FLUID_TYPES = + DeferredRegister.create(ForgeRegistries.Keys.FLUID_TYPES, KofolaMod.MOD_ID); + + public static final DeferredRegister FLUIDS = + DeferredRegister.create(ForgeRegistries.FLUIDS, KofolaMod.MOD_ID); + + public static final RegistryObject KOFOLA_FLUID_TYPE = FLUID_TYPES.register("kofola_fluid", + () -> new KofolaFluidType( + ResourceLocation.fromNamespaceAndPath(KofolaMod.MOD_ID, "block/kofola_still"), + ResourceLocation.fromNamespaceAndPath(KofolaMod.MOD_ID, "block/kofola_flow"), + 0xFFFFFFFF + )); + + public static final RegistryObject KOFOLA_SOURCE = FLUIDS.register("kofola_fluid", + () -> new ForgeFlowingFluid.Source(ModFluids.KOFOLA_PROPERTIES)); + + public static final RegistryObject KOFOLA_FLOWING = FLUIDS.register("flowing_kofola_fluid", + () -> new ForgeFlowingFluid.Flowing(ModFluids.KOFOLA_PROPERTIES)); + + public static final ForgeFlowingFluid.Properties KOFOLA_PROPERTIES = new ForgeFlowingFluid.Properties( + KOFOLA_FLUID_TYPE, + KOFOLA_SOURCE, + KOFOLA_FLOWING + ).slopeFindDistance(4).levelDecreasePerBlock(1).block(ModBlocks.KOFOLA_FLUID_BLOCK).bucket(ModItems.KOFOLA_BUCKET); +} diff --git a/1.21.1/src/main/java/cz/kofolamod/registry/ModFoods.java b/1.21.1/src/main/java/cz/kofolamod/registry/ModFoods.java new file mode 100644 index 0000000..eba78e6 --- /dev/null +++ b/1.21.1/src/main/java/cz/kofolamod/registry/ModFoods.java @@ -0,0 +1,40 @@ +package cz.kofolamod.registry; + +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.food.FoodProperties; + +public class ModFoods { + public static final FoodProperties KOFOLA_BOTTLE = new FoodProperties.Builder() + .nutrition(6) + .saturationModifier(0.7F) + .alwaysEdible() + .effect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, 600, 0), 1.0F) + .effect(new MobEffectInstance(MobEffects.DIG_SPEED, 900, 0), 1.0F) + .build(); + + public static final FoodProperties KOFOLA_CAN = new FoodProperties.Builder() + .nutrition(5) + .saturationModifier(0.6F) + .alwaysEdible() + .effect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, 500, 0), 1.0F) + .effect(new MobEffectInstance(MobEffects.DIG_SPEED, 600, 0), 1.0F) + .build(); + + public static final FoodProperties DRAFT_KOFOLA = new FoodProperties.Builder() + .nutrition(8) + .saturationModifier(0.8F) + .alwaysEdible() + .effect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, 600, 1), 1.0F) + .effect(new MobEffectInstance(MobEffects.DIG_SPEED, 900, 1), 1.0F) + .effect(new MobEffectInstance(MobEffects.REGENERATION, 300, 0), 1.0F) + .build(); + + public static final FoodProperties KOFO_SYRUP = new FoodProperties.Builder() + .nutrition(3) + .saturationModifier(0.3F) + .alwaysEdible() + .effect(new MobEffectInstance(MobEffects.DIG_SPEED, 1200, 1), 1.0F) + .effect(new MobEffectInstance(MobEffects.CONFUSION, 100, 0), 0.7F) + .build(); +} diff --git a/1.21.1/src/main/java/cz/kofolamod/registry/ModItems.java b/1.21.1/src/main/java/cz/kofolamod/registry/ModItems.java new file mode 100644 index 0000000..ed6f567 --- /dev/null +++ b/1.21.1/src/main/java/cz/kofolamod/registry/ModItems.java @@ -0,0 +1,38 @@ +package cz.kofolamod.registry; + +import cz.kofolamod.KofolaMod; +import cz.kofolamod.item.DraftKofolaItem; +import cz.kofolamod.item.KofoSyrupItem; +import cz.kofolamod.item.KofolaBottleItem; +import cz.kofolamod.item.KofolaCanItem; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.BucketItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class ModItems { + public static final DeferredRegister ITEMS = + DeferredRegister.create(ForgeRegistries.ITEMS, KofolaMod.MOD_ID); + + public static final RegistryObject KOFO_SYRUP = ITEMS.register("kofo_syrup", + KofoSyrupItem::new); + + public static final RegistryObject KOFOLA_BOTTLE = ITEMS.register("kofola_bottle", + KofolaBottleItem::new); + + public static final RegistryObject KOFOLA_CAN = ITEMS.register("kofola_can", + KofolaCanItem::new); + + public static final RegistryObject DRAFT_KOFOLA = ITEMS.register("draft_kofola", + DraftKofolaItem::new); + + public static final RegistryObject KOFOLA_BUCKET = ITEMS.register("kofola_bucket", + () -> new BucketItem(ModFluids.KOFOLA_SOURCE.get(), + new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); + + public static final RegistryObject KOFOLA_CRATE = ITEMS.register("kofola_crate", + () -> new BlockItem(ModBlocks.KOFOLA_CRATE.get(), new Item.Properties())); +} diff --git a/1.21.1/src/main/resources/META-INF/mods.toml b/1.21.1/src/main/resources/META-INF/mods.toml new file mode 100644 index 0000000..d785436 --- /dev/null +++ b/1.21.1/src/main/resources/META-INF/mods.toml @@ -0,0 +1,39 @@ +modLoader="javafml" +loaderVersion="[0,)" +license="MIT" + +[[mods]] +modId="kofola" +version="1.0.1" +displayName="Kofola Mod" +logoFile="icon.png" +authors="Dominik" +description='''Pravá Kofola do Minecraftu 1.21.1! Přidává láhev Kofoly, plechovku, točenou Kofolu, sirup KOFO, přepravku a tekutou Kofolu s kompatibilitou pro Farmer's Delight a Create.''' + +[[dependencies.kofola]] + modId="forge" + mandatory=true + versionRange="[0,)" + ordering="NONE" + side="BOTH" + +[[dependencies.kofola]] + modId="minecraft" + mandatory=true + versionRange="[1.21.1,1.22)" + ordering="NONE" + side="BOTH" + +[[dependencies.kofola]] + modId="farmersdelight" + mandatory=false + versionRange="[1.21.1-1.0.0,)" + ordering="AFTER" + side="BOTH" + +[[dependencies.kofola]] + modId="create" + mandatory=false + versionRange="[0.5.1,)" + ordering="AFTER" + side="BOTH" diff --git a/1.21.1/src/main/resources/assets/kofola/blockstates/kofola_crate.json b/1.21.1/src/main/resources/assets/kofola/blockstates/kofola_crate.json new file mode 100644 index 0000000..e9da639 --- /dev/null +++ b/1.21.1/src/main/resources/assets/kofola/blockstates/kofola_crate.json @@ -0,0 +1,8 @@ +{ + "variants": { + "facing=north": { "model": "kofola:block/kofola_crate" }, + "facing=south": { "model": "kofola:block/kofola_crate", "y": 180 }, + "facing=west": { "model": "kofola:block/kofola_crate", "y": 270 }, + "facing=east": { "model": "kofola:block/kofola_crate", "y": 90 } + } +} diff --git a/1.21.1/src/main/resources/assets/kofola/lang/cs_cz.json b/1.21.1/src/main/resources/assets/kofola/lang/cs_cz.json new file mode 100644 index 0000000..bdd6d98 --- /dev/null +++ b/1.21.1/src/main/resources/assets/kofola/lang/cs_cz.json @@ -0,0 +1,22 @@ +{ + "itemGroup.kofola_tab": "Kofola", + + "item.kofola.kofola_bottle": "Láhev Kofoly", + "item.kofola.kofola_bottle.desc": "Když ji miluješ, není co řešit.", + "item.kofola.kofola_bottle.effect": "Dodává Rychlost, Spěch a zahání únavu", + + "item.kofola.kofola_can": "Plechovka Kofoly", + "item.kofola.kofola_can.desc": "Rychlé osvěžení na cesty.", + + "item.kofola.draft_kofola": "Točená Kofola", + "item.kofola.draft_kofola.desc": "Poctivě vychlazená s jemnou pěnou.", + "item.kofola.draft_kofola.effect": "Poskytuje silnou regeneraci a vitalitu", + + "item.kofola.kofo_syrup": "Sirup KOFO", + "item.kofola.kofo_syrup.desc": "Originální bylinkový extrakt ze 14 ingrediencí.", + + "item.kofola.kofola_bucket": "Kbelík Kofoly", + "block.kofola.kofola_crate": "Přepravka Kofoly", + "block.kofola.kofola_fluid": "Kofola", + "fluid_type.kofola.kofola_fluid": "Kofola" +} diff --git a/1.21.1/src/main/resources/assets/kofola/lang/de_de.json b/1.21.1/src/main/resources/assets/kofola/lang/de_de.json new file mode 100644 index 0000000..3b40611 --- /dev/null +++ b/1.21.1/src/main/resources/assets/kofola/lang/de_de.json @@ -0,0 +1,22 @@ +{ + "itemGroup.kofola_tab": "Kofola", + + "item.kofola.kofola_bottle": "Flasche Kofola", + "item.kofola.kofola_bottle.desc": "Wenn du sie liebst, gibt es nichts zu bereden.", + "item.kofola.kofola_bottle.effect": "Verleiht Schnelligkeit, Eile und heilt Müdigkeit", + + "item.kofola.kofola_can": "Dose Kofola", + "item.kofola.kofola_can.desc": "Schnelle Erfrischung für unterwegs.", + + "item.kofola.draft_kofola": "Gezapfte Kofola", + "item.kofola.draft_kofola.desc": "Perfekt gekühlt mit feiner Schaumkrone.", + "item.kofola.draft_kofola.effect": "Verleiht starke Regeneration und Vitalität", + + "item.kofola.kofo_syrup": "KOFO-Sirup", + "item.kofola.kofo_syrup.desc": "Original Kräuterextrakt aus 14 Zutaten.", + + "item.kofola.kofola_bucket": "Kofola-Eimer", + "block.kofola.kofola_crate": "Kofola-Kiste", + "block.kofola.kofola_fluid": "Kofola", + "fluid_type.kofola.kofola_fluid": "Kofola" +} diff --git a/1.21.1/src/main/resources/assets/kofola/lang/en_us.json b/1.21.1/src/main/resources/assets/kofola/lang/en_us.json new file mode 100644 index 0000000..1abdedc --- /dev/null +++ b/1.21.1/src/main/resources/assets/kofola/lang/en_us.json @@ -0,0 +1,22 @@ +{ + "itemGroup.kofola_tab": "Kofola", + + "item.kofola.kofola_bottle": "Bottle of Kofola", + "item.kofola.kofola_bottle.desc": "When you love it, there's nothing to question.", + "item.kofola.kofola_bottle.effect": "Grants Speed, Haste and cures fatigue", + + "item.kofola.kofola_can": "Can of Kofola", + "item.kofola.kofola_can.desc": "Fast refreshing drink on the go.", + + "item.kofola.draft_kofola": "Draft Kofola", + "item.kofola.draft_kofola.desc": "Chilled to perfection with creamy foam.", + "item.kofola.draft_kofola.effect": "Grants superior regeneration and vitality", + + "item.kofola.kofo_syrup": "KOFO Syrup", + "item.kofola.kofo_syrup.desc": "Original herbal extract made from 14 ingredients.", + + "item.kofola.kofola_bucket": "Kofola Bucket", + "block.kofola.kofola_crate": "Kofola Crate", + "block.kofola.kofola_fluid": "Kofola", + "fluid_type.kofola.kofola_fluid": "Kofola" +} diff --git a/1.21.1/src/main/resources/assets/kofola/lang/pl_pl.json b/1.21.1/src/main/resources/assets/kofola/lang/pl_pl.json new file mode 100644 index 0000000..10321ba --- /dev/null +++ b/1.21.1/src/main/resources/assets/kofola/lang/pl_pl.json @@ -0,0 +1,22 @@ +{ + "itemGroup.kofola_tab": "Kofola", + + "item.kofola.kofola_bottle": "Butelka Kofoli", + "item.kofola.kofola_bottle.desc": "Gdy ją kochasz, nie ma o czym gadać.", + "item.kofola.kofola_bottle.effect": "Daje Szybkość, Pośpiech i usuwa zmęczenie", + + "item.kofola.kofola_can": "Puszka Kofoli", + "item.kofola.kofola_can.desc": "Szybkie orzeźwienie w podróży.", + + "item.kofola.draft_kofola": "Kofola z Nalewaka", + "item.kofola.draft_kofola.desc": "Schłodzona do perfekcji z aksamitną pianką.", + "item.kofola.draft_kofola.effect": "Zapewnia silną regenerację i energię", + + "item.kofola.kofo_syrup": "Syrop KOFO", + "item.kofola.kofo_syrup.desc": "Oryginalny ekstrakt ziołowy z 14 składników.", + + "item.kofola.kofola_bucket": "Wiadro Kofoli", + "block.kofola.kofola_crate": "Skrzynka Kofoli", + "block.kofola.kofola_fluid": "Kofola", + "fluid_type.kofola.kofola_fluid": "Kofola" +} diff --git a/1.21.1/src/main/resources/assets/kofola/lang/sk_sk.json b/1.21.1/src/main/resources/assets/kofola/lang/sk_sk.json new file mode 100644 index 0000000..3a6d445 --- /dev/null +++ b/1.21.1/src/main/resources/assets/kofola/lang/sk_sk.json @@ -0,0 +1,22 @@ +{ + "itemGroup.kofola_tab": "Kofola", + + "item.kofola.kofola_bottle": "Fľaša Kofoly", + "item.kofola.kofola_bottle.desc": "Keď ju miluješ, niet čo riešiť.", + "item.kofola.kofola_bottle.effect": "Dodáva Rýchlosť, Náhlenie a zaháňa únavu", + + "item.kofola.kofola_can": "Plechovka Kofoly", + "item.kofola.kofola_can.desc": "Rýchle osvieženie na cesty.", + + "item.kofola.draft_kofola": "Čapovaná Kofola", + "item.kofola.draft_kofola.desc": "Poctivo vychladená s jemnou penou.", + "item.kofola.draft_kofola.effect": "Poskytuje silnú regeneráciu a vitalitu", + + "item.kofola.kofo_syrup": "Sirup KOFO", + "item.kofola.kofo_syrup.desc": "Originálny bylinkový extrakt zo 14 ingrediencií.", + + "item.kofola.kofola_bucket": "Vedro Kofoly", + "block.kofola.kofola_crate": "Prepravka Kofoly", + "block.kofola.kofola_fluid": "Kofola", + "fluid_type.kofola.kofola_fluid": "Kofola" +} diff --git a/1.21.1/src/main/resources/assets/kofola/models/block/kofola_crate.json b/1.21.1/src/main/resources/assets/kofola/models/block/kofola_crate.json new file mode 100644 index 0000000..db7442c --- /dev/null +++ b/1.21.1/src/main/resources/assets/kofola/models/block/kofola_crate.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "particle": "kofola:block/kofola_crate_side", + "down": "kofola:block/kofola_crate_bottom", + "up": "kofola:block/kofola_crate_top", + "north": "kofola:block/kofola_crate_front", + "south": "kofola:block/kofola_crate_front", + "east": "kofola:block/kofola_crate_side", + "west": "kofola:block/kofola_crate_side" + } +} diff --git a/1.21.1/src/main/resources/assets/kofola/models/item/draft_kofola.json b/1.21.1/src/main/resources/assets/kofola/models/item/draft_kofola.json new file mode 100644 index 0000000..174ef40 --- /dev/null +++ b/1.21.1/src/main/resources/assets/kofola/models/item/draft_kofola.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "kofola:item/draft_kofola" + } +} diff --git a/1.21.1/src/main/resources/assets/kofola/models/item/kofo_syrup.json b/1.21.1/src/main/resources/assets/kofola/models/item/kofo_syrup.json new file mode 100644 index 0000000..fe7929e --- /dev/null +++ b/1.21.1/src/main/resources/assets/kofola/models/item/kofo_syrup.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "kofola:item/kofo_syrup" + } +} diff --git a/1.21.1/src/main/resources/assets/kofola/models/item/kofola_bottle.json b/1.21.1/src/main/resources/assets/kofola/models/item/kofola_bottle.json new file mode 100644 index 0000000..ff66c5d --- /dev/null +++ b/1.21.1/src/main/resources/assets/kofola/models/item/kofola_bottle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "kofola:item/kofola_bottle" + } +} diff --git a/1.21.1/src/main/resources/assets/kofola/models/item/kofola_bucket.json b/1.21.1/src/main/resources/assets/kofola/models/item/kofola_bucket.json new file mode 100644 index 0000000..8b92a68 --- /dev/null +++ b/1.21.1/src/main/resources/assets/kofola/models/item/kofola_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "kofola:item/kofola_bucket" + } +} diff --git a/1.21.1/src/main/resources/assets/kofola/models/item/kofola_can.json b/1.21.1/src/main/resources/assets/kofola/models/item/kofola_can.json new file mode 100644 index 0000000..e2e1efc --- /dev/null +++ b/1.21.1/src/main/resources/assets/kofola/models/item/kofola_can.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "kofola:item/kofola_can" + } +} diff --git a/1.21.1/src/main/resources/assets/kofola/models/item/kofola_crate.json b/1.21.1/src/main/resources/assets/kofola/models/item/kofola_crate.json new file mode 100644 index 0000000..33393e5 --- /dev/null +++ b/1.21.1/src/main/resources/assets/kofola/models/item/kofola_crate.json @@ -0,0 +1,3 @@ +{ + "parent": "kofola:block/kofola_crate" +} diff --git a/1.21.1/src/main/resources/assets/kofola/textures/block/kofola_crate_bottom.png b/1.21.1/src/main/resources/assets/kofola/textures/block/kofola_crate_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..93c08a48775fdbcc75e55e7c08f6bb24171f2ea6 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`A)YRdAr*6yw}grPJMX}lz$hqY z^@(Sa&?27m@q5%d(-~oG9C~wd516 N22WQ%mvv4FO#n3>PVoQ$ literal 0 HcmV?d00001 diff --git a/1.21.1/src/main/resources/assets/kofola/textures/block/kofola_crate_side.png b/1.21.1/src/main/resources/assets/kofola/textures/block/kofola_crate_side.png new file mode 100644 index 0000000000000000000000000000000000000000..56bf62d13984d5332a38731458d42f58ef6d8385 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`9iA?ZAr*6yc{T_9Iq$%jz$m!s zQ4`N3p+!9BbP0l+XkK(X~Oh literal 0 HcmV?d00001 diff --git a/1.21.1/src/main/resources/assets/kofola/textures/block/kofola_crate_top.png b/1.21.1/src/main/resources/assets/kofola/textures/block/kofola_crate_top.png new file mode 100644 index 0000000000000000000000000000000000000000..dda10e596b574b63f88aaf8fcfa2f6cfaba758c0 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`v7RoDAr*6yc{T_9Iq$%jz$iF9 z-`-hJMCd_c#rKEYfk{3*B1~!$k8j<~YRhi72~g=2Om5n|Z(eGG#a_Xy6-q}W92+eb yBpzTg=9CrCKIS4SzDN1e{>3jF(kCoqW_WrsFVdQ&MBb@08t5C?f?J) literal 0 HcmV?d00001 diff --git a/1.21.1/src/main/resources/assets/kofola/textures/block/kofola_still.png b/1.21.1/src/main/resources/assets/kofola/textures/block/kofola_still.png new file mode 100644 index 0000000000000000000000000000000000000000..2eae175f231e8fc423cbd437f6a39437fd5fc071 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`b3I)gLn`JZzu~?3W5c5l&H3y1 z|4qCg^faa7?^p9?4Rh@oZJn{ze`WR9g@m6bHJ&!~y;u2M+Jo8S!cC7^-HnZmYZ%qo zm=vVc*q%8*bx86tVB?sOEFo+b>}lB3IYF3H@|a6k{YD^}_uwE;vXc3Sgd(3OY;tZA z4GflTh7+YL3=YrOFw?6m(PxTE@&<7Y&tnf9RLnmZ7zyt*WMn7}ycX4bbXpG3p$wj` KelF{r5}E)-Sxr9x literal 0 HcmV?d00001 diff --git a/1.21.1/src/main/resources/assets/kofola/textures/item/draft_kofola.png b/1.21.1/src/main/resources/assets/kofola/textures/item/draft_kofola.png new file mode 100644 index 0000000000000000000000000000000000000000..6498031ed3708a593ae3be3eb68eddb8aa6c363e GIT binary patch literal 292 zcmV+<0o(qGP)?5+G%_2PdM0Gf*VhmKBh%mBy#Z^6(bx=NLFT-?f1N>`K@&_f+-G1ASJVU> z0^<`j;QfooV2sQs8ieFk-TD9j|1&=ozW)}IT>q7LS>QAXgX9T@0SwG4@?yXSKo+1I z#DvW8SLK%k(P@3#uo}e3$S4If2&)0eU_)I1+#q~_37NC;_Q&Tic0khxf|@Z50D+ct zHwIh)=6{%1Frv{P8V1M!voO+ literal 0 HcmV?d00001 diff --git a/1.21.1/src/main/resources/assets/kofola/textures/item/kofo_syrup.png b/1.21.1/src/main/resources/assets/kofola/textures/item/kofo_syrup.png new file mode 100644 index 0000000000000000000000000000000000000000..9856334eddfc6e8b42650f40eb960ccbe2fbc926 GIT binary patch literal 258 zcmV+d0sa1oP)j@<}*(pzIpiRCyF@#zu(H(3}L}$YLdF5`IX~73_b6DGn_i{ zl;Mh(0)vj_7ShAu)QP7IW){-;lrUg5VBXF9CqeWoF9n7YAy&KwuwWAec>xp#FMs@F z5a(cm(?q*~6u^j05EO0L#NYh-kD(r`0U&@LWlui*P{F1U0J?QWS+LSV<^TWy07*qo IM6N<$f*9Ry+5i9m literal 0 HcmV?d00001 diff --git a/1.21.1/src/main/resources/assets/kofola/textures/item/kofola_bottle.png b/1.21.1/src/main/resources/assets/kofola/textures/item/kofola_bottle.png new file mode 100644 index 0000000000000000000000000000000000000000..dd00a872967cee657f47e9e4f50bcbe081c3b063 GIT binary patch literal 266 zcmV+l0rmcgP)c|O)V55E7}Vj;=(AH*iv1;hd-e3JS4 zV%`)PKn!5QCJ6Ggfdsem%g?{SeCGfEm2rgw6E@8UUw*xTE{@9(CI)H)c|O)V{}(X) z|9_DEzn>ZhI3a=9ATiQhAmYKWarS=(|G=GKHZH(|P4Hp(udSdceEFFf%vZM93Q@|4 zsTQjXh>3rk20Z-qTjj!wuXkbmS6?7e`InLLE=UetJr+kn0D6F7(+rXT0N7hpNrc8I Qo&W#<07*qoM6N<$f_YtZ=Kufz literal 0 HcmV?d00001 diff --git a/1.21.1/src/main/resources/assets/kofola/textures/item/kofola_bucket.png b/1.21.1/src/main/resources/assets/kofola/textures/item/kofola_bucket.png new file mode 100644 index 0000000000000000000000000000000000000000..79a4caf5aa7b8a5621c047c283addf2293d8c384 GIT binary patch literal 366 zcmV-!0g?WRP)Ohtyu&U2uVV4>RpiI1;FGs#@17T;p&(B@-9O*`@ldqq3kR*0D|3R*AqA2<^fyNOE zFvg@X46AjLB*Nsy0oEUq+ze`t(X6<11X89eY>Lngh^iBvf2PiS0`Ucdm7{!&B>(^b M07*qoM6N<$f?>a(SpWb4 literal 0 HcmV?d00001 diff --git a/1.21.1/src/main/resources/assets/kofola/textures/item/kofola_can.png b/1.21.1/src/main/resources/assets/kofola/textures/item/kofola_can.png new file mode 100644 index 0000000000000000000000000000000000000000..37c71195efc6689602aef8f5a06ee37944e5fdc7 GIT binary patch literal 270 zcmV+p0rCEcP)goq$kwM^IqtC~8%nopcQ%K)QcVgy~_7aILv;Qd{O3%Bkwy!-we zEGERs3T7KQcrt8Sy_6BJ3(g(bj>}hA<(L>K1WXLn1~Q^T|Nr+h{Qv);>Hq(O><|p% z_cQzl$&uuOysUo=4D!`@Eo8zcIcaMxL!Ngt`35jNY-N}<4ZjjbbODe*o%GePrUMXo z^7$rt*!z?JeKPE>3wg>g~ zV!A#(tcqn48#f=g^n+!18lXi@2ROni6r@{>PmjjDZ*HJ`s3cj6aEVT*;63|OV| zk)NUJIp(XL?VWE97ZQBLQK+DldaTNN&CkodsknZxzfNSGnaF;I6Z(u!bIw;CI{0(T^lRKQecmh2 zU+1rWshU>P?0g%AEiJ literal 0 HcmV?d00001 diff --git a/1.21.1/src/main/resources/pack.mcmeta b/1.21.1/src/main/resources/pack.mcmeta new file mode 100644 index 0000000..c90cc59 --- /dev/null +++ b/1.21.1/src/main/resources/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "description": "Kofola Mod Resources", + "pack_format": 34 + } +} diff --git a/dist/kofola-1.19.2-1.0.1.jar b/dist/kofola-1.19.2-1.0.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..c87458d3d9c43862f830089de48f09101949798c GIT binary patch literal 49504 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

cl|muv$H$4-@bnw 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±rT?Wge1zAM+TGdTt* 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 M07*qoM6N<$f(4zQ7ytkO literal 0 HcmV?d00001 diff --git a/update_bucket_texture.py b/update_bucket_texture.py new file mode 100644 index 0000000..e1550c6 --- /dev/null +++ b/update_bucket_texture.py @@ -0,0 +1,87 @@ +import os, zipfile, io +from PIL import Image + +client_jar = r'1.21.1\.gradle\mavenizer\repo\net\minecraft\client-extra\1.21.1-20240808.132146\client-extra-1.21.1-20240808.132146.jar' +with zipfile.ZipFile(client_jar) as z: + wb_data = z.read('assets/minecraft/textures/item/water_bucket.png') + +wb = Image.open(io.BytesIO(wb_data)).convert('RGBA') + +# Create fixed kofola bucket +kb = wb.copy() +kbp = kb.load() + +liquid_coords = [ + # Row 3 (top liquid layer) + (4, 3, (42, 17, 5, 255)), + (5, 3, (61, 28, 8, 255)), + (6, 3, (245, 222, 192, 255)), # foam speck + (7, 3, (88, 43, 16, 255)), + (8, 3, (74, 35, 12, 255)), + (9, 3, (224, 191, 154, 255)), # foam speck + (10, 3, (61, 28, 8, 255)), + (11, 3, (42, 17, 5, 255)), + # Row 4 (middle liquid layer) + (3, 4, (36, 14, 4, 255)), + (4, 4, (74, 35, 12, 255)), + (5, 4, (106, 55, 22, 255)), + (6, 4, (135, 76, 35, 255)), # bubble reflection + (7, 4, (88, 43, 16, 255)), + (8, 4, (74, 35, 12, 255)), + (9, 4, (118, 63, 27, 255)), + (10, 4, (74, 35, 12, 255)), + (11, 4, (61, 28, 8, 255)), + (12, 4, (36, 14, 4, 255)), + # Row 5 (bottom liquid layer) + (5, 5, (42, 17, 5, 255)), + (6, 5, (61, 28, 8, 255)), + (7, 5, (74, 35, 12, 255)), + (8, 5, (74, 35, 12, 255)), + (9, 5, (61, 28, 8, 255)), + (10, 5, (42, 17, 5, 255)), +] + +for x, y, col in liquid_coords: + kbp[x, y] = col + +# Save to all texture locations +destinations = [ + r'src\main\resources\assets\kofola\textures\item\kofola_bucket.png', + r'1.19.2\src\main\resources\assets\kofola\textures\item\kofola_bucket.png', + r'1.21.1\src\main\resources\assets\kofola\textures\item\kofola_bucket.png', +] + +for dst in destinations: + kb.save(dst) + print(f'Saved: {dst}') + +# Generate comparison image +artifact_dir = r'C:\Users\Dominik\.gemini\antigravity\brain\1a86ea23-89fd-4192-accd-1ecdc8465aaa' +old_img_path = os.path.join(artifact_dir, '.user_uploaded', 'media_1794768442970_e521b389.png') +old_img = Image.open(old_img_path).convert('RGBA') + +# Scale new image to 128x128 +new_scaled = kb.resize((128, 128), Image.NEAREST) +old_scaled = old_img.resize((128, 128), Image.NEAREST) + +comp_canvas = Image.new('RGBA', (128 * 2 + 60, 128 + 40), (28, 28, 34, 255)) +comp_canvas.paste(old_scaled, (20, 20), old_scaled) +comp_canvas.paste(new_scaled, (20 + 128 + 20, 20), new_scaled) +comp_path = os.path.join(artifact_dir, 'kofola_bucket_comparison.png') +comp_canvas.save(comp_path) +print(f'Comparison image saved to: {comp_path}') + +# Also update showcase image in artifact directory +items = ['kofola_bottle.png', 'kofola_can.png', 'draft_kofola.png', 'kofo_syrup.png', 'kofola_bucket.png'] +base_path = r'src\main\resources\assets\kofola\textures\item' +canvas = Image.new('RGBA', (16 * 8 * len(items) + 40, 16 * 8 + 40), (32, 24, 20, 255)) +x_off = 20 +for item_name in items: + p = os.path.join(base_path, item_name) + im = Image.open(p).convert('RGBA') + im_scaled = im.resize((128, 128), Image.NEAREST) + canvas.paste(im_scaled, (x_off, 20), im_scaled) + x_off += 128 + 8 + +canvas.save(os.path.join(artifact_dir, 'kofola_showcase.png')) +print('Showcase updated!')