From 185522a3084758afa311d44fac6710b68946b725 Mon Sep 17 00:00:00 2001 From: May P Date: Sat, 14 Feb 2026 19:46:57 +0200 Subject: [PATCH] initial commit based on terra originum --- .gitattributes | 2 + .gitignore | 25 ++ .vscode/settings.json | 5 + CHANGELOG | 1 + README.md | 4 +- TODO | 0 build.gradle | 124 ++++++++ gradle.properties | 23 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 58910 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 185 +++++++++++ gradlew.bat | 104 ++++++ settings.gradle | 10 + .../smithy/terraoriginum/TerraOriginum.java | 45 +++ .../terraoriginum/blocks/CottonCropBlock.java | 49 +++ .../smithy/terraoriginum/blocks/Crucifix.java | 22 ++ .../terraoriginum/blocks/CrucifixClass.java | 28 ++ .../terraoriginum/client/LayerRenderer.java | 17 + .../terraoriginum/client/TerraKeybinds.java | 25 ++ .../client/TerraOriginumClient.java | 13 + .../client/armour/GhostlyArmourModel.java | 23 ++ .../client/armour/GhostlyArmourRenderer.java | 16 + .../customMaterials/RobesMaterial.java | 89 ++++++ .../LightProtectionEnchantment.java | 39 +++ .../enchantment/SunProtectionEnchantment.java | 39 +++ .../terraoriginum/items/CottonItems.java | 19 ++ .../terraoriginum/items/GhostlyArmour.java | 108 +++++++ .../items/GhostlyArmourItems.java | 37 +++ .../terraoriginum/items/GhostlyItems.java | 24 ++ .../smithy/terraoriginum/items/IconItems.java | 22 ++ .../smithy/terraoriginum/items/SunTotem.java | 17 + .../smithy/terraoriginum/items/Umbrella.java | 26 ++ .../terraoriginum/items/UmbrellaDyeTest.java | 12 + .../terraoriginum/mixin/EntityMixin.java | 52 +++ .../mixin/IcarusHelperMixin.java | 47 +++ .../mixin/PlayerConditionsMixin.java | 35 ++ .../mixin/PlayerEntityMixin.java | 73 +++++ .../mixin/PowderSnowBlockMixin.java | 24 ++ .../mixin/client/IcarusClientMixin.java | 26 ++ .../power/CanStandOnPowderSnow.java | 11 + .../power/PreventBlockSlowness.java | 11 + .../terraoriginum/power/WingsPower.java | 113 +++++++ .../registry/ModEnchantments.java | 27 ++ .../terraoriginum/registry/ModPowers.java | 27 ++ .../terraoriginum/util/CodecHelper.java | 13 + .../terraoriginum/util/CustomDataTypes.java | 78 +++++ .../util/LootTableModifiers.java | 30 ++ .../terraoriginum/util/OptionalBool.java | 38 +++ .../terraoriginum/util/TerraHelper.java | 10 + src/main/resources/assets/coconut.jpg | Bin 0 -> 27656 bytes src/main/resources/assets/dwayne.png | Bin 0 -> 34290 bytes src/main/resources/assets/terraoriginum.png | Bin 0 -> 57466 bytes .../item/armor/ghost_armour.animation.json | 127 ++++++++ .../blockstates/cotton_crop_block.json | 29 ++ .../terraoriginum/blockstates/crucifix.json | 5 + .../geo/item/armor/ghost_armour.geo.json | 135 ++++++++ .../assets/terraoriginum/lang/en_us.json | 299 ++++++++++++++++++ .../models/block/cotton_crop_stage0.json | 7 + .../models/block/cotton_crop_stage1.json | 7 + .../models/block/cotton_crop_stage2.json | 7 + .../models/block/cotton_crop_stage3.json | 7 + .../models/block/cotton_crop_stage4.json | 7 + .../models/block/cotton_crop_stage5.json | 7 + .../terraoriginum/models/block/crucifix.json | 53 ++++ .../models/item/cotton_ball.json | 6 + .../models/item/cotton_seeds.json | 6 + .../terraoriginum/models/item/crucifix.json | 3 + .../models/item/ghostly_boots.json | 6 + .../models/item/ghostly_chestplate.json | 6 + .../models/item/ghostly_cloth.json | 6 + .../models/item/ghostly_helmet.json | 6 + .../models/item/ghostly_leggings.json | 6 + .../terraoriginum/models/item/mync_eye.json | 6 + .../terraoriginum/models/item/spirit.json | 6 + .../terraoriginum/models/item/sun_totem.json | 6 + .../terraoriginum/models/item/tiny.json | 6 + .../terraoriginum/models/item/umbrella.json | 292 +++++++++++++++++ .../terraoriginum/shaders/post/sobel.json | 17 + .../textures/block/crop_cotton_0.png | Bin 0 -> 449 bytes .../textures/block/crop_cotton_1.png | Bin 0 -> 474 bytes .../textures/block/crop_cotton_2.png | Bin 0 -> 508 bytes .../textures/block/crop_cotton_3.png | Bin 0 -> 562 bytes .../textures/block/crop_cotton_4.png | Bin 0 -> 577 bytes .../textures/block/crop_cotton_5.png | Bin 0 -> 589 bytes .../terraoriginum/textures/block/crucifix.png | Bin 0 -> 486 bytes .../textures/block/crucifix2.png | Bin 0 -> 246 bytes .../textures/gui/ability_bar.png | Bin 0 -> 3688 bytes .../terraoriginum/textures/gui/nothing.png | Bin 0 -> 1589 bytes .../textures/item/armor/ghost_armour.png | Bin 0 -> 3814 bytes .../textures/item/cotton_ball.png | Bin 0 -> 614 bytes .../textures/item/cotton_seeds.png | Bin 0 -> 200 bytes .../textures/item/ghostly_boots.png | Bin 0 -> 265 bytes .../textures/item/ghostly_chestplate.png | Bin 0 -> 365 bytes .../textures/item/ghostly_cloth.png | Bin 0 -> 373 bytes .../textures/item/ghostly_helmet.png | Bin 0 -> 521 bytes .../textures/item/ghostly_leggings.png | Bin 0 -> 336 bytes .../terraoriginum/textures/item/mync_eye.png | Bin 0 -> 172 bytes .../terraoriginum/textures/item/spirit.png | Bin 0 -> 1104 bytes .../terraoriginum/textures/item/sun_totem.png | Bin 0 -> 440 bytes .../terraoriginum/textures/item/tiny.png | Bin 0 -> 90 bytes .../terraoriginum/textures/item/umbrella.png | Bin 0 -> 12394 bytes .../textures/item/umbrellaoverlay.png | Bin 0 -> 638 bytes .../textures/models/armor/robes_layer_1.png | Bin 0 -> 1589 bytes .../textures/models/armor/robes_layer_2.png | Bin 0 -> 1589 bytes .../data/c/tags/items/cotton_balls.json | 6 + .../data/origins/origin_layers/origin.json | 39 +++ .../terraoriginum/damage_type/boiling.json | 5 + .../damage_type/burn_in_sun.json | 5 + .../damage_type/lack_of_ectoplasm.json | 5 + .../damage_type/lack_of_sun.json | 5 + .../terraoriginum/damage_type/last_stand.json | 5 + .../loot_tables/blocks/cotton_crop_block.json | 68 ++++ .../data/terraoriginum/origins/angel.json | 8 + .../data/terraoriginum/origins/blight.json | 15 + .../data/terraoriginum/origins/demon.json | 21 ++ .../data/terraoriginum/origins/dominion.json | 0 .../data/terraoriginum/origins/fairy.json | 17 + .../data/terraoriginum/origins/florian.json | 22 ++ .../terraoriginum/origins/immortal_human.json | 9 + .../data/terraoriginum/origins/kitsune.json | 32 ++ .../data/terraoriginum/origins/lato.json | 23 ++ .../data/terraoriginum/origins/merfolk.json | 18 ++ .../data/terraoriginum/origins/monarch.json | 19 ++ .../data/terraoriginum/origins/muckunde.json | 12 + .../data/terraoriginum/origins/munch.json | 22 ++ .../data/terraoriginum/origins/mync.json | 25 ++ .../data/terraoriginum/origins/serpenta.json | 21 ++ .../data/terraoriginum/origins/shade.json | 20 ++ .../data/terraoriginum/origins/spirit.json | 16 + .../data/terraoriginum/origins/sylt.json | 18 ++ .../data/terraoriginum/origins/wraith.json | 23 ++ .../data/terraoriginum/origins/yulde.json | 24 ++ .../powers/angel-powers/angel_wings.json | 0 .../powers/angel-powers/divine_grace.json | 42 +++ .../powers/angel-powers/lesser_heal_ray.json | 39 +++ .../blight-powers/bane_of_agriculture.json | 26 ++ .../powers/blight-powers/blighted_feet.json | 40 +++ .../powers/blight-powers/dead_cells.json | 8 + .../powers/blight-powers/florivory.json | 277 ++++++++++++++++ .../powers/blight-powers/foul_flesh.json | 10 + .../powers/blight-powers/foul_skin.json | 6 + .../powers/blight-powers/nether_spawn.json | 5 + .../powers/blight-powers/noregen.json | 4 + .../powers/demon-powers/extra_health.json | 9 + .../demon-powers/self_transfiguration1.json | 15 + .../demon-powers/self_transfiguration2.json | 45 +++ .../demon-powers/self_transfiguration3.json | 27 ++ .../powers/demon-powers/stained.json | 6 + .../dominion-powers/greater_heal_ray.json | 0 .../powers/dominion-powers/larger.json | 0 .../dominion-powers/suppression_of_power.json | 0 .../data/terraoriginum/powers/ectotest.json | 21 ++ .../powers/fairy-powers/fragile.json | 8 + .../powers/fairy-powers/nimble.json | 23 ++ .../powers/fairy-powers/pollenation.json | 26 ++ .../powers/fairy-powers/smallheight.json | 8 + .../fairy-powers/smallhitboxheight.json | 9 + .../powers/fairy-powers/smallhitboxwidth.json | 9 + .../powers/fairy-powers/smallwidth.json | 9 + .../powers/fairy-powers/yummyhoney.json | 20 ++ .../powers/florian-powers/absorbing.json | 26 ++ .../powers/florian-powers/aura_of_growth.json | 26 ++ .../powers/florian-powers/bonemeal.json | 22 ++ .../powers/florian-powers/compost.json | 87 +++++ .../powers/florian-powers/five_hearts.json | 9 + .../powers/florian-powers/flammable.json | 11 + .../powers/florian-powers/green_fingered.json | 7 + .../powers/florian-powers/passivemobs.json | 21 ++ .../powers/florian-powers/photosynthesis.json | 87 +++++ .../powers/florian-powers/pocket_sand.json | 37 +++ .../powers/florian-powers/small.json | 8 + .../powers/florian-powers/small_hitbox.json | 9 + .../powers/florian-powers/small_width.json | 9 + .../florian-powers/small_width_hitbox.json | 9 + .../powers/florian-powers/weak.json | 17 + .../immortal_human-powers/immortal.json | 30 ++ .../immortal_human-powers/pathetic.json | 14 + .../powers/kitsune-powers/armor.json | 27 ++ .../powers/kitsune-powers/diet.json | 36 +++ .../powers/kitsune-powers/fox_eyes.json | 10 + .../powers/kitsune-powers/fox_pouch.json | 8 + .../kitsune-powers/fox_pouch_sound.json | 22 ++ .../powers/kitsune-powers/fragilefox.json | 10 + .../powers/kitsune-powers/hungy.json | 7 + .../powers/kitsune-powers/invisibility.json | 9 + .../powers/kitsune-powers/monch.json | 22 ++ .../powers/kitsune-powers/paws.json | 7 + .../powers/kitsune-powers/paws_shield.json | 10 + .../powers/kitsune-powers/phantomize.json | 9 + .../powers/kitsune-powers/phase_fix.json | 24 ++ .../powers/kitsune-powers/phasing.json | 18 ++ .../powers/kitsune-powers/phasing_jump.json | 12 + .../powers/kitsune-powers/pounce.json | 41 +++ .../kitsune-powers/pounce_aerialdamage.json | 54 ++++ .../powers/kitsune-powers/pounce_falling.json | 9 + .../powers/kitsune-powers/run.json | 17 + .../powers/kitsune-powers/smolman.json | 25 ++ .../powers/kitsune-powers/speed.json | 11 + .../powers/kitsune-powers/startbox.json | 17 + .../powers/kitsune-powers/yum.json | 21 ++ .../powers/kitsune-powers/yummy_berries.json | 21 ++ .../powers/kitsune-powers/zberry_no_hurt.json | 8 + .../powers/lato-powers/lato_blooded.json | 9 + .../powers/lato-powers/long_arms.json | 19 ++ .../powers/lato-powers/natural_armor.json | 9 + .../powers/lato-powers/perfect_vision.json | 6 + .../powers/lato-powers/rage.json | 25 ++ .../powers/lato-powers/rage_addition.json | 26 ++ .../powers/lato-powers/strong.json | 13 + .../powers/lato-powers/sun_damage.json | 37 +++ .../powers/lato-powers/tailwind.json | 9 + .../powers/lato-powers/tall.json | 8 + .../powers/lato-powers/tall_hitbox.json | 9 + .../powers/lato-powers/tall_width.json | 9 + .../powers/lato-powers/tall_width_hitbox.json | 9 + .../powers/lato-powers/teleport.json | 53 ++++ .../powers/lato-powers/twelve_hearts.json | 8 + .../powers/merfolk-powers/hydration.json | 11 + .../powers/merfolk-powers/hydrodiff.json | 79 +++++ .../merfolk-powers/lackofhydrodamage.json | 24 ++ .../powers/merfolk-powers/waterbreathing.json | 12 + .../powers/merfolk-powers/webbedfeet.json | 14 + .../powers/merfolk-powers/webbedfeet2.json | 12 + .../powers/merfolk-powers/wethands.json | 12 + .../monarch-powers/hydropetrification.json | 29 ++ .../monarch-powers/hyperefficient_blood.json | 10 + .../monarch-powers/instant_transmission.json | 66 ++++ .../monarch-powers/lackofsundamage.json | 24 ++ .../powers/monarch-powers/nuclear_rush.json | 55 ++++ .../powers/monarch-powers/nyctophobia.json | 51 +++ .../powers/monarch-powers/shining.json | 6 + .../powers/monarch-powers/solar_energy.json | 11 + .../powers/monarch-powers/sun_fueled.json | 13 + .../powers/monarch-powers/super_dash.json | 44 +++ .../powers/monarch-powers/totem_fueled.json | 24 ++ .../powers/muckunde-powers/hydrophobic.json | 3 + .../powers/muckunde-powers/likesoil1.json | 9 + .../powers/muckunde-powers/likesoil2.json | 51 +++ .../powers/muckunde-powers/toughskin.json | 8 + .../powers/muckunde-powers/yummybeets.json | 19 ++ .../powers/munch-powers/better_health.json | 7 + .../powers/munch-powers/climbing.json | 79 +++++ .../powers/munch-powers/little_health.json | 8 + .../powers/munch-powers/mounting.json | 56 ++++ .../powers/munch-powers/nimble.json | 37 +++ .../powers/munch-powers/quiet.json | 7 + .../powers/munch-powers/short_arms.json | 8 + .../powers/munch-powers/speedy_bastard.json | 22 ++ .../powers/munch-powers/tiny.json | 8 + .../powers/munch-powers/tiny_appetite.json | 8 + .../powers/munch-powers/tiny_motion.json | 8 + .../powers/munch-powers/tiny_width.json | 9 + .../powers/mync-powers/mync_blind.json | 34 ++ .../powers/mync-powers/mync_echolocate.json | 94 ++++++ .../mync-powers/mync_natural_armour.json | 9 + .../powers/mync-powers/mync_rage.json | 25 ++ .../mync-powers/mync_rage_addition.json | 26 ++ .../powers/mync-powers/mync_strong.json | 13 + .../powers/mync-powers/mync_tailwind.json | 9 + .../powers/mync-powers/mync_vision.json | 5 + .../powers/serpenta-powers/boilingshot.json | 45 +++ .../powers/serpenta-powers/scales.json | 8 + .../powers/shade-powers/invisibility1.json | 15 + .../powers/shade-powers/invisibility2.json | 10 + .../powers/shade-powers/invisibility3.json | 27 ++ .../powers/spirit-powers/ectodiff.json | 140 ++++++++ .../powers/spirit-powers/ectoplasm.json | 11 + .../powers/spirit-powers/lackofectodmg.json | 24 ++ .../powers/spirit-powers/nightvis.json | 4 + .../powers/spirit-powers/phasing1.json | 15 + .../powers/spirit-powers/phasing2.json | 26 ++ .../powers/spirit-powers/phasing3.json | 27 ++ .../powers/spirit-powers/pure_ghost.json | 0 .../powers/spirit-powers/skin.json | 5 + .../powers/spirit-powers/undead.json | 4 + .../data/terraoriginum/powers/wings.json | 4 + .../powers/wraith-powers/charred.json | 7 + .../powers/wraith-powers/soaring1.json | 15 + .../powers/wraith-powers/soaring2.json | 9 + .../powers/wraith-powers/soaring3.json | 27 ++ .../powers/wraith-powers/torment1.json | 15 + .../powers/wraith-powers/torment2.json | 45 +++ .../powers/wraith-powers/torment3.json | 27 ++ .../powers/yulde-powers/last_stand-death.json | 20 ++ .../yulde-powers/last_stand-effects.json | 26 ++ .../powers/yulde-powers/last_stand.json | 25 ++ .../terraoriginum/recipes/ghostly_boots.json | 20 ++ .../recipes/ghostly_chestplate.json | 20 ++ .../terraoriginum/recipes/ghostly_cloth.json | 20 ++ .../terraoriginum/recipes/ghostly_helmet.json | 20 ++ .../recipes/ghostly_leggings.json | 20 ++ .../data/terraoriginum/recipes/sun_totem.json | 26 ++ .../data/terraoriginum/recipes/umbrella.json | 23 ++ .../data/terraoriginum/tags/blocks/bees.json | 10 + .../tags/blocks/hexblade_unphaseable.json | 10 + .../terraoriginum/tags/blocks/hot_blocks.json | 12 + .../terraoriginum/tags/blocks/mushrooms.json | 19 ++ .../terraoriginum/tags/blocks/myceliums.json | 9 + .../terraoriginum/tags/blocks/nature.json | 35 ++ .../terraoriginum/tags/blocks/non_solid.json | 62 ++++ .../tags/blocks/ocean_monument.json | 18 ++ .../tags/blocks/path_blocks.json | 12 + .../tags/blocks/stone_types.json | 11 + .../terraoriginum/tags/blocks/unphasable.json | 13 + .../terraoriginum/tags/blocks/valuores.json | 10 + .../data/terraoriginum/tags/blocks/wool.json | 22 ++ .../tags/entity_types/hostiles.json | 33 ++ .../tags/entity_types/innocent.json | 22 ++ .../tags/entity_types/nomercy.json | 12 + .../tags/entity_types/unholy.json | 13 + .../data/terraoriginum/tags/items/blades.json | 10 + .../data/terraoriginum/tags/items/boots.json | 6 + .../data/terraoriginum/tags/items/break.json | 20 ++ .../terraoriginum/tags/items/chestplate.json | 6 + .../terraoriginum/tags/items/giweapons.json | 12 + .../data/terraoriginum/tags/items/helmet.json | 6 + .../terraoriginum/tags/items/leggings.json | 6 + .../tags/items/unobtainable.json | 6 + .../terraoriginum/tags/items/weapons.json | 16 + src/main/resources/fabric.mod.json | 42 +++ src/main/resources/terra.mixins.json | 19 ++ 321 files changed, 7427 insertions(+), 3 deletions(-) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .vscode/settings.json create mode 100644 CHANGELOG create mode 100644 TODO create mode 100644 build.gradle 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 create mode 100644 src/main/java/com/smithy/terraoriginum/TerraOriginum.java create mode 100644 src/main/java/com/smithy/terraoriginum/blocks/CottonCropBlock.java create mode 100644 src/main/java/com/smithy/terraoriginum/blocks/Crucifix.java create mode 100644 src/main/java/com/smithy/terraoriginum/blocks/CrucifixClass.java create mode 100644 src/main/java/com/smithy/terraoriginum/client/LayerRenderer.java create mode 100644 src/main/java/com/smithy/terraoriginum/client/TerraKeybinds.java create mode 100644 src/main/java/com/smithy/terraoriginum/client/TerraOriginumClient.java create mode 100644 src/main/java/com/smithy/terraoriginum/client/armour/GhostlyArmourModel.java create mode 100644 src/main/java/com/smithy/terraoriginum/client/armour/GhostlyArmourRenderer.java create mode 100644 src/main/java/com/smithy/terraoriginum/customMaterials/RobesMaterial.java create mode 100644 src/main/java/com/smithy/terraoriginum/enchantment/LightProtectionEnchantment.java create mode 100644 src/main/java/com/smithy/terraoriginum/enchantment/SunProtectionEnchantment.java create mode 100644 src/main/java/com/smithy/terraoriginum/items/CottonItems.java create mode 100644 src/main/java/com/smithy/terraoriginum/items/GhostlyArmour.java create mode 100644 src/main/java/com/smithy/terraoriginum/items/GhostlyArmourItems.java create mode 100644 src/main/java/com/smithy/terraoriginum/items/GhostlyItems.java create mode 100644 src/main/java/com/smithy/terraoriginum/items/IconItems.java create mode 100644 src/main/java/com/smithy/terraoriginum/items/SunTotem.java create mode 100644 src/main/java/com/smithy/terraoriginum/items/Umbrella.java create mode 100644 src/main/java/com/smithy/terraoriginum/items/UmbrellaDyeTest.java create mode 100644 src/main/java/com/smithy/terraoriginum/mixin/EntityMixin.java create mode 100644 src/main/java/com/smithy/terraoriginum/mixin/IcarusHelperMixin.java create mode 100644 src/main/java/com/smithy/terraoriginum/mixin/PlayerConditionsMixin.java create mode 100644 src/main/java/com/smithy/terraoriginum/mixin/PlayerEntityMixin.java create mode 100644 src/main/java/com/smithy/terraoriginum/mixin/PowderSnowBlockMixin.java create mode 100644 src/main/java/com/smithy/terraoriginum/mixin/client/IcarusClientMixin.java create mode 100644 src/main/java/com/smithy/terraoriginum/power/CanStandOnPowderSnow.java create mode 100644 src/main/java/com/smithy/terraoriginum/power/PreventBlockSlowness.java create mode 100644 src/main/java/com/smithy/terraoriginum/power/WingsPower.java create mode 100644 src/main/java/com/smithy/terraoriginum/registry/ModEnchantments.java create mode 100644 src/main/java/com/smithy/terraoriginum/registry/ModPowers.java create mode 100644 src/main/java/com/smithy/terraoriginum/util/CodecHelper.java create mode 100644 src/main/java/com/smithy/terraoriginum/util/CustomDataTypes.java create mode 100644 src/main/java/com/smithy/terraoriginum/util/LootTableModifiers.java create mode 100644 src/main/java/com/smithy/terraoriginum/util/OptionalBool.java create mode 100644 src/main/java/com/smithy/terraoriginum/util/TerraHelper.java create mode 100644 src/main/resources/assets/coconut.jpg create mode 100644 src/main/resources/assets/dwayne.png create mode 100644 src/main/resources/assets/terraoriginum.png create mode 100644 src/main/resources/assets/terraoriginum/animations/item/armor/ghost_armour.animation.json create mode 100644 src/main/resources/assets/terraoriginum/blockstates/cotton_crop_block.json create mode 100644 src/main/resources/assets/terraoriginum/blockstates/crucifix.json create mode 100644 src/main/resources/assets/terraoriginum/geo/item/armor/ghost_armour.geo.json create mode 100644 src/main/resources/assets/terraoriginum/lang/en_us.json create mode 100644 src/main/resources/assets/terraoriginum/models/block/cotton_crop_stage0.json create mode 100644 src/main/resources/assets/terraoriginum/models/block/cotton_crop_stage1.json create mode 100644 src/main/resources/assets/terraoriginum/models/block/cotton_crop_stage2.json create mode 100644 src/main/resources/assets/terraoriginum/models/block/cotton_crop_stage3.json create mode 100644 src/main/resources/assets/terraoriginum/models/block/cotton_crop_stage4.json create mode 100644 src/main/resources/assets/terraoriginum/models/block/cotton_crop_stage5.json create mode 100644 src/main/resources/assets/terraoriginum/models/block/crucifix.json create mode 100644 src/main/resources/assets/terraoriginum/models/item/cotton_ball.json create mode 100644 src/main/resources/assets/terraoriginum/models/item/cotton_seeds.json create mode 100644 src/main/resources/assets/terraoriginum/models/item/crucifix.json create mode 100644 src/main/resources/assets/terraoriginum/models/item/ghostly_boots.json create mode 100644 src/main/resources/assets/terraoriginum/models/item/ghostly_chestplate.json create mode 100644 src/main/resources/assets/terraoriginum/models/item/ghostly_cloth.json create mode 100644 src/main/resources/assets/terraoriginum/models/item/ghostly_helmet.json create mode 100644 src/main/resources/assets/terraoriginum/models/item/ghostly_leggings.json create mode 100644 src/main/resources/assets/terraoriginum/models/item/mync_eye.json create mode 100644 src/main/resources/assets/terraoriginum/models/item/spirit.json create mode 100644 src/main/resources/assets/terraoriginum/models/item/sun_totem.json create mode 100644 src/main/resources/assets/terraoriginum/models/item/tiny.json create mode 100644 src/main/resources/assets/terraoriginum/models/item/umbrella.json create mode 100644 src/main/resources/assets/terraoriginum/shaders/post/sobel.json create mode 100644 src/main/resources/assets/terraoriginum/textures/block/crop_cotton_0.png create mode 100644 src/main/resources/assets/terraoriginum/textures/block/crop_cotton_1.png create mode 100644 src/main/resources/assets/terraoriginum/textures/block/crop_cotton_2.png create mode 100644 src/main/resources/assets/terraoriginum/textures/block/crop_cotton_3.png create mode 100644 src/main/resources/assets/terraoriginum/textures/block/crop_cotton_4.png create mode 100644 src/main/resources/assets/terraoriginum/textures/block/crop_cotton_5.png create mode 100644 src/main/resources/assets/terraoriginum/textures/block/crucifix.png create mode 100644 src/main/resources/assets/terraoriginum/textures/block/crucifix2.png create mode 100644 src/main/resources/assets/terraoriginum/textures/gui/ability_bar.png create mode 100755 src/main/resources/assets/terraoriginum/textures/gui/nothing.png create mode 100644 src/main/resources/assets/terraoriginum/textures/item/armor/ghost_armour.png create mode 100644 src/main/resources/assets/terraoriginum/textures/item/cotton_ball.png create mode 100644 src/main/resources/assets/terraoriginum/textures/item/cotton_seeds.png create mode 100644 src/main/resources/assets/terraoriginum/textures/item/ghostly_boots.png create mode 100644 src/main/resources/assets/terraoriginum/textures/item/ghostly_chestplate.png create mode 100644 src/main/resources/assets/terraoriginum/textures/item/ghostly_cloth.png create mode 100644 src/main/resources/assets/terraoriginum/textures/item/ghostly_helmet.png create mode 100644 src/main/resources/assets/terraoriginum/textures/item/ghostly_leggings.png create mode 100644 src/main/resources/assets/terraoriginum/textures/item/mync_eye.png create mode 100644 src/main/resources/assets/terraoriginum/textures/item/spirit.png create mode 100644 src/main/resources/assets/terraoriginum/textures/item/sun_totem.png create mode 100644 src/main/resources/assets/terraoriginum/textures/item/tiny.png create mode 100644 src/main/resources/assets/terraoriginum/textures/item/umbrella.png create mode 100644 src/main/resources/assets/terraoriginum/textures/item/umbrellaoverlay.png create mode 100755 src/main/resources/assets/terraoriginum/textures/models/armor/robes_layer_1.png create mode 100755 src/main/resources/assets/terraoriginum/textures/models/armor/robes_layer_2.png create mode 100644 src/main/resources/data/c/tags/items/cotton_balls.json create mode 100644 src/main/resources/data/origins/origin_layers/origin.json create mode 100644 src/main/resources/data/terraoriginum/damage_type/boiling.json create mode 100644 src/main/resources/data/terraoriginum/damage_type/burn_in_sun.json create mode 100644 src/main/resources/data/terraoriginum/damage_type/lack_of_ectoplasm.json create mode 100644 src/main/resources/data/terraoriginum/damage_type/lack_of_sun.json create mode 100644 src/main/resources/data/terraoriginum/damage_type/last_stand.json create mode 100644 src/main/resources/data/terraoriginum/loot_tables/blocks/cotton_crop_block.json create mode 100644 src/main/resources/data/terraoriginum/origins/angel.json create mode 100644 src/main/resources/data/terraoriginum/origins/blight.json create mode 100644 src/main/resources/data/terraoriginum/origins/demon.json create mode 100644 src/main/resources/data/terraoriginum/origins/dominion.json create mode 100644 src/main/resources/data/terraoriginum/origins/fairy.json create mode 100644 src/main/resources/data/terraoriginum/origins/florian.json create mode 100644 src/main/resources/data/terraoriginum/origins/immortal_human.json create mode 100644 src/main/resources/data/terraoriginum/origins/kitsune.json create mode 100755 src/main/resources/data/terraoriginum/origins/lato.json create mode 100644 src/main/resources/data/terraoriginum/origins/merfolk.json create mode 100644 src/main/resources/data/terraoriginum/origins/monarch.json create mode 100644 src/main/resources/data/terraoriginum/origins/muckunde.json create mode 100644 src/main/resources/data/terraoriginum/origins/munch.json create mode 100644 src/main/resources/data/terraoriginum/origins/mync.json create mode 100644 src/main/resources/data/terraoriginum/origins/serpenta.json create mode 100644 src/main/resources/data/terraoriginum/origins/shade.json create mode 100644 src/main/resources/data/terraoriginum/origins/spirit.json create mode 100644 src/main/resources/data/terraoriginum/origins/sylt.json create mode 100644 src/main/resources/data/terraoriginum/origins/wraith.json create mode 100755 src/main/resources/data/terraoriginum/origins/yulde.json create mode 100644 src/main/resources/data/terraoriginum/powers/angel-powers/angel_wings.json create mode 100644 src/main/resources/data/terraoriginum/powers/angel-powers/divine_grace.json create mode 100644 src/main/resources/data/terraoriginum/powers/angel-powers/lesser_heal_ray.json create mode 100644 src/main/resources/data/terraoriginum/powers/blight-powers/bane_of_agriculture.json create mode 100644 src/main/resources/data/terraoriginum/powers/blight-powers/blighted_feet.json create mode 100644 src/main/resources/data/terraoriginum/powers/blight-powers/dead_cells.json create mode 100644 src/main/resources/data/terraoriginum/powers/blight-powers/florivory.json create mode 100644 src/main/resources/data/terraoriginum/powers/blight-powers/foul_flesh.json create mode 100644 src/main/resources/data/terraoriginum/powers/blight-powers/foul_skin.json create mode 100644 src/main/resources/data/terraoriginum/powers/blight-powers/nether_spawn.json create mode 100644 src/main/resources/data/terraoriginum/powers/blight-powers/noregen.json create mode 100644 src/main/resources/data/terraoriginum/powers/demon-powers/extra_health.json create mode 100644 src/main/resources/data/terraoriginum/powers/demon-powers/self_transfiguration1.json create mode 100644 src/main/resources/data/terraoriginum/powers/demon-powers/self_transfiguration2.json create mode 100644 src/main/resources/data/terraoriginum/powers/demon-powers/self_transfiguration3.json create mode 100644 src/main/resources/data/terraoriginum/powers/demon-powers/stained.json create mode 100644 src/main/resources/data/terraoriginum/powers/dominion-powers/greater_heal_ray.json create mode 100644 src/main/resources/data/terraoriginum/powers/dominion-powers/larger.json create mode 100644 src/main/resources/data/terraoriginum/powers/dominion-powers/suppression_of_power.json create mode 100644 src/main/resources/data/terraoriginum/powers/ectotest.json create mode 100644 src/main/resources/data/terraoriginum/powers/fairy-powers/fragile.json create mode 100644 src/main/resources/data/terraoriginum/powers/fairy-powers/nimble.json create mode 100644 src/main/resources/data/terraoriginum/powers/fairy-powers/pollenation.json create mode 100644 src/main/resources/data/terraoriginum/powers/fairy-powers/smallheight.json create mode 100644 src/main/resources/data/terraoriginum/powers/fairy-powers/smallhitboxheight.json create mode 100644 src/main/resources/data/terraoriginum/powers/fairy-powers/smallhitboxwidth.json create mode 100644 src/main/resources/data/terraoriginum/powers/fairy-powers/smallwidth.json create mode 100644 src/main/resources/data/terraoriginum/powers/fairy-powers/yummyhoney.json create mode 100644 src/main/resources/data/terraoriginum/powers/florian-powers/absorbing.json create mode 100644 src/main/resources/data/terraoriginum/powers/florian-powers/aura_of_growth.json create mode 100644 src/main/resources/data/terraoriginum/powers/florian-powers/bonemeal.json create mode 100644 src/main/resources/data/terraoriginum/powers/florian-powers/compost.json create mode 100755 src/main/resources/data/terraoriginum/powers/florian-powers/five_hearts.json create mode 100644 src/main/resources/data/terraoriginum/powers/florian-powers/flammable.json create mode 100644 src/main/resources/data/terraoriginum/powers/florian-powers/green_fingered.json create mode 100644 src/main/resources/data/terraoriginum/powers/florian-powers/passivemobs.json create mode 100644 src/main/resources/data/terraoriginum/powers/florian-powers/photosynthesis.json create mode 100644 src/main/resources/data/terraoriginum/powers/florian-powers/pocket_sand.json create mode 100644 src/main/resources/data/terraoriginum/powers/florian-powers/small.json create mode 100644 src/main/resources/data/terraoriginum/powers/florian-powers/small_hitbox.json create mode 100644 src/main/resources/data/terraoriginum/powers/florian-powers/small_width.json create mode 100644 src/main/resources/data/terraoriginum/powers/florian-powers/small_width_hitbox.json create mode 100644 src/main/resources/data/terraoriginum/powers/florian-powers/weak.json create mode 100644 src/main/resources/data/terraoriginum/powers/immortal_human-powers/immortal.json create mode 100644 src/main/resources/data/terraoriginum/powers/immortal_human-powers/pathetic.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/armor.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/diet.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/fox_eyes.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/fox_pouch.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/fox_pouch_sound.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/fragilefox.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/hungy.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/invisibility.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/monch.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/paws.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/paws_shield.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/phantomize.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/phase_fix.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/phasing.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/phasing_jump.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/pounce.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/pounce_aerialdamage.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/pounce_falling.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/run.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/smolman.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/speed.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/startbox.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/yum.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/yummy_berries.json create mode 100644 src/main/resources/data/terraoriginum/powers/kitsune-powers/zberry_no_hurt.json create mode 100755 src/main/resources/data/terraoriginum/powers/lato-powers/lato_blooded.json create mode 100644 src/main/resources/data/terraoriginum/powers/lato-powers/long_arms.json create mode 100644 src/main/resources/data/terraoriginum/powers/lato-powers/natural_armor.json create mode 100755 src/main/resources/data/terraoriginum/powers/lato-powers/perfect_vision.json create mode 100755 src/main/resources/data/terraoriginum/powers/lato-powers/rage.json create mode 100755 src/main/resources/data/terraoriginum/powers/lato-powers/rage_addition.json create mode 100644 src/main/resources/data/terraoriginum/powers/lato-powers/strong.json create mode 100644 src/main/resources/data/terraoriginum/powers/lato-powers/sun_damage.json create mode 100644 src/main/resources/data/terraoriginum/powers/lato-powers/tailwind.json create mode 100644 src/main/resources/data/terraoriginum/powers/lato-powers/tall.json create mode 100644 src/main/resources/data/terraoriginum/powers/lato-powers/tall_hitbox.json create mode 100644 src/main/resources/data/terraoriginum/powers/lato-powers/tall_width.json create mode 100644 src/main/resources/data/terraoriginum/powers/lato-powers/tall_width_hitbox.json create mode 100644 src/main/resources/data/terraoriginum/powers/lato-powers/teleport.json create mode 100755 src/main/resources/data/terraoriginum/powers/lato-powers/twelve_hearts.json create mode 100644 src/main/resources/data/terraoriginum/powers/merfolk-powers/hydration.json create mode 100644 src/main/resources/data/terraoriginum/powers/merfolk-powers/hydrodiff.json create mode 100644 src/main/resources/data/terraoriginum/powers/merfolk-powers/lackofhydrodamage.json create mode 100644 src/main/resources/data/terraoriginum/powers/merfolk-powers/waterbreathing.json create mode 100644 src/main/resources/data/terraoriginum/powers/merfolk-powers/webbedfeet.json create mode 100644 src/main/resources/data/terraoriginum/powers/merfolk-powers/webbedfeet2.json create mode 100644 src/main/resources/data/terraoriginum/powers/merfolk-powers/wethands.json create mode 100644 src/main/resources/data/terraoriginum/powers/monarch-powers/hydropetrification.json create mode 100644 src/main/resources/data/terraoriginum/powers/monarch-powers/hyperefficient_blood.json create mode 100644 src/main/resources/data/terraoriginum/powers/monarch-powers/instant_transmission.json create mode 100644 src/main/resources/data/terraoriginum/powers/monarch-powers/lackofsundamage.json create mode 100644 src/main/resources/data/terraoriginum/powers/monarch-powers/nuclear_rush.json create mode 100644 src/main/resources/data/terraoriginum/powers/monarch-powers/nyctophobia.json create mode 100644 src/main/resources/data/terraoriginum/powers/monarch-powers/shining.json create mode 100644 src/main/resources/data/terraoriginum/powers/monarch-powers/solar_energy.json create mode 100644 src/main/resources/data/terraoriginum/powers/monarch-powers/sun_fueled.json create mode 100644 src/main/resources/data/terraoriginum/powers/monarch-powers/super_dash.json create mode 100644 src/main/resources/data/terraoriginum/powers/monarch-powers/totem_fueled.json create mode 100644 src/main/resources/data/terraoriginum/powers/muckunde-powers/hydrophobic.json create mode 100644 src/main/resources/data/terraoriginum/powers/muckunde-powers/likesoil1.json create mode 100644 src/main/resources/data/terraoriginum/powers/muckunde-powers/likesoil2.json create mode 100644 src/main/resources/data/terraoriginum/powers/muckunde-powers/toughskin.json create mode 100644 src/main/resources/data/terraoriginum/powers/muckunde-powers/yummybeets.json create mode 100644 src/main/resources/data/terraoriginum/powers/munch-powers/better_health.json create mode 100644 src/main/resources/data/terraoriginum/powers/munch-powers/climbing.json create mode 100755 src/main/resources/data/terraoriginum/powers/munch-powers/little_health.json create mode 100644 src/main/resources/data/terraoriginum/powers/munch-powers/mounting.json create mode 100644 src/main/resources/data/terraoriginum/powers/munch-powers/nimble.json create mode 100644 src/main/resources/data/terraoriginum/powers/munch-powers/quiet.json create mode 100644 src/main/resources/data/terraoriginum/powers/munch-powers/short_arms.json create mode 100644 src/main/resources/data/terraoriginum/powers/munch-powers/speedy_bastard.json create mode 100644 src/main/resources/data/terraoriginum/powers/munch-powers/tiny.json create mode 100644 src/main/resources/data/terraoriginum/powers/munch-powers/tiny_appetite.json create mode 100644 src/main/resources/data/terraoriginum/powers/munch-powers/tiny_motion.json create mode 100644 src/main/resources/data/terraoriginum/powers/munch-powers/tiny_width.json create mode 100644 src/main/resources/data/terraoriginum/powers/mync-powers/mync_blind.json create mode 100644 src/main/resources/data/terraoriginum/powers/mync-powers/mync_echolocate.json create mode 100644 src/main/resources/data/terraoriginum/powers/mync-powers/mync_natural_armour.json create mode 100755 src/main/resources/data/terraoriginum/powers/mync-powers/mync_rage.json create mode 100755 src/main/resources/data/terraoriginum/powers/mync-powers/mync_rage_addition.json create mode 100644 src/main/resources/data/terraoriginum/powers/mync-powers/mync_strong.json create mode 100644 src/main/resources/data/terraoriginum/powers/mync-powers/mync_tailwind.json create mode 100644 src/main/resources/data/terraoriginum/powers/mync-powers/mync_vision.json create mode 100644 src/main/resources/data/terraoriginum/powers/serpenta-powers/boilingshot.json create mode 100644 src/main/resources/data/terraoriginum/powers/serpenta-powers/scales.json create mode 100644 src/main/resources/data/terraoriginum/powers/shade-powers/invisibility1.json create mode 100644 src/main/resources/data/terraoriginum/powers/shade-powers/invisibility2.json create mode 100644 src/main/resources/data/terraoriginum/powers/shade-powers/invisibility3.json create mode 100644 src/main/resources/data/terraoriginum/powers/spirit-powers/ectodiff.json create mode 100644 src/main/resources/data/terraoriginum/powers/spirit-powers/ectoplasm.json create mode 100644 src/main/resources/data/terraoriginum/powers/spirit-powers/lackofectodmg.json create mode 100644 src/main/resources/data/terraoriginum/powers/spirit-powers/nightvis.json create mode 100644 src/main/resources/data/terraoriginum/powers/spirit-powers/phasing1.json create mode 100644 src/main/resources/data/terraoriginum/powers/spirit-powers/phasing2.json create mode 100644 src/main/resources/data/terraoriginum/powers/spirit-powers/phasing3.json create mode 100644 src/main/resources/data/terraoriginum/powers/spirit-powers/pure_ghost.json create mode 100644 src/main/resources/data/terraoriginum/powers/spirit-powers/skin.json create mode 100644 src/main/resources/data/terraoriginum/powers/spirit-powers/undead.json create mode 100644 src/main/resources/data/terraoriginum/powers/wings.json create mode 100644 src/main/resources/data/terraoriginum/powers/wraith-powers/charred.json create mode 100644 src/main/resources/data/terraoriginum/powers/wraith-powers/soaring1.json create mode 100644 src/main/resources/data/terraoriginum/powers/wraith-powers/soaring2.json create mode 100644 src/main/resources/data/terraoriginum/powers/wraith-powers/soaring3.json create mode 100644 src/main/resources/data/terraoriginum/powers/wraith-powers/torment1.json create mode 100644 src/main/resources/data/terraoriginum/powers/wraith-powers/torment2.json create mode 100644 src/main/resources/data/terraoriginum/powers/wraith-powers/torment3.json create mode 100644 src/main/resources/data/terraoriginum/powers/yulde-powers/last_stand-death.json create mode 100755 src/main/resources/data/terraoriginum/powers/yulde-powers/last_stand-effects.json create mode 100755 src/main/resources/data/terraoriginum/powers/yulde-powers/last_stand.json create mode 100644 src/main/resources/data/terraoriginum/recipes/ghostly_boots.json create mode 100644 src/main/resources/data/terraoriginum/recipes/ghostly_chestplate.json create mode 100644 src/main/resources/data/terraoriginum/recipes/ghostly_cloth.json create mode 100644 src/main/resources/data/terraoriginum/recipes/ghostly_helmet.json create mode 100644 src/main/resources/data/terraoriginum/recipes/ghostly_leggings.json create mode 100644 src/main/resources/data/terraoriginum/recipes/sun_totem.json create mode 100644 src/main/resources/data/terraoriginum/recipes/umbrella.json create mode 100644 src/main/resources/data/terraoriginum/tags/blocks/bees.json create mode 100644 src/main/resources/data/terraoriginum/tags/blocks/hexblade_unphaseable.json create mode 100644 src/main/resources/data/terraoriginum/tags/blocks/hot_blocks.json create mode 100644 src/main/resources/data/terraoriginum/tags/blocks/mushrooms.json create mode 100644 src/main/resources/data/terraoriginum/tags/blocks/myceliums.json create mode 100644 src/main/resources/data/terraoriginum/tags/blocks/nature.json create mode 100644 src/main/resources/data/terraoriginum/tags/blocks/non_solid.json create mode 100644 src/main/resources/data/terraoriginum/tags/blocks/ocean_monument.json create mode 100644 src/main/resources/data/terraoriginum/tags/blocks/path_blocks.json create mode 100644 src/main/resources/data/terraoriginum/tags/blocks/stone_types.json create mode 100644 src/main/resources/data/terraoriginum/tags/blocks/unphasable.json create mode 100644 src/main/resources/data/terraoriginum/tags/blocks/valuores.json create mode 100644 src/main/resources/data/terraoriginum/tags/blocks/wool.json create mode 100644 src/main/resources/data/terraoriginum/tags/entity_types/hostiles.json create mode 100644 src/main/resources/data/terraoriginum/tags/entity_types/innocent.json create mode 100644 src/main/resources/data/terraoriginum/tags/entity_types/nomercy.json create mode 100644 src/main/resources/data/terraoriginum/tags/entity_types/unholy.json create mode 100644 src/main/resources/data/terraoriginum/tags/items/blades.json create mode 100644 src/main/resources/data/terraoriginum/tags/items/boots.json create mode 100644 src/main/resources/data/terraoriginum/tags/items/break.json create mode 100644 src/main/resources/data/terraoriginum/tags/items/chestplate.json create mode 100644 src/main/resources/data/terraoriginum/tags/items/giweapons.json create mode 100644 src/main/resources/data/terraoriginum/tags/items/helmet.json create mode 100644 src/main/resources/data/terraoriginum/tags/items/leggings.json create mode 100755 src/main/resources/data/terraoriginum/tags/items/unobtainable.json create mode 100644 src/main/resources/data/terraoriginum/tags/items/weapons.json create mode 100644 src/main/resources/fabric.mod.json create mode 100644 src/main/resources/terra.mixins.json diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9338c8e --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +# eclipse +bin +*.launch +.settings +.metadata +.classpath +.project + +# idea +out +*.ipr +*.iws +*.iml +.idea + +# gradle +build +.gradle + +# other +eclipse +run + +*.un~ +libs diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..d16746c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "java.configuration.updateBuildConfiguration": "automatic", + "java.compile.nullAnalysis.mode": "automatic", + "java.jdt.ls.vmargs": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx2G -Xms100m -Xlog:disable" +} \ No newline at end of file diff --git a/CHANGELOG b/CHANGELOG new file mode 100644 index 0000000..b671f0b --- /dev/null +++ b/CHANGELOG @@ -0,0 +1 @@ +# Changes diff --git a/README.md b/README.md index 3a3b5b6..80999e2 100644 --- a/README.md +++ b/README.md @@ -1,3 +1 @@ -# faithful-origins - -new origins for celestia \ No newline at end of file +# faithful origins \ No newline at end of file diff --git a/TODO b/TODO new file mode 100644 index 0000000..e69de29 diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..937531e --- /dev/null +++ b/build.gradle @@ -0,0 +1,124 @@ +plugins { + id 'fabric-loom' version '1.10.1' + id 'maven-publish' +} + +sourceCompatibility = JavaVersion.VERSION_17 +targetCompatibility = JavaVersion.VERSION_17 + +archivesBaseName = project.archives_base_name +version = project.mod_version +group = project.maven_group + +repositories { + mavenLocal() + maven { + name "cloth config" + url "https://maven.shedaniel.me" + } + maven { + name "mod menu" + url "https://maven.terraformersmc.com" + } + maven { + name "playerabilitylib" + url "https://maven.ladysnake.org/releases" + } + maven { + name "reach entity attributes" + url "https://maven.jamieswhiteshirt.com/libs-release" + } + maven { + name "jitpack" + url "https://jitpack.io" + } + maven { + name = "Up-Mods" + url = "https://maven.uuid.gg/releases" + } + maven { + name = "JourneyMap" + url = "https://jm.gserv.me/repository/maven-public" + } + maven { + name = "TeamResourceful" + url = "https://maven.teamresourceful.com/repository/maven-releases" + } + +} + +dependencies { + minecraft "com.mojang:minecraft:${project.minecraft_version}" + mappings loom.layered { + // officialMojangMappings() + mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" + // parchment("org.parchmentmc.data:parchment-${parchment_minecraft}:${parchment_mappings}@zip") + } + + modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" + modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" + + modImplementation "com.terraformersmc:modmenu:${project.modmenu_version}" + + modImplementation "com.github.apace100:origins-fabric:${project.origins_version}" + modImplementation "com.github.apace100:apoli:${project.apoli_version}" + modImplementation "com.github.apace100:calio:${project.calio_version}" + modApi("com.github.Virtuoel:Pehkui:${pehkui_version}", { + exclude group: "net.fabricmc.fabric-api" + }) + + modCompileOnly "dev.emi:emi-fabric:${emi_version}:api" + modLocalRuntime "dev.emi:emi-fabric:${emi_version}" + + modImplementation "dev.cammiescorner.icarus:Icarus-Fabric:${project.icarus_version}" +} + +processResources { + inputs.property "version", project.version + + filteringCharset = "UTF-8" + + filesMatching("fabric.mod.json") { + expand "version": project.version + } +} + +// ensure that the encoding is set to UTF-8, no matter what the system default is +// this fixes some edge cases with special characters not displaying correctly +// see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html +tasks.withType(JavaCompile) { + options.encoding = "UTF-8" +} + +// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task +// if it is present. +// If you remove this task, sources will not be generated. +// task sourcesJar(type: Jar, dependsOn: classes) { +// classifier = "sources" +// from sourceSets.main.allSource +// } + +jar { + from "LICENSE" +} + +// configure the maven publication +publishing { + publications { + mavenJava(MavenPublication) { + // add all the jars that should be included when publishing to maven + artifact(remapJar) { + builtBy remapJar + } + // artifact(sourcesJar) { + // builtBy remapSourcesJar + // } + } + } + + // select the repositories you want to publish to + repositories { + // uncomment to publish to the local maven + // mavenLocal() + } +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..1b8aa71 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,23 @@ +# Done to increase the memory available to gradle. +org.gradle.jvmargs=-Xmx2G + +# Fabric Properties +minecraft_version=1.20.1 +yarn_mappings=1.20.1+build.10 +loader_version=0.16.10 + +# Mod Properties +mod_version=1.20.1-0.0.1 +maven_group=com.smithy +archives_base_name=FaithfulOrigins + +# Dependencies +fabric_version=0.92.3+1.20.1 +modmenu_version=7.2.2 +pehkui_version=3.7.8 +origins_version=v1.10.0 +apoli_version=2.9.0 +icarus_version=2.11.0 +emi_version=1.1.22+1.20.1 +calio_version=v1.11.0 + diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..62d4c053550b91381bbd28b1afc82d634bf73a8a GIT binary patch literal 58910 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 literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..d6e308a --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..fbd7c51 --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# 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"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# 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 + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..5093609 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,104 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +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%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="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! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..27e3d10 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,10 @@ +pluginManagement { + repositories { + mavenCentral() + maven { + name = 'Fabric' + url = 'https://maven.fabricmc.net/' + } + gradlePluginPortal() + } +} diff --git a/src/main/java/com/smithy/terraoriginum/TerraOriginum.java b/src/main/java/com/smithy/terraoriginum/TerraOriginum.java new file mode 100644 index 0000000..8ff4bb4 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/TerraOriginum.java @@ -0,0 +1,45 @@ +package com.smithy.terraoriginum; + +import com.smithy.terraoriginum.blocks.CottonCropBlock; +import com.smithy.terraoriginum.blocks.Crucifix; +import com.smithy.terraoriginum.items.*; +import com.smithy.terraoriginum.registry.ModEnchantments; +import com.smithy.terraoriginum.registry.ModPowers; +import com.smithy.terraoriginum.util.LootTableModifiers; + +import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; +// import net.minecraft.item.ItemGroups; +import net.minecraft.item.ItemGroups; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class TerraOriginum implements ModInitializer { + public static final String MOD_ID = "terraoriginum"; + + public static final Logger LOGGER = LogManager.getLogger(MOD_ID); + + @Override + public void onInitialize() { + Umbrella.registerItems(); + IconItems.register(); + ModEnchantments.register(); + Crucifix.register(); + CottonCropBlock.register(); + CottonItems.register(); + SunTotem.register(); + GhostlyItems.register(); + GhostlyArmourItems.register(); + ModPowers.register(); + + LootTableModifiers.modifyLootTables(); + + ItemGroupEvents.modifyEntriesEvent(ItemGroups.TOOLS).register((content) -> content.add(Umbrella.UMBRELLA)); + ItemGroupEvents.modifyEntriesEvent(ItemGroups.TOOLS).register((content) -> content.add(SunTotem.SUN_TOTEM)); + ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register((content) -> content.add(Crucifix.CRUCIFIX)); + ItemGroupEvents.modifyEntriesEvent(ItemGroups.NATURAL).register((content) -> content.add(CottonItems.COTTON_SEEDS)); + ItemGroupEvents.modifyEntriesEvent(ItemGroups.INGREDIENTS).register((content) -> content.add(CottonItems.COTTON_BALL)); + LOGGER.info("man this Origins is " + MOD_ID); + } +} diff --git a/src/main/java/com/smithy/terraoriginum/blocks/CottonCropBlock.java b/src/main/java/com/smithy/terraoriginum/blocks/CottonCropBlock.java new file mode 100644 index 0000000..2122c46 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/blocks/CottonCropBlock.java @@ -0,0 +1,49 @@ +package com.smithy.terraoriginum.blocks; + +import com.smithy.terraoriginum.items.CottonItems; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.CropBlock; +import net.minecraft.block.ShapeContext; +import net.minecraft.item.ItemConvertible; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.BlockView; + +public class CottonCropBlock extends CropBlock{ + + private static final VoxelShape[] AGE_TO_SHAPE = new VoxelShape[]{Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 2.0D, 16.0D), + Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 3.0D, 16.0D), + Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 4.0D, 16.0D), + Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 5.0D, 16.0D), + Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 6.0D, 16.0D), + Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 7.0D, 16.0D), + Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 8.0D, 16.0D), + Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 9.0D, 16.0D) + }; + + public CottonCropBlock(AbstractBlock.Settings settings) { + super(settings); + } + + public ItemConvertible getSeedsItem() { + return CottonItems.COTTON_SEEDS; + } + + public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + return AGE_TO_SHAPE[(Integer)state.get(this.getAgeProperty())]; + } + + public static final CropBlock COTTON_CROP_BLOCK = new CropBlock(AbstractBlock.Settings.create().nonOpaque().noCollision().ticksRandomly().breakInstantly().sounds(BlockSoundGroup.CROP)); + + public static void register() { + Registry.register(Registries.BLOCK, new Identifier("terraoriginum", "cotton_crop_block"), COTTON_CROP_BLOCK); + } + + +} diff --git a/src/main/java/com/smithy/terraoriginum/blocks/Crucifix.java b/src/main/java/com/smithy/terraoriginum/blocks/Crucifix.java new file mode 100644 index 0000000..926d49e --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/blocks/Crucifix.java @@ -0,0 +1,22 @@ +package com.smithy.terraoriginum.blocks; + +import com.smithy.terraoriginum.TerraOriginum; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.util.Identifier; + +public class Crucifix { + + public static final Block CRUCIFIX = new CrucifixClass(FabricBlockSettings.create().strength(5.5f, 4.8f).requiresTool()); + + public static void register() { + // Registry.register(Registries.BLOCK, new Identifier(TerraOriginum.MOD_ID, "crucifix"), new BlockItem(CRUCIFIX, new FabricItemSettings())); + // Registry.register(Registries.ITEM, new Identifier(TerraOriginum.MOD_ID, "crucifix"), CRUCIFIX); + Registry.register(Registries.BLOCK, new Identifier(TerraOriginum.MOD_ID, "crucifix"), CRUCIFIX); + Registry.register(Registries.ITEM, new Identifier(TerraOriginum.MOD_ID, "crucifix"), new BlockItem(CRUCIFIX, new Item.Settings())); + } +} diff --git a/src/main/java/com/smithy/terraoriginum/blocks/CrucifixClass.java b/src/main/java/com/smithy/terraoriginum/blocks/CrucifixClass.java new file mode 100644 index 0000000..92798de --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/blocks/CrucifixClass.java @@ -0,0 +1,28 @@ +package com.smithy.terraoriginum.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.ShapeContext; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.util.shape.VoxelShapes; +import net.minecraft.world.BlockView; + +public class CrucifixClass extends Block { + + public CrucifixClass(Settings properties) { + super(properties); + } + + @Override + public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) { + VoxelShape shape = VoxelShapes.empty(); + shape = VoxelShapes.union(shape, VoxelShapes.cuboid(0.375, 0, 0.375, 0.5625, 0.75, 0.5625)); + shape = VoxelShapes.union(shape, VoxelShapes.cuboid(0.5625, 0.375, 0.375, 0.75, 0.5625, 0.5625)); + shape = VoxelShapes.union(shape, VoxelShapes.cuboid(0.1875, 0.375, 0.375, 0.375, 0.5625, 0.5625)); + + return shape; + } + + +} diff --git a/src/main/java/com/smithy/terraoriginum/client/LayerRenderer.java b/src/main/java/com/smithy/terraoriginum/client/LayerRenderer.java new file mode 100644 index 0000000..cd6c2b3 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/client/LayerRenderer.java @@ -0,0 +1,17 @@ +package com.smithy.terraoriginum.client; + +import com.smithy.terraoriginum.blocks.CottonCropBlock; +import com.smithy.terraoriginum.items.Umbrella; +import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; +import net.minecraft.client.render.RenderLayer; + +public class LayerRenderer implements ClientModInitializer { + + @Override + public void onInitializeClient() { + Umbrella.registerRenderLayers(); + BlockRenderLayerMap.INSTANCE.putBlocks(RenderLayer.getCutout(), CottonCropBlock.COTTON_CROP_BLOCK); + } + +} diff --git a/src/main/java/com/smithy/terraoriginum/client/TerraKeybinds.java b/src/main/java/com/smithy/terraoriginum/client/TerraKeybinds.java new file mode 100644 index 0000000..e1539d6 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/client/TerraKeybinds.java @@ -0,0 +1,25 @@ +package com.smithy.terraoriginum.client; + +import io.github.apace100.apoli.ApoliClient; +import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; +import net.minecraft.client.option.KeyBinding; +import net.minecraft.client.util.InputUtil; +import org.lwjgl.glfw.GLFW; + +import java.util.List; + +public class TerraKeybinds implements ClientModInitializer { + + public List keys = List.of("ternary","quaternary","quinary","senary","septenary","octonary","nonary","denary"); + + @Override + public void onInitializeClient() { + for(String key : keys) { + KeyBinding binding = new KeyBinding("key.origins."+key+"_active", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_UNKNOWN, "category.origins"); + ApoliClient.registerPowerKeybinding(binding.getTranslationKey(), binding); + ApoliClient.registerPowerKeybinding(key, binding); + KeyBindingHelper.registerKeyBinding(binding); + } + } +} diff --git a/src/main/java/com/smithy/terraoriginum/client/TerraOriginumClient.java b/src/main/java/com/smithy/terraoriginum/client/TerraOriginumClient.java new file mode 100644 index 0000000..58764a9 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/client/TerraOriginumClient.java @@ -0,0 +1,13 @@ +package com.smithy.terraoriginum.client; + +import net.fabricmc.api.ClientModInitializer; + +public class TerraOriginumClient implements ClientModInitializer { + + + @Override + public void onInitializeClient() { + + + } +} diff --git a/src/main/java/com/smithy/terraoriginum/client/armour/GhostlyArmourModel.java b/src/main/java/com/smithy/terraoriginum/client/armour/GhostlyArmourModel.java new file mode 100644 index 0000000..1c1cef1 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/client/armour/GhostlyArmourModel.java @@ -0,0 +1,23 @@ +package com.smithy.terraoriginum.client.armour; + +import com.smithy.terraoriginum.items.GhostlyArmour; +import net.minecraft.util.Identifier; +import software.bernie.geckolib.model.GeoModel; + +public class GhostlyArmourModel extends GeoModel { + + @Override + public Identifier getModelResource(GhostlyArmour animatable) { + return new Identifier("terraoriginum", "geo/ghostly_armour.geo.json"); + } + + @Override + public Identifier getTextureResource(GhostlyArmour animatable) { + return new Identifier("terraoriginum", "textures/models/armor/ghost_armour_model_texture"); + } + + @Override + public Identifier getAnimationResource(GhostlyArmour animatable) { + return null; + } +} diff --git a/src/main/java/com/smithy/terraoriginum/client/armour/GhostlyArmourRenderer.java b/src/main/java/com/smithy/terraoriginum/client/armour/GhostlyArmourRenderer.java new file mode 100644 index 0000000..bb702da --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/client/armour/GhostlyArmourRenderer.java @@ -0,0 +1,16 @@ +package com.smithy.terraoriginum.client.armour; + +import com.smithy.terraoriginum.TerraOriginum; +import com.smithy.terraoriginum.items.GhostlyArmour; +import net.minecraft.util.Identifier; +import software.bernie.geckolib.GeckoLib; +import software.bernie.geckolib.model.DefaultedItemGeoModel; +import software.bernie.geckolib.renderer.GeoArmorRenderer; + +public class GhostlyArmourRenderer extends GeoArmorRenderer { + + public GhostlyArmourRenderer() { + super(new DefaultedItemGeoModel<>(new Identifier(TerraOriginum.MOD_ID, "armor/ghost_armour"))); + } + +} diff --git a/src/main/java/com/smithy/terraoriginum/customMaterials/RobesMaterial.java b/src/main/java/com/smithy/terraoriginum/customMaterials/RobesMaterial.java new file mode 100644 index 0000000..ac45871 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/customMaterials/RobesMaterial.java @@ -0,0 +1,89 @@ +package com.smithy.terraoriginum.customMaterials; + +import net.minecraft.item.ArmorItem; +import net.minecraft.item.ArmorMaterial; +import net.minecraft.recipe.Ingredient; +import net.minecraft.sound.SoundEvent; +import net.minecraft.sound.SoundEvents; + +import java.util.function.Supplier; + +import com.smithy.terraoriginum.TerraOriginum; +import com.smithy.terraoriginum.items.CottonItems; + +public enum RobesMaterial implements ArmorMaterial { + ROBES("robes", 42, new int[] { 4, 9, 7, 4 }, 19, + SoundEvents.ITEM_ARMOR_EQUIP_NETHERITE, 5, 0.1f, () -> Ingredient.ofItems(CottonItems.COTTON_BALL)); + + private final String name; + private final int durabilityMultiplier; + private final int[] protectionAmounts; + private final int enchantability; + private final SoundEvent equipSound; + private final float toughness; + private final float knockbackResistance; + private final Supplier repairIngredient; + + private static final int[] BASE_DURABILITY = { 11, 16, 15, 13 }; + + RobesMaterial( + String name, + int durabilityMultiplier, + int[] protectionAmounts, + int enchantability, + SoundEvent equipSound, + float toughness, + float knockbackResistance, + Supplier repairIngredient + ) { + + this.name = name; + this.durabilityMultiplier = durabilityMultiplier; + this.protectionAmounts = protectionAmounts; + this.enchantability = enchantability; + this.equipSound = equipSound; + this.toughness = toughness; + this.knockbackResistance = knockbackResistance; + this.repairIngredient = repairIngredient; + } + + @Override + public int getDurability(ArmorItem.Type type) { + return BASE_DURABILITY[type.ordinal()] * this.durabilityMultiplier; + } + + @Override + public int getProtection(ArmorItem.Type type) { + return protectionAmounts[type.ordinal()]; + } + + @Override + public int getEnchantability() { + return this.enchantability; + } + + @Override + public SoundEvent getEquipSound() { + return this.equipSound; + } + + @Override + public Ingredient getRepairIngredient() { + return this.repairIngredient.get(); + } + + @Override + public String getName() { + return TerraOriginum.MOD_ID + ":" + this.name; + } + + @Override + public float getToughness() { + return this.toughness; + } + + @Override + public float getKnockbackResistance() { + return this.knockbackResistance; + } +} \ No newline at end of file diff --git a/src/main/java/com/smithy/terraoriginum/enchantment/LightProtectionEnchantment.java b/src/main/java/com/smithy/terraoriginum/enchantment/LightProtectionEnchantment.java new file mode 100644 index 0000000..1be3552 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/enchantment/LightProtectionEnchantment.java @@ -0,0 +1,39 @@ +package com.smithy.terraoriginum.enchantment; + +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentTarget; +import net.minecraft.enchantment.ProtectionEnchantment; +import net.minecraft.entity.EquipmentSlot; + +public class LightProtectionEnchantment extends Enchantment{ + + public LightProtectionEnchantment(Rarity weight, EnchantmentTarget type, EquipmentSlot[] slotTypes) { + super(weight, type, slotTypes); + } + + public int getMinPower(int level) { + return 8 + level * 5; + } + + public int getMaxPower(int level) { + return this.getMinPower(level) + 8; + } + + public boolean isTreasure() { + return true; + } + + public int getMaxLevel() { + return 1; + } + + @Override + protected boolean canAccept(Enchantment other) { + if(other == this || ((other instanceof ProtectionEnchantment && !(((ProtectionEnchantment)other).protectionType == ProtectionEnchantment.Type.ALL)))) { + return false; + } + return super.canAccept(other); + } + + +} diff --git a/src/main/java/com/smithy/terraoriginum/enchantment/SunProtectionEnchantment.java b/src/main/java/com/smithy/terraoriginum/enchantment/SunProtectionEnchantment.java new file mode 100644 index 0000000..80d6055 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/enchantment/SunProtectionEnchantment.java @@ -0,0 +1,39 @@ +package com.smithy.terraoriginum.enchantment; + +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentTarget; +import net.minecraft.enchantment.ProtectionEnchantment; +import net.minecraft.entity.EquipmentSlot; + +public class SunProtectionEnchantment extends Enchantment { + + public SunProtectionEnchantment(Rarity weight, EnchantmentTarget type, EquipmentSlot[] slotTypes) { + super(weight, type, slotTypes); + } + + public int getMinPower(int level) { + return 8 + level * 5; + } + + public int getMaxPower(int level) { + return this.getMinPower(level) + 8; + } + + public boolean isTreasure() { + return true; + } + + public int getMaxLevel() { + return 4; + } + + @Override + protected boolean canAccept(Enchantment other) { + if(other == this || ((other instanceof ProtectionEnchantment && !(((ProtectionEnchantment)other).protectionType == ProtectionEnchantment.Type.ALL)))) { + return true; // true because its somehow incompatible with every other protection, except protection + } + return super.canAccept(other); + } + + +} diff --git a/src/main/java/com/smithy/terraoriginum/items/CottonItems.java b/src/main/java/com/smithy/terraoriginum/items/CottonItems.java new file mode 100644 index 0000000..770d003 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/items/CottonItems.java @@ -0,0 +1,19 @@ +package com.smithy.terraoriginum.items; + +import com.smithy.terraoriginum.blocks.CottonCropBlock; +import net.minecraft.item.AliasedBlockItem; +import net.minecraft.item.Item; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.util.Identifier; + +public class CottonItems { + + public static final Item COTTON_SEEDS = new AliasedBlockItem(CottonCropBlock.COTTON_CROP_BLOCK, new Item.Settings()); + public static final Item COTTON_BALL = new Item(new Item.Settings()); + + public static void register() { + Registry.register(Registries.ITEM, new Identifier("terraoriginum", "cotton_seeds"), COTTON_SEEDS); + Registry.register(Registries.ITEM, new Identifier("terraoriginum", "cotton_ball"), COTTON_BALL); + } +} diff --git a/src/main/java/com/smithy/terraoriginum/items/GhostlyArmour.java b/src/main/java/com/smithy/terraoriginum/items/GhostlyArmour.java new file mode 100644 index 0000000..532d866 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/items/GhostlyArmour.java @@ -0,0 +1,108 @@ +package com.smithy.terraoriginum.items; + +import com.smithy.terraoriginum.client.armour.GhostlyArmourRenderer; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; +import net.minecraft.client.render.entity.model.BipedEntityModel; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.decoration.ArmorStandEntity; +import net.minecraft.item.ArmorItem; +import net.minecraft.item.ArmorMaterial; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import software.bernie.example.client.renderer.armor.GeckoArmorRenderer; +import software.bernie.geckolib.animatable.GeoItem; +import software.bernie.geckolib.animatable.client.RenderProvider; +import software.bernie.geckolib.constant.DataTickets; +import software.bernie.geckolib.constant.DefaultAnimations; +import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.core.animation.AnimatableManager; +import software.bernie.geckolib.core.animation.AnimationController; +import software.bernie.geckolib.core.object.PlayState; +import software.bernie.geckolib.renderer.GeoArmorRenderer; +import software.bernie.geckolib.util.GeckoLibUtil; + +import java.util.Set; +import java.util.function.Consumer; +import java.util.function.Supplier; + +public class GhostlyArmour extends ArmorItem implements GeoItem { + + private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); + private final Supplier renderProvider = GeoItem.makeRenderer(this); + + public GhostlyArmour(ArmorMaterial armorMaterial, ArmorItem.Type type, Settings properties) { + super(armorMaterial, type, properties); + } + + // Create our armor model/renderer for Fabric and return it + @Override + public void createRenderer(Consumer consumer) { + consumer.accept(new RenderProvider() { + private GeoArmorRenderer renderer; + + @Override + public BipedEntityModel getHumanoidArmorModel(LivingEntity livingEntity, ItemStack itemStack, EquipmentSlot equipmentSlot, BipedEntityModel original) { + if (this.renderer == null) + this.renderer = new GhostlyArmourRenderer(); + + // This prepares our GeoArmorRenderer for the current render frame. + // These parameters may be null however, so we don't do anything further with them + this.renderer.prepForRender(livingEntity, itemStack, equipmentSlot, original); + + return this.renderer; + } + }); + } + + @Override + public Supplier getRenderProvider() { + return this.renderProvider; + } + + // Let's add our animation controller + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, 20, state -> { + // Apply our generic idle animation. + // Whether it plays or not is decided down below + + // Let's gather some data from the state to use below + // This is the entity that is currently wearing/holding the item + Entity entity = state.getData(DataTickets.ENTITY); + + // We'll just have ArmorStands always animate, so we can return here + if (entity instanceof ArmorStandEntity) + return PlayState.CONTINUE; + + // For this example, we only want the animation to play if the entity is wearing all pieces of the armor + // Let's collect the armor pieces the entity is currently wearing + Set wornArmor = new ObjectOpenHashSet<>(); + + for (ItemStack stack : entity.getArmorItems()) { + // We can stop immediately if any of the slots are empty + if (stack.isEmpty()) + return PlayState.STOP; + + wornArmor.add(stack.getItem()); + } + + // Check each of the pieces match our set + boolean isFullSet = wornArmor.containsAll(ObjectArrayList.of( + GhostlyArmourItems.GHOSTLY_BOOTS, + GhostlyArmourItems.GHOSTLY_LEGGING, + GhostlyArmourItems.GHOSTLY_CHESTPLATE, + GhostlyArmourItems.GHOSTLY_HELMET)); + + // Play the animation if the full set is being worn, otherwise stop + return isFullSet ? PlayState.CONTINUE : PlayState.STOP; + })); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.cache; + } +} diff --git a/src/main/java/com/smithy/terraoriginum/items/GhostlyArmourItems.java b/src/main/java/com/smithy/terraoriginum/items/GhostlyArmourItems.java new file mode 100644 index 0000000..c337bd2 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/items/GhostlyArmourItems.java @@ -0,0 +1,37 @@ +package com.smithy.terraoriginum.items; + +import com.smithy.terraoriginum.TerraOriginum; +import com.smithy.terraoriginum.customMaterials.RobesMaterial; + +import net.fabricmc.fabric.api.item.v1.FabricItemSettings; +import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; +import net.minecraft.item.ArmorItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroups; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.util.Identifier; +import net.minecraft.util.Rarity; + +public class GhostlyArmourItems { + + public static final Item GHOSTLY_HELMET = new GhostlyArmour(RobesMaterial.ROBES, ArmorItem.Type.HELMET, new FabricItemSettings().rarity(Rarity.EPIC)); + public static final Item GHOSTLY_CHESTPLATE = new GhostlyArmour(RobesMaterial.ROBES, ArmorItem.Type.CHESTPLATE, new FabricItemSettings().rarity(Rarity.EPIC)); + public static final Item GHOSTLY_LEGGING = new GhostlyArmour(RobesMaterial.ROBES, ArmorItem.Type.LEGGINGS, new FabricItemSettings().rarity(Rarity.EPIC)); + public static final Item GHOSTLY_BOOTS = new GhostlyArmour(RobesMaterial.ROBES, ArmorItem.Type.BOOTS, new FabricItemSettings().rarity(Rarity.EPIC)); + + public static void register() { + Registry.register(Registries.ITEM, new Identifier(TerraOriginum.MOD_ID, "ghostly_helmet"), GHOSTLY_HELMET); + Registry.register(Registries.ITEM, new Identifier(TerraOriginum.MOD_ID, "ghostly_chestplate"), GHOSTLY_CHESTPLATE); + Registry.register(Registries.ITEM, new Identifier(TerraOriginum.MOD_ID, "ghostly_leggings"), GHOSTLY_LEGGING); + Registry.register(Registries.ITEM, new Identifier(TerraOriginum.MOD_ID, "ghostly_boots"), GHOSTLY_BOOTS); + + ItemGroupEvents.modifyEntriesEvent(ItemGroups.COMBAT).register((content) -> content.add(GHOSTLY_HELMET)); + ItemGroupEvents.modifyEntriesEvent(ItemGroups.COMBAT).register((content) -> content.add(GHOSTLY_CHESTPLATE)); + ItemGroupEvents.modifyEntriesEvent(ItemGroups.COMBAT).register((content) -> content.add(GHOSTLY_LEGGING)); + ItemGroupEvents.modifyEntriesEvent(ItemGroups.COMBAT).register((content) -> content.add(GHOSTLY_BOOTS)); + } + + + +} diff --git a/src/main/java/com/smithy/terraoriginum/items/GhostlyItems.java b/src/main/java/com/smithy/terraoriginum/items/GhostlyItems.java new file mode 100644 index 0000000..5dd55d8 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/items/GhostlyItems.java @@ -0,0 +1,24 @@ +package com.smithy.terraoriginum.items; + +import net.fabricmc.fabric.api.item.v1.FabricItemSettings; +import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; +import net.minecraft.item.Item; +import net.minecraft.item.ItemGroups; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.util.Identifier; + +public class GhostlyItems { + + public static final Item GHOSTLY_CLOTH = new Item(new FabricItemSettings()); + + public static void register() { + + Registry.register(Registries.ITEM, new Identifier("terraoriginum", "ghostly_cloth"), GHOSTLY_CLOTH); + + ItemGroupEvents.modifyEntriesEvent(ItemGroups.INGREDIENTS).register((content) -> content.add(GHOSTLY_CLOTH)); + + } + + +} diff --git a/src/main/java/com/smithy/terraoriginum/items/IconItems.java b/src/main/java/com/smithy/terraoriginum/items/IconItems.java new file mode 100644 index 0000000..7fa7eac --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/items/IconItems.java @@ -0,0 +1,22 @@ +package com.smithy.terraoriginum.items; + +import com.smithy.terraoriginum.TerraOriginum; +import net.minecraft.item.Item; +import net.minecraft.util.Identifier; +import net.minecraft.util.Rarity; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; + +public class IconItems { + + public static final Item MYNC_EYE = new Item(new Item.Settings().maxCount(1).rarity(Rarity.EPIC)); + public static final Item SPIRIT = new Item(new Item.Settings().maxCount(1).rarity(Rarity.EPIC)); + public static final Item TINY = new Item(new Item.Settings().maxCount(1).rarity(Rarity.EPIC)); + + public static void register() { + Registry.register(Registries.ITEM, new Identifier(TerraOriginum.MOD_ID, "mync_eye"), MYNC_EYE); + Registry.register(Registries.ITEM, new Identifier(TerraOriginum.MOD_ID, "spirit"), SPIRIT); + Registry.register(Registries.ITEM, new Identifier(TerraOriginum.MOD_ID, "tiny"), TINY); + } + +} diff --git a/src/main/java/com/smithy/terraoriginum/items/SunTotem.java b/src/main/java/com/smithy/terraoriginum/items/SunTotem.java new file mode 100644 index 0000000..38ded2a --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/items/SunTotem.java @@ -0,0 +1,17 @@ +package com.smithy.terraoriginum.items; + +import com.smithy.terraoriginum.TerraOriginum; +import net.minecraft.item.Item; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.util.Identifier; +import net.minecraft.util.Rarity; + +public class SunTotem { + + public static final Item SUN_TOTEM = new Item(new Item.Settings().maxCount(1).rarity(Rarity.EPIC)); + + public static void register() { + Registry.register(Registries.ITEM, new Identifier(TerraOriginum.MOD_ID, "sun_totem"), SUN_TOTEM); + } +} diff --git a/src/main/java/com/smithy/terraoriginum/items/Umbrella.java b/src/main/java/com/smithy/terraoriginum/items/Umbrella.java new file mode 100644 index 0000000..785b58f --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/items/Umbrella.java @@ -0,0 +1,26 @@ +package com.smithy.terraoriginum.items; + +import com.smithy.terraoriginum.TerraOriginum; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry; +import net.fabricmc.fabric.api.item.v1.FabricItemSettings; +import net.minecraft.item.DyeableItem; +import net.minecraft.util.Identifier; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; + +public class Umbrella { + public static final UmbrellaDyeTest UMBRELLA = new UmbrellaDyeTest(new FabricItemSettings().maxCount(1).maxDamage(1200)); + + + public static void registerItems() { + Registry.register(Registries.ITEM, new Identifier(TerraOriginum.MOD_ID, "umbrella"), UMBRELLA); + + } + + @Environment(EnvType.CLIENT) + public static void registerRenderLayers() { + ColorProviderRegistry.ITEM.register((stack, tintIndex) -> (tintIndex > 0) ? -1 : ((DyeableItem) stack.getItem()).getColor(stack), UMBRELLA); + } +} diff --git a/src/main/java/com/smithy/terraoriginum/items/UmbrellaDyeTest.java b/src/main/java/com/smithy/terraoriginum/items/UmbrellaDyeTest.java new file mode 100644 index 0000000..ca81d97 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/items/UmbrellaDyeTest.java @@ -0,0 +1,12 @@ +package com.smithy.terraoriginum.items; + +import net.minecraft.item.DyeableItem; +import net.minecraft.item.Item; + +public class UmbrellaDyeTest extends Item implements DyeableItem { + + public UmbrellaDyeTest(Settings settings) { + super(settings); + } + +} diff --git a/src/main/java/com/smithy/terraoriginum/mixin/EntityMixin.java b/src/main/java/com/smithy/terraoriginum/mixin/EntityMixin.java new file mode 100644 index 0000000..02e6dda --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/mixin/EntityMixin.java @@ -0,0 +1,52 @@ +package com.smithy.terraoriginum.mixin; + +import com.smithy.terraoriginum.items.Umbrella; +import com.smithy.terraoriginum.power.PreventBlockSlowness; + +import io.github.apace100.apoli.component.PowerHolderComponent; +import net.minecraft.block.BlockState; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Entity.class) +public abstract class EntityMixin { + + + @Shadow World world; + + @Shadow abstract BlockPos getBlockPos(); + + @Shadow abstract Box getBoundingBox(); + + @Shadow abstract Iterable getHandItems(); + + @Inject(method = "isBeingRainedOn", at = @At("HEAD"), cancellable = true) + private void isBeingRainedOn(CallbackInfoReturnable cir) { + Iterable hands = this.getHandItems(); + for (ItemStack stack : hands) { + if (stack.getItem() == Umbrella.UMBRELLA) + cir.setReturnValue(false); + } + } + + @Inject(method = "slowMovement", at = @At("HEAD"), cancellable = true) + private void terraoriginum$preventBlockSlowness(BlockState state, Vec3d multiplier, CallbackInfo ci) { + for (PreventBlockSlowness power : PowerHolderComponent.getPowers((Entity) (Object) this, PreventBlockSlowness.class)) { + if (power.isActive()) { + ci.cancel(); + return; + } + } + } + +} \ No newline at end of file diff --git a/src/main/java/com/smithy/terraoriginum/mixin/IcarusHelperMixin.java b/src/main/java/com/smithy/terraoriginum/mixin/IcarusHelperMixin.java new file mode 100644 index 0000000..102d5d7 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/mixin/IcarusHelperMixin.java @@ -0,0 +1,47 @@ +package com.smithy.terraoriginum.mixin; + +import com.llamalad7.mixinextras.injector.ModifyReturnValue; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.smithy.terraoriginum.power.WingsPower; +import dev.cammiescorner.icarus.api.IcarusPlayerValues; +import dev.cammiescorner.icarus.util.IcarusHelper; +import io.github.apace100.apoli.component.PowerHolderComponent; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +import java.util.function.Function; +import java.util.function.Predicate; + +@Mixin(value = IcarusHelper.class, remap = false) +public class IcarusHelperMixin { + + @ModifyReturnValue(method = "getConfigValues", at = @At("RETURN")) + private static IcarusPlayerValues injectPowerConfigValues(IcarusPlayerValues original, LivingEntity entity) { + var list = PowerHolderComponent.getPowers(entity, WingsPower.class); + if(!list.isEmpty()) { + var power = list.get(0); + power.updateFallback(original); + return power; + } + + return original; + } + + @WrapOperation(method = "hasWings", at = @At(value = "INVOKE", target = "Ljava/util/function/Predicate;test(Ljava/lang/Object;)Z")) + private static boolean originHasWings(Predicate instance, Object entity, Operation original) { + return PowerHolderComponent.hasPower((LivingEntity) entity, WingsPower.class) || original.call(instance, entity); + } + + @WrapOperation(method = "getEquippedWings", at = @At(value = "INVOKE", target = "Ljava/util/function/Function;apply(Ljava/lang/Object;)Ljava/lang/Object;")) + private static Object originGetWings(Function instance, Object entity, Operation original) { + if (PowerHolderComponent.hasPower((LivingEntity) entity, WingsPower.class)) { + // null is special case + return null; + } + + return original.call(instance, entity); + } +} \ No newline at end of file diff --git a/src/main/java/com/smithy/terraoriginum/mixin/PlayerConditionsMixin.java b/src/main/java/com/smithy/terraoriginum/mixin/PlayerConditionsMixin.java new file mode 100644 index 0000000..04a5910 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/mixin/PlayerConditionsMixin.java @@ -0,0 +1,35 @@ +package com.smithy.terraoriginum.mixin; + +import io.github.apace100.apoli.power.factory.condition.EntityConditions; +import io.github.apace100.calio.data.SerializableData; +import com.smithy.terraoriginum.items.Umbrella; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +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.CallbackInfoReturnable; + +@Mixin(EntityConditions.class) +public class PlayerConditionsMixin { + + @Inject(method = { "lambda$register$10" }, at = { @At("HEAD") }, cancellable = true) + private static void sunDamagePrevention(SerializableData.Instance data, Entity player, CallbackInfoReturnable cir) { + for (ItemStack stack : player.getHandItems()) { + if (stack.getItem().equals(Umbrella.UMBRELLA) && stack.getDamage() < stack.getMaxDamage() - 1) { + cir.setReturnValue(false); + } + } + } + + @Inject(method = { "lambda$register$11" }, at = { @At("HEAD") }, cancellable = true) + private static void umbrellaRainedOn(SerializableData.Instance data, Entity player, CallbackInfoReturnable cir) { + for (ItemStack stack : player.getHandItems()) { + if (stack.getItem().equals(Umbrella.UMBRELLA) && stack.getDamage() < stack.getMaxDamage() - 1) { + cir.setReturnValue(false); + } + } + } + + +} \ No newline at end of file diff --git a/src/main/java/com/smithy/terraoriginum/mixin/PlayerEntityMixin.java b/src/main/java/com/smithy/terraoriginum/mixin/PlayerEntityMixin.java new file mode 100644 index 0000000..8897bce --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/mixin/PlayerEntityMixin.java @@ -0,0 +1,73 @@ +package com.smithy.terraoriginum.mixin; + +import io.github.apace100.apoli.mixin.EntityAccessor; +import com.smithy.terraoriginum.items.Umbrella; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(PlayerEntity.class) +public abstract class PlayerEntityMixin extends Entity { + @Shadow + public abstract ItemStack getEquippedStack(EquipmentSlot slot); + + @Shadow + public abstract Iterable getHandItems(); + + @Shadow + public abstract PlayerInventory getInventory(); + + protected PlayerEntityMixin(EntityType entityType, World world) { + super(entityType, world); + } + + @Inject(method = "tick", at = @At("HEAD"), cancellable = true) + private void tick(CallbackInfo ci) { + boolean isBeingRainedOn = ((EntityAccessor) this).callIsBeingRainedOn(); + + if (isBeingRainedOn && this.age % 10 == 0) { + for (ItemStack stack : this.getHandItems()) { + if (stack.getItem().equals(Umbrella.UMBRELLA) && stack.getDamage() < stack.getMaxDamage() - 1) { + // Set damage instead of calling stack.damage, otherwise an animation is + // triggered for each damage tick. + stack.setDamage(stack.getDamage() + 1); + } + } + } else if (!isBeingRainedOn && this.age % 20 == 0) { + ItemStack offHand = this.getEquippedStack(EquipmentSlot.OFFHAND); + boolean isHot = getWorld().getBiome(this.getBlockPos()).value().isCold(this.getBlockPos()); + + // Repair off-hand umbrella. + this.repairStack(offHand, isHot, true); + + // Repair any umbrellas in the player's inventory. + for (int i = 0; i < 36; i++) { + this.repairStack(this.getInventory().getStack(i), isHot, this.getInventory().selectedSlot == i); + } + } + } + + private void repairStack(ItemStack stack, boolean isHot, boolean isExposed) { + if (stack.getItem().equals(Umbrella.UMBRELLA) && stack.isDamaged()) { + stack.setDamage(stack.getDamage() - 1); + if (isHot) { + // Umbrellas dry faster in hot climates. + stack.setDamage(stack.getDamage() - 1); + } + if (isExposed) { + // Umbrellas dry faster if they're exposed (not tucked away in inventory). + stack.setDamage(stack.getDamage() - 1); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/com/smithy/terraoriginum/mixin/PowderSnowBlockMixin.java b/src/main/java/com/smithy/terraoriginum/mixin/PowderSnowBlockMixin.java new file mode 100644 index 0000000..ccdb415 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/mixin/PowderSnowBlockMixin.java @@ -0,0 +1,24 @@ +package com.smithy.terraoriginum.mixin; + +import io.github.apace100.apoli.component.PowerHolderComponent; +import net.minecraft.block.PowderSnowBlock; +import net.minecraft.entity.Entity; +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.CallbackInfoReturnable; + +import com.smithy.terraoriginum.power.CanStandOnPowderSnow; + +@Mixin(PowderSnowBlock.class) +public class PowderSnowBlockMixin { + @Inject(method = "canWalkOnPowderSnow", at = @At("HEAD"), cancellable = true) + private static void terraoriginum$canStandOnPowderSnow(Entity entity, CallbackInfoReturnable cir) { + for (CanStandOnPowderSnow canStandOnPowderSnowPower : PowerHolderComponent.getPowers(entity, CanStandOnPowderSnow.class)) { + if (canStandOnPowderSnowPower.isActive()) { + cir.setReturnValue(true); + return; + } + } + } +} diff --git a/src/main/java/com/smithy/terraoriginum/mixin/client/IcarusClientMixin.java b/src/main/java/com/smithy/terraoriginum/mixin/client/IcarusClientMixin.java new file mode 100644 index 0000000..312fc8f --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/mixin/client/IcarusClientMixin.java @@ -0,0 +1,26 @@ +package com.smithy.terraoriginum.mixin.client; + +import com.llamalad7.mixinextras.injector.ModifyReturnValue; +import com.smithy.terraoriginum.power.WingsPower; +import dev.cammiescorner.icarus.client.IcarusClient; +import io.github.apace100.apoli.component.PowerHolderComponent; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(value = IcarusClient.class, remap = false) +public class IcarusClientMixin { + + @ModifyReturnValue(method = "getWingsForRendering", at = @At(value = "RETURN")) + private static ItemStack injectOriginWings(ItemStack original, LivingEntity entity) { + if(original.isEmpty()) { + var list = PowerHolderComponent.getPowers(entity, WingsPower.class); + if (!list.isEmpty()) { + return list.get(0).getWingsType(); + } + } + + return original; + } +} \ No newline at end of file diff --git a/src/main/java/com/smithy/terraoriginum/power/CanStandOnPowderSnow.java b/src/main/java/com/smithy/terraoriginum/power/CanStandOnPowderSnow.java new file mode 100644 index 0000000..a7a8532 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/power/CanStandOnPowderSnow.java @@ -0,0 +1,11 @@ +package com.smithy.terraoriginum.power; + +import io.github.apace100.apoli.power.Power; +import io.github.apace100.apoli.power.PowerType; +import net.minecraft.entity.LivingEntity; + +public class CanStandOnPowderSnow extends Power { + public CanStandOnPowderSnow(PowerType type, LivingEntity entity) { + super(type, entity); + } +} diff --git a/src/main/java/com/smithy/terraoriginum/power/PreventBlockSlowness.java b/src/main/java/com/smithy/terraoriginum/power/PreventBlockSlowness.java new file mode 100644 index 0000000..f97af59 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/power/PreventBlockSlowness.java @@ -0,0 +1,11 @@ +package com.smithy.terraoriginum.power; + +import io.github.apace100.apoli.power.Power; +import io.github.apace100.apoli.power.PowerType; +import net.minecraft.entity.LivingEntity; + +public class PreventBlockSlowness extends Power { + public PreventBlockSlowness(PowerType type, LivingEntity entity) { + super(type, entity); + } +} \ No newline at end of file diff --git a/src/main/java/com/smithy/terraoriginum/power/WingsPower.java b/src/main/java/com/smithy/terraoriginum/power/WingsPower.java new file mode 100644 index 0000000..3d0f50b --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/power/WingsPower.java @@ -0,0 +1,113 @@ +package com.smithy.terraoriginum.power; + +import com.smithy.terraoriginum.TerraOriginum; +import com.smithy.terraoriginum.util.CustomDataTypes; +import com.smithy.terraoriginum.util.OptionalBool; + +import dev.cammiescorner.icarus.api.IcarusPlayerValues; +import dev.cammiescorner.icarus.util.ServerPlayerFallbackValues; +import io.github.apace100.apoli.power.Power; +import io.github.apace100.apoli.power.PowerType; +import io.github.apace100.apoli.power.factory.PowerFactory; +import io.github.apace100.calio.data.SerializableData; +import net.minecraft.util.Identifier; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; + +import java.util.OptionalDouble; +import java.util.OptionalInt; + +public class WingsPower extends Power implements IcarusPlayerValues { + + public static final Identifier POWER_TYPE_ID = new Identifier(TerraOriginum.MOD_ID, "wings"); + + private final ItemStack wingsType; + private final OptionalBool armorSlows; + private final OptionalDouble maxSlowedMultiplier; + private final OptionalDouble wingsSpeed; + private final OptionalDouble exhaustionAmount; + private final OptionalInt maxHeightAboveWorld; + + private IcarusPlayerValues fallback = new ServerPlayerFallbackValues(); + + public WingsPower(PowerType type, LivingEntity entity, ItemStack wingsType, OptionalBool armorSlows, OptionalDouble maxSlowedMultiplier, OptionalDouble wingsSpeed, OptionalDouble exhaustionAmount, OptionalInt maxHeightAboveWorld) { + super(type, entity); + this.wingsType = wingsType; + this.armorSlows = armorSlows; + this.maxSlowedMultiplier = maxSlowedMultiplier; + this.wingsSpeed = wingsSpeed; + this.exhaustionAmount = exhaustionAmount; + this.maxHeightAboveWorld = maxHeightAboveWorld; + } + + public ItemStack getWingsType() { + return wingsType; + } + + public void updateFallback(IcarusPlayerValues fallback) { + this.fallback = fallback; + } + + @Override + public float wingsSpeed() { + return (float) wingsSpeed.orElseGet(fallback::wingsSpeed); + } + + @Override + public float maxSlowedMultiplier() { + return (float) maxSlowedMultiplier.orElseGet(fallback::maxSlowedMultiplier); + } + + @Override + public boolean armorSlows() { + return armorSlows.orElseGet(fallback::armorSlows); + } + + @Override + public boolean canLoopDeLoop() { + return fallback.canLoopDeLoop(); + } + + @Override + public boolean canSlowFall() { + return fallback.canSlowFall(); + } + + @Override + public float exhaustionAmount() { + return (float) exhaustionAmount.orElseGet(fallback::exhaustionAmount); + } + + @Override + public int maxHeightAboveWorld() { + return maxHeightAboveWorld.orElseGet(fallback::maxHeightAboveWorld); + } + + @Override + public boolean maxHeightEnabled() { + return maxHeightAboveWorld.isPresent() || fallback.maxHeightEnabled(); + } + + public static PowerFactory createFactory() { + return new PowerFactory<>(POWER_TYPE_ID, + new SerializableData() + .add("wings_type", CustomDataTypes.STACK_OR_ITEM_NAME) + .add("armor_slows", CustomDataTypes.OPTIONAL_BOOL, OptionalBool.DEFAULT) + .add("max_slowed_multiplier", CustomDataTypes.OPTIONAL_DOUBLE, OptionalDouble.empty()) + .add("wings_speed", CustomDataTypes.OPTIONAL_DOUBLE, OptionalDouble.empty()) + .add("exhaustion_amount", CustomDataTypes.OPTIONAL_DOUBLE, OptionalDouble.empty()) + .add("max_height_above_world", CustomDataTypes.OPTIONAL_INT, OptionalInt.empty()), + data -> (type, owner) -> { + ItemStack wingsType = data.get("wings_type"); + OptionalBool armorSlows = data.get("armor_slows"); + OptionalDouble maxSlowedMultiplier = data.get("max_slowed_multiplier"); + OptionalDouble wingsSpeed = data.get("wings_speed"); + OptionalDouble exhaustionAmount = data.get("exhaustion_amount"); + OptionalInt maxHeightAboveWorld = data.get("max_height_above_world"); + + return new WingsPower(type, owner, wingsType, armorSlows, maxSlowedMultiplier, wingsSpeed, exhaustionAmount, maxHeightAboveWorld); + } + ); + } + +} diff --git a/src/main/java/com/smithy/terraoriginum/registry/ModEnchantments.java b/src/main/java/com/smithy/terraoriginum/registry/ModEnchantments.java new file mode 100644 index 0000000..4ed4b90 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/registry/ModEnchantments.java @@ -0,0 +1,27 @@ +package com.smithy.terraoriginum.registry; + +import com.smithy.terraoriginum.TerraOriginum; +import com.smithy.terraoriginum.enchantment.LightProtectionEnchantment; +import com.smithy.terraoriginum.enchantment.SunProtectionEnchantment; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentTarget; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.registry.Registries; +import net.minecraft.util.Identifier; +import net.minecraft.registry.Registry; + +public class ModEnchantments { + + public static final Enchantment SUN_PROTECTION = new SunProtectionEnchantment(Enchantment.Rarity.RARE, EnchantmentTarget.ARMOR, new EquipmentSlot[]{EquipmentSlot.HEAD, EquipmentSlot.CHEST, EquipmentSlot.LEGS, EquipmentSlot.FEET}); + public static final Enchantment LIGHT_PROTECTION = new LightProtectionEnchantment(Enchantment.Rarity.RARE, EnchantmentTarget.ARMOR_CHEST, new EquipmentSlot[]{EquipmentSlot.CHEST}); + + public static void register() { + register("sun_protection", SUN_PROTECTION); + register("light_protection", LIGHT_PROTECTION); + } + + private static Enchantment register(String path, Enchantment enchantment) { + Registry.register(Registries.ENCHANTMENT, new Identifier(TerraOriginum.MOD_ID, path), enchantment); + return enchantment; + } +} diff --git a/src/main/java/com/smithy/terraoriginum/registry/ModPowers.java b/src/main/java/com/smithy/terraoriginum/registry/ModPowers.java new file mode 100644 index 0000000..2185822 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/registry/ModPowers.java @@ -0,0 +1,27 @@ +package com.smithy.terraoriginum.registry; + +import com.smithy.terraoriginum.TerraOriginum; +import com.smithy.terraoriginum.power.CanStandOnPowderSnow; +import com.smithy.terraoriginum.power.PreventBlockSlowness; +import com.smithy.terraoriginum.power.WingsPower; + +import io.github.apace100.apoli.power.factory.PowerFactory; +import io.github.apace100.apoli.registry.ApoliRegistries; +import io.github.apace100.calio.data.SerializableData; +import net.minecraft.registry.Registry; +import net.minecraft.util.Identifier; + +public class ModPowers { + + public static final PowerFactory CAN_WALK_ON_POWDER_SNOW = new PowerFactory<>( new Identifier(TerraOriginum.MOD_ID, "can_walk_on_powder_snow"), new SerializableData(), data -> (type, entity) -> new CanStandOnPowderSnow(type, entity)).allowCondition(); + public static final PowerFactory PREVENT_BLOCK_SLOWNESS = new PowerFactory<>(new Identifier(TerraOriginum.MOD_ID, "prevent_block_slowness"), new SerializableData(), data -> (type, entity) -> new PreventBlockSlowness(type, entity)).allowCondition(); + public static final PowerFactory WINGS_POWER = WingsPower.createFactory().allowCondition(); + + + public static void register() { + Registry.register(ApoliRegistries.POWER_FACTORY, CAN_WALK_ON_POWDER_SNOW.getSerializerId(), CAN_WALK_ON_POWDER_SNOW); + Registry.register(ApoliRegistries.POWER_FACTORY, PREVENT_BLOCK_SLOWNESS.getSerializerId(), PREVENT_BLOCK_SLOWNESS); + Registry.register(ApoliRegistries.POWER_FACTORY, WingsPower.POWER_TYPE_ID, WINGS_POWER); + + } +} diff --git a/src/main/java/com/smithy/terraoriginum/util/CodecHelper.java b/src/main/java/com/smithy/terraoriginum/util/CodecHelper.java new file mode 100644 index 0000000..22f8941 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/util/CodecHelper.java @@ -0,0 +1,13 @@ +package com.smithy.terraoriginum.util; + +import com.mojang.datafixers.util.Either; +import com.mojang.serialization.Codec; +import net.minecraft.registry.Registries; +import net.minecraft.item.ItemStack; + +import java.util.function.UnaryOperator; + +public class CodecHelper { + + public static final Codec STACK_OR_ITEM_NAME = Codec.either(ItemStack.CODEC, Registries.ITEM.getCodec()).xmap(either -> either.map(UnaryOperator.identity(), ItemStack::new), Either::left); +} diff --git a/src/main/java/com/smithy/terraoriginum/util/CustomDataTypes.java b/src/main/java/com/smithy/terraoriginum/util/CustomDataTypes.java new file mode 100644 index 0000000..a858d8d --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/util/CustomDataTypes.java @@ -0,0 +1,78 @@ +package com.smithy.terraoriginum.util; +import com.google.gson.JsonParseException; +import com.mojang.serialization.JsonOps; +import io.github.apace100.calio.data.SerializableDataType; +import net.minecraft.item.ItemStack; +import net.minecraft.network.PacketByteBuf; + +import java.util.OptionalDouble; +import java.util.OptionalInt; + +public class CustomDataTypes { + + public static final SerializableDataType STACK_OR_ITEM_NAME = new SerializableDataType<>( + ItemStack.class, + PacketByteBuf::writeItemStack, + PacketByteBuf::readItemStack, + jsonElement -> CodecHelper.STACK_OR_ITEM_NAME.decode(JsonOps.INSTANCE, jsonElement).result().orElseThrow(() -> new JsonParseException("Could not parse ItemStack from JSON.")).getFirst() + ); + + /*new SerializableDataType<>(ItemStack.class, + PacketByteBuf::writeItem, + PacketByteBuf::readItem, + jsonElement -> CodecHelper.STACK_OR_ITEM_NAME.decode(JsonOps.INSTANCE, jsonElement).result().orElseThrow(() -> new JsonParseException("Could not parse ItemStack from JSON.")).getFirst() + );*/ + + public static final SerializableDataType OPTIONAL_BOOL = new SerializableDataType<>(OptionalBool.class, + PacketByteBuf::writeEnumConstant, + buf -> buf.readEnumConstant(OptionalBool.class), + jsonElement -> { + if (jsonElement.isJsonPrimitive() && jsonElement.getAsJsonPrimitive().isBoolean()) { + return OptionalBool.of(jsonElement.getAsBoolean()); + } + return OptionalBool.DEFAULT; + } + ); + + public static final SerializableDataType OPTIONAL_DOUBLE = new SerializableDataType<>(OptionalDouble.class, + (buf, optionalDouble) -> { + buf.writeBoolean(optionalDouble.isPresent()); + if (optionalDouble.isPresent()) { + buf.writeDouble(optionalDouble.getAsDouble()); + } + }, + buf -> { + if (buf.readBoolean()) { + return OptionalDouble.of(buf.readDouble()); + } + return OptionalDouble.empty(); + }, + jsonElement -> { + if (jsonElement.isJsonPrimitive() && jsonElement.getAsJsonPrimitive().isNumber()) { + return OptionalDouble.of(jsonElement.getAsDouble()); + } + return OptionalDouble.empty(); + } + ); + + public static final SerializableDataType OPTIONAL_INT = new SerializableDataType<>(OptionalInt.class, + (buf, optionalInt) -> { + buf.writeBoolean(optionalInt.isPresent()); + if (optionalInt.isPresent()) { + buf.writeInt(optionalInt.getAsInt()); + } + }, + buf -> { + if (buf.readBoolean()) { + return OptionalInt.of(buf.readInt()); + } + return OptionalInt.empty(); + }, + jsonElement -> { + if (jsonElement.isJsonPrimitive() && jsonElement.getAsJsonPrimitive().isNumber()) { + return OptionalInt.of(jsonElement.getAsInt()); + } + return OptionalInt.empty(); + } + ); +} diff --git a/src/main/java/com/smithy/terraoriginum/util/LootTableModifiers.java b/src/main/java/com/smithy/terraoriginum/util/LootTableModifiers.java new file mode 100644 index 0000000..72df4ca --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/util/LootTableModifiers.java @@ -0,0 +1,30 @@ +package com.smithy.terraoriginum.util; + +import com.smithy.terraoriginum.items.CottonItems; +import net.fabricmc.fabric.api.loot.v2.LootTableEvents; +import net.minecraft.loot.LootPool; +import net.minecraft.loot.condition.RandomChanceLootCondition; +import net.minecraft.loot.entry.ItemEntry; +import net.minecraft.loot.function.SetCountLootFunction; +import net.minecraft.loot.provider.number.ConstantLootNumberProvider; +import net.minecraft.loot.provider.number.UniformLootNumberProvider; +import net.minecraft.util.Identifier; + +public class LootTableModifiers { + private static final Identifier GRASS_ID = + new Identifier("minecraft", "blocks/grass"); + + public static void modifyLootTables() { + LootTableEvents.MODIFY.register((resourceManager, lootManager, id, tableBuilder, source) -> { + if(GRASS_ID.equals(id)) { + LootPool.Builder poolBuilder = LootPool.builder() + .rolls(ConstantLootNumberProvider.create(1)) + .conditionally(RandomChanceLootCondition.builder(0.08f)) + .with(ItemEntry.builder(CottonItems.COTTON_SEEDS)) + .apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(1.0f, 1.0f)).build()); + + tableBuilder.pool(poolBuilder.build()); + } + }); + } +} diff --git a/src/main/java/com/smithy/terraoriginum/util/OptionalBool.java b/src/main/java/com/smithy/terraoriginum/util/OptionalBool.java new file mode 100644 index 0000000..95676f6 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/util/OptionalBool.java @@ -0,0 +1,38 @@ +package com.smithy.terraoriginum.util; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; + +import java.util.Optional; +import java.util.function.BooleanSupplier; + +public enum OptionalBool { + + TRUE, + FALSE, + DEFAULT; + + public static OptionalBool of(Boolean value) { + return value == null ? DEFAULT : value ? TRUE : FALSE; + } + + public boolean isTrue() { + return this == TRUE; + } + + public boolean orElse(boolean defaultValue) { + return this == TRUE || (this == DEFAULT && defaultValue); + } + + public boolean orElseGet(BooleanSupplier defaultValue) { + return this == TRUE || (this == DEFAULT && defaultValue.getAsBoolean()); + } + + public Optional asOptional() { + return this == DEFAULT ? Optional.empty() : Optional.of(isTrue()); + } + + public static MapCodec codecFieldOf(String fieldName) { + return Codec.BOOL.optionalFieldOf(fieldName).xmap(opt -> opt.map(aBoolean -> aBoolean ? TRUE : FALSE).orElse(DEFAULT), OptionalBool::asOptional); + } +} diff --git a/src/main/java/com/smithy/terraoriginum/util/TerraHelper.java b/src/main/java/com/smithy/terraoriginum/util/TerraHelper.java new file mode 100644 index 0000000..0c7e8c4 --- /dev/null +++ b/src/main/java/com/smithy/terraoriginum/util/TerraHelper.java @@ -0,0 +1,10 @@ +package com.smithy.terraoriginum.util; + +import net.minecraft.entity.Entity; + +public class TerraHelper { + + public static boolean isWet(Entity entity) { + return entity.isWet(); + } +} \ No newline at end of file diff --git a/src/main/resources/assets/coconut.jpg b/src/main/resources/assets/coconut.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e7c2d1b7925eeddfc46e91ebc62834aaf29abcd8 GIT binary patch literal 27656 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