From dd42e078aca7000f0b5bcd801a1381a4c887ff1e Mon Sep 17 00:00:00 2001 From: zxq5 Date: Thu, 18 Jun 2026 09:15:06 +0100 Subject: [PATCH] initial commit --- .gitattributes | 9 + .github/workflows/build.yml | 30 +++ .gitignore | 40 +++ LICENSE | 121 +++++++++ README.md | 9 + build.gradle.kts | 101 +++++++ gradle.properties | 21 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 48966 bytes gradle/wrapper/gradle-wrapper.properties | 7 + gradlew | 248 ++++++++++++++++++ gradlew.bat | 93 +++++++ settings.gradle.kts | 17 ++ .../zxq5/client/mixin/ExampleClientMixin.java | 15 ++ .../dev/zxq5/client/FantasysmpClient.kt | 9 + .../zxq5/client/FantasysmpDataGenerator.kt | 9 + .../resources/fantasysmp.client.mixins.json | 14 + .../java/dev/zxq5/mixin/ExampleMixin.java | 15 ++ src/main/kotlin/dev/zxq5/Fantasysmp.kt | 26 ++ src/main/kotlin/dev/zxq5/items/Items.kt | 53 ++++ src/main/kotlin/dev/zxq5/items/Witherite.kt | 96 +++++++ .../fantasysmp/equipment/alchemist.json | 14 + .../assets/fantasysmp/equipment/blazing.json | 14 + .../assets/fantasysmp/equipment/crimson.json | 14 + .../assets/fantasysmp/equipment/dragon.json | 20 ++ .../assets/fantasysmp/equipment/ender.json | 14 + .../fantasysmp/equipment/mechanist.json | 14 + .../assets/fantasysmp/equipment/poseidon.json | 14 + .../fantasysmp/equipment/true_netherite.json | 14 + .../fantasysmp/equipment/witherite.json | 14 + src/main/resources/assets/fantasysmp/icon.png | Bin 0 -> 3636 bytes .../fantasysmp/items/alchemist_boots.json | 6 + .../items/alchemist_chestplate.json | 6 + .../fantasysmp/items/alchemist_helmet.json | 6 + .../fantasysmp/items/alchemist_leggings.json | 6 + .../fantasysmp/items/alchemist_sword.json | 6 + .../fantasysmp/items/blazing_boots.json | 6 + .../fantasysmp/items/blazing_chestplate.json | 6 + .../fantasysmp/items/blazing_helmet.json | 6 + .../fantasysmp/items/blazing_leggings.json | 6 + .../fantasysmp/items/blazing_sword.json | 6 + .../fantasysmp/items/crimson_sword.json | 6 + .../assets/fantasysmp/items/dragon_boots.json | 6 + .../fantasysmp/items/dragon_chestplate.json | 6 + .../fantasysmp/items/dragon_helmet.json | 6 + .../fantasysmp/items/dragon_leggings.json | 6 + .../assets/fantasysmp/items/dragon_sword.json | 6 + .../assets/fantasysmp/items/ender_boots.json | 6 + .../fantasysmp/items/ender_chestplate.json | 6 + .../assets/fantasysmp/items/ender_helmet.json | 6 + .../fantasysmp/items/ender_leggings.json | 6 + .../assets/fantasysmp/items/ender_sword.json | 6 + .../fantasysmp/items/lightning_sword.json | 6 + .../fantasysmp/items/mechanist_bow.json | 35 +++ .../fantasysmp/items/mechanist_crossbow.json | 54 ++++ .../fantasysmp/items/poseidons_boots.json | 6 + .../items/poseidons_chestplate.json | 6 + .../fantasysmp/items/poseidons_helmet.json | 6 + .../fantasysmp/items/poseidons_leggings.json | 6 + .../fantasysmp/items/poseidons_trident.json | 6 + .../fantasysmp/items/stevens_wrath.json | 6 + .../items/true_netherite_boots.json | 6 + .../items/true_netherite_chestplate.json | 6 + .../items/true_netherite_helmet.json | 6 + .../items/true_netherite_leggings.json | 6 + .../items/true_netherite_sword.json | 6 + .../fantasysmp/items/witherite_boots.json | 6 + .../items/witherite_chestplate.json | 6 + .../fantasysmp/items/witherite_helmet.json | 6 + .../fantasysmp/items/witherite_leggings.json | 6 + .../fantasysmp/items/witherite_sword.json | 6 + .../assets/fantasysmp/lang/en_us.json | 7 + .../models/item/alchemist_boots.json | 6 + .../models/item/alchemist_chestplate.json | 6 + .../models/item/alchemist_helmet.json | 6 + .../models/item/alchemist_leggings.json | 6 + .../models/item/alchemist_sword.json | 6 + .../fantasysmp/models/item/blazing_boots.json | 6 + .../models/item/blazing_chestplate.json | 6 + .../models/item/blazing_helmet.json | 6 + .../models/item/blazing_leggings.json | 6 + .../fantasysmp/models/item/blazing_sword.json | 6 + .../fantasysmp/models/item/crimson_sword.json | 6 + .../fantasysmp/models/item/dragon_boots.json | 6 + .../models/item/dragon_chestplate.json | 6 + .../fantasysmp/models/item/dragon_helmet.json | 6 + .../models/item/dragon_leggings.json | 6 + .../fantasysmp/models/item/dragon_sword.json | 6 + .../fantasysmp/models/item/ender_boots.json | 6 + .../models/item/ender_chestplate.json | 6 + .../fantasysmp/models/item/ender_helmet.json | 6 + .../models/item/ender_leggings.json | 6 + .../fantasysmp/models/item/ender_sword.json | 6 + .../models/item/lightning_sword.json | 7 + .../fantasysmp/models/item/mechanist_bow.json | 28 ++ .../models/item/mechanist_bow_pulling_0.json | 6 + .../models/item/mechanist_bow_pulling_1.json | 6 + .../models/item/mechanist_bow_pulling_2.json | 6 + .../models/item/mechanist_crossbow.json | 28 ++ .../models/item/mechanist_crossbow_arrow.json | 6 + .../item/mechanist_crossbow_firework.json | 6 + .../item/mechanist_crossbow_pulling_0.json | 6 + .../item/mechanist_crossbow_pulling_1.json | 6 + .../item/mechanist_crossbow_pulling_2.json | 6 + .../models/item/poseidons_boots.json | 6 + .../models/item/poseidons_chestplate.json | 6 + .../models/item/poseidons_helmet.json | 6 + .../models/item/poseidons_leggings.json | 6 + .../models/item/poseidons_trident.json | 6 + .../fantasysmp/models/item/stevens_wrath.json | 28 ++ .../models/item/true_netherite_boots.json | 6 + .../item/true_netherite_chestplate.json | 6 + .../models/item/true_netherite_helmet.json | 6 + .../models/item/true_netherite_leggings.json | 6 + .../models/item/true_netherite_sword.json | 6 + .../models/item/witherite_boots.json | 6 + .../models/item/witherite_chestplate.json | 6 + .../models/item/witherite_helmet.json | 6 + .../models/item/witherite_leggings.json | 6 + .../models/item/witherite_sword.json | 6 + .../entity/equipment/humanoid/alchemist.png | Bin 0 -> 1778 bytes .../entity/equipment/humanoid/blazing.png | Bin 0 -> 3081 bytes .../entity/equipment/humanoid/chainmail.png | Bin 0 -> 258 bytes .../entity/equipment/humanoid/crimson.png | Bin 0 -> 1345 bytes .../entity/equipment/humanoid/diamond.png | Bin 0 -> 448 bytes .../entity/equipment/humanoid/dragon.png | Bin 0 -> 1342 bytes .../entity/equipment/humanoid/ender.png | Bin 0 -> 1409 bytes .../entity/equipment/humanoid/gold.png | Bin 0 -> 434 bytes .../entity/equipment/humanoid/iron.png | Bin 0 -> 424 bytes .../entity/equipment/humanoid/mechanist.png | Bin 0 -> 1515 bytes .../entity/equipment/humanoid/netherite.png | Bin 0 -> 467 bytes .../entity/equipment/humanoid/poseidon.png | Bin 0 -> 1850 bytes .../equipment/humanoid/true_netherite.png | Bin 0 -> 2635 bytes .../entity/equipment/humanoid/witherite.png | Bin 0 -> 593 bytes .../equipment/humanoid_leggings/alchemist.png | Bin 0 -> 556 bytes .../equipment/humanoid_leggings/blazing.png | Bin 0 -> 1138 bytes .../equipment/humanoid_leggings/crimson.png | Bin 0 -> 398 bytes .../equipment/humanoid_leggings/diamond.png | Bin 0 -> 272 bytes .../equipment/humanoid_leggings/dragon.png | Bin 0 -> 428 bytes .../equipment/humanoid_leggings/ender.png | Bin 0 -> 594 bytes .../equipment/humanoid_leggings/gold.png | Bin 0 -> 261 bytes .../equipment/humanoid_leggings/iron.png | Bin 0 -> 243 bytes .../equipment/humanoid_leggings/mechanist.png | Bin 0 -> 512 bytes .../equipment/humanoid_leggings/netherite.png | Bin 0 -> 264 bytes .../equipment/humanoid_leggings/poseidon.png | Bin 0 -> 534 bytes .../humanoid_leggings/true_netherite.png | Bin 0 -> 875 bytes .../equipment/humanoid_leggings/witherite.png | Bin 0 -> 307 bytes .../entity/equipment/wings/dragon.png | Bin 0 -> 805 bytes .../entity/equipment/wings/elytra.png | Bin 0 -> 276 bytes .../textures/entity/poseidons_trident.png | Bin 0 -> 278 bytes .../textures/item/alchemist_boots.png | Bin 0 -> 353 bytes .../textures/item/alchemist_chestplate.png | Bin 0 -> 464 bytes .../textures/item/alchemist_helmet.png | Bin 0 -> 324 bytes .../textures/item/alchemist_leggings.png | Bin 0 -> 321 bytes .../textures/item/alchemist_sword.png | Bin 0 -> 446 bytes .../textures/item/blazing_boots.png | Bin 0 -> 256 bytes .../textures/item/blazing_chestplate.png | Bin 0 -> 443 bytes .../textures/item/blazing_helmet.png | Bin 0 -> 262 bytes .../textures/item/blazing_leggings.png | Bin 0 -> 360 bytes .../textures/item/blazing_sword.png | Bin 0 -> 422 bytes .../textures/item/crimson_boots.png | Bin 0 -> 236 bytes .../textures/item/crimson_chestplate.png | Bin 0 -> 311 bytes .../textures/item/crimson_helmet.png | Bin 0 -> 229 bytes .../textures/item/crimson_leggings.png | Bin 0 -> 236 bytes .../textures/item/crimson_sword.png | Bin 0 -> 307 bytes .../fantasysmp/textures/item/dragon_boots.png | Bin 0 -> 235 bytes .../textures/item/dragon_chestplate.png | Bin 0 -> 290 bytes .../textures/item/dragon_helmet.png | Bin 0 -> 218 bytes .../textures/item/dragon_leggings.png | Bin 0 -> 241 bytes .../fantasysmp/textures/item/dragon_sword.png | Bin 0 -> 262 bytes .../fantasysmp/textures/item/ender_boots.png | Bin 0 -> 266 bytes .../textures/item/ender_chestplate.png | Bin 0 -> 324 bytes .../fantasysmp/textures/item/ender_helmet.png | Bin 0 -> 267 bytes .../textures/item/ender_leggings.png | Bin 0 -> 274 bytes .../fantasysmp/textures/item/ender_sword.png | Bin 0 -> 321 bytes .../textures/item/lightning_sword.png | Bin 0 -> 449 bytes .../textures/item/mechanist_bow.png | Bin 0 -> 351 bytes .../textures/item/mechanist_bow_pulling_0.png | Bin 0 -> 496 bytes .../textures/item/mechanist_bow_pulling_1.png | Bin 0 -> 481 bytes .../textures/item/mechanist_bow_pulling_2.png | Bin 0 -> 512 bytes .../item/mechanist_crossbow_arrow.png | Bin 0 -> 563 bytes .../item/mechanist_crossbow_firework.png | Bin 0 -> 610 bytes .../item/mechanist_crossbow_pulling_0.png | Bin 0 -> 542 bytes .../item/mechanist_crossbow_pulling_1.png | Bin 0 -> 540 bytes .../item/mechanist_crossbow_pulling_2.png | Bin 0 -> 588 bytes .../item/mechanist_crossbow_standby.png | Bin 0 -> 423 bytes .../textures/item/poseidons_boots.png | Bin 0 -> 264 bytes .../textures/item/poseidons_chestplate.png | Bin 0 -> 370 bytes .../textures/item/poseidons_helmet.png | Bin 0 -> 250 bytes .../textures/item/poseidons_leggings.png | Bin 0 -> 258 bytes .../textures/item/poseidons_trident.png | Bin 0 -> 249 bytes .../textures/item/stevens_wrath.png | Bin 0 -> 579 bytes .../textures/item/true_netherite_boots.png | Bin 0 -> 387 bytes .../item/true_netherite_chestplate.png | Bin 0 -> 547 bytes .../textures/item/true_netherite_helmet.png | Bin 0 -> 387 bytes .../textures/item/true_netherite_leggings.png | Bin 0 -> 362 bytes .../textures/item/true_netherite_sword.png | Bin 0 -> 370 bytes .../textures/item/witherite_axe.png | Bin 0 -> 283 bytes .../textures/item/witherite_boots.png | Bin 0 -> 224 bytes .../textures/item/witherite_chestplate.png | Bin 0 -> 249 bytes .../textures/item/witherite_helmet.png | Bin 0 -> 225 bytes .../textures/item/witherite_leggings.png | Bin 0 -> 228 bytes .../textures/item/witherite_sword.png | Bin 0 -> 268 bytes .../fantasysmp/recipe/witherite_boots.json | 9 + .../recipe/witherite_chestplate.json | 9 + .../fantasysmp/recipe/witherite_helmet.json | 9 + .../fantasysmp/recipe/witherite_leggings.json | 9 + .../fantasysmp/recipe/witherite_sword.json | 9 + src/main/resources/fabric.mod.json | 51 ++++ src/main/resources/fantasysmp.mixins.json | 14 + 209 files changed, 1854 insertions(+) create mode 100644 .gitattributes create mode 100644 .github/workflows/build.yml create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 build.gradle.kts create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle.kts create mode 100644 src/client/java/dev/zxq5/client/mixin/ExampleClientMixin.java create mode 100644 src/client/kotlin/dev/zxq5/client/FantasysmpClient.kt create mode 100644 src/client/kotlin/dev/zxq5/client/FantasysmpDataGenerator.kt create mode 100644 src/client/resources/fantasysmp.client.mixins.json create mode 100644 src/main/java/dev/zxq5/mixin/ExampleMixin.java create mode 100644 src/main/kotlin/dev/zxq5/Fantasysmp.kt create mode 100644 src/main/kotlin/dev/zxq5/items/Items.kt create mode 100644 src/main/kotlin/dev/zxq5/items/Witherite.kt create mode 100644 src/main/resources/assets/fantasysmp/equipment/alchemist.json create mode 100644 src/main/resources/assets/fantasysmp/equipment/blazing.json create mode 100644 src/main/resources/assets/fantasysmp/equipment/crimson.json create mode 100644 src/main/resources/assets/fantasysmp/equipment/dragon.json create mode 100644 src/main/resources/assets/fantasysmp/equipment/ender.json create mode 100644 src/main/resources/assets/fantasysmp/equipment/mechanist.json create mode 100644 src/main/resources/assets/fantasysmp/equipment/poseidon.json create mode 100644 src/main/resources/assets/fantasysmp/equipment/true_netherite.json create mode 100644 src/main/resources/assets/fantasysmp/equipment/witherite.json create mode 100644 src/main/resources/assets/fantasysmp/icon.png create mode 100644 src/main/resources/assets/fantasysmp/items/alchemist_boots.json create mode 100644 src/main/resources/assets/fantasysmp/items/alchemist_chestplate.json create mode 100644 src/main/resources/assets/fantasysmp/items/alchemist_helmet.json create mode 100644 src/main/resources/assets/fantasysmp/items/alchemist_leggings.json create mode 100644 src/main/resources/assets/fantasysmp/items/alchemist_sword.json create mode 100644 src/main/resources/assets/fantasysmp/items/blazing_boots.json create mode 100644 src/main/resources/assets/fantasysmp/items/blazing_chestplate.json create mode 100644 src/main/resources/assets/fantasysmp/items/blazing_helmet.json create mode 100644 src/main/resources/assets/fantasysmp/items/blazing_leggings.json create mode 100644 src/main/resources/assets/fantasysmp/items/blazing_sword.json create mode 100644 src/main/resources/assets/fantasysmp/items/crimson_sword.json create mode 100644 src/main/resources/assets/fantasysmp/items/dragon_boots.json create mode 100644 src/main/resources/assets/fantasysmp/items/dragon_chestplate.json create mode 100644 src/main/resources/assets/fantasysmp/items/dragon_helmet.json create mode 100644 src/main/resources/assets/fantasysmp/items/dragon_leggings.json create mode 100644 src/main/resources/assets/fantasysmp/items/dragon_sword.json create mode 100644 src/main/resources/assets/fantasysmp/items/ender_boots.json create mode 100644 src/main/resources/assets/fantasysmp/items/ender_chestplate.json create mode 100644 src/main/resources/assets/fantasysmp/items/ender_helmet.json create mode 100644 src/main/resources/assets/fantasysmp/items/ender_leggings.json create mode 100644 src/main/resources/assets/fantasysmp/items/ender_sword.json create mode 100644 src/main/resources/assets/fantasysmp/items/lightning_sword.json create mode 100644 src/main/resources/assets/fantasysmp/items/mechanist_bow.json create mode 100644 src/main/resources/assets/fantasysmp/items/mechanist_crossbow.json create mode 100644 src/main/resources/assets/fantasysmp/items/poseidons_boots.json create mode 100644 src/main/resources/assets/fantasysmp/items/poseidons_chestplate.json create mode 100644 src/main/resources/assets/fantasysmp/items/poseidons_helmet.json create mode 100644 src/main/resources/assets/fantasysmp/items/poseidons_leggings.json create mode 100644 src/main/resources/assets/fantasysmp/items/poseidons_trident.json create mode 100644 src/main/resources/assets/fantasysmp/items/stevens_wrath.json create mode 100644 src/main/resources/assets/fantasysmp/items/true_netherite_boots.json create mode 100644 src/main/resources/assets/fantasysmp/items/true_netherite_chestplate.json create mode 100644 src/main/resources/assets/fantasysmp/items/true_netherite_helmet.json create mode 100644 src/main/resources/assets/fantasysmp/items/true_netherite_leggings.json create mode 100644 src/main/resources/assets/fantasysmp/items/true_netherite_sword.json create mode 100644 src/main/resources/assets/fantasysmp/items/witherite_boots.json create mode 100644 src/main/resources/assets/fantasysmp/items/witherite_chestplate.json create mode 100644 src/main/resources/assets/fantasysmp/items/witherite_helmet.json create mode 100644 src/main/resources/assets/fantasysmp/items/witherite_leggings.json create mode 100644 src/main/resources/assets/fantasysmp/items/witherite_sword.json create mode 100644 src/main/resources/assets/fantasysmp/lang/en_us.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/alchemist_boots.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/alchemist_chestplate.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/alchemist_helmet.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/alchemist_leggings.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/alchemist_sword.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/blazing_boots.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/blazing_chestplate.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/blazing_helmet.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/blazing_leggings.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/blazing_sword.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/crimson_sword.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/dragon_boots.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/dragon_chestplate.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/dragon_helmet.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/dragon_leggings.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/dragon_sword.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/ender_boots.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/ender_chestplate.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/ender_helmet.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/ender_leggings.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/ender_sword.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/lightning_sword.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/mechanist_bow.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/mechanist_bow_pulling_0.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/mechanist_bow_pulling_1.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/mechanist_bow_pulling_2.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/mechanist_crossbow.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/mechanist_crossbow_arrow.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/mechanist_crossbow_firework.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/mechanist_crossbow_pulling_0.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/mechanist_crossbow_pulling_1.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/mechanist_crossbow_pulling_2.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/poseidons_boots.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/poseidons_chestplate.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/poseidons_helmet.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/poseidons_leggings.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/poseidons_trident.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/stevens_wrath.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/true_netherite_boots.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/true_netherite_chestplate.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/true_netherite_helmet.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/true_netherite_leggings.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/true_netherite_sword.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/witherite_boots.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/witherite_chestplate.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/witherite_helmet.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/witherite_leggings.json create mode 100644 src/main/resources/assets/fantasysmp/models/item/witherite_sword.json create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/alchemist.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/blazing.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/chainmail.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/crimson.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/diamond.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/dragon.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/ender.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/gold.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/iron.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/mechanist.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/netherite.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/poseidon.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/true_netherite.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/witherite.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/alchemist.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/blazing.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/crimson.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/diamond.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/dragon.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/ender.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/gold.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/iron.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/mechanist.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/netherite.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/poseidon.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/true_netherite.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/witherite.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/wings/dragon.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/equipment/wings/elytra.png create mode 100644 src/main/resources/assets/fantasysmp/textures/entity/poseidons_trident.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/alchemist_boots.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/alchemist_chestplate.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/alchemist_helmet.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/alchemist_leggings.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/alchemist_sword.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/blazing_boots.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/blazing_chestplate.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/blazing_helmet.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/blazing_leggings.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/blazing_sword.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/crimson_boots.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/crimson_chestplate.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/crimson_helmet.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/crimson_leggings.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/crimson_sword.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/dragon_boots.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/dragon_chestplate.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/dragon_helmet.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/dragon_leggings.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/dragon_sword.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/ender_boots.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/ender_chestplate.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/ender_helmet.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/ender_leggings.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/ender_sword.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/lightning_sword.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/mechanist_bow.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/mechanist_bow_pulling_0.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/mechanist_bow_pulling_1.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/mechanist_bow_pulling_2.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/mechanist_crossbow_arrow.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/mechanist_crossbow_firework.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/mechanist_crossbow_pulling_0.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/mechanist_crossbow_pulling_1.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/mechanist_crossbow_pulling_2.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/mechanist_crossbow_standby.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/poseidons_boots.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/poseidons_chestplate.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/poseidons_helmet.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/poseidons_leggings.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/poseidons_trident.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/stevens_wrath.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/true_netherite_boots.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/true_netherite_chestplate.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/true_netherite_helmet.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/true_netherite_leggings.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/true_netherite_sword.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/witherite_axe.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/witherite_boots.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/witherite_chestplate.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/witherite_helmet.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/witherite_leggings.png create mode 100644 src/main/resources/assets/fantasysmp/textures/item/witherite_sword.png create mode 100644 src/main/resources/data/fantasysmp/recipe/witherite_boots.json create mode 100644 src/main/resources/data/fantasysmp/recipe/witherite_chestplate.json create mode 100644 src/main/resources/data/fantasysmp/recipe/witherite_helmet.json create mode 100644 src/main/resources/data/fantasysmp/recipe/witherite_leggings.json create mode 100644 src/main/resources/data/fantasysmp/recipe/witherite_sword.json create mode 100644 src/main/resources/fabric.mod.json create mode 100644 src/main/resources/fantasysmp.mixins.json diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..097f9f9 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,9 @@ +# +# https://help.github.com/articles/dealing-with-line-endings/ +# +# Linux start script should use lf +/gradlew text eol=lf + +# These are Windows script files and should use crlf +*.bat text eol=crlf + diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..524fb1b --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,30 @@ +# Automatically build the project and run any configured tests for every push +# and submitted pull request. This can help catch issues that only occur on +# certain platforms or Java versions, and provides a first line of defence +# against bad commits. + +name: build +on: [pull_request, push] + +jobs: + build: + runs-on: ubuntu-24.04 + steps: + - name: checkout repository + uses: actions/checkout@v6 + - name: validate gradle wrapper + uses: gradle/actions/wrapper-validation@v6 + - name: setup jdk + uses: actions/setup-java@v5 + with: + java-version: '25' + distribution: 'microsoft' + - name: make gradle wrapper executable + run: chmod +x ./gradlew + - name: build + run: ./gradlew build + - name: capture build artifacts + uses: actions/upload-artifact@v7 + with: + name: Artifacts + path: build/libs/ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c476faf --- /dev/null +++ b/.gitignore @@ -0,0 +1,40 @@ +# gradle + +.gradle/ +build/ +out/ +classes/ + +# eclipse + +*.launch + +# idea + +.idea/ +*.iml +*.ipr +*.iws + +# vscode + +.settings/ +.vscode/ +bin/ +.classpath +.project + +# macos + +*.DS_Store + +# fabric + +run/ + +# java + +hs_err_*.log +replay_*.log +*.hprof +*.jfr diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..1625c17 --- /dev/null +++ b/LICENSE @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..53b93c2 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# fantasysmp + +## Setup + +For setup instructions, please see the [Fabric Documentation page](https://docs.fabricmc.net/develop/getting-started/creating-a-project#setting-up) related to the IDE that you are using. + +## License + +This template is available under the CC0 license. Feel free to learn from it and incorporate it in your own projects. diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..c014450 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,101 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +plugins { + id("net.fabricmc.fabric-loom") + `maven-publish` + id("org.jetbrains.kotlin.jvm") version "2.4.0" +} + +version = providers.gradleProperty("mod_version").get() +group = providers.gradleProperty("maven_group").get() + +repositories { + // Add repositories to retrieve artifacts from in here. + // You should only use this when depending on other mods because + // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. + // See https://docs.gradle.org/current/userguide/declaring_repositories.html + // for more information about repositories. +} + +loom { + splitEnvironmentSourceSets() + + mods { + register("fantasysmp") { + sourceSet(sourceSets.main.get()) + sourceSet(sourceSets.getByName("client")) + } + } +} + +fabricApi { + configureDataGeneration { + client = true + } +} + +dependencies { + // To change the versions see the gradle.properties file + minecraft("com.mojang:minecraft:${providers.gradleProperty("minecraft_version").get()}") + + implementation("net.fabricmc:fabric-loader:${providers.gradleProperty("loader_version").get()}") + + // Fabric API. This is technically optional, but you probably want it anyway. + implementation("net.fabricmc.fabric-api:fabric-api:${providers.gradleProperty("fabric_api_version").get()}") + implementation("net.fabricmc:fabric-language-kotlin:${providers.gradleProperty("fabric_kotlin_version").get()}") +} + +tasks.processResources { + val version = version + inputs.property("version", version) + + filesMatching("fabric.mod.json") { + expand("version" to version) + } +} + +tasks.withType().configureEach { + options.release = 25 +} + +kotlin { + compilerOptions { + jvmTarget = JvmTarget.JVM_25 + } +} + +java { + // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task + // if it is present. + // If you remove this line, sources will not be generated. + withSourcesJar() + + sourceCompatibility = JavaVersion.VERSION_25 + targetCompatibility = JavaVersion.VERSION_25 +} + +tasks.jar { + val projectName = project.name + inputs.property("projectName", projectName) + + from("LICENSE") { + rename { "${it}_$projectName" } + } +} + +// configure the maven publication +publishing { + publications { + register("mavenJava") { + from(components["java"]) + } + } + + // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. + repositories { + // Add repositories to publish to here. + // Notice: This block does NOT have the same function as the block in the top level. + // The repositories here will be used for publishing your artifact, not for + // retrieving dependencies. + } +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..577c72d --- /dev/null +++ b/gradle.properties @@ -0,0 +1,21 @@ +# Done to increase the memory available to gradle. +org.gradle.jvmargs=-Xmx1G +org.gradle.parallel=true + +# IntelliJ IDEA is not yet fully compatible with configuration cache, see: https://github.com/FabricMC/fabric-loom/issues/1349 +org.gradle.configuration-cache=false + +# Fabric Properties +# check these on https://fabricmc.net/develop +minecraft_version=26.1.2 +loader_version=0.19.3 +loom_version=1.16-SNAPSHOT +fabric_kotlin_version=1.13.12+kotlin.2.4.0 + +# Mod Properties +mod_version=1.0.0 +maven_group=dev.zxq5 +archive_base_name=fantasysmp + +# Dependencies +fabric_api_version=0.151.0+26.1.2 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..d997cfc60f4cff0e7451d19d49a82fa986695d07 GIT binary patch literal 48966 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
    EsLPbq@b?0%dSFfh6##JDFBKiMtQGi0ga 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 I@*&~>1BJz{ng9R* literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..c61a118 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..739907d --- /dev/null +++ b/gradlew @@ -0,0 +1,248 @@ +#!/bin/sh + +# +# Copyright © 2015 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/2d6327017519d23b96af35865dc997fcb544fb40/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 + + + +# 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" ) + + 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 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" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# 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/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..c4bdd3a --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,93 @@ +@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 + + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* + +: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/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..d1b992e --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,17 @@ +pluginManagement { + repositories { + maven { + name = "Fabric" + url = uri("https://maven.fabricmc.net/") + } + mavenCentral() + gradlePluginPortal() + } + + plugins { + id("net.fabricmc.fabric-loom") version providers.gradleProperty("loom_version") + } +} + +// Should match your modid +rootProject.name = "fantasysmp" diff --git a/src/client/java/dev/zxq5/client/mixin/ExampleClientMixin.java b/src/client/java/dev/zxq5/client/mixin/ExampleClientMixin.java new file mode 100644 index 0000000..7e8c67c --- /dev/null +++ b/src/client/java/dev/zxq5/client/mixin/ExampleClientMixin.java @@ -0,0 +1,15 @@ +package dev.zxq5.client.mixin; + +import net.minecraft.client.Minecraft; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(Minecraft.class) +public class ExampleClientMixin { + @Inject(at = @At("HEAD"), method = "run") + private void init(CallbackInfo info) { + // This code is injected into the start of Minecraft.run()V + } +} \ No newline at end of file diff --git a/src/client/kotlin/dev/zxq5/client/FantasysmpClient.kt b/src/client/kotlin/dev/zxq5/client/FantasysmpClient.kt new file mode 100644 index 0000000..997cafb --- /dev/null +++ b/src/client/kotlin/dev/zxq5/client/FantasysmpClient.kt @@ -0,0 +1,9 @@ +package dev.zxq5.client + +import net.fabricmc.api.ClientModInitializer + +object FantasysmpClient : ClientModInitializer { + override fun onInitializeClient() { + // This entrypoint is suitable for setting up client-specific logic, such as rendering. + } +} \ No newline at end of file diff --git a/src/client/kotlin/dev/zxq5/client/FantasysmpDataGenerator.kt b/src/client/kotlin/dev/zxq5/client/FantasysmpDataGenerator.kt new file mode 100644 index 0000000..0067bc4 --- /dev/null +++ b/src/client/kotlin/dev/zxq5/client/FantasysmpDataGenerator.kt @@ -0,0 +1,9 @@ +package dev.zxq5.client + +import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint +import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator + +object FantasysmpDataGenerator : DataGeneratorEntrypoint { + override fun onInitializeDataGenerator(fabricDataGenerator: FabricDataGenerator) { + } +} \ No newline at end of file diff --git a/src/client/resources/fantasysmp.client.mixins.json b/src/client/resources/fantasysmp.client.mixins.json new file mode 100644 index 0000000..c9f58da --- /dev/null +++ b/src/client/resources/fantasysmp.client.mixins.json @@ -0,0 +1,14 @@ +{ + "required": true, + "package": "dev.zxq5.client.mixin", + "compatibilityLevel": "JAVA_25", + "client": [ + "ExampleClientMixin" + ], + "injectors": { + "defaultRequire": 1 + }, + "overwrites": { + "requireAnnotations": true + } +} \ No newline at end of file diff --git a/src/main/java/dev/zxq5/mixin/ExampleMixin.java b/src/main/java/dev/zxq5/mixin/ExampleMixin.java new file mode 100644 index 0000000..b3b0516 --- /dev/null +++ b/src/main/java/dev/zxq5/mixin/ExampleMixin.java @@ -0,0 +1,15 @@ +package dev.zxq5.mixin; + +import net.minecraft.server.MinecraftServer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(MinecraftServer.class) +public class ExampleMixin { + @Inject(at = @At("HEAD"), method = "loadLevel") + private void init(CallbackInfo info) { + // This code is injected into the start of MinecraftServer.loadLevel()V + } +} \ No newline at end of file diff --git a/src/main/kotlin/dev/zxq5/Fantasysmp.kt b/src/main/kotlin/dev/zxq5/Fantasysmp.kt new file mode 100644 index 0000000..9961210 --- /dev/null +++ b/src/main/kotlin/dev/zxq5/Fantasysmp.kt @@ -0,0 +1,26 @@ +package dev.zxq5 + +import dev.zxq5.items.ModItems +import dev.zxq5.items.ModItems.CUSTOM_CREATIVE_TAB +import dev.zxq5.items.ModItems.CUSTOM_CREATIVE_TAB_KEY +import net.fabricmc.api.ModInitializer +import net.minecraft.core.Registry +import net.minecraft.core.registries.BuiltInRegistries +import net.minecraft.world.item.Item +import org.slf4j.LoggerFactory + +object Fantasysmp : ModInitializer { + + const val MOD_ID = "fantasysmp" + + private val logger = LoggerFactory.getLogger("fantasysmp") + + override fun onInitialize() { + // This code runs as soon as Minecraft is in a mod-load-ready state. + // However, some things (like resources) may still be uninitialized. + // Proceed with mild caution. + logger.info("Hello Fabric world!") + ModItems.init(); + // Register the group. + } +} \ No newline at end of file diff --git a/src/main/kotlin/dev/zxq5/items/Items.kt b/src/main/kotlin/dev/zxq5/items/Items.kt new file mode 100644 index 0000000..2f54c93 --- /dev/null +++ b/src/main/kotlin/dev/zxq5/items/Items.kt @@ -0,0 +1,53 @@ +package dev.zxq5.items + +import dev.zxq5.Fantasysmp +import dev.zxq5.items.Witherite.WITHERITE_HELMET +import dev.zxq5.items.Witherite.WITHERITE_SWORD +import net.fabricmc.fabric.api.creativetab.v1.FabricCreativeModeTab +import net.minecraft.core.Registry +import net.minecraft.core.component.DataComponents +import net.minecraft.core.registries.BuiltInRegistries +import net.minecraft.core.registries.Registries +import net.minecraft.network.chat.Component +import net.minecraft.resources.Identifier +import net.minecraft.resources.ResourceKey +import net.minecraft.world.item.* +import net.minecraft.world.item.CreativeModeTab.DisplayItemsGenerator +import net.minecraft.world.item.CreativeModeTab.ItemDisplayParameters +import net.minecraft.world.item.component.ItemLore +import net.minecraft.world.item.equipment.ArmorMaterials +import net.minecraft.world.item.equipment.ArmorType +import java.util.List +import java.util.function.Supplier + + +object ModItems { + fun register( + name: String, + itemFactory: (Item.Properties) -> T, + settings: Item.Properties + ): T { + val itemKey = ResourceKey.create(Registries.ITEM, Identifier.fromNamespaceAndPath(Fantasysmp.MOD_ID, name)) + val item = itemFactory(settings.setId(itemKey)) + Registry.register(BuiltInRegistries.ITEM, itemKey, item) + return item + } + + val CUSTOM_CREATIVE_TAB_KEY: ResourceKey = ResourceKey.create( + BuiltInRegistries.CREATIVE_MODE_TAB.key(), Identifier.fromNamespaceAndPath(Fantasysmp.MOD_ID, "creative_tab") + ) + + val CUSTOM_CREATIVE_TAB: CreativeModeTab = FabricCreativeModeTab.builder() + .icon(Supplier { ItemStack(WITHERITE_SWORD) }) + .title(Component.translatable("Fantasysmp")) + .displayItems(DisplayItemsGenerator { params: ItemDisplayParameters, output: CreativeModeTab.Output -> + Witherite.ITEMS.forEach { output.accept(it) } + }) + .build() + + fun init() { + Witherite.init(); + + Registry.register(BuiltInRegistries.CREATIVE_MODE_TAB, CUSTOM_CREATIVE_TAB_KEY, CUSTOM_CREATIVE_TAB); + } +} \ No newline at end of file diff --git a/src/main/kotlin/dev/zxq5/items/Witherite.kt b/src/main/kotlin/dev/zxq5/items/Witherite.kt new file mode 100644 index 0000000..e8b2d55 --- /dev/null +++ b/src/main/kotlin/dev/zxq5/items/Witherite.kt @@ -0,0 +1,96 @@ +package dev.zxq5.items + +import dev.zxq5.Fantasysmp +import dev.zxq5.items.ModItems.register +import net.minecraft.network.chat.Component +import net.minecraft.resources.Identifier +import net.minecraft.resources.ResourceKey +import net.minecraft.sounds.SoundEvents +import net.minecraft.sounds.SoundSource +import net.minecraft.tags.ItemTags +import net.minecraft.world.InteractionHand +import net.minecraft.world.InteractionResult +import net.minecraft.world.entity.Entity +import net.minecraft.world.entity.EntityType +import net.minecraft.world.entity.player.Player +import net.minecraft.world.entity.projectile.hurtingprojectile.WitherSkull +import net.minecraft.world.item.Item +import net.minecraft.world.item.ToolMaterial +import net.minecraft.world.item.equipment.* +import net.minecraft.world.level.Level + + +object Witherite { + val base_durability = 40; + val witherite_material_key: ResourceKey = ResourceKey.create( + EquipmentAssets.ROOT_ID, + Identifier.fromNamespaceAndPath(Fantasysmp.MOD_ID, "witherite") + ) + + val armorMaterial = ArmorMaterial( + base_durability, + mapOf( + ArmorType.HELMET to 3, + ArmorType.CHESTPLATE to 8, + ArmorType.LEGGINGS to 6, + ArmorType.BOOTS to 3, + ArmorType.BODY to 19, + ), + 5, + SoundEvents.ARMOR_EQUIP_NETHERITE, + 3.0f, + 0.1f, + ItemTags.REPAIRS_NETHERITE_ARMOR, + witherite_material_key, + ) + + val WITHERITE_SWORD = register("witherite_sword", ::WitheriteSword, + Item.Properties().sword(ToolMaterial.NETHERITE, 3.0F, -2.4F) + ) + val WITHERITE_HELMET = register( + "witherite_helmet", + ::Item, + Item.Properties().humanoidArmor(armorMaterial , ArmorType.HELMET) + .durability(ArmorType.HELMET.getDurability(armorMaterial.durability)) + ) + + val WITHERITE_CHESTPLATE = register( + "witherite_chestplate", + ::Item, + Item.Properties().humanoidArmor(armorMaterial , ArmorType.CHESTPLATE) + .durability(ArmorType.CHESTPLATE.getDurability(armorMaterial.durability)) + ) + + val WITHERITE_LEGGINGS = register( + "witherite_leggings", + ::Item, + Item.Properties().humanoidArmor(armorMaterial , ArmorType.LEGGINGS) + .durability(ArmorType.LEGGINGS.getDurability(armorMaterial.durability)) + ) + + val WITHERITE_BOOTS = register( + "witherite_boots", + ::Item, + Item.Properties().humanoidArmor(armorMaterial , ArmorType.BOOTS) + .durability(ArmorType.BOOTS.getDurability(armorMaterial.durability)) + ) + + val ITEMS = listOf(WITHERITE_SWORD, WITHERITE_HELMET, WITHERITE_CHESTPLATE, WITHERITE_LEGGINGS, WITHERITE_BOOTS) + + fun init() {} +} + +class WitheriteSword(properties: Properties) : Item(properties) { + override fun use(level: Level, user: Player, hand: InteractionHand): InteractionResult { + if (level.isClientSide) { + return InteractionResult.PASS; + } + + val skull = WitherSkull(EntityType.WITHER_SKULL, level) + skull.setPos(user.eyePosition) + skull.deltaMovement = user.lookAngle + level.addFreshEntity(skull) + skull.playSound(SoundEvents.WITHER_SHOOT) + return InteractionResult.SUCCESS; + } +} diff --git a/src/main/resources/assets/fantasysmp/equipment/alchemist.json b/src/main/resources/assets/fantasysmp/equipment/alchemist.json new file mode 100644 index 0000000..2c8c097 --- /dev/null +++ b/src/main/resources/assets/fantasysmp/equipment/alchemist.json @@ -0,0 +1,14 @@ +{ + "layers": { + "humanoid": [ + { + "texture": "fantasysmp:alchemist" + } + ], + "humanoid_leggings": [ + { + "texture": "fantasysmp:alchemist" + } + ] + } +} diff --git a/src/main/resources/assets/fantasysmp/equipment/blazing.json b/src/main/resources/assets/fantasysmp/equipment/blazing.json new file mode 100644 index 0000000..076e1bf --- /dev/null +++ b/src/main/resources/assets/fantasysmp/equipment/blazing.json @@ -0,0 +1,14 @@ +{ + "layers": { + "humanoid": [ + { + "texture": "fantasysmp:blazing" + } + ], + "humanoid_leggings": [ + { + "texture": "fantasysmp:blazing" + } + ] + } +} diff --git a/src/main/resources/assets/fantasysmp/equipment/crimson.json b/src/main/resources/assets/fantasysmp/equipment/crimson.json new file mode 100644 index 0000000..d069a8e --- /dev/null +++ b/src/main/resources/assets/fantasysmp/equipment/crimson.json @@ -0,0 +1,14 @@ +{ + "layers": { + "humanoid": [ + { + "texture": "fantasysmp:crimson" + } + ], + "humanoid_leggings": [ + { + "texture": "fantasysmp:crimson" + } + ] + } +} diff --git a/src/main/resources/assets/fantasysmp/equipment/dragon.json b/src/main/resources/assets/fantasysmp/equipment/dragon.json new file mode 100644 index 0000000..e68e3f4 --- /dev/null +++ b/src/main/resources/assets/fantasysmp/equipment/dragon.json @@ -0,0 +1,20 @@ +{ + "layers": { + "humanoid": [ + { + "texture": "fantasysmp:dragon" + } + ], + "humanoid_leggings": [ + { + "texture": "fantasysmp:dragon" + } + ], + "wings": [ + { + "texture": "fantasysmp:dragon", + "use_player_texture": false + } + ] + } +} diff --git a/src/main/resources/assets/fantasysmp/equipment/ender.json b/src/main/resources/assets/fantasysmp/equipment/ender.json new file mode 100644 index 0000000..689d7d8 --- /dev/null +++ b/src/main/resources/assets/fantasysmp/equipment/ender.json @@ -0,0 +1,14 @@ +{ + "layers": { + "humanoid": [ + { + "texture": "fantasysmp:ender" + } + ], + "humanoid_leggings": [ + { + "texture": "fantasysmp:ender" + } + ] + } +} diff --git a/src/main/resources/assets/fantasysmp/equipment/mechanist.json b/src/main/resources/assets/fantasysmp/equipment/mechanist.json new file mode 100644 index 0000000..110375d --- /dev/null +++ b/src/main/resources/assets/fantasysmp/equipment/mechanist.json @@ -0,0 +1,14 @@ +{ + "layers": { + "humanoid": [ + { + "texture": "fantasysmp:mechanist" + } + ], + "humanoid_leggings": [ + { + "texture": "fantasysmp:mechanist" + } + ] + } +} diff --git a/src/main/resources/assets/fantasysmp/equipment/poseidon.json b/src/main/resources/assets/fantasysmp/equipment/poseidon.json new file mode 100644 index 0000000..93617cb --- /dev/null +++ b/src/main/resources/assets/fantasysmp/equipment/poseidon.json @@ -0,0 +1,14 @@ +{ + "layers": { + "humanoid": [ + { + "texture": "fantasysmp:poseidon" + } + ], + "humanoid_leggings": [ + { + "texture": "fantasysmp:poseidon" + } + ] + } +} diff --git a/src/main/resources/assets/fantasysmp/equipment/true_netherite.json b/src/main/resources/assets/fantasysmp/equipment/true_netherite.json new file mode 100644 index 0000000..e98c330 --- /dev/null +++ b/src/main/resources/assets/fantasysmp/equipment/true_netherite.json @@ -0,0 +1,14 @@ +{ + "layers": { + "humanoid": [ + { + "texture": "fantasysmp:true_netherite" + } + ], + "humanoid_leggings": [ + { + "texture": "fantasysmp:true_netherite" + } + ] + } +} diff --git a/src/main/resources/assets/fantasysmp/equipment/witherite.json b/src/main/resources/assets/fantasysmp/equipment/witherite.json new file mode 100644 index 0000000..9ee21e6 --- /dev/null +++ b/src/main/resources/assets/fantasysmp/equipment/witherite.json @@ -0,0 +1,14 @@ +{ + "layers": { + "humanoid": [ + { + "texture": "fantasysmp:witherite" + } + ], + "humanoid_leggings": [ + { + "texture": "fantasysmp:witherite" + } + ] + } +} diff --git a/src/main/resources/assets/fantasysmp/icon.png b/src/main/resources/assets/fantasysmp/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bf6eb5d57a43205a38498f3539fb3b067bb3aeb4 GIT binary patch literal 3636 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 U-&GXq7ytkO07*qoM6N<$f+YG}JOBUy literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/blazing.png b/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/blazing.png new file mode 100644 index 0000000000000000000000000000000000000000..c9d7034c5df949d4d04922ce784318fd42b3ff28 GIT binary patch literal 3081 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 X)+;=-tbx4~00000NkvXXu0mjfem~p5 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/chainmail.png b/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/chainmail.png new file mode 100644 index 0000000000000000000000000000000000000000..cd9ed23eb3a1a1c3627f99988ee2460be183f1d7 GIT binary patch literal 258 zcmV+d0sa1oP)OX(pfJx4&f|6#I_QDkih`B;9%P|ZjzidmuOq|h@v_hG@gBNz7nB7_h{yblD+ zs|-w$V2P?PH5ckje=S_Q3zMoZ!O9twD|}}d(6=lHEW~&QZjW5a+~eY9VG_1Rk#!X& zVJjuABu$mbTvRI>Mf0k;0mVR*YBoLD=F>=T7fkC_tM${u9nwQ9*=$ZeUjP6A07*qo IM6N<$f}Y1@-2eap literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/crimson.png b/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/crimson.png new file mode 100644 index 0000000000000000000000000000000000000000..7191fab0d4cdb1a0ed30ea1024df590ec494a648 GIT binary patch literal 1345 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 A@Bjb+ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/ender.png b/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/ender.png new file mode 100644 index 0000000000000000000000000000000000000000..b921599fe58bcca85cc0733e0460949105c5e2d0 GIT binary patch literal 1409 zcmV-{1%CR8P)RS>QXOAZqfLX?dL6-fj^P!NKLkV8ZWd+-#+ zn>i%88pMl)@#wI4)}u;DZb7_wiK4`VaDk^Frx)Dz5TFsH^9p{O=Fz&p&@obMz!_Rs_(yOa(}@ z-{*3YTp>pv--!dcybW|&5#Vz_wI2+%2wbRg-fnzo|0F2RXoRc?pzOBro_pwXQzAcd z{%{QYp!{I(ekoW9W>g+*Sq7k2t#=pU>7*V&dshmJ9!gu*rJOo%!H>+-mckT%Y@K?l z6zOX{*0%0*<5W*T+NSqbV=Fg&uOh(LdhmFUTP(0LZTL4CrmK$_oqbo4ej?X_@<05j zhCv^&`tuDDi~Ohv>o-dyy?jcPhjzm&gSs(!xV9XCG@kaY8-5?7Hjh0thL=&4G)YC6c=j% z+63uhD@BZ+9c6G5zz=-7!ESRJu232+?{GkUB$eQ3N;-A5?~(_W|9r05(DX z0A1(Mdd|Zx*U!B#gV*2OrC9);N0V_hBI`Uf=p!RI;mlt@NpbUbA1M`Y)-0emFR9ja zF2|ToNb&K9(=oJAcVj@;R?JD?gL|y7xeJ-o(7XO!kCf{DJ#7a@bYno50m6Ijwb7== zLur0mg;9b|zEVkQqz4Un@Co0QCK_pUajnexsQBQ*TLK*5+P?>HMc;A$ycB2?!YeBd zDq;QkfoJ7RIB=NP6|t*fCVF05Q#06La2W-qI1K49!`>YR<`5ITi~L`GA&8Faiq@{t z`Zi6IPM7`$2%A)`rU^e)CPW34(MgVB@9E=#>?Byt2ELVzYk4sYOXuFM)A!n~Nwu(E zyD-+7V&M^h4LFKMivy+U;o@Gr#Q}}I-7$IWBSHrk^z9go@Yq>_>n_baPlCRG1ilY_qOM2Pik^mG1lToGgNn!bThqYOTRJsN$ZvdX%5;T$kN27a z!;JtM^jJ7xb^SzC<@*Ri6+LsB`NlQ82qpX#R*If<_R@kkz&(`9VO`b`$2Ai`$9t5h ziv!vaCOvj&$~C=|I8pyAi}!cwd@j?_Hb?9I2c0|vK*^vy%2mNe=GgO6>*gf^Q9N@Ar)0Q&Ybqs<40004WQchC7!G6osu0ZQh^{kfGgc$?U-*4-gDv7XOSfhFr$D2E$_)D-*U$rC!O0fzQY1`a-sp zcHpyA^~anf0a4R5FjWov1Hk7bU@BZB0a>0<5&#c6wdr6X!UN#8pvW;BOWG-X`Vhwp z+3BE0&UAWN1#Px~ZNT4Nt_KedpPGj6WC-$l4dTJpG~KSgeCaG%p^5)hRd15TR^ z;yupKihtv>wal`aSsnqB43v^ZE8@IcGQ>e`YcM9Zl|iG8XI>44nc!fUrK^#PVk`s_ zNOkH`a@843V+YA3m&`D5cS>7uYJG|3vuZ7w!&`^CdSuy~c8}Ph7>Fq(ivDkWMx6KB c!*5672a=Y8y9~ahmjD0&07*qoM6N<$f^3|{4*&oF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/iron.png b/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/iron.png new file mode 100644 index 0000000000000000000000000000000000000000..9c54e7e2730c07af9b90ea59a52b942ce40354e7 GIT binary patch literal 424 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/true_netherite.png b/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid/true_netherite.png new file mode 100644 index 0000000000000000000000000000000000000000..38193d6b83231f057316577721938640f2b44cef GIT binary patch literal 2635 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/alchemist.png b/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/alchemist.png new file mode 100644 index 0000000000000000000000000000000000000000..4003a1ba685076ef1f40a527b9a7d7414730de0f GIT binary patch literal 556 zcmV+{0@MA8P)06=^IpfmFTLeEi=7IpS0waI=t4CwfW z$$;00`(u%H#AOYaT<;Ol^@E-wR0`%-j$iP^uW#pWWq9SaTC z(>jmSs#jZUqs8hn81L^6VXJ+2a{R%gzuT-;veg5nekM}aS0c_5cg&$CZjr#t$pfOv zE0$H4pRV_X1K&>y+yB){xf^2#G~jRL#u^Hm_{9ijW8 zg#d(O;kd)=jE7FV?*OK~!CM)~qKt+&-xcJUPzuCQv;xovp&+=>ji2`UeET8 zoqc`4#3o?8G(Bvcxy)qdecrtP-#pL%c_6$(0wIBrKu91Y5E2LpgakqYA%T!UNFXE- z68OIn&>j{1<-s=9wljxr+uR=+hn_nSplpJ@XWUeNm$JdXoC@S{?&X znei!I`~iQlL`z?B-4l2WK-=!ajF-|(dONUt_OE*Y+KHDfWn~SFM3#sZBbu}byauJ; zZh__zF*Ny>LDwt9TH54Ur|vGI=^8;T!-0>+o7y7`!`9il5n^eN$!e0oUB(`tAz}L5 zTvh~C=(g@*wOZWE*w~#tY)(wEG&aGNt5Z#%A$q;iK&dF{ZTo56{T9}SJ=9!->Oz3G z+`yf0$X#Kz7sw30LNwJWe?KPK5y6-5&3@@M7pz3GpraW&jk-od zbVlM95xW~R_cW>gVN$(Yq)SAbT|b6W+Cy=g^t_1GjotMkjoek@{UzKb#ln~)P!yHv zX`I+`BFP+8U*VNziKUvl{2%^2Bk+C7f8N5G{2X^WO1)AeyCp(A*Fp5!oQU)>ldS@$ z1^4b0&h$m1MqNy?CRLD zSrqTSEASMF_Bejk$B`HsCU$-$rdA1vrVDf*cvto~$FpyoS<^Z*ly{R0-+YUE`-Y@- zRYU|_I)4IpW}b9$fJl0nYd14;&^pQ9A-R?LW#o*^3j-)w>z5q1Zcu3XIJ21nS#yxS z4wK1KA5)!|_L>aH4kl%ONO9rZb?Qz)mr)^-)wn^7bpH+<|Y;e zfZ~b19x>BN{MplJcqBRpFo%X2yLSxK!h>Y`JH~!Z%(b1&KtC-tZzV?gSlL!GJNL@* zMpu2rH3i_81M!WDjL$xSFP%X~WEGTgCQgZOjLLhRRPj~ZsUOKdd60VfXBxN9%lj%y zx``jiAm&DB_%ex(oW#9uh5!Hn07*qoM6N<$ Ef+Rp0s{jB1 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/crimson.png b/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/crimson.png new file mode 100644 index 0000000000000000000000000000000000000000..800058882854fb11c17ba981d22cfa177d65a003 GIT binary patch literal 398 zcmV;90df9`P)ax*OV0{4bW})e zz!Go|<iajC9R!$=$}&A+)Q+_lVjOICuc?(RfTVxTIK8 z3Rp>QSp6G4Y*5G1M+_R@FJ*9-EeRAy3Z6;`FgFom^mQD4Zc_WpCfjm*mjEEJxm~%! z(yWYQ^`Xh3y#Pp~Yzl_C>9~xg4xw@igc?fyrZ^5Yto4`j>O51&A-`w+r+8BydR%P2 zdVDm1J|C sGyr{*WXMg1LKihz0HH>k^nC+(0+iD{M^@o{fdBvi07*qoM6N<$g2WS~hyVZp literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/diamond.png b/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/diamond.png new file mode 100644 index 0000000000000000000000000000000000000000..a9d69e8b44a31f667ad1c4123b07a9daa88b3b1c GIT binary patch literal 272 zcmV+r0q_2aP)DBGn42eT$n&(Hr>!rvwXGSgYxD*) WX*-|3S7)360000|-nNy7#gs>TvKCDV1psGZ?%d zMG3cY9+;_rebN3!546f2d4GNMyyK!=&4O=_B>kGtdEB|Y`s=fWET{C67e1EM*m-4T zz}pXvYd>(aw&cnNF<)6H)@i`|wAN15YWCY>3y(b1KOcIs{+Iv7nGKJ!H|);Qc6p){ zWp*oN{cH}Y=ha1XI2!_vUGzEAe%dRy{dQcJ);cxoKKUahLcZD`1s=yF?6*ohcT#ae zh%-;amUu~1H%9*W=Tftm9dj>Q+h)S>tE8*;O2qEv{ZG~@WhotT@7-FxharCUq@P#z TEuO`|z`)??>gTe~DWM4f4Jxri@wyf?x_E#QkS?vSV^mgpfcsvrTsPOfKI)mz@yVG6hTlQ@|83 z1xx``z!WeAOaW8C6fgx$fkjiGFa&(E-Q%-%o2XnSx~dQRB&1R?kEM2cPIP$eMM!)N z3*ewH8g-(^N8;!nFUzI8xn2l(Ko&@9Ug{pNsD0fBMm@v%-P>IE2wwu#4Wg}04-I(i z#l{)-`+HFs*c&@ZWJ$)2t{PY*^2;kx3_KTGnj-8MhgWsarDIO3J1hychR2d7Iw zZ1`#s<``Ulx^IFy!jc7FzcJ;t51xx42?$W+h~moAP=H@sjah)*;I#;!1Xi(M0upfu z0(bz+Gzd_fN&3SVWs|_56z2c{HN!0+(UzKLVAmI*gf^Q9N@Ar)0Q&Ybqs<40004WQchC2_*G>$u534-pW00000 LNkvXXu0mjfljUYE literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/iron.png b/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/iron.png new file mode 100644 index 0000000000000000000000000000000000000000..f45fb5364d862f3964a8fb3620103719b8e09769 GIT binary patch literal 243 zcmVHZU1HG369stFh0+MSn(HE)p$romT(=002ovPDHLkV1mfIUfuuz literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/mechanist.png b/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/mechanist.png new file mode 100644 index 0000000000000000000000000000000000000000..463932d4ccde8c96b2e946a30a85ad68c5a1abca GIT binary patch literal 512 zcmV+b0{{JqP)0#3jQH~}Z%1e|~qZ~{)i349uX-Bj@P zdVMlC3`01bPT_L7yxD9C(mo}oD2kBhd4#a__67jabzO(s?Y4F8QD4#nK1DnLc8Yn$ zJ)gwB%>zHJF<+MDs&hp20Nnn3K1b1rr>`+{^s_7*!PvF6$I0F%I^F#7cnth8W?f_Y z8e1T1hH%i0O9TQRkH*#rN0Dnxm}y10cS5wfFnrh07KHf~|8bMN>2cns_8k-fr7_R~E& zZ^=+Q%>A)bRn=3avpfc%UDu5e=qO~c`K$es!gY4^fH@68+@#GT+`3JYtmy?&(zPK4 ztd#wKmPQ4h@xs-h>6z5!4YVQ}UoHq>OS;F!F0000#T}??%M?OC{H8(XaEhHZxBpDeO5fS9O6xsj)00DGTPE!Ct=GbNc005XtL_t(| z+G7|6qW~48r46)#vYBd~Wiu<1a4JYmS4>Y$PZPqaz$h$8%qYxI6{mt=Whdca-mLZFeLpfU)j7#q7W zU;}2UA;!k8VaZ|6CaG8zgrE-2>$l?GymMt?TiiNiT O0000Nt4;J*>@a)S4^`)wnTz8j~{4|6JDKANk*=9+;(Vb@*Y zwr2#=cjNRKV-9mmZUG)&j08gHzX8MHND{@maq*=LN)JE;P&~zP*P|yhYKxUP$GQ8G zQ*r=4;^e)@7HR|GwHv2T7!|P~?e^StLZG=}%g+=BF|BLETmTmR_L zP&hux9)~h6fTqR21L@BDW8fabmH6xUqj;Jehd=RmcYx(ZpcQ79#y%mXGASNCC-WOX zt(Kk7X54=V=KNoz_)E+|I|fBaS@4@r)Hp#>K2kbz%FwqVhC|eC?Q4Y0H=kP4hO1zgpHXJ=pAL?xKJ(L6LY zb+2YjJBj43C9@CHd$biaXwl|Z9Ra$;$`b|JoO*?xQp=J}cTWX*Ch3}M%wt+yd_k#HkxbJhO}j?Aeh&VZ@ShQwXcsn}#>a0{Fz9RP9O2gW^Q0&l8XLO~ zavI1T(d6U<5cE3aRrpKrM}e=xK8V(VG56bIm$(v%bz4=tX=&*xS=KF(wPJ1xBf6vNCqVG5#qLrOi5rp%BW$iouO2xFSUHG!j_}14zNu_c~YBor&fSgYA^D$r# za)B3k5Y=EA_yYXPz#4EGtUthi7PzzJ6>yv8Hb?|O#s_j)l)mr4A>cmX4d9%}5th{h zYyy9Ca7c`|ovT`jU-rNCSC9YGyk;woQx6mOi8wdSb@U1_zvc+|3wmC47NrBYfZhwt z;lk&H3?-9Ws1gAo#PN?S7WWV;U&ZrOHCV^L5C0Cu;~O+IG(dj;k$5Mf63v5TT&C64 z&1UnhdEP&lutXwn$K%h0fE+eVARLZ@5Fe%azk+p9L1>fK*52a&5W9(q_M@am5n7*t z3lKqbL?DO!0iM_M-^*;Bqi|!Q8^$MmXg^4l(A>DUK{O2!MnH)5^@7kLY#eIc7;_+O zEEdl-j2w-Ogs|FNZh6P>oKE;zoYlrY<^-dgAVB3KO>;}Ewx(T1U#5kH=f}1*0!bX9 zJs8Ko+9lv#^abENdJaKOsF#k-;e3-h0j0*K`~-W)ib8XgE6xA_002ovPDHLkV1mk3 Bk!Sz_ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/witherite.png b/src/main/resources/assets/fantasysmp/textures/entity/equipment/humanoid_leggings/witherite.png new file mode 100644 index 0000000000000000000000000000000000000000..6852425041e41e14c30430b3029803289909bcf2 GIT binary patch literal 307 zcmV-30nGl1P)Px#1ZP1_K>z@;j|==^1poj55>QN3MF0Q*92^`nGBOSh4g>@Q0000BP*hd`000Jb zQchF<|NsC00JFcOzW@LL32;bRa{vGi!T<(*9%%wt#HGa|8nVYJn#Ri1uekvp>y|vR;7Q7dVfH zfz?fKe+p9Sq2{c(KxBU!2wWm~yyGUZAP@==MipNYe3JcXGInCdwt-O(xcWuLPF%TN zeN+htae1>c;NKV_`uYN|IWCj|QzP_FjtdupN{+v1?FHS=Bdr*gu+snl002ovPDHLk FV1lF{YXSfO literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/entity/equipment/wings/dragon.png b/src/main/resources/assets/fantasysmp/textures/entity/equipment/wings/dragon.png new file mode 100644 index 0000000000000000000000000000000000000000..e1db4b9b9fe66bb53157c46c772786fd11871b24 GIT binary patch literal 805 zcmV+=1KRwFP)fAvdPAL+C*bgqSbKI5@WCfV1;K)SR9mUB2Gg3RHrZV7j0tTqLUuF36*dqO!t9-U&b{Z{ znGpW%i-*{rhFJ4oFVQ3nL&R7>hK5}SE_dPeK(a8h%ggWY7)!2W2^yqS1Y!;J2+pF6 zGjNeb3=R@V<2e@5BgcBa)&m9szvmeyC@Hl<4i$l3z$R+g!Z&oV(_a?0oJWMb`}m~x zg5$WvQgv2vIEDmEC-6z!;A^-)7O!xur9XNgBXr&RGq{ZgJ{tifkP<1l(gCf}cNh>M zOzku$`Mn^4t3^=3c@!}%B)E8wCnAITUSkYX-c}348I;&TQoMlnz4MslDa=`yL6{_9 znAB~50e8gp+t?N%=qXUd34FpEtm18N8rnNHgshcFkg)-s6fc;@RWl7f;-xskI}rxq zCz{$Tt>tYk&;TLmGWm_4l4qLw9H8sp#JbVF9*d{wx(vb=mieg(%jo)zJy5G*lfahF zvP+&!f?IGY0~VYIRmG6-njRwEEuzVFYsO=R#lK_|qyuy)&Y~n8&=MgWLV=EcOD0jx44skjr!R!_8%C+D1pa1%beT`FS`p!stkw}vZ{pn`~#F@r;Q=ndX2M*b=QC&hzSPM<7Q~&?~0d!JMQvg8b*k%9#0HH}l zK~#9!?ai?b!Y~j8P%DZA>9|Zlyg|4H0`>qDn3^VxU~hm^QgYtFObHUuAnT{0-o^lm7=*01Bw z&TSDG-FWDWVD$k<+oJ|&n0KhbSY|j;vo(Y!YQr0i8mg9v5KyGMG8o>sqgF#ubwui) aU*`chO(U4}<(tX?0000_ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/entity/poseidons_trident.png b/src/main/resources/assets/fantasysmp/textures/entity/poseidons_trident.png new file mode 100644 index 0000000000000000000000000000000000000000..fefbf08381cc51477a9da0682a9a290105a91c05 GIT binary patch literal 278 zcmV+x0qOpUP)s-T(jqm`OxIRCwBBP+6p7bN7-G7%+f9YU-(~Q&k|YDnuYT`R>}gYe9TvRj7b! z6Ii{nvNA*q5P$_#RUscK2?{jP1+;Jo%$$iKfYS_399nko#;HOZ!wkaK67~!A1a|L66S#X9#pz&&5eVd4 cw^7Xi0O3wu`jb3ud;kCd07*qoM6N<$g7WKcX#fBK literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/alchemist_boots.png b/src/main/resources/assets/fantasysmp/textures/item/alchemist_boots.png new file mode 100644 index 0000000000000000000000000000000000000000..7d34fa9009722efc0cba623b209eaeb718e8e485 GIT binary patch literal 353 zcmV-n0iOPeP)8aMun|JCmh zap6j_>Y`nA(UM?WI+;nlXTnS}1Aag++$8tpo-^k#L`PpeKS2^^HL!@E@6}BIHyFO> zs=-VJ-2saa_m6ZH+>r95GsZ6&?}~xz2mtu}Sd(D#SCBjA46Z!OjsS>~yX3A&C$VL4 z-89D!}rED501!fN1DxPrrf9rVw#dU%)8{AWWe^~&Tnt>g&; z=)uL1C`@cV?EvKQXi9G{OWKiO#Px|&&*M`q@LL=xojkF~wHDEv5TLqEQ%H88zFie2 z#3#2lRxY0P4ySHPlT7(!;Ed(MyBhCGk97P4xxHc=^E5-S00000NkvXXu0mjfRjrz~ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/alchemist_chestplate.png b/src/main/resources/assets/fantasysmp/textures/item/alchemist_chestplate.png new file mode 100644 index 0000000000000000000000000000000000000000..80707abce8d39e709acff11c42f7f3a64288d5ac GIT binary patch literal 464 zcmV;>0WbcEP)d z@<-UFu(7ZTSl9$?lpx|);VJPj_<@NUypWH}Mc3K6+;Qs}#ma$OZg$?heQyT%?`V?( z;usQNg>2%QYi_i{Xf9xBeHB``8%A;uDLoS~)<8R!*H&P^mGO`|#P0nWW0*h|t;##H zJ88-~Fo=FEKodz^u!=jl0HqZbh(nkN#ON2g;r zNNh8?44ayZ`0y*xU^M`%36PZ@A{j*=gKpB7bcQ@zHsSK9an2IwFwQTH(YwEefdWo& z%diX$TAB0=CdKSj47q(>;c-`#!xPS7;0U_c=WRiD$idX%g+LjitV|#(A{e1HNd%5t|QYFfji|76)-aIE&#ghI$rs13;Rik~0_> zg@qUxzI|u-&%(m+|HDTH26lFaA2VnDFJkzHVh9SShC%FqVO0Uc&vTa;{@j1U@ayJX zu+0n%jBt82!&ioCh7WLkC@%QJz{2q3$3KSGJ5B*LfHZM|wS(9&`a8pK6h~ut;lrJm z44;4+S2KKP;AHp#w*5N;J3|lyH<In?i0%L_M!)|cF>Wx42~IO?Leay5tOTSv$~}ZZ zScaeB)9Y^-y1#w;$?$JK!~e5LhM*V#((wm~cg{VB)%LFp?-~A~$zT}3$jk&b1RMAZ z6a-;pfMLM%M;{sfLVfx8|9P-l8Ad}e4Kf()0;KT4>V-c*1D^gn&v5NOB*1{0{+p;e zGu*xVp5ZTA;4&dQ2V^?PiEx{sk}z?Q9D3xS7{CCs4;jNuM~*nOh(|R5N8sTTroI8c zf8vTnh&w*~e}v*73>SR=@(Zg%n67XC-{MaPSDzooumz-J@9p^v=$gq0GE6N1X_r!z Tr8PoH00000NkvXXu0mjfgnxx~ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/alchemist_sword.png b/src/main/resources/assets/fantasysmp/textures/item/alchemist_sword.png new file mode 100644 index 0000000000000000000000000000000000000000..29f2fddbf4b0ea72e80e0e62a2d3a8bf5ff5db12 GIT binary patch literal 446 zcmV;v0YUzWP)<{Aa7jc#R5(wilRrp8Q543%Yl1H$E2LVY0*j!fA)+Cnp&=@0h$lou zL_yIcLA<4{(X}CP%^*l2jBJyr3?Eu!A@m04O@M2X3hl4@V2%g5_aQJUd=1czyc(VqX$2M?{K6qh)3n+1| z=)i>;T9KCF^LQ|bUNqyG*AL(nJGd`v`LBZfMFkBw@H}8vlCX~iPLRPCu5{tD_BolG zR^g*?{RGl0Vs5cda+$;|NT$y5mX7mock1y^SEhYeruESohS_XGBnX|zW^VAV o$cC58gj^P%Y67`Zi>um^Z_p>7@UY>2+yDRo07*qoM6N<$f&}rs8UO$Q literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/blazing_boots.png b/src/main/resources/assets/fantasysmp/textures/item/blazing_boots.png new file mode 100644 index 0000000000000000000000000000000000000000..ac9bcd2bc553926198d3f4fe3eb8968607febcea GIT binary patch literal 256 zcmV+b0ssDqP)Nd%5#0wSeBA$GVrM>m1wJ;4T13!Zc65@d?F% zSHJ!+z{JokfF~4?A{cn|<0nP}1IZyf9mL0_j_3d!90~z$&s~3fGLMY_0000o1nMS15gXdq3RSD|-1qwO)hIZ5$fL=<=iYPPp+x_U0vo8=3t`sC z#g&jfjbAz3WPCiHggtLF%p?EAnUf08pFEwC=%2~==Dta_wb&I8b4_vv;3N<&5Ir!fWP?VBc{g>v}|Gpur&uJhxcF8d^vHqNne!M`j#&H&7X> zMKqY6KGd&K=NgM7kamD8_#-5I2XYSl33{3TY$`;avCLA~*fyzb6jLjBxZVn=8^i%J lVP=6|lII{hoNM#1#c$vlq#*2`Zyx{v002ovPDHLkV1ks%#R&ia literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/blazing_helmet.png b/src/main/resources/assets/fantasysmp/textures/item/blazing_helmet.png new file mode 100644 index 0000000000000000000000000000000000000000..0ab0c5fc97bd034437f83b92cb25828a1274fb2b GIT binary patch literal 262 zcmV+h0r~!kP)Nd%5t|R}P5J&~6F+$R6NY*gbcG;LTsKTr%|LRJOSY-ZZXAf&mKfln|TE-lT=#?aa-#GtCcf#Nz813;=_ zHvf6Ch~d-wm0$yI+_?s(L583M3@?BbfHVfhAAzfV_WBptc5DVMFaYFVkj-QRP)wkQG{`WJ7&dXTEgD7|0Wt4Dpb_%2qW}N^ M07*qoM6N<$f|p| zB?|VUNF;hp^rD9#HEvqBGg-u}S!+*q$Ryvf$FbejTor)nf%-gD3h;gHl1K&!uow}~vy z_F$`;Id6`@>K<876_%c8c5dEhN60w9r(srJ?q40a6H;f|l!IU=;7-*-Z!b{*KIoO+ zHj|M9UlRV?4uZW<&4%!gW?Z|L_OpJ=yq&tX*KniKzk@#&V26R+SATr~0000_WHGllH@c-ssjsK^!b^j~y zv14~O$cg9y1mfSiV)TDQwZ{Jwkvjk7IWaY}Acv@;3OkU?_y5SDPmCbVb0@1XT$%Ni zLHq^_L-?WF3=e<%QO-&tg|CLoZ{@=V{^uN+i`u`Cdt^e{IIGhc%4#h-}0d8Ib z4FA6TXSjag8$&LGI79TAyLfHJaFVqZ-+wtSR)#y5e=@xK_?w`!nUKTa|Bt%=b&-4w z$IpFX`2U@OL6nV^L7oe@^Feyyf%yNk?*Co0=P`U;`Gn!YI|j!891P&-660ZIVED)I zA6Edfz@l!~g7;v}K}R6rf}{a|as?R>n`oEB(IZqK#eV^?JDaM72Xu)f8h?L zc?Xl2e0c6w>jZ4on6*B^kU@>@GuH%uE@ihFj64R?8#3L@_?PfS^6DrqJZ`bW{k~@(0|Nttr>mdKI;Vst016UIXaE2J literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/crimson_chestplate.png b/src/main/resources/assets/fantasysmp/textures/item/crimson_chestplate.png new file mode 100644 index 0000000000000000000000000000000000000000..35b2fcbf733ebf8bc9ed692cd7217fae1f5defdc GIT binary patch literal 311 zcmV-70m%M|P)pF=}AOER5(w?ld%oLKnz74grcm#1{7?=GIWT6=$L_q79=*Hqee8r z?{qfK-60_wES==o|9|^_5|MvL#{x@{v9U<%g{UxBk#1&yjV7xvt^)?Fg$o?Ca-KHh z#FRq>1GW;NLC_2nAUfHIhIJJ@xahg}!&v4#Q>S0%2sBOPo;y8@en>-Z&xdUD`q8Fn zB0@>b$frz%OpahM+3~i43A=IoVuN)YormcLGN0DpQxZX^TiEo{K!1$}GyoeM)dLPW zQMs?RO2B}a#{EATXah?RsJA}rcvJtx@u0Oq`42S7rFTC+zW|>>PMkU)6mb9m002ov JPDHLkV1i+tet-Y~ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/crimson_helmet.png b/src/main/resources/assets/fantasysmp/textures/item/crimson_helmet.png new file mode 100644 index 0000000000000000000000000000000000000000..7f6b54b677834dc431b58319684315196e75505a GIT binary patch literal 229 zcmV^P)pFmq|oHR5(v#U>Nd%5!nYC2+n^TJ_D=2fh5U-Md5!Ppr8+$LpFo=HSOR5(v#U>In?i0l9j2hdLGHSCoK8HwCK;2ss>!Uafhz%>+sRIC5S{phO%%D{O0000fq|ZoV1afWC<$^tx}RZA#|T8Iz<(E{K!b^)YeMEDyWsy+piDNxR+J=*%O#A! zgaKBl2*l^GI~isWJnoTQ01m|WP>jPCtQz5A0Mbke008~tFo@*}QlJ0;002ovPDHLk FV1h&+Ysmlr literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/dragon_boots.png b/src/main/resources/assets/fantasysmp/textures/item/dragon_boots.png new file mode 100644 index 0000000000000000000000000000000000000000..06214810358b3fb2cf5732ba0855ca62c8576282 GIT binary patch literal 235 zcmVpFok>JNR5(v#U>J7bKhQ@Yj0<4MGoh>87keKhgw2ruP&vGz_P<(p z1uj?ow-$;Z>;jPSA`m-}UGX0(hG9E~7Y;n#z@RP^fuRta7)TL@0i-4iWCK8c1na-~ zZUu%pFflCNgZLK|Kp+fM01GITFaW6m$)TxXV1!x)52QD!cEjb70+#_v4I_#IB)u?k lbg!VN4_xX<4a$L34*In?2z9`JEDnLm!KARNVS>q83q>%95aAt=8jxCa z@E<4vvf)2a5==uevh8p=m|A2*;F>^^XokQIM$!nk0Pclq-4zV`V(&A&0UGNd9ROy- z0Ei6|1IdBdAhj@nH4s7mOb04*HZTXP+k4?8!_3POU<1$qBMVdjZV*iKfu|ebYC&v} zfk=kHV+dzdft-o#f>xjlkN|E2U{Q(gTr_d~E+8Td2zvo$2*}x30uZMGAobXiELQ)6 o1knQ#IptwS8gBL2)DkBK03bM7>atuzasU7T07*qoM6N<$f*)9B*8l(j literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/dragon_helmet.png b/src/main/resources/assets/fantasysmp/textures/item/dragon_helmet.png new file mode 100644 index 0000000000000000000000000000000000000000..1f6facf55d31cd21db9a51bc3b8ffa0c6d797bed GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7I14-?iy0XB4ude`@%$Aj z3=9lCo-U3d7XHZz5}z6b+xh=J7C0Wzf41SjlEd9sPJ$X~GPT>8j=5hv+>$07Q@pv{ zy1BW8Ax0`iLuA1YzPqgd*IvwF%iPtuVeUiTBO*KOO2ivd9nY~Q&fs>KwLr?SiETBb zK`8sYJO#_C4SN`lIn33N@a0*4aDl^-ECvsmlL345nl)X*TfFC_pFqe(In?h{XZ_2{;Nx54r*Wt94f}I2)LQ&DeY4B$z(% zbOV?^`fdfxY`8uaY_@?k!ZabvivT%q&@?b%GXSRfCeTI@#s{z(0MY=`2(k@?k(`cU z7KQ;Z+o4Vc`4wA0!wtgf0z%G4b_Px_5SzX*q7f9*Ab{ir5cfY0aR#g|K#wYzYp{u9 rxB$)RFnRRU3D-w)7!Vs)v{MHF+>9(C|Myyd00000NkvXXu0mjf8begV literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/dragon_sword.png b/src/main/resources/assets/fantasysmp/textures/item/dragon_sword.png new file mode 100644 index 0000000000000000000000000000000000000000..56f66f6c13fa81782904774fa8a8985d9bae7f8a GIT binary patch literal 262 zcmV+h0r~!kP)2WbRp(h{)8Z!<_S z$Of1pBx!~P0L-r-8fGIQo0+hMUW55chHD=VG5|G$X&@jzx?x^{`JMQPhN%3n!EcQo zXhg^N{~*N*Nd%5#0xD42=I_V!s&vgXOV_!PGDz8vs)H^Z!4F zoaf6K{xQJK0V{!tvoN4apcnvBSo~ro)?fvRZ(e@^Lk`0LkP2)Hv5A4yViVlW8yNOO6a05UAC_k+nr$(5eT++r2$N>p909i9g;lHP!Fbo2Tf#k%iT^W!KfyXn4 zv=LYnNZ}8L+hFz|1_rP^%tnw#WHlgpxBXBOC8YxI5-pn0Kgzi2kpp< Qod5s;07*qoM6N<$f<~)iKL7v# literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/ender_chestplate.png b/src/main/resources/assets/fantasysmp/textures/item/ender_chestplate.png new file mode 100644 index 0000000000000000000000000000000000000000..ddb3dcccb3cecc0d3209e19890983d8fb3a519fb GIT binary patch literal 324 zcmV-K0lWT*P)In?2yy@$1LJ>mhx}sr50--gTxytL3V#0o$B^@U zIfMMPa-5#RrUq_6@r#uVo7Z0eYvzzPLU9$yc90md8kj9`17Mm#5-Dd&;fBC8i&wkC zEkJf63ykwTYb^tlG#>*Nd%5t|R#7#RO!6aU5VA45G0x@oHBT zspna18U8Wc{{M%80mTp|WK}TDDQ8LY{1Lb-C!DI2s*&<0!RT!YP)In?i0%M32FCxm9QBXkKf@me1{6Ig9FXRm=gS#- zCBngG6u(#rrZ=y@0H&X3t!4PZa2v%C7HqbGG{Q6?%QH#yF)%zu)xm_#0GQ^Nt-BdO z7$3lD07wH!IVF3p8H_m{?>H>6UGoc1Nieqqkf!Oqg5se(u zMqs_jUI6;@KbN#IhB!z7s|)@;{e;y4*u+r`0HriiG=pqG@dC)H$X3H*0hc(j;Y3?? Y0G)eGfKwe{eE|`XT<8=WGNHM#LJi~%RuNZznH6y#2P#CcMdiII|gvkW}T*G%t TMXV4)00000NkvXXu0mjf$U%Lz literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/lightning_sword.png b/src/main/resources/assets/fantasysmp/textures/item/lightning_sword.png new file mode 100644 index 0000000000000000000000000000000000000000..b7e17b239d4a6df3c28cca62856190aae7cb41aa GIT binary patch literal 449 zcmV;y0Y3hTP)*=_*-u zEY5BboGa4J#ifH?N~uc{hlmt~P%Is+QItZ@lA%__vlnf&CT*z(4np#O@4b860snls zVR>1WX@{|GdpMlIgb-?3ma`;Da>WKJbzntN{svbn70O^;*QqFquJgbSn6n@VXh%jg z8bvCVLZMJ_x$l?V1B#a>=zh}u#^8874%0Ldi^ZU-D)RY!mucYV<|k(&2yARQ@qWXG zVR&FR=L*ohZH_z>%&x9sWO0Rt!(rFCSS%u&&H8S)D*;n{A05M7LPoV(bz-+mLnf2y z*_G!9*Y08>G>y00GHgQwv|Qh!yAtTh1U-Dnfz+PxIu!vHmI0yvVc|O^GT3~qL%X>H z(mPyBSf>bvfcYh$QKz`neUtDEWFibcFIz}!*PnxDU!_T#6yw33C)G*7;L?2!N9vW= r<@C632mHxJ2^O)@XtoC42fu+2w%4!k<^ge|00000NkvXXu0mjfqCvtB literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/mechanist_bow.png b/src/main/resources/assets/fantasysmp/textures/item/mechanist_bow.png new file mode 100644 index 0000000000000000000000000000000000000000..0d356fc03855f38fb230470643de6dae48c76d36 GIT binary patch literal 351 zcmV-l0igbgP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!T+*bt#(tm&dW* zLf3VOqR3vMs_Ns<4T2!JNRlKmK@iUT*A1$wf-K8>@jTC$n5Jo86-D{kFUu0+I3f%~ zIF19$vS1hnj>k;Xv@?Gr%Q7s>f;f(0n&w;KM>$Cntm}$2P4}+H?URo(@jV;p^=;ec zmuX(=9z_wqOyqfvVHn{1{-yYqOf*dc3fFZ{;kHa&`@Tm}6#Ozlb8p+W|986Pk_r0q xUDv_$JaEfI+qS6d8qepGUw%P{=SVqV>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ940fk9KK~y+TrIEi+ z!ax+qUrnHfPR5wH&~DU0Vn}pxQ8owt6I|6lz}4Ns0Y*3f0bEQ-hYpmPG`KWU5=hz@ zffPw>N(up<-f=V>fduuFyk76!`@Xy%@LvS-=^Oy|Isod&^uCHhp@8vt9A=iyW(6t; zPXKdj3eKNx*!TD()oPU!iJ}OxSST@Iu?sXWMPziKF{4Fn$0GTMkBOs8#PT^8Z;5ZJo+}$O6S(BgMX!)g53HM|PuP>5#cC@oz>7?KBc#O4LEeaq>$V_HQ zmWiVl5{U$zZV&{_1Mubq!jtw6%I+pCRx%?>KvqV?{eGW$rjR7Y>nEIMwwQ;9?$I<& zR84;lL_5Bb5T|fY!Nbf-}kXnsZaqCt}P~XyIpLz m+h`cZ?}YO-8jU{)0lop3ZQwrW$gTYV0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!T}e|Q&odz<%hIKS zWHKpk*Z2Kkg~)RJ*o*$Qo{~QUNC&U$`dkur|F$T6t4C%hILPr@cT)1%U+O<1(?%cX{i){i! zN1B?@5r!8pUVQ%i`NxkRpFVwh|Ni~kw{PFPdGqewyZ!t3v-LAPe*Adr)~y>hY}mGK z+wtSaFJ8QO>C&a6M~~jWfB(;)KRb5pm^g9b?c2Bi{{4IJ-n~70_IQ|z{`~p#z<~oA za@-FdJoxtQ+lLPyjvP7i@ZrO+U%#F^ckbrRoB#g(J9FmD)2B~gzI=J`;6VlkhLlyy zKpwO#3Gxg6PbOfnT9fL)z`(#+;1OBOz`%D1gc(IOyc!r77-o99IEH8h$DX~(*JL2V z5)iUQiAzgMOUdgX>-XA!|4+Z!QfqK;$;&e*buE5Kvv1winy8PELKI_a1Dh?y#DH Pfq}u()z4*}Q$iB}r->1O literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/mechanist_crossbow_arrow.png b/src/main/resources/assets/fantasysmp/textures/item/mechanist_crossbow_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..d01d16486a2426a49c6104e08eed5b6076275e5d GIT binary patch literal 563 zcmbuu*=y1P00;1|Q^`%1V(g(BqnF4POOuGbjL>GzmNL{q1sfL8TC_42kwGhrqQPLe z7$d~c*h`Rh2r|pfW5x*VhhYgGdBRdW9=uSzVt+#)_$*FHMZGeySuybcsv*k`u+aJ znPaI`%I$XB?RKlxs?};^u~@U&4241)8yna{I2>-ZTG41!e5S8nuREPi_5dBXa8o)^ ztyT$wzzt-xS&zqqYrqFoDwRYcfoWg~?RFbez%0C8Z$6)Qxm*CoyGFDC`1fT}dFMZY zJDJ-7(5)J~JP+)5?fu@5D~?Wby7_~1{j<%k(GcT5*{dghU(p+V+;_7<(}SIRUwKB|o4bcM+hB_K^@>v8 z71nhw-Mv5=9Q3w?xyR34w8+uqDvL@ydN#DOr1^7)(La1nMAi9Ub5dPj&Qpx8&4Vn} y6BXlBEg+{YEO)j?))SNJ(hJE)CRw09E~34ykym&p&2{e)JphP>(owTOsrd)e&M(XW literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/mechanist_crossbow_firework.png b/src/main/resources/assets/fantasysmp/textures/item/mechanist_crossbow_firework.png new file mode 100644 index 0000000000000000000000000000000000000000..d0bcdf11437eeb5e52e853c541c21d32cf951023 GIT binary patch literal 610 zcmV-o0-gPdP)MgH{QGZ6Je-xFsnLDcuAe z#7J~#LC}DU;9zILB@TivMmLo}ku*Alas&cWC5g-RvILX3IGkch0{H_!-|wAwHq{h= zaJ+ZN`+nZ{eShy1Ga4m`>Js6L7}s}q6@LHUQdxLXQSfnZ57ycpVB_9QZJ|&gzuyn{ zNhXtu%DWbA8$WK{#g)|*?!S6LQPcEXG#ZU5Q6Lb2&*zhn@pw$i?QodFs*3r!Ih+~g27cn!~Bl{EExOz#3d9+wWr_(|1K^j;V z;%#_49@-soHtKe}WEci5F6i`d{Vc7VpLfIuAnq|d2Yg;tggF=tka(Sd)#)qG-+jfY z;~FGnh7%7E3Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!Tax(k(2mPOLYMXrcvS-r>LmyXG3t$m!eQ8U^E&9 zZ>3TxffJ7QMZ8S!!PdzQwA*b^6vY>6wOS!kEEa=EB;v<@Vm_b8*HRX=uOHYsK8IW` z2cjtQKylVP%nC3Am5+0Mu^$py zOQw0LdZ*Jt#jWUhLLx*a5uO~thPy*N9_Q|wrU?>zA0+brVG0kWPdM1!)5jK^P7SWKHuxzHx^;3~LFzw!380%86^{cr zcCh0R051Qi8~|f#d}J7A-&qO(Q!TtM1U8;`HEy*7_$(V!NC40@Z8RF!*Vio;i`{M~ zNpewr(O@uWG#bC(zq`8|iA0jgBt=n$LZMtP*XwoSa*s--%49O7QmI<47K_DPE|*TH zEeV*X9722(eJXmEZL4otnSGX39Km`gg~9Hja6l^ZQ|oCdagIygv$& zm1hg&hHPV}_m^_pr5ZGUH&I_g!nJVf#2(8ubb9IA3ioyKu;Ar;(d_CDgMSYE)sK~{ zO7^|!`oI&tPV`u@)S+g~_WqTzp6W7+xj$Q_g--&}g}41D4Lou{+eL7`)?aP<`e!6; qDsI~Rse92j@u>Yiafx}`85Q@PpTVSr_rc#NC;@Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!TpGu|LlJt5#Xti3^Rs#cp06tu7!`aOf43DpX*Xsq7$;5*jjYiw5*Xw+@*=(N` zxZQ4?8tKEW^-(OB%UG+`kg35~EQZl&6vN>#Dxu)>`Bb|NE|&`ng#tF4P0VJq7>Ps> zH{e_Fj|90~4rN)!d_K=#U7E4f$=^xxm7qu2IjmMIR4NrHl}g}VUj^%Mua1$(%O{qe zZb}F$0o5ytB2=qYa11W6u7LLR@(~=<0~GVdNW^X=DuK~xhNdbYA97^(CNfMco#{A>}wf6-y{JI^9L;_hd7K_Di67jnA zB6SFN09WQLNH)J@;0owPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!T5-VL{Ui3Z5G{|nswnGSax@2&Y9WS zVgJRX+5d#qY6VG>Si2NOnREm+O~c`EV9VuF*d52|kYrhA)9F;41&G`n*=#mL7=}pG z6h%?se!nA05?rrW1VI4Tb+O;?MLfrRJ{N||<-&>2YOvXCU>FA0>$UJN7K<*q1!eYq zACJcap65Z=b&#!bbEvBNo=i9%kEp5&r_+gNZOmMl_K##jS(c#kP176%_A42H-b>l3 zL1Sfq6rt|sd5+y~*9q>IJt`8%F=*MgEdu(%bbl*AS+gv|`Fs}6e%Y_&fe5|3u5149 zbnpN3E4fAIPMxQz+itfQ9g-(TMQ*nnq9}r8S)=3@Es6GyAPrA*{EA;PV?WAc4qQ*( R&{zNf002ovPDHLkV1m`2wb1|o literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/poseidons_boots.png b/src/main/resources/assets/fantasysmp/textures/item/poseidons_boots.png new file mode 100644 index 0000000000000000000000000000000000000000..549d59b8116c6c9aad1cd126ab596b2d0b4f0f44 GIT binary patch literal 264 zcmV+j0r&oiP)IgVUiv?SxX6E;z5>aC)F1&S6vaP&GVt14GGH|X zs2MEx{v(POR0Dug-`>2%>447<9%0B~7ywowDaOFS$AfSx$mt+4EC9oRzhAyGFtD*= zD#a!SRE6CIB%}?50gw=eX#MpY(+HTDk{pWnAO@go{`3XY0FW5S5Rg}p3}Jz*gxLU6 z_~sp|0pEWxFn};055y283mD-p04achPhTM7=m0rpKytX$kr0N1Kq&wl7CqPWakKvb O0000 z5Ch#S;PL`^eicmHBei+hx2bTVo>}7nVqKI3Ec_T-q#7mBW>rWGu~mX-a*O!sQHoLT z8u5JQK|C|Z8ZpFblqMcNfn)@9BH1$<4be?*1ed2PnDxd^rh;^B`*&H(npir1#KTmY zP4G$gYhP$>#8UIQC0_$9U?9_A~ Qx&QzG07*qoM6N<$f{osqKmY&$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/poseidons_helmet.png b/src/main/resources/assets/fantasysmp/textures/item/poseidons_helmet.png new file mode 100644 index 0000000000000000000000000000000000000000..fe67291fb56c52a96ef0e9f188a5c5ec80e8a213 GIT binary patch literal 250 zcmVNd%5vvcxMgC(IfB6POJqw0HkY-6S1_m}(RH--b z85sC@{xf{~f?^00iYg?{yb5v*%sku(X+9nX1`#2MAxHq#0FVUK=FblvG5r1V6{7Ul zZwL)C1Px#s08;SqDHy|D@cb160|;XQ*bM+F{Qd*s0w5a~zzjr?N_lCBD{kCH=mUv? z0+OH?VE#o{iAx;ANKj0mg)}q(v5VvM+{lpt0A`yoUvx|1xBvhE07*qoM6N<$f&@)f AIRF3v literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/poseidons_leggings.png b/src/main/resources/assets/fantasysmp/textures/item/poseidons_leggings.png new file mode 100644 index 0000000000000000000000000000000000000000..4fa0c6529f741d8835052e10ab0fae4f1265449f GIT binary patch literal 258 zcmV+d0sa1oP)In?h~WTnk^eXy_5B9}!>2DOdRR~t12r>it1)ni z2!n;cy?G0!|9<%jQTFCNi2RRi2&w^4(?A;GnviYa;{h7-4#iF;Y|e#i{`H%I0fg}Y ztS$hn2Wh8a zM_^)i!KW|S-GD_L)c{CJBU&>^A!an9B^0=6xWq{aFWM*t0L2+Vi`ogh=>Px#07*qo IM6N<$g4*j|!vFvP literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/poseidons_trident.png b/src/main/resources/assets/fantasysmp/textures/item/poseidons_trident.png new file mode 100644 index 0000000000000000000000000000000000000000..c05c327089b2e6b94e024f2aaf77aac573eb3764 GIT binary patch literal 249 zcmV*z5YoU@pLkrAv7 zL0~h4S5xu7gscq1i^osE(x0#2M^*;67^@3lHiI++HR5$86T0mn%@QgqV4DeP#&9_- z&_K>7In@oAW=2v144b!DK7IPk0Ky~(7}PWXXI6i~knZ|1r=%HCPWR@)X;R2Qw~iH(HgEr zQ#415L$eWWBD6Rpfv6Ga1sNd)5{W}}MG<((4PiuI_gZ(PU8UYxLkdpk_x_&ec^|(6 znxAF@%>@2?0$d{k@Or&Woh!>S0)aq7IJ(*iE=dv-MX~htcs!bzMwl&|slt6e-`~Oo zL11pT`*)q^aydrM{}dh!2ARv{s>!*bcGAvyo`+I4*zI=s{eHyb@tS6~*4s=K9*IO? zu~-lag%FFyYJwBH<^yzy;7+F#nM?)_hXaX30?}x+u30U532>_$j9XsU-DM>_l}gnO zC$_EtdeAdqL(A+!nFu|2I2^9axoTWj09#w+qz4Iu6O)>VN_aY*hEe#p3DCorj?R*Z z){${$wOX~E6I>~sA?IoW-wvTJ*sM0R%Xzr6N2S6k7Y&r=n*y)uUqB+dd;9TxnT4E6 z0!j1WKdwMnnP;0f5lHuUcHtBZ)>ncF;)7gxac5?AD>S;y22if;!P z_IFKLgRTG-ewY=pojiL3?T0x9&d}8h42=SXJj01#Sj49RADwIP%9uQJ46+0q?3pKk zz{H{0$@x~|)bQ|X-ZNzv5y8)|?|%(W0<{k89G^p!WE39XYgUc?=5I_$;1ysx30Sxw R|KR`t002ovPDHLkV1mDb{XPHy literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/true_netherite_boots.png b/src/main/resources/assets/fantasysmp/textures/item/true_netherite_boots.png new file mode 100644 index 0000000000000000000000000000000000000000..56f3176b46ad3613c9ac4c5ad53add08a2f90d43 GIT binary patch literal 387 zcmV-}0et?6P)pGHAzH4R5(xFQaww^xYbW&`3Q@%=YFo89TURG#;u zegC}{$8`Frg$VUz^0c>pG)k#D_R5(w?Qaek-P!#_9NLybm4r)OQqDWilR#b3NaC0pb1!r|B zU0ikW2MDEm2S=fkIP0q5Bo4*JK(!BJ6QOBnlJiF@=+pEvRY-osNRz<86e) z0$ME*>2#WMicvef0Y>+HD!#ZU|3LFDMjl$Lxq) z+3YD3MUg3r!esfC>3WqPRej+;E0)ckIlFP~z=oVbqtSpYzaf!WgU>h3y}BMmrBWGm z6`Vhz3C5+V`n#{u8pDyr3YdWA;--2ay^@`6bBNs$9S0`({Dy|nooKH~NDxvORb lz-nQGjM{MV*roi{`2#tK#q^-5DKP*5002ovPDHLkV1k&9^LPLN literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/true_netherite_helmet.png b/src/main/resources/assets/fantasysmp/textures/item/true_netherite_helmet.png new file mode 100644 index 0000000000000000000000000000000000000000..6f9f75f9ddbc650a913c7db1aa6b51d15ba098a8 GIT binary patch literal 387 zcmV-}0et?6P)pGHAzH4R5(xFQq4-kKoI^mCa6siPo+X{z4atMfiGY$g}z1T8~D># z$jwLSt-XuYkgEqJf`aB)>_JLMX`4;5&PIi78t7RE_AuYfd^6w70)O6El>*0^2#Fg; zf-KXJrdpn6+ozTJ3WqG7&E7;5y@0=lP=78|1`A+bKGZb0a#P7Az}< zX&!;GjKU!}H&Ck?Xt!I4qQ<4~-(LOJ=_((iv3IdrS&~# z-R?=Qz2Cq7iGC7xj35ZMO~7ekasp}fLh=FOd{ZqU$`Wn+jP5)Uu6s{=I4|AYpc4wh hFSh@M%2xju`~p!dajmdb0j2-|002ovPDHLkV1gj#tD*n^ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/true_netherite_leggings.png b/src/main/resources/assets/fantasysmp/textures/item/true_netherite_leggings.png new file mode 100644 index 0000000000000000000000000000000000000000..ef5b3117cfc4ba21f68f8bee8063eaf3779e6de2 GIT binary patch literal 362 zcmV-w0hRuVP)pG97#k$R5(w?lCf^WFc5}+y8)>|Vk}D*UVwp}wNoF02S8$CEgPL9 zr1B2gcz|{&Z^4|UOfZl@oa8tsYK5IB%En1fB;Wo2eLfp_bO;+@z5XUZ)^HJayB`F> z($F~fm0CQVj^Mgo#+}sI92&Qa3wv0Y-?!h)d;kZYBU@gGB^FG#`vNC60t7c2 z=YXj6y|6(62wtxh#_<@_G(*Ooc20~+1ZUY2qiBLj@@)%;sFat(Qhrs#^hbd>K>IA2{rtVvzfDnAIxxJIZ4ud zVDou&M1^xc1G0s&58^Vb9+z)~) Q{Qv*}07*qoM6N<$g4>m(0{{R3 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/witherite_axe.png b/src/main/resources/assets/fantasysmp/textures/item/witherite_axe.png new file mode 100644 index 0000000000000000000000000000000000000000..324f8610474bfbe91269f51b416bfe21f5cd3da2 GIT binary patch literal 283 zcmV+$0p$LPP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0I*3!K~y+T<&QlM zgdiA12P}+MM317Cg~y<$wCC71#zaFSn<1=;?y^4?+w4ood=TCQ@Drqzo-1w-$e2ke z4#NPgb(rJvXHc-#`Yg+Q+qTJ9JcXByF+uLS&i8#E@?0WfKER7rRY56*vMjN#E5>oe zG)>sHZTFG|ge7%dGlQ7tc{rcvc`tccKv+W2IftSsAcVlOEQePlq1-gh{%_`ee#=?@ hihq;|#mn+_fEzqxQih$aeD(kU002ovPDHLkV1kOcaH;?R literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/witherite_boots.png b/src/main/resources/assets/fantasysmp/textures/item/witherite_boots.png new file mode 100644 index 0000000000000000000000000000000000000000..11d137d7072c698c5025bee9b4ef46be45f8f70e GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QUpf5YNl@{AtJ%S00P%pwbn2&FtC*b`33(60fx={ zm+WU?VBjq9h%9Dc;5!V$jK}j=q%bfrxO%!chG+!$b~AD@C~z>Z{qjFPFRw|!(KqL| zr&#;H2GOO(?43QQUanM1_p*WPZ!4!jo{qgK)wS898RKN|AosL-0n}k z67ku~@Y!N{fl2QCHl559*g8Zw;|xA=C3=%blG*Oc`^e71B0ilpUXO@geCy2>P`Ou literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/witherite_helmet.png b/src/main/resources/assets/fantasysmp/textures/item/witherite_helmet.png new file mode 100644 index 0000000000000000000000000000000000000000..264937b4de22fb07ba2bc5198caa91c486839d3c GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QUQUFVdQ&MBb@0H8HNy8r+H literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/fantasysmp/textures/item/witherite_sword.png b/src/main/resources/assets/fantasysmp/textures/item/witherite_sword.png new file mode 100644 index 0000000000000000000000000000000000000000..f7435ba47a764b420df70be3ed8540adaa022857 GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4rT@h1`S>QUh<9@@M?Sz`(#+;1OBOz`%D9gc)~C%zn$jz!2-{;uxY49NWjq zcR+!ICDP&cum9}jN4v{}h04~$&Gc+62=ea+5J@c}3=37=)VfLH{S*5KE3=9mOu6{1- HoD!M<`!Z0! literal 0 HcmV?d00001 diff --git a/src/main/resources/data/fantasysmp/recipe/witherite_boots.json b/src/main/resources/data/fantasysmp/recipe/witherite_boots.json new file mode 100644 index 0000000..753bde1 --- /dev/null +++ b/src/main/resources/data/fantasysmp/recipe/witherite_boots.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smithing_transform", + "template": "minecraft:netherite_upgrade_smithing_template", + "base": "minecraft:netherite_boots", + "addition": "minecraft:wither_skeleton_skull", + "result": { + "id": "fantasysmp:witherite_boots" + } +} diff --git a/src/main/resources/data/fantasysmp/recipe/witherite_chestplate.json b/src/main/resources/data/fantasysmp/recipe/witherite_chestplate.json new file mode 100644 index 0000000..ff74366 --- /dev/null +++ b/src/main/resources/data/fantasysmp/recipe/witherite_chestplate.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smithing_transform", + "template": "minecraft:netherite_upgrade_smithing_template", + "base": "minecraft:netherite_chestplate", + "addition": "minecraft:wither_skeleton_skull", + "result": { + "id": "fantasysmp:witherite_chestplate" + } +} diff --git a/src/main/resources/data/fantasysmp/recipe/witherite_helmet.json b/src/main/resources/data/fantasysmp/recipe/witherite_helmet.json new file mode 100644 index 0000000..ee4cdb1 --- /dev/null +++ b/src/main/resources/data/fantasysmp/recipe/witherite_helmet.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smithing_transform", + "template": "minecraft:netherite_upgrade_smithing_template", + "base": "minecraft:netherite_helmet", + "addition": "minecraft:wither_skeleton_skull", + "result": { + "id": "fantasysmp:witherite_helmet" + } +} diff --git a/src/main/resources/data/fantasysmp/recipe/witherite_leggings.json b/src/main/resources/data/fantasysmp/recipe/witherite_leggings.json new file mode 100644 index 0000000..51251f9 --- /dev/null +++ b/src/main/resources/data/fantasysmp/recipe/witherite_leggings.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smithing_transform", + "template": "minecraft:netherite_upgrade_smithing_template", + "base": "minecraft:netherite_leggings", + "addition": "minecraft:wither_skeleton_skull", + "result": { + "id": "fantasysmp:witherite_leggings" + } +} diff --git a/src/main/resources/data/fantasysmp/recipe/witherite_sword.json b/src/main/resources/data/fantasysmp/recipe/witherite_sword.json new file mode 100644 index 0000000..13d0580 --- /dev/null +++ b/src/main/resources/data/fantasysmp/recipe/witherite_sword.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:smithing_transform", + "template": "minecraft:netherite_upgrade_smithing_template", + "base": "minecraft:netherite_sword", + "addition": "minecraft:wither_skeleton_skull", + "result": { + "id": "fantasysmp:witherite_sword" + } +} \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json new file mode 100644 index 0000000..ddb3702 --- /dev/null +++ b/src/main/resources/fabric.mod.json @@ -0,0 +1,51 @@ +{ + "schemaVersion": 1, + "id": "fantasysmp", + "version": "${version}", + "name": "fantasysmp", + "description": "Custom items for fantasysmp", + "authors": [ + "Me!" + ], + "contact": { + "homepage": "https://git.zxq5.net/steven_legion/fantasysmp_fabric", + "sources": "https://git.zxq5.net/steven_legion/fantasysmp_fabric" + }, + "license": "CC0-1.0", + "icon": "assets/fantasysmp/icon.png", + "environment": "*", + "entrypoints": { + "main": [ + { + "value": "dev.zxq5.Fantasysmp", + "adapter": "kotlin" + } + ], + "client": [ + { + "value": "dev.zxq5.client.FantasysmpClient", + "adapter": "kotlin" + } + ], + "fabric-datagen": [ + { + "value": "dev.zxq5.client.FantasysmpDataGenerator", + "adapter": "kotlin" + } + ] + }, + "mixins": [ + "fantasysmp.mixins.json", + { + "config": "fantasysmp.client.mixins.json", + "environment": "client" + } + ], + "depends": { + "fabricloader": ">=0.19.3", + "minecraft": "~26.1.2", + "java": ">=25", + "fabric-api": "*", + "fabric-language-kotlin": "*" + } +} \ No newline at end of file diff --git a/src/main/resources/fantasysmp.mixins.json b/src/main/resources/fantasysmp.mixins.json new file mode 100644 index 0000000..4a323a9 --- /dev/null +++ b/src/main/resources/fantasysmp.mixins.json @@ -0,0 +1,14 @@ +{ + "required": true, + "package": "dev.zxq5.mixin", + "compatibilityLevel": "JAVA_25", + "mixins": [ + "ExampleMixin" + ], + "injectors": { + "defaultRequire": 1 + }, + "overwrites": { + "requireAnnotations": true + } +} \ No newline at end of file