├── .gitattributes ├── .github └── workflows │ └── build.yml ├── .gitignore ├── LICENSE ├── README.md ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── src └── main ├── java └── com │ └── eightsidedsquare │ └── angling │ ├── cca │ ├── AnglingEntityComponents.java │ └── FishSpawningComponent.java │ ├── client │ ├── AnglingClient.java │ ├── model │ │ ├── AnemoneBlockEntityModel.java │ │ ├── BasicEntityModel.java │ │ ├── CrabEntityModel.java │ │ ├── DongfishEntityModel.java │ │ ├── FryEntityModel.java │ │ ├── NautilusEntityModel.java │ │ ├── StarfishBlockEntityModel.java │ │ ├── SunfishEntityModel.java │ │ └── UrchinBlockEntityModel.java │ ├── particle │ │ ├── AlgaeParticle.java │ │ └── WormParticle.java │ └── renderer │ │ ├── AnemoneBlockEntityRenderer.java │ │ ├── AnglerfishEntityRenderer.java │ │ ├── BasicEntityRenderer.java │ │ ├── FryEntityRenderer.java │ │ ├── NautilusEntityRenderer.java │ │ ├── PelicanEntityRenderer.java │ │ ├── RoeBlockEntityRenderer.java │ │ ├── SeaSlugEggsBlockEntityRenderer.java │ │ ├── SeaSlugEntityRenderer.java │ │ ├── StarfishBlockEntityRenderer.java │ │ └── UrchinBlockEntityRenderer.java │ ├── common │ ├── block │ │ ├── AlgaeBlock.java │ │ ├── AnemoneBlock.java │ │ ├── ClamBlock.java │ │ ├── FilterFeeder.java │ │ ├── OystersBlock.java │ │ ├── PapyrusBlock.java │ │ ├── RoeBlock.java │ │ ├── SeaSlugEggsBlock.java │ │ ├── StarfishBlock.java │ │ ├── UrchinBlock.java │ │ ├── WaterFloatingPlant.java │ │ ├── WormyBlock.java │ │ ├── WormyDirtBlock.java │ │ └── WormyMudBlock.java │ ├── entity │ │ ├── AnemoneBlockEntity.java │ │ ├── AnglerfishEntity.java │ │ ├── AnomalocarisEntity.java │ │ ├── BubbleEyeEntity.java │ │ ├── CatfishEntity.java │ │ ├── CrabEntity.java │ │ ├── DongfishEntity.java │ │ ├── FryEntity.java │ │ ├── MahiMahiEntity.java │ │ ├── NautilusEntity.java │ │ ├── PelicanEntity.java │ │ ├── RoeBlockEntity.java │ │ ├── SeaSlugEggsBlockEntity.java │ │ ├── SeaSlugEntity.java │ │ ├── SeahorseEntity.java │ │ ├── StarfishBlockEntity.java │ │ ├── SunfishEntity.java │ │ ├── UrchinBlockEntity.java │ │ ├── ai │ │ │ ├── EatAlgaeGoal.java │ │ │ ├── FishLayRoeGoal.java │ │ │ ├── FishMateGoal.java │ │ │ ├── GoToWaterGoal.java │ │ │ ├── PelicanAttackTask.java │ │ │ ├── PelicanAttackablesSensor.java │ │ │ ├── PelicanBrain.java │ │ │ ├── PelicanEatTask.java │ │ │ ├── PelicanSoarTask.java │ │ │ ├── PelicanTradeTask.java │ │ │ ├── SeaSlugLayEggsGoal.java │ │ │ ├── SeaSlugMateGoal.java │ │ │ └── WanderAroundWaterGoal.java │ │ └── util │ │ │ ├── CrabVariant.java │ │ │ ├── FishVariantInheritance.java │ │ │ ├── PelicanBeakEntityInitializer.java │ │ │ ├── SeaSlugColor.java │ │ │ ├── SeaSlugPattern.java │ │ │ └── SunfishVariant.java │ ├── feature │ │ ├── NoisePatchFeature.java │ │ ├── NoisePatchFeatureConfig.java │ │ ├── WaterAdjacentPatchFeature.java │ │ ├── WaterloggablePatchFeature.java │ │ └── WormyBlockFeature.java │ ├── item │ │ ├── RoeBlockItem.java │ │ ├── UrchinBucketItem.java │ │ └── WormItem.java │ └── world │ │ └── PelicanSpawner.java │ ├── core │ ├── AnglingBlocks.java │ ├── AnglingCriteria.java │ ├── AnglingEntities.java │ ├── AnglingItems.java │ ├── AnglingMixinPlugin.java │ ├── AnglingMod.java │ ├── AnglingParticles.java │ ├── AnglingPreLaunch.java │ ├── AnglingSounds.java │ ├── AnglingUtil.java │ ├── ai │ │ ├── AnglingMemoryModuleTypes.java │ │ └── AnglingSensorTypes.java │ ├── tags │ │ ├── AnglingBiomeTags.java │ │ ├── AnglingBlockTags.java │ │ └── AnglingEntityTypeTags.java │ └── world │ │ ├── AnglingConfiguredFeatures.java │ │ ├── AnglingFeatures.java │ │ └── AnglingPlacedFeatures.java │ └── mixin │ ├── CoralFeatureMixin.java │ ├── EntityBucketItemMixin.java │ ├── FishEntityMixin.java │ ├── FluidRendererMixin.java │ ├── FollowGroupLeaderGoalMixin.java │ ├── SchoolingFishEntityMixin.java │ ├── TadpoleEntityMixin.java │ └── integration │ └── SodiumFluidRendererMixin.java └── resources ├── angling.accesswidener ├── angling.mixins.json ├── assets ├── angling │ ├── animations │ │ ├── anemone.animation.json │ │ ├── anglerfish.animation.json │ │ ├── anomalocaris.animation.json │ │ ├── bubble_eye.animation.json │ │ ├── catfish.animation.json │ │ ├── crab.animation.json │ │ ├── dongfish.animation.json │ │ ├── fry.animation.json │ │ ├── mahi_mahi.animation.json │ │ ├── nautilus.animation.json │ │ ├── pelican.animation.json │ │ ├── sea_slug.animation.json │ │ ├── seahorse.animation.json │ │ ├── starfish.animation.json │ │ ├── sunfish.animation.json │ │ └── urchin.animation.json │ ├── blockstates │ │ ├── algae.json │ │ ├── anemone.json │ │ ├── clam.json │ │ ├── dead_starfish.json │ │ ├── duckweed.json │ │ ├── oysters.json │ │ ├── papyrus.json │ │ ├── roe.json │ │ ├── sargassum.json │ │ ├── sea_slug_eggs.json │ │ ├── starfish.json │ │ ├── urchin.json │ │ ├── wormy_dirt.json │ │ └── wormy_mud.json │ ├── geo │ │ ├── anemone.geo.json │ │ ├── anglerfish.geo.json │ │ ├── anomalocaris.geo.json │ │ ├── bubble_eye.geo.json │ │ ├── catfish.geo.json │ │ ├── crab.geo.json │ │ ├── dongfish.geo.json │ │ ├── fry.geo.json │ │ ├── mahi_mahi.geo.json │ │ ├── nautilus.geo.json │ │ ├── pelican.geo.json │ │ ├── sea_slug.geo.json │ │ ├── seahorse.geo.json │ │ ├── starfish.geo.json │ │ ├── sunfish.geo.json │ │ └── urchin.geo.json │ ├── icon.png │ ├── lang │ │ └── en_us.json │ ├── models │ │ ├── block │ │ │ ├── algae.json │ │ │ ├── anemone.json │ │ │ ├── clam.json │ │ │ ├── dead_starfish.json │ │ │ ├── duckweed.json │ │ │ ├── oysters.json │ │ │ ├── papyrus_age0.json │ │ │ ├── papyrus_age1.json │ │ │ ├── papyrus_age2.json │ │ │ ├── roe.json │ │ │ ├── sargassum.json │ │ │ ├── sea_slug_eggs.json │ │ │ ├── starfish.json │ │ │ ├── urchin.json │ │ │ ├── wormy_dirt_1.json │ │ │ ├── wormy_dirt_2.json │ │ │ ├── wormy_dirt_3.json │ │ │ ├── wormy_mud_1.json │ │ │ ├── wormy_mud_2.json │ │ │ └── wormy_mud_3.json │ │ └── item │ │ │ ├── algae.json │ │ │ ├── anemone.json │ │ │ ├── anglerfish_bucket.json │ │ │ ├── anglerfish_spawn_egg.json │ │ │ ├── anomalocaris_bucket.json │ │ │ ├── anomalocaris_spawn_egg.json │ │ │ ├── bubble_eye_bucket.json │ │ │ ├── bubble_eye_spawn_egg.json │ │ │ ├── catfish_bucket.json │ │ │ ├── catfish_spawn_egg.json │ │ │ ├── clam.json │ │ │ ├── crab_bucket.json │ │ │ ├── crab_spawn_egg.json │ │ │ ├── dead_starfish.json │ │ │ ├── dongfish_bucket.json │ │ │ ├── dongfish_bucket_horngus.json │ │ │ ├── dongfish_bucket_no_horngus.json │ │ │ ├── dongfish_spawn_egg.json │ │ │ ├── duckweed.json │ │ │ ├── fried_sunfish.json │ │ │ ├── fry_bucket.json │ │ │ ├── fry_spawn_egg.json │ │ │ ├── mahi_mahi_bucket.json │ │ │ ├── mahi_mahi_spawn_egg.json │ │ │ ├── nautilus_bucket.json │ │ │ ├── nautilus_spawn_egg.json │ │ │ ├── oysters.json │ │ │ ├── papyrus.json │ │ │ ├── pelican_spawn_egg.json │ │ │ ├── roe.json │ │ │ ├── sargassum.json │ │ │ ├── sea_slug_bucket.json │ │ │ ├── sea_slug_eggs.json │ │ │ ├── sea_slug_spawn_egg.json │ │ │ ├── seahorse_bucket.json │ │ │ ├── seahorse_spawn_egg.json │ │ │ ├── starfish.json │ │ │ ├── sunfish.json │ │ │ ├── sunfish_bucket.json │ │ │ ├── sunfish_spawn_egg.json │ │ │ ├── urchin_bucket.json │ │ │ ├── urchin_spawn_egg.json │ │ │ ├── worm.json │ │ │ ├── wormy_dirt.json │ │ │ └── wormy_mud.json │ ├── particles │ │ ├── algae.json │ │ └── worm.json │ ├── sounds.json │ ├── sounds │ │ ├── block │ │ │ └── shell │ │ │ │ ├── step1.ogg │ │ │ │ ├── step2.ogg │ │ │ │ ├── step3.ogg │ │ │ │ └── step4.ogg │ │ ├── entity │ │ │ └── pelican │ │ │ │ ├── ambient1.ogg │ │ │ │ ├── ambient2.ogg │ │ │ │ ├── ambient3.ogg │ │ │ │ ├── ambient4.ogg │ │ │ │ ├── hurt1.ogg │ │ │ │ ├── hurt2.ogg │ │ │ │ ├── hurt3.ogg │ │ │ │ └── hurt4.ogg │ │ └── item │ │ │ └── worm │ │ │ ├── use1.ogg │ │ │ └── use2.ogg │ └── textures │ │ ├── block │ │ ├── algae.png │ │ ├── clam.png │ │ ├── duckweed.png │ │ ├── oysters.png │ │ ├── papyrus.png │ │ ├── roe_bottom.png │ │ ├── roe_top.png │ │ ├── sargassum.png │ │ ├── sargassum_side.png │ │ ├── sea_slug_eggs.png │ │ ├── wormy_dirt_1.png │ │ ├── wormy_dirt_2.png │ │ ├── wormy_dirt_3.png │ │ ├── wormy_mud_1.png │ │ ├── wormy_mud_2.png │ │ └── wormy_mud_3.png │ │ ├── entity │ │ ├── anemone │ │ │ └── anemone.png │ │ ├── anglerfish │ │ │ ├── anglerfish.png │ │ │ └── anglerfish_overlay.png │ │ ├── anomalocaris │ │ │ └── anomalocaris.png │ │ ├── bubble_eye │ │ │ └── bubble_eye.png │ │ ├── catfish │ │ │ └── catfish.png │ │ ├── crab │ │ │ ├── blue_claw.png │ │ │ ├── dungeness.png │ │ │ └── ghost.png │ │ ├── dongfish │ │ │ └── dongfish.png │ │ ├── fry │ │ │ ├── fry.png │ │ │ └── fry_innards.png │ │ ├── mahi_mahi │ │ │ └── mahi_mahi.png │ │ ├── nautilus │ │ │ └── nautilus.png │ │ ├── pelican │ │ │ └── pelican.png │ │ ├── sea_slug │ │ │ ├── rings.png │ │ │ ├── sea_slug.png │ │ │ ├── spots.png │ │ │ ├── squiggles.png │ │ │ └── stripes.png │ │ ├── seahorse │ │ │ └── seahorse.png │ │ ├── starfish │ │ │ ├── dead_starfish.png │ │ │ └── starfish.png │ │ ├── sunfish │ │ │ ├── bluegill.png │ │ │ ├── bluegill_and_pumpkinseed_hybrid.png │ │ │ ├── bluegill_and_redbreast_hybrid.png │ │ │ ├── diansus_diansur.png │ │ │ ├── green.png │ │ │ ├── longear.png │ │ │ ├── pumpkinseed.png │ │ │ ├── redbreast.png │ │ │ └── warmouth.png │ │ └── urchin │ │ │ └── urchin.png │ │ ├── item │ │ ├── anglerfish_bucket.png │ │ ├── anomalocaris_bucket.png │ │ ├── bubble_eye_bucket.png │ │ ├── catfish_bucket.png │ │ ├── clam.png │ │ ├── crab_bucket.png │ │ ├── dead_starfish.png │ │ ├── dongfish_bucket.png │ │ ├── dongfish_bucket_no_horngus.png │ │ ├── fried_sunfish.png │ │ ├── fry_bucket.png │ │ ├── fry_bucket_overlay.png │ │ ├── mahi_mahi_bucket.png │ │ ├── nautilus_bucket.png │ │ ├── oysters.png │ │ ├── papyrus.png │ │ ├── roe.png │ │ ├── roe_overlay.png │ │ ├── sea_slug_bucket.png │ │ ├── sea_slug_bucket_overlay_0.png │ │ ├── sea_slug_bucket_overlay_1.png │ │ ├── seahorse_bucket.png │ │ ├── starfish.png │ │ ├── sunfish.png │ │ ├── sunfish_bucket.png │ │ ├── urchin_bucket.png │ │ └── worm.png │ │ └── particle │ │ ├── worm_0.png │ │ ├── worm_1.png │ │ ├── worm_2.png │ │ ├── worm_3.png │ │ ├── worm_4.png │ │ ├── worm_5.png │ │ ├── worm_6.png │ │ ├── worm_7.png │ │ ├── worm_8.png │ │ └── worm_9.png └── minecraft │ ├── models │ └── item │ │ └── tropical_fish_bucket.json │ └── textures │ └── item │ ├── tropical_fish_bucket.png │ ├── tropical_fish_bucket_overlay_0.png │ └── tropical_fish_bucket_overlay_1.png ├── data ├── angling │ ├── advancements │ │ └── husbandry │ │ │ ├── look_at_nautilus.json │ │ │ ├── obtain_roe.json │ │ │ ├── obtain_sea_slug_eggs.json │ │ │ ├── put_worm_in_block.json │ │ │ └── traded_with_pelican.json │ ├── loot_tables │ │ ├── blocks │ │ │ ├── algae.json │ │ │ ├── anemone.json │ │ │ ├── clam.json │ │ │ ├── dead_starfish.json │ │ │ ├── duckweed.json │ │ │ ├── oysters.json │ │ │ ├── papyrus.json │ │ │ ├── roe.json │ │ │ ├── sargassum.json │ │ │ ├── sea_slug_eggs.json │ │ │ ├── starfish.json │ │ │ ├── urchin.json │ │ │ ├── wormy_dirt.json │ │ │ └── wormy_mud.json │ │ └── entities │ │ │ ├── crab.json │ │ │ ├── dongfish.json │ │ │ ├── fry.json │ │ │ ├── nautilus.json │ │ │ ├── pelican.json │ │ │ └── sunfish.json │ ├── recipes │ │ ├── fried_sunfish.json │ │ ├── fried_sunfish_from_campfire_cooking.json │ │ ├── fried_sunfish_from_smoking.json │ │ └── paper_from_papyrus.json │ └── tags │ │ ├── blocks │ │ ├── crab_spawnable_on.json │ │ ├── filter_feeders.json │ │ └── starfish_food.json │ │ ├── crab_variant │ │ └── natural_variants.json │ │ ├── entity_types │ │ ├── common_entities_in_pelican_beak.json │ │ ├── hunted_by_pelican.json │ │ ├── hunted_by_pelican_when_baby.json │ │ ├── spawning_fish.json │ │ └── uncommon_entities_in_pelican_beak.json │ │ ├── sea_slug_color │ │ ├── base_colors.json │ │ └── pattern_colors.json │ │ ├── sea_slug_pattern │ │ └── natural_patterns.json │ │ ├── sunfish_variant │ │ ├── natural_sunfish.json │ │ └── pelican_beak_variants.json │ │ └── worldgen │ │ └── biome │ │ ├── anglerfish_spawn_in.json │ │ ├── anomalocaris_spawn_in.json │ │ ├── blue_claw_crab_biomes.json │ │ ├── bubble_eye_spawn_in.json │ │ ├── catfish_spawn_in.json │ │ ├── clams_biomes.json │ │ ├── crab_spawn_in.json │ │ ├── duckweed_biomes.json │ │ ├── dungeness_crab_biomes.json │ │ ├── ghost_crab_biomes.json │ │ ├── mahi_mahi_spawn_in.json │ │ ├── nautilus_spawn_in.json │ │ ├── oyster_reef_biomes.json │ │ ├── papyrus_biomes.json │ │ ├── sargassum_biomes.json │ │ ├── sea_slug_spawn_in.json │ │ ├── seahorse_spawn_in.json │ │ └── sunfish_spawn_in.json └── minecraft │ └── tags │ ├── blocks │ ├── dirt.json │ └── mineable │ │ ├── hoe.json │ │ ├── pickaxe.json │ │ └── shovel.json │ └── entity_types │ └── axolotl_hunt_targets.json └── fabric.mod.json /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | # Automatically build the project and run any configured tests for every push 2 | # and submitted pull request. This can help catch issues that only occur on 3 | # certain platforms or Java versions, and provides a first line of defence 4 | # against bad commits. 5 | 6 | name: build 7 | on: [pull_request, push] 8 | 9 | jobs: 10 | build: 11 | strategy: 12 | matrix: 13 | # Use these Java versions 14 | java: [ 15 | 17, # Current Java LTS & minimum supported by Minecraft 16 | ] 17 | # and run on both Linux and Windows 18 | os: [ubuntu-20.04, windows-2022] 19 | runs-on: ${{ matrix.os }} 20 | steps: 21 | - name: checkout repository 22 | uses: actions/checkout@v2 23 | - name: validate gradle wrapper 24 | uses: gradle/wrapper-validation-action@v1 25 | - name: setup jdk ${{ matrix.java }} 26 | uses: actions/setup-java@v1 27 | with: 28 | java-version: ${{ matrix.java }} 29 | - name: make gradle wrapper executable 30 | if: ${{ runner.os != 'Windows' }} 31 | run: chmod +x ./gradlew 32 | - name: build 33 | run: ./gradlew build 34 | - name: capture build artifacts 35 | if: ${{ runner.os == 'Linux' && matrix.java == '17' }} # Only upload artifacts built from latest java on one OS 36 | uses: actions/upload-artifact@v2 37 | with: 38 | name: Artifacts 39 | path: build/libs/ 40 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # gradle 2 | 3 | .gradle/ 4 | build/ 5 | out/ 6 | classes/ 7 | 8 | # eclipse 9 | 10 | *.launch 11 | 12 | # idea 13 | 14 | .idea/ 15 | *.iml 16 | *.ipr 17 | *.iws 18 | 19 | # vscode 20 | 21 | .settings/ 22 | .vscode/ 23 | bin/ 24 | .classpath 25 | .project 26 | 27 | # macos 28 | 29 | *.DS_Store 30 | 31 | # fabric 32 | 33 | run/ 34 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Angling 2 | 3 | Feel free to make expansions upon this mod! A lot of stuff is data driven, such as fish that can be bred, mobs that pelicans spawn with, etc. 4 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Done to increase the memory available to gradle. 2 | org.gradle.jvmargs=-Xmx4G 3 | org.gradle.parallel=true 4 | 5 | minecraft_version=1.19.2 6 | yarn_mappings=1.19.2+build.28 7 | loader_version=0.14.11 8 | 9 | mod_version = 1.0.1 10 | maven_group = com.eightsidedsquare 11 | archives_base_name = angling 12 | 13 | fabric_version=0.68.0+1.19.2 14 | mixin_extras_version=0.1.1 15 | sodium_version=mc1.19.2-0.4.4 16 | cca_version=5.0.0 17 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip 4 | networkTimeout=10000 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | maven { 4 | name = 'Fabric' 5 | url = 'https://maven.fabricmc.net/' 6 | } 7 | mavenCentral() 8 | gradlePluginPortal() 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/cca/AnglingEntityComponents.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.cca; 2 | 3 | import dev.onyxstudios.cca.api.v3.component.ComponentKey; 4 | import dev.onyxstudios.cca.api.v3.component.ComponentRegistryV3; 5 | import dev.onyxstudios.cca.api.v3.entity.EntityComponentFactoryRegistry; 6 | import dev.onyxstudios.cca.api.v3.entity.EntityComponentInitializer; 7 | import net.minecraft.entity.passive.FishEntity; 8 | import net.minecraft.util.Identifier; 9 | import org.jetbrains.annotations.NotNull; 10 | 11 | import static com.eightsidedsquare.angling.core.AnglingMod.MOD_ID; 12 | 13 | public class AnglingEntityComponents implements EntityComponentInitializer { 14 | 15 | public static final ComponentKey FISH_SPAWNING = 16 | ComponentRegistryV3.INSTANCE.getOrCreate(new Identifier(MOD_ID, "fish_spawning"), FishSpawningComponent.class); 17 | 18 | @Override 19 | public void registerEntityComponentFactories(@NotNull EntityComponentFactoryRegistry registry) { 20 | registry.registerFor(FishEntity.class, FISH_SPAWNING, FishSpawningComponent::new); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/client/model/AnemoneBlockEntityModel.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.client.model; 2 | 3 | import com.eightsidedsquare.angling.common.entity.AnemoneBlockEntity; 4 | import net.minecraft.util.Identifier; 5 | import software.bernie.geckolib3.model.AnimatedGeoModel; 6 | 7 | import static com.eightsidedsquare.angling.core.AnglingMod.MOD_ID; 8 | 9 | public class AnemoneBlockEntityModel extends AnimatedGeoModel { 10 | @Override 11 | public Identifier getModelResource(AnemoneBlockEntity object) { 12 | return new Identifier(MOD_ID, "geo/anemone.geo.json"); 13 | } 14 | 15 | @Override 16 | public Identifier getTextureResource(AnemoneBlockEntity entity) { 17 | return new Identifier(MOD_ID, "textures/entity/anemone/anemone.png"); 18 | } 19 | 20 | @Override 21 | public Identifier getAnimationResource(AnemoneBlockEntity animatable) { 22 | return new Identifier(MOD_ID, "animations/anemone.animation.json"); 23 | } 24 | 25 | @Override 26 | public void setLivingAnimations(AnemoneBlockEntity entity, Integer uniqueID) { 27 | 28 | super.setLivingAnimations(entity, uniqueID); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/client/model/CrabEntityModel.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.client.model; 2 | 3 | import com.eightsidedsquare.angling.common.entity.CrabEntity; 4 | import com.eightsidedsquare.angling.core.AnglingUtil; 5 | import net.minecraft.util.Identifier; 6 | import software.bernie.geckolib3.core.event.predicate.AnimationEvent; 7 | import software.bernie.geckolib3.core.processor.IBone; 8 | import software.bernie.geckolib3.model.AnimatedGeoModel; 9 | import software.bernie.geckolib3.model.provider.data.EntityModelData; 10 | 11 | import static com.eightsidedsquare.angling.core.AnglingMod.MOD_ID; 12 | 13 | public class CrabEntityModel extends AnimatedGeoModel { 14 | 15 | @Override 16 | public Identifier getModelResource(CrabEntity entity) { 17 | return new Identifier(MOD_ID, "geo/crab.geo.json"); 18 | } 19 | 20 | @Override 21 | public Identifier getTextureResource(CrabEntity entity) { 22 | return entity.getVariant().texture(); 23 | } 24 | 25 | @Override 26 | public Identifier getAnimationResource(CrabEntity entity) { 27 | return new Identifier(MOD_ID, "animations/crab.animation.json"); 28 | } 29 | 30 | @Override @SuppressWarnings("unchecked") 31 | public void setLivingAnimations(CrabEntity entity, Integer uniqueID, AnimationEvent event) { 32 | if(!AnglingUtil.isReloadingResources()) { 33 | super.setLivingAnimations(entity, uniqueID, event); 34 | IBone root = getAnimationProcessor().getBone("root"); 35 | IBone eyes = getAnimationProcessor().getBone("eyes"); 36 | EntityModelData extraData = (EntityModelData) event.getExtraDataOfType(EntityModelData.class).get(0); 37 | if (eyes != null) { 38 | eyes.setRotationX(extraData.headPitch * ((float) Math.PI / 180F)); 39 | } 40 | if(extraData.isChild && root != null) { 41 | root.setScaleX(0.35f); 42 | root.setScaleY(0.35f); 43 | root.setScaleZ(0.35f); 44 | root.setPositionY(-1.75f); 45 | } 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/client/model/DongfishEntityModel.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.client.model; 2 | 3 | import com.eightsidedsquare.angling.common.entity.DongfishEntity; 4 | import com.eightsidedsquare.angling.core.AnglingUtil; 5 | import software.bernie.geckolib3.core.event.predicate.AnimationEvent; 6 | import software.bernie.geckolib3.core.processor.IBone; 7 | 8 | public class DongfishEntityModel extends BasicEntityModel { 9 | 10 | public DongfishEntityModel() { 11 | super("dongfish", true); 12 | } 13 | 14 | @Override 15 | public void setLivingAnimations(DongfishEntity entity, Integer uniqueID, AnimationEvent customPredicate) { 16 | super.setLivingAnimations(entity, uniqueID, customPredicate); 17 | if(!AnglingUtil.isReloadingResources()) { 18 | IBone scungle = getAnimationProcessor().getBone("scungle"); 19 | if(scungle != null) { 20 | scungle.setHidden(!entity.hasHorngus()); 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/client/model/FryEntityModel.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.client.model; 2 | 3 | import com.eightsidedsquare.angling.common.entity.FryEntity; 4 | import net.minecraft.util.Identifier; 5 | 6 | import static com.eightsidedsquare.angling.core.AnglingMod.MOD_ID; 7 | 8 | public class FryEntityModel extends BasicEntityModel { 9 | public FryEntityModel() { 10 | super("fry", true); 11 | } 12 | @Override 13 | public Identifier getTextureResource(FryEntity object) { 14 | return new Identifier(MOD_ID, "textures/entity/fry/fry_innards.png"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/client/model/NautilusEntityModel.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.client.model; 2 | 3 | import com.eightsidedsquare.angling.common.entity.NautilusEntity; 4 | import com.eightsidedsquare.angling.core.AnglingUtil; 5 | import software.bernie.geckolib3.core.event.predicate.AnimationEvent; 6 | import software.bernie.geckolib3.core.processor.IBone; 7 | 8 | public class NautilusEntityModel extends BasicEntityModel { 9 | public NautilusEntityModel() { 10 | super("nautilus", true); 11 | } 12 | 13 | @Override 14 | public void setLivingAnimations(NautilusEntity entity, Integer uniqueID, AnimationEvent customPredicate) { 15 | if(!AnglingUtil.isReloadingResources()) { 16 | super.setLivingAnimations(entity, uniqueID, customPredicate); 17 | IBone root = getAnimationProcessor().getBone("root"); 18 | if(!entity.isTouchingWater() && root != null) { 19 | root.setRotationZ((float) (Math.PI / -2d)); 20 | root.setPositionY(-1.5f); 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/client/model/StarfishBlockEntityModel.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.client.model; 2 | 3 | import com.eightsidedsquare.angling.common.block.StarfishBlock; 4 | import com.eightsidedsquare.angling.common.entity.StarfishBlockEntity; 5 | import com.eightsidedsquare.angling.core.AnglingUtil; 6 | import net.minecraft.util.Identifier; 7 | import net.minecraft.util.math.Vec3i; 8 | import software.bernie.geckolib3.model.AnimatedGeoModel; 9 | 10 | import java.util.Optional; 11 | 12 | import static com.eightsidedsquare.angling.core.AnglingMod.MOD_ID; 13 | 14 | public class StarfishBlockEntityModel extends AnimatedGeoModel { 15 | @Override 16 | public Identifier getModelResource(StarfishBlockEntity object) { 17 | return new Identifier(MOD_ID, "geo/starfish.geo.json"); 18 | } 19 | 20 | @Override 21 | public Identifier getTextureResource(StarfishBlockEntity entity) { 22 | if(entity != null && !((StarfishBlock) entity.getCachedState().getBlock()).isDead()) 23 | return new Identifier(MOD_ID, "textures/entity/starfish/starfish.png"); 24 | return new Identifier(MOD_ID, "textures/entity/starfish/dead_starfish.png"); 25 | } 26 | 27 | @Override 28 | public Identifier getAnimationResource(StarfishBlockEntity animatable) { 29 | return new Identifier(MOD_ID, "animations/starfish.animation.json"); 30 | } 31 | 32 | @Override 33 | public void setLivingAnimations(StarfishBlockEntity entity, Integer uniqueID) { 34 | if(!AnglingUtil.isReloadingResources()){ 35 | super.setLivingAnimations(entity, uniqueID); 36 | Optional.ofNullable(getAnimationProcessor().getBone("root")).ifPresent(bone -> { 37 | Vec3i rotation = entity.getRotation(); 38 | bone.setRotationX((float) Math.toRadians(rotation.getX())); 39 | bone.setRotationY((float) Math.toRadians(rotation.getY())); 40 | bone.setRotationZ((float) Math.toRadians(rotation.getZ())); 41 | }); 42 | Optional.ofNullable(getAnimationProcessor().getBone("starfish")).ifPresent(bone -> 43 | bone.setRotationY((float) entity.getRandomRotation())); 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/client/model/SunfishEntityModel.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.client.model; 2 | 3 | import com.eightsidedsquare.angling.common.entity.SunfishEntity; 4 | import com.eightsidedsquare.angling.common.entity.util.SunfishVariant; 5 | import com.eightsidedsquare.angling.core.AnglingUtil; 6 | import net.minecraft.util.Identifier; 7 | import org.jetbrains.annotations.Nullable; 8 | import software.bernie.geckolib3.core.event.predicate.AnimationEvent; 9 | import software.bernie.geckolib3.core.processor.IBone; 10 | import software.bernie.geckolib3.model.AnimatedGeoModel; 11 | 12 | import static com.eightsidedsquare.angling.core.AnglingMod.MOD_ID; 13 | 14 | public class SunfishEntityModel extends BasicEntityModel { 15 | public SunfishEntityModel() { 16 | super("sunfish", true); 17 | } 18 | @Override 19 | public Identifier getTextureResource(SunfishEntity entity) { 20 | SunfishVariant variant = entity.getVariant(); 21 | return variant != null ? variant.texture() : SunfishVariant.BLUEGILL.texture(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/client/model/UrchinBlockEntityModel.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.client.model; 2 | 3 | import com.eightsidedsquare.angling.common.entity.UrchinBlockEntity; 4 | import net.minecraft.util.Identifier; 5 | import software.bernie.geckolib3.model.AnimatedGeoModel; 6 | 7 | import static com.eightsidedsquare.angling.core.AnglingMod.MOD_ID; 8 | 9 | public class UrchinBlockEntityModel extends AnimatedGeoModel { 10 | 11 | @Override 12 | public Identifier getModelResource(UrchinBlockEntity object) { 13 | return new Identifier(MOD_ID, "geo/urchin.geo.json"); 14 | } 15 | 16 | @Override 17 | public Identifier getTextureResource(UrchinBlockEntity entity) { 18 | return new Identifier(MOD_ID, "textures/entity/urchin/urchin.png"); 19 | } 20 | 21 | @Override 22 | public Identifier getAnimationResource(UrchinBlockEntity animatable) { 23 | return new Identifier(MOD_ID, "animations/urchin.animation.json"); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/client/particle/AlgaeParticle.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.client.particle; 2 | 3 | import com.google.common.collect.ImmutableList; 4 | import net.minecraft.client.particle.*; 5 | import net.minecraft.client.world.ClientWorld; 6 | import net.minecraft.particle.DefaultParticleType; 7 | import net.minecraft.tag.FluidTags; 8 | import net.minecraft.util.Util; 9 | import net.minecraft.util.math.BlockPos; 10 | import org.jetbrains.annotations.Nullable; 11 | 12 | public class AlgaeParticle extends SpriteBillboardParticle { 13 | protected AlgaeParticle(ClientWorld clientWorld, double x, double y, double z, double velocityX, double velocityY, double velocityZ) { 14 | super(clientWorld, x, y, z, velocityX, velocityY, velocityZ); 15 | this.velocityX = velocityX; 16 | this.velocityY = velocityY; 17 | this.velocityZ = velocityZ; 18 | this.maxAge = this.random.nextBetween(60, 120); 19 | } 20 | 21 | @Override 22 | public void tick() { 23 | super.tick(); 24 | if (!this.dead && !this.world.getFluidState(new BlockPos(this.x, this.y, this.z)).isIn(FluidTags.WATER)) { 25 | this.markDead(); 26 | } 27 | } 28 | 29 | @Override 30 | public ParticleTextureSheet getType() { 31 | return ParticleTextureSheet.PARTICLE_SHEET_TRANSLUCENT; 32 | } 33 | 34 | public static class Factory implements ParticleFactory{ 35 | 36 | private final SpriteProvider spriteProvider; 37 | 38 | public Factory(SpriteProvider spriteProvider) { 39 | this.spriteProvider = spriteProvider; 40 | } 41 | 42 | @Nullable 43 | @Override 44 | public Particle createParticle(DefaultParticleType parameters, ClientWorld world, double x, double y, double z, double velocityX, double velocityY, double velocityZ) { 45 | AlgaeParticle particle = new AlgaeParticle(world, x, y, z, velocityX, velocityY, velocityZ); 46 | particle.setSprite(this.spriteProvider); 47 | int color = Util.getRandom(ImmutableList.of(0x79ab25, 0x5d9621, 0x41801c, 0x246a17), world.random); 48 | float r = ((color >> 16) & 0xFF) / 255f; 49 | float g = ((color >> 8) & 0xFF) / 255f; 50 | float b = (color & 0xFF) / 255f; 51 | particle.setColor(r, g, b); 52 | particle.setAlpha(0.5f); 53 | return particle; 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/client/renderer/AnemoneBlockEntityRenderer.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.client.renderer; 2 | 3 | import com.eightsidedsquare.angling.client.model.AnemoneBlockEntityModel; 4 | import com.eightsidedsquare.angling.common.entity.AnemoneBlockEntity; 5 | import net.minecraft.client.render.RenderLayer; 6 | import net.minecraft.client.render.VertexConsumer; 7 | import net.minecraft.client.render.VertexConsumerProvider; 8 | import net.minecraft.client.render.block.entity.BlockEntityRendererFactory; 9 | import net.minecraft.client.util.math.MatrixStack; 10 | import net.minecraft.util.Identifier; 11 | import software.bernie.geckolib3.renderers.geo.GeoBlockRenderer; 12 | 13 | public class AnemoneBlockEntityRenderer extends GeoBlockRenderer { 14 | 15 | public AnemoneBlockEntityRenderer(BlockEntityRendererFactory.Context ctx) { 16 | super(new AnemoneBlockEntityModel()); 17 | } 18 | 19 | @Override 20 | public RenderLayer getRenderType(AnemoneBlockEntity animatable, float partialTicks, MatrixStack stack, VertexConsumerProvider renderTypeBuffer, VertexConsumer vertexBuilder, int packedLightIn, Identifier textureLocation) { 21 | return RenderLayer.getEntityTranslucent(getTextureResource(animatable)); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/client/renderer/BasicEntityRenderer.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.client.renderer; 2 | 3 | import com.eightsidedsquare.angling.client.model.BasicEntityModel; 4 | import net.minecraft.client.render.RenderLayer; 5 | import net.minecraft.client.render.VertexConsumer; 6 | import net.minecraft.client.render.VertexConsumerProvider; 7 | import net.minecraft.client.render.entity.EntityRendererFactory; 8 | import net.minecraft.client.util.math.MatrixStack; 9 | import net.minecraft.entity.LivingEntity; 10 | import net.minecraft.util.Identifier; 11 | import software.bernie.geckolib3.core.IAnimatable; 12 | import software.bernie.geckolib3.model.AnimatedGeoModel; 13 | import software.bernie.geckolib3.renderers.geo.GeoEntityRenderer; 14 | 15 | public class BasicEntityRenderer extends GeoEntityRenderer { 16 | 17 | public BasicEntityRenderer(EntityRendererFactory.Context ctx, AnimatedGeoModel modelProvider) { 18 | super(ctx, modelProvider); 19 | } 20 | 21 | public static EntityRendererFactory create(AnimatedGeoModel model) { 22 | return ctx -> new BasicEntityRenderer<>(ctx, model); 23 | } 24 | 25 | public static EntityRendererFactory create(String name, boolean liesOutOfWater) { 26 | return ctx -> new BasicEntityRenderer<>(ctx, new BasicEntityModel<>(name, liesOutOfWater)); 27 | } 28 | 29 | public static EntityRendererFactory create(String name, boolean liesOutOfWater, String head) { 30 | return ctx -> new BasicEntityRenderer<>(ctx, new BasicEntityModel<>(name, liesOutOfWater, head)); 31 | } 32 | 33 | @Override 34 | public RenderLayer getRenderType(A entity, float partialTicks, MatrixStack stack, VertexConsumerProvider renderTypeBuffer, VertexConsumer vertexBuilder, int packedLightIn, Identifier textureLocation) { 35 | return RenderLayer.getEntityTranslucent(getTextureResource(entity)); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/client/renderer/NautilusEntityRenderer.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.client.renderer; 2 | 3 | import com.eightsidedsquare.angling.client.model.NautilusEntityModel; 4 | import com.eightsidedsquare.angling.common.entity.NautilusEntity; 5 | import net.minecraft.client.render.RenderLayer; 6 | import net.minecraft.client.render.VertexConsumer; 7 | import net.minecraft.client.render.VertexConsumerProvider; 8 | import net.minecraft.client.render.entity.EntityRendererFactory; 9 | import net.minecraft.client.util.math.MatrixStack; 10 | import software.bernie.geckolib3.geo.render.built.GeoModel; 11 | 12 | public class NautilusEntityRenderer extends BasicEntityRenderer { 13 | public NautilusEntityRenderer(EntityRendererFactory.Context ctx) { 14 | super(ctx, new NautilusEntityModel()); 15 | } 16 | 17 | @Override 18 | public void render(GeoModel model, NautilusEntity animatable, float partialTicks, RenderLayer type, MatrixStack matrices, VertexConsumerProvider renderTypeBuffer, VertexConsumer vertexBuilder, int packedLightIn, int packedOverlayIn, float red, float green, float blue, float alpha) { 19 | matrices.push(); 20 | matrices.scale(0.65f, 0.65f, 0.65f); 21 | super.render(model, animatable, partialTicks, type, matrices, renderTypeBuffer, vertexBuilder, packedLightIn, packedOverlayIn, red, green, blue, alpha); 22 | matrices.pop(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/client/renderer/RoeBlockEntityRenderer.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.client.renderer; 2 | 3 | import com.eightsidedsquare.angling.common.entity.RoeBlockEntity; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.client.render.RenderLayer; 6 | import net.minecraft.client.render.VertexConsumerProvider; 7 | import net.minecraft.client.render.block.BlockRenderManager; 8 | import net.minecraft.client.render.block.entity.BlockEntityRenderer; 9 | import net.minecraft.client.render.block.entity.BlockEntityRendererFactory; 10 | import net.minecraft.client.util.math.MatrixStack; 11 | 12 | public class RoeBlockEntityRenderer implements BlockEntityRenderer { 13 | 14 | private final BlockRenderManager blockRenderManager; 15 | 16 | public RoeBlockEntityRenderer(BlockEntityRendererFactory.Context ctx) { 17 | blockRenderManager = ctx.getRenderManager(); 18 | } 19 | 20 | @Override 21 | public void render(RoeBlockEntity entity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { 22 | BlockState state = entity.getCachedState(); 23 | if(!entity.isRemoved() && entity.getWorld() != null) 24 | blockRenderManager.getModelRenderer().render(entity.getWorld(), blockRenderManager.getModel(state), state, entity.getPos(), matrices, vertexConsumers.getBuffer(RenderLayer.getCutout()), false, entity.getWorld().random, 0, 0); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/client/renderer/SeaSlugEggsBlockEntityRenderer.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.client.renderer; 2 | 3 | import com.eightsidedsquare.angling.common.entity.SeaSlugEggsBlockEntity; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.client.render.RenderLayer; 6 | import net.minecraft.client.render.VertexConsumerProvider; 7 | import net.minecraft.client.render.block.BlockRenderManager; 8 | import net.minecraft.client.render.block.entity.BlockEntityRenderer; 9 | import net.minecraft.client.render.block.entity.BlockEntityRendererFactory; 10 | import net.minecraft.client.util.math.MatrixStack; 11 | 12 | public class SeaSlugEggsBlockEntityRenderer implements BlockEntityRenderer { 13 | 14 | private final BlockRenderManager blockRenderManager; 15 | 16 | public SeaSlugEggsBlockEntityRenderer(BlockEntityRendererFactory.Context ctx) { 17 | blockRenderManager = ctx.getRenderManager(); 18 | } 19 | 20 | @Override 21 | public void render(SeaSlugEggsBlockEntity entity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { 22 | BlockState state = entity.getCachedState(); 23 | if(!entity.isRemoved() && entity.getWorld() != null) 24 | blockRenderManager.getModelRenderer().render(entity.getWorld(), blockRenderManager.getModel(state), state, entity.getPos(), matrices, vertexConsumers.getBuffer(RenderLayer.getCutout()), false, entity.getWorld().random, 0, 0); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/common/block/FilterFeeder.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.common.block; 2 | 3 | import net.minecraft.block.BlockState; 4 | import net.minecraft.particle.ParticleTypes; 5 | import net.minecraft.server.world.ServerWorld; 6 | import net.minecraft.util.math.BlockPos; 7 | 8 | public interface FilterFeeder { 9 | 10 | void onFeed(BlockPos pos, BlockState state, ServerWorld world); 11 | 12 | default void createFedParticles(int count, BlockPos pos, ServerWorld world) { 13 | world.spawnParticles(ParticleTypes.HAPPY_VILLAGER, pos.getX() + 0.5d, pos.getY() + 0.5d, pos.getZ() + 0.5d, count, 0.25d, 0.25d, 0.25d, 0); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/common/block/WormyDirtBlock.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.common.block; 2 | 3 | import net.minecraft.block.Block; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.block.Blocks; 6 | import net.minecraft.entity.player.PlayerEntity; 7 | import net.minecraft.server.world.ServerWorld; 8 | import net.minecraft.state.StateManager; 9 | import net.minecraft.util.ActionResult; 10 | import net.minecraft.util.Hand; 11 | import net.minecraft.util.hit.BlockHitResult; 12 | import net.minecraft.util.math.BlockPos; 13 | import net.minecraft.util.math.random.Random; 14 | import net.minecraft.world.World; 15 | 16 | @SuppressWarnings("deprecation") 17 | public class WormyDirtBlock extends Block implements WormyBlock { 18 | public WormyDirtBlock(Settings settings) { 19 | super(settings); 20 | setDefaultState(getDefaultState().with(WORMS, 1)); 21 | } 22 | 23 | @Override 24 | public boolean hasRandomTicks(BlockState state) { 25 | return state.get(WORMS) < 3; 26 | } 27 | 28 | @Override 29 | public void randomTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { 30 | tickWorms(state, world, pos, random); 31 | } 32 | 33 | @Override 34 | public void randomDisplayTick(BlockState state, World world, BlockPos pos, Random random) { 35 | spawnWormParticles(world, pos, random); 36 | } 37 | 38 | @Override 39 | protected void appendProperties(StateManager.Builder builder) { 40 | super.appendProperties(builder); 41 | appendWormProperties(builder); 42 | } 43 | 44 | @Override 45 | public BlockState getDefaultBlockState() { 46 | return Blocks.DIRT.getDefaultState(); 47 | } 48 | 49 | @Override 50 | public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { 51 | return addOrRemoveWorms(state, world, pos, player, hand); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/common/block/WormyMudBlock.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.common.block; 2 | 3 | import net.minecraft.block.Block; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.block.Blocks; 6 | import net.minecraft.block.MudBlock; 7 | import net.minecraft.entity.player.PlayerEntity; 8 | import net.minecraft.server.world.ServerWorld; 9 | import net.minecraft.state.StateManager; 10 | import net.minecraft.util.ActionResult; 11 | import net.minecraft.util.Hand; 12 | import net.minecraft.util.hit.BlockHitResult; 13 | import net.minecraft.util.math.BlockPos; 14 | import net.minecraft.util.math.random.Random; 15 | import net.minecraft.world.World; 16 | 17 | @SuppressWarnings("deprecation") 18 | public class WormyMudBlock extends MudBlock implements WormyBlock { 19 | public WormyMudBlock(Settings settings) { 20 | super(settings); 21 | setDefaultState(getDefaultState().with(WORMS, 1)); 22 | } 23 | 24 | @Override 25 | public boolean hasRandomTicks(BlockState state) { 26 | return state.get(WORMS) < 3; 27 | } 28 | 29 | @Override 30 | public void randomTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { 31 | tickWorms(state, world, pos, random); 32 | } 33 | 34 | @Override 35 | public void randomDisplayTick(BlockState state, World world, BlockPos pos, Random random) { 36 | spawnWormParticles(world, pos, random); 37 | } 38 | 39 | @Override 40 | protected void appendProperties(StateManager.Builder builder) { 41 | super.appendProperties(builder); 42 | appendWormProperties(builder); 43 | } 44 | 45 | @Override 46 | public BlockState getDefaultBlockState() { 47 | return Blocks.MUD.getDefaultState(); 48 | } 49 | 50 | @Override 51 | public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { 52 | return addOrRemoveWorms(state, world, pos, player, hand); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/common/entity/AnemoneBlockEntity.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.common.entity; 2 | 3 | import com.eightsidedsquare.angling.core.AnglingEntities; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.block.entity.BlockEntity; 6 | import net.minecraft.nbt.NbtCompound; 7 | import net.minecraft.network.packet.s2c.play.BlockEntityUpdateS2CPacket; 8 | import net.minecraft.util.math.BlockPos; 9 | import org.jetbrains.annotations.Nullable; 10 | import software.bernie.geckolib3.core.IAnimatable; 11 | import software.bernie.geckolib3.core.PlayState; 12 | import software.bernie.geckolib3.core.builder.AnimationBuilder; 13 | import software.bernie.geckolib3.core.controller.AnimationController; 14 | import software.bernie.geckolib3.core.event.predicate.AnimationEvent; 15 | import software.bernie.geckolib3.core.manager.AnimationData; 16 | import software.bernie.geckolib3.core.manager.AnimationFactory; 17 | 18 | public class AnemoneBlockEntity extends BlockEntity implements IAnimatable { 19 | 20 | AnimationFactory factory = new AnimationFactory(this); 21 | 22 | public AnemoneBlockEntity(BlockPos pos, BlockState state) { 23 | super(AnglingEntities.ANEMONE, pos, state); 24 | } 25 | 26 | @Override 27 | public NbtCompound toInitialChunkDataNbt() { 28 | return createNbt(); 29 | } 30 | 31 | @Nullable 32 | @Override 33 | public BlockEntityUpdateS2CPacket toUpdatePacket() { 34 | return BlockEntityUpdateS2CPacket.create(this); 35 | } 36 | 37 | @Override 38 | public void registerControllers(AnimationData data) { 39 | data.addAnimationController(new AnimationController<>(this, "controller", 0, this::controller)); 40 | } 41 | 42 | private PlayState controller(AnimationEvent event) { 43 | event.getController().setAnimation(new AnimationBuilder().addAnimation("animation.anemone.idle", true)); 44 | return PlayState.CONTINUE; 45 | } 46 | 47 | @Override 48 | public AnimationFactory getFactory() { 49 | return factory; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/common/entity/ai/EatAlgaeGoal.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.common.entity.ai; 2 | 3 | import com.eightsidedsquare.angling.common.block.AlgaeBlock; 4 | import com.eightsidedsquare.angling.core.AnglingBlocks; 5 | import net.minecraft.block.BlockState; 6 | import net.minecraft.entity.ai.goal.MoveToTargetPosGoal; 7 | import net.minecraft.entity.mob.PathAwareEntity; 8 | import net.minecraft.tag.FluidTags; 9 | import net.minecraft.util.math.BlockPos; 10 | import net.minecraft.world.WorldView; 11 | 12 | public class EatAlgaeGoal extends MoveToTargetPosGoal { 13 | 14 | private final PathAwareEntity entity; 15 | private boolean finished; 16 | 17 | public EatAlgaeGoal(PathAwareEntity mob, double speed, int range) { 18 | super(mob, speed, range, 5); 19 | this.entity = mob; 20 | } 21 | 22 | @Override 23 | public void start() { 24 | super.start(); 25 | finished = false; 26 | } 27 | 28 | @Override 29 | protected boolean isTargetPos(WorldView world, BlockPos pos) { 30 | BlockState state = world.getBlockState(pos.up()); 31 | return state.isOf(AnglingBlocks.ALGAE) && state.getFluidState().isIn(FluidTags.WATER); 32 | } 33 | 34 | @Override 35 | protected int getInterval(PathAwareEntity mob) { 36 | return toGoalTicks(20 + mob.getRandom().nextInt(20)); 37 | } 38 | 39 | @Override 40 | public boolean shouldContinue() { 41 | return super.shouldContinue() && !finished; 42 | } 43 | 44 | @Override 45 | public void tick() { 46 | super.tick(); 47 | BlockState state = entity.getWorld().getBlockState(entity.getBlockPos()); 48 | if(!finished && state.isOf(AnglingBlocks.ALGAE) && state.getFluidState().isIn(FluidTags.WATER)) { 49 | AlgaeBlock.deteriorate(entity.getBlockPos(), entity.world); 50 | finished = true; 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/common/entity/ai/GoToWaterGoal.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.common.entity.ai; 2 | 3 | import net.minecraft.entity.ai.goal.MoveToTargetPosGoal; 4 | import net.minecraft.entity.mob.PathAwareEntity; 5 | import net.minecraft.tag.FluidTags; 6 | import net.minecraft.util.math.BlockPos; 7 | import net.minecraft.world.WorldView; 8 | 9 | public class GoToWaterGoal extends MoveToTargetPosGoal { 10 | 11 | private final PathAwareEntity entity; 12 | 13 | public GoToWaterGoal(PathAwareEntity mob, double speed, int range) { 14 | super(mob, speed, range); 15 | this.entity = mob; 16 | } 17 | 18 | @Override 19 | protected int getInterval(PathAwareEntity mob) { 20 | return toGoalTicks(20 + mob.getRandom().nextInt(20)); 21 | } 22 | 23 | @Override 24 | public boolean canStart() { 25 | return super.canStart() && !entity.isInsideWaterOrBubbleColumn(); 26 | } 27 | 28 | @Override 29 | public boolean shouldContinue() { 30 | return super.shouldContinue() && !entity.isInsideWaterOrBubbleColumn(); 31 | } 32 | 33 | @Override 34 | public double getDesiredDistanceToTarget() { 35 | return 0; 36 | } 37 | 38 | @Override 39 | protected boolean isTargetPos(WorldView world, BlockPos pos) { 40 | return world.getFluidState(pos.up()).isIn(FluidTags.WATER); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/common/entity/ai/PelicanAttackablesSensor.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.common.entity.ai; 2 | 3 | import com.eightsidedsquare.angling.common.entity.PelicanEntity; 4 | import net.minecraft.entity.Bucketable; 5 | import net.minecraft.entity.LivingEntity; 6 | import net.minecraft.entity.ai.brain.MemoryModuleType; 7 | import net.minecraft.entity.ai.brain.sensor.NearestVisibleLivingEntitySensor; 8 | import net.minecraft.entity.mob.MobEntity; 9 | 10 | public class PelicanAttackablesSensor extends NearestVisibleLivingEntitySensor { 11 | 12 | @Override 13 | protected boolean matches(LivingEntity entity, LivingEntity target) { 14 | return entity instanceof PelicanEntity pelicanEntity && 15 | !pelicanEntity.hasEntityInBeak() && 16 | !(target instanceof MobEntity mob && (mob.isPersistent() || mob.hasCustomName())) && 17 | !(target instanceof Bucketable bucketable && bucketable.isFromBucket()) && 18 | target.distanceTo(entity) < 40 && 19 | PelicanBrain.canPutInBeak(target) && 20 | !entity.getBrain().hasMemoryModule(MemoryModuleType.HAS_HUNTING_COOLDOWN); 21 | } 22 | 23 | @Override 24 | protected MemoryModuleType getOutputMemoryModule() { 25 | return MemoryModuleType.NEAREST_ATTACKABLE; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/common/entity/ai/PelicanEatTask.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.common.entity.ai; 2 | 3 | import com.eightsidedsquare.angling.common.entity.PelicanEntity; 4 | import com.eightsidedsquare.angling.core.ai.AnglingMemoryModuleTypes; 5 | import com.google.common.collect.ImmutableMap; 6 | import net.minecraft.entity.ai.brain.MemoryModuleState; 7 | import net.minecraft.entity.ai.brain.task.Task; 8 | import net.minecraft.nbt.NbtCompound; 9 | import net.minecraft.server.world.ServerWorld; 10 | 11 | public class PelicanEatTask extends Task { 12 | public PelicanEatTask() { 13 | super(ImmutableMap.of(AnglingMemoryModuleTypes.HAS_TRADED, MemoryModuleState.VALUE_PRESENT)); 14 | } 15 | 16 | @Override 17 | protected boolean shouldRun(ServerWorld world, PelicanEntity entity) { 18 | return entity.hasEntityInBeak(); 19 | } 20 | 21 | @Override 22 | protected void run(ServerWorld world, PelicanEntity entity, long time) { 23 | entity.setEntityInBeak(new NbtCompound()); 24 | entity.setBeakOpen(false); 25 | entity.getBrain().forget(AnglingMemoryModuleTypes.HAS_TRADED); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/common/entity/ai/PelicanSoarTask.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.common.entity.ai; 2 | 3 | import com.eightsidedsquare.angling.common.entity.PelicanEntity; 4 | import com.eightsidedsquare.angling.core.ai.AnglingMemoryModuleTypes; 5 | import com.google.common.collect.ImmutableMap; 6 | import net.minecraft.entity.ai.brain.MemoryModuleState; 7 | import net.minecraft.entity.ai.brain.MemoryModuleType; 8 | import net.minecraft.entity.ai.brain.WalkTarget; 9 | import net.minecraft.entity.ai.brain.task.Task; 10 | import net.minecraft.server.world.ServerWorld; 11 | import net.minecraft.tag.FluidTags; 12 | import net.minecraft.util.math.BlockPos; 13 | import net.minecraft.util.math.Vec3d; 14 | import net.minecraft.world.Heightmap; 15 | 16 | public class PelicanSoarTask extends Task { 17 | public PelicanSoarTask() { 18 | super(ImmutableMap.of( 19 | AnglingMemoryModuleTypes.SOARING_COOLDOWN, MemoryModuleState.VALUE_ABSENT, 20 | MemoryModuleType.WALK_TARGET, MemoryModuleState.VALUE_ABSENT 21 | )); 22 | } 23 | 24 | @Override 25 | protected boolean shouldRun(ServerWorld world, PelicanEntity entity) { 26 | return entity.isFlying(); 27 | } 28 | 29 | @Override 30 | protected void run(ServerWorld world, PelicanEntity entity, long time) { 31 | Vec3d pos = entity.raycast(16, 0, false).getPos(); 32 | int topY = world.getTopY(Heightmap.Type.WORLD_SURFACE, (int) pos.x, (int) pos.z); 33 | boolean isWater = world.getFluidState(new BlockPos(pos.x, topY - 1, pos.z)).isIn(FluidTags.WATER); 34 | int y = topY + (isWater ? entity.getRandom().nextBetween(3, 8) : entity.getRandom().nextBetween(5, 25)); 35 | BlockPos blockPos = new BlockPos(pos.x, y, pos.z); 36 | if(world.getBlockState(blockPos).isAir()) { 37 | entity.getBrain().remember(MemoryModuleType.WALK_TARGET, new WalkTarget(blockPos, 1.5f, 1)); 38 | } 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/common/entity/ai/WanderAroundWaterGoal.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.common.entity.ai; 2 | 3 | import net.minecraft.entity.ai.goal.WanderAroundGoal; 4 | import net.minecraft.entity.mob.PathAwareEntity; 5 | import net.minecraft.tag.FluidTags; 6 | import net.minecraft.util.math.BlockPos; 7 | import net.minecraft.util.math.Vec3d; 8 | import org.jetbrains.annotations.Nullable; 9 | 10 | public class WanderAroundWaterGoal extends WanderAroundGoal { 11 | 12 | private final PathAwareEntity entity; 13 | 14 | public WanderAroundWaterGoal(PathAwareEntity mob, double speed) { 15 | super(mob, speed); 16 | this.entity = mob; 17 | } 18 | 19 | @Override 20 | public boolean canStart() { 21 | return super.canStart() && entity.isInsideWaterOrBubbleColumn(); 22 | } 23 | 24 | @Nullable 25 | @Override 26 | protected Vec3d getWanderTarget() { 27 | Vec3d target = super.getWanderTarget(); 28 | if(target != null && entity.world.getFluidState(new BlockPos(target.x, target.y, target.z)).isIn(FluidTags.WATER)) 29 | return target; 30 | return null; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/common/feature/NoisePatchFeature.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.common.feature; 2 | 3 | import com.mojang.serialization.Codec; 4 | import net.minecraft.block.Block; 5 | import net.minecraft.block.BlockState; 6 | import net.minecraft.util.math.BlockPos; 7 | import net.minecraft.util.math.noise.DoublePerlinNoiseSampler; 8 | import net.minecraft.util.math.random.Random; 9 | import net.minecraft.world.StructureWorldAccess; 10 | import net.minecraft.world.gen.feature.Feature; 11 | import net.minecraft.world.gen.feature.util.FeatureContext; 12 | import net.minecraft.world.gen.stateprovider.BlockStateProvider; 13 | 14 | public class NoisePatchFeature extends Feature { 15 | 16 | public NoisePatchFeature(Codec configCodec) { 17 | super(configCodec); 18 | } 19 | 20 | @Override 21 | @SuppressWarnings("deprecation") 22 | public boolean generate(FeatureContext ctx) { 23 | NoisePatchFeatureConfig config = ctx.getConfig(); 24 | BlockPos pos = ctx.getOrigin(); 25 | StructureWorldAccess world = ctx.getWorld(); 26 | Random random = ctx.getRandom(); 27 | DoublePerlinNoiseSampler sampler = DoublePerlinNoiseSampler.create(random, config.offset, config.octave); 28 | BlockStateProvider blockStateProvider = config.blockStateProvider; 29 | 30 | int radius = config.radius.get(random); 31 | double threshold = config.threshold; 32 | 33 | for(int x = -radius; x <= radius; x++) { 34 | for(int z = -radius; z <= radius; z++) { 35 | if(x * x + z * z >= radius * radius) 36 | continue; 37 | double value = sampler.sample(pos.getX() + x, pos.getY(), pos.getZ() + z); 38 | BlockPos blockPos = pos.add(x, 0, z); 39 | if(value > threshold) { 40 | 41 | BlockState state = blockStateProvider.getBlockState(random, blockPos); 42 | if(state.canPlaceAt(world, blockPos)) 43 | world.setBlockState(blockPos, state, Block.NOTIFY_LISTENERS); 44 | } 45 | } 46 | } 47 | 48 | return true; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/common/feature/NoisePatchFeatureConfig.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.common.feature; 2 | 3 | import com.mojang.serialization.Codec; 4 | import com.mojang.serialization.codecs.RecordCodecBuilder; 5 | import net.minecraft.util.math.intprovider.IntProvider; 6 | import net.minecraft.util.math.intprovider.UniformIntProvider; 7 | import net.minecraft.world.gen.feature.FeatureConfig; 8 | import net.minecraft.world.gen.stateprovider.BlockStateProvider; 9 | 10 | public class NoisePatchFeatureConfig implements FeatureConfig { 11 | 12 | public final BlockStateProvider blockStateProvider; 13 | public final int offset; 14 | public final double octave; 15 | public final double threshold; 16 | public final IntProvider radius; 17 | 18 | public static final Codec CODEC = RecordCodecBuilder 19 | .create(instance -> instance.group( 20 | (BlockStateProvider.TYPE_CODEC.fieldOf("to_place")).forGetter(config -> config.blockStateProvider), 21 | (Codec.INT.fieldOf("offset")).orElse(-4).forGetter(config -> config.offset), 22 | (Codec.DOUBLE.fieldOf("octave")).orElse(1.1d).forGetter(config -> config.octave), 23 | (Codec.DOUBLE.fieldOf("threshold")).orElse(0.5d).forGetter(config -> config.threshold), 24 | (IntProvider.VALUE_CODEC.fieldOf("radius")).orElse(UniformIntProvider.create(10, 20)).forGetter(config -> config.radius) 25 | ).apply(instance, NoisePatchFeatureConfig::new)); 26 | 27 | 28 | public NoisePatchFeatureConfig(BlockStateProvider blockStateProvider, int offset, double octave, double threshold, IntProvider radius) { 29 | this.blockStateProvider = blockStateProvider; 30 | this.offset = offset; 31 | this.octave = octave; 32 | this.threshold = threshold; 33 | this.radius = radius; 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/common/feature/WaterAdjacentPatchFeature.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.common.feature; 2 | 3 | import com.mojang.serialization.Codec; 4 | import net.minecraft.tag.FluidTags; 5 | import net.minecraft.util.math.BlockPos; 6 | import net.minecraft.util.math.Vec3i; 7 | import net.minecraft.world.StructureWorldAccess; 8 | import net.minecraft.world.gen.feature.RandomPatchFeature; 9 | import net.minecraft.world.gen.feature.RandomPatchFeatureConfig; 10 | import net.minecraft.world.gen.feature.util.FeatureContext; 11 | 12 | public class WaterAdjacentPatchFeature extends RandomPatchFeature { 13 | 14 | public WaterAdjacentPatchFeature(Codec codec) { 15 | super(codec); 16 | } 17 | 18 | @Override 19 | public boolean generate(FeatureContext ctx) { 20 | BlockPos pos = ctx.getOrigin(); 21 | StructureWorldAccess world = ctx.getWorld(); 22 | Vec3i offset = new Vec3i(5, 5, 5); 23 | if(BlockPos.stream(pos.subtract(offset), pos.add(offset)).noneMatch(blockPos -> world.getFluidState(pos).isIn(FluidTags.WATER))) 24 | return false; 25 | return super.generate(ctx); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/common/feature/WaterloggablePatchFeature.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.common.feature; 2 | 3 | import com.mojang.serialization.Codec; 4 | import net.minecraft.block.Block; 5 | import net.minecraft.block.BlockState; 6 | import net.minecraft.block.Blocks; 7 | import net.minecraft.fluid.Fluids; 8 | import net.minecraft.state.property.Properties; 9 | import net.minecraft.tag.BlockTags; 10 | import net.minecraft.util.math.BlockPos; 11 | import net.minecraft.util.math.random.Random; 12 | import net.minecraft.world.Heightmap; 13 | import net.minecraft.world.StructureWorldAccess; 14 | import net.minecraft.world.gen.feature.Feature; 15 | import net.minecraft.world.gen.feature.SimpleBlockFeatureConfig; 16 | import net.minecraft.world.gen.feature.util.FeatureContext; 17 | 18 | public class WaterloggablePatchFeature extends Feature { 19 | public WaterloggablePatchFeature(Codec configCodec) { 20 | super(configCodec); 21 | } 22 | 23 | @Override 24 | public boolean generate(FeatureContext ctx) { 25 | boolean bl = false; 26 | Random random = ctx.getRandom(); 27 | StructureWorldAccess structureWorldAccess = ctx.getWorld(); 28 | BlockPos blockPos = ctx.getOrigin(); 29 | int count = random.nextBetween(16, 32); 30 | int range = 6; 31 | for(int i = 0; i < count; i++) { 32 | int dx = random.nextInt(range) - random.nextInt(range); 33 | int dz = random.nextInt(range) - random.nextInt(range); 34 | int y = structureWorldAccess.getTopY(Heightmap.Type.OCEAN_FLOOR, blockPos.getX() + dx, blockPos.getZ() + dz); 35 | BlockPos blockPos2 = new BlockPos(blockPos.getX() + dx, y, blockPos.getZ() + dz); 36 | BlockState state = ctx.getConfig().toPlace().getBlockState(random, blockPos2); 37 | if (state.canPlaceAt(structureWorldAccess, blockPos2) && 38 | !structureWorldAccess.getBlockState(blockPos2.up()).isOf(Blocks.TALL_SEAGRASS) && 39 | !structureWorldAccess.getBlockState(blockPos2.down()).isIn(BlockTags.ICE)) { 40 | if(state.contains(Properties.WATERLOGGED)) 41 | state = state.with(Properties.WATERLOGGED, structureWorldAccess.getFluidState(blockPos2).isOf(Fluids.WATER)); 42 | structureWorldAccess.setBlockState(blockPos2, state, Block.NOTIFY_LISTENERS); 43 | 44 | bl = true; 45 | } 46 | } 47 | 48 | return bl; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/common/feature/WormyBlockFeature.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.common.feature; 2 | 3 | import com.eightsidedsquare.angling.common.block.WormyBlock; 4 | import com.eightsidedsquare.angling.core.AnglingBlocks; 5 | import com.mojang.serialization.Codec; 6 | import net.minecraft.block.Block; 7 | import net.minecraft.block.BlockState; 8 | import net.minecraft.block.Blocks; 9 | import net.minecraft.tag.BlockTags; 10 | import net.minecraft.util.math.BlockPos; 11 | import net.minecraft.util.math.Direction; 12 | import net.minecraft.util.math.random.Random; 13 | import net.minecraft.world.Heightmap; 14 | import net.minecraft.world.StructureWorldAccess; 15 | import net.minecraft.world.gen.feature.DefaultFeatureConfig; 16 | import net.minecraft.world.gen.feature.Feature; 17 | import net.minecraft.world.gen.feature.util.FeatureContext; 18 | 19 | public class WormyBlockFeature extends Feature { 20 | public WormyBlockFeature(Codec configCodec) { 21 | super(configCodec); 22 | } 23 | 24 | private boolean surroundedByDirt(BlockPos pos, StructureWorldAccess world) { 25 | return Direction.stream().allMatch(d -> world.getBlockState(pos.offset(d)).isIn(BlockTags.DIRT)); 26 | } 27 | 28 | @Override 29 | public boolean generate(FeatureContext ctx) { 30 | Random random = ctx.getRandom(); 31 | StructureWorldAccess world = ctx.getWorld(); 32 | BlockPos origin = ctx.getOrigin(); 33 | int y = world.getTopY(Heightmap.Type.OCEAN_FLOOR, origin.getX(), origin.getZ()); 34 | BlockPos wormyBlockPos = new BlockPos(origin.getX(), y - 2, origin.getZ()); 35 | if(surroundedByDirt(wormyBlockPos, world)) { 36 | int count = random.nextBetween(1, 3); 37 | BlockState state = world.getBlockState(wormyBlockPos); 38 | if(state.isOf(Blocks.DIRT)) { 39 | world.setBlockState(wormyBlockPos, AnglingBlocks.WORMY_DIRT.getDefaultState().with(WormyBlock.WORMS, count), Block.NOTIFY_LISTENERS); 40 | return true; 41 | }else if(state.isOf(Blocks.MUD)) { 42 | world.setBlockState(wormyBlockPos, AnglingBlocks.WORMY_MUD.getDefaultState().with(WormyBlock.WORMS, count), Block.NOTIFY_LISTENERS); 43 | return true; 44 | } 45 | } 46 | return false; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/common/item/UrchinBucketItem.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.common.item; 2 | 3 | import com.eightsidedsquare.angling.core.AnglingBlocks; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.entity.player.PlayerEntity; 6 | import net.minecraft.item.BlockItem; 7 | import net.minecraft.item.ItemStack; 8 | import net.minecraft.item.Items; 9 | import net.minecraft.sound.SoundEvent; 10 | import net.minecraft.sound.SoundEvents; 11 | import net.minecraft.state.property.Properties; 12 | import net.minecraft.util.math.BlockPos; 13 | import net.minecraft.world.World; 14 | import org.jetbrains.annotations.Nullable; 15 | 16 | public class UrchinBucketItem extends BlockItem { 17 | 18 | public UrchinBucketItem(Settings settings) { 19 | super(AnglingBlocks.URCHIN, settings); 20 | } 21 | 22 | @Override 23 | protected boolean postPlacement(BlockPos pos, World world, @Nullable PlayerEntity player, ItemStack stack, BlockState state) { 24 | if(player != null && !player.isCreative() && !player.giveItemStack(new ItemStack(Items.BUCKET))) 25 | player.dropItem(new ItemStack(Items.BUCKET), true); 26 | world.createAndScheduleFluidTick(pos, world.getFluidState(pos).getFluid(), 1); 27 | if(world.getDimension().ultrawarm()) 28 | world.setBlockState(pos, state.with(Properties.WATERLOGGED, false)); 29 | return super.postPlacement(pos, world, player, stack, state); 30 | } 31 | 32 | @Override 33 | public String getTranslationKey() { 34 | return getOrCreateTranslationKey(); 35 | } 36 | 37 | @Override 38 | protected SoundEvent getPlaceSound(BlockState state) { 39 | return SoundEvents.ITEM_BUCKET_EMPTY; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/common/item/WormItem.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.common.item; 2 | 3 | import com.eightsidedsquare.angling.core.AnglingBlocks; 4 | import com.eightsidedsquare.angling.core.AnglingSounds; 5 | import net.minecraft.block.BlockState; 6 | import net.minecraft.block.Blocks; 7 | import net.minecraft.item.Item; 8 | import net.minecraft.item.ItemStack; 9 | import net.minecraft.item.ItemUsageContext; 10 | import net.minecraft.sound.SoundCategory; 11 | import net.minecraft.util.ActionResult; 12 | import net.minecraft.util.math.BlockPos; 13 | import net.minecraft.world.World; 14 | 15 | public class WormItem extends Item { 16 | public WormItem(Settings settings) { 17 | super(settings); 18 | } 19 | 20 | private ActionResult addWorms(BlockState state, BlockPos pos, ItemStack stack, World world) { 21 | stack.decrement(1); 22 | world.setBlockState(pos, state); 23 | world.playSound(null, pos.getX() + 0.5d, pos.getY() + 0.5d, pos.getZ() + 0.5d, AnglingSounds.ITEM_WORM_USE, SoundCategory.BLOCKS, 1, 1); 24 | return ActionResult.success(world.isClient); 25 | } 26 | 27 | @Override 28 | public ActionResult useOnBlock(ItemUsageContext ctx) { 29 | BlockPos pos = ctx.getBlockPos(); 30 | World world = ctx.getWorld(); 31 | BlockState state = world.getBlockState(pos); 32 | ItemStack stack = ctx.getStack(); 33 | if(state.isOf(Blocks.DIRT)) { 34 | return addWorms(AnglingBlocks.WORMY_DIRT.getDefaultState(), pos, stack, world); 35 | }else if(state.isOf(Blocks.MUD)) { 36 | return addWorms(AnglingBlocks.WORMY_MUD.getDefaultState(), pos, stack, world); 37 | } 38 | return super.useOnBlock(ctx); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/core/AnglingCriteria.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.core; 2 | 3 | import net.minecraft.advancement.criterion.Criteria; 4 | import net.minecraft.advancement.criterion.TickCriterion; 5 | import net.minecraft.util.Identifier; 6 | 7 | import static com.eightsidedsquare.angling.core.AnglingMod.MOD_ID; 8 | 9 | public class AnglingCriteria { 10 | 11 | public static final TickCriterion TRADED_WITH_PELICAN = Criteria.register(new TickCriterion(new Identifier(MOD_ID, "traded_with_pelican"))); 12 | 13 | public static void init() {} 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/core/AnglingMixinPlugin.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.core; 2 | 3 | import net.fabricmc.loader.api.FabricLoader; 4 | import org.objectweb.asm.tree.ClassNode; 5 | import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; 6 | import org.spongepowered.asm.mixin.extensibility.IMixinInfo; 7 | 8 | import java.util.List; 9 | import java.util.Set; 10 | 11 | public class AnglingMixinPlugin implements IMixinConfigPlugin { 12 | @Override 13 | public void onLoad(String mixinPackage) { 14 | 15 | } 16 | 17 | @Override 18 | public String getRefMapperConfig() { 19 | return null; 20 | } 21 | 22 | @Override 23 | public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { 24 | if(mixinClassName.toLowerCase().contains("sodium")) { 25 | return FabricLoader.getInstance().isModLoaded("sodium"); 26 | } 27 | return true; 28 | } 29 | 30 | @Override 31 | public void acceptTargets(Set myTargets, Set otherTargets) { 32 | 33 | } 34 | 35 | @Override 36 | public List getMixins() { 37 | return null; 38 | } 39 | 40 | @Override 41 | public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { 42 | 43 | } 44 | 45 | @Override 46 | public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { 47 | 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/core/AnglingMod.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.core; 2 | 3 | import com.eightsidedsquare.angling.common.entity.util.*; 4 | import com.eightsidedsquare.angling.common.world.PelicanSpawner; 5 | import com.eightsidedsquare.angling.core.world.AnglingPlacedFeatures; 6 | import net.fabricmc.api.ModInitializer; 7 | import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; 8 | import software.bernie.geckolib3.GeckoLib; 9 | 10 | public class AnglingMod implements ModInitializer { 11 | public static final String MOD_ID = "angling"; 12 | 13 | @Override 14 | public void onInitialize() { 15 | GeckoLib.initialize(); 16 | AnglingBlocks.init(); 17 | AnglingItems.init(); 18 | AnglingSounds.init(); 19 | AnglingEntities.init(); 20 | SunfishVariant.init(); 21 | SeaSlugPattern.init(); 22 | SeaSlugColor.init(); 23 | CrabVariant.init(); 24 | AnglingCriteria.init(); 25 | AnglingPlacedFeatures.init(); 26 | AnglingParticles.init(); 27 | FishVariantInheritance.init(); 28 | PelicanBeakEntityInitializer.init(); 29 | 30 | PelicanSpawner spawner = new PelicanSpawner(); 31 | ServerTickEvents.END_WORLD_TICK.register(world -> spawner.spawn(world, world.getServer().isMonsterSpawningEnabled(), world.getServer().shouldSpawnAnimals())); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/core/AnglingParticles.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.core; 2 | 3 | import net.fabricmc.fabric.api.particle.v1.FabricParticleTypes; 4 | import net.minecraft.particle.DefaultParticleType; 5 | import net.minecraft.util.Identifier; 6 | import net.minecraft.util.registry.Registry; 7 | 8 | import static com.eightsidedsquare.angling.core.AnglingMod.MOD_ID; 9 | 10 | public class AnglingParticles { 11 | 12 | public static DefaultParticleType ALGAE = Registry.register(Registry.PARTICLE_TYPE, new Identifier(MOD_ID, "algae"), FabricParticleTypes.simple(true)); 13 | public static DefaultParticleType WORM = Registry.register(Registry.PARTICLE_TYPE, new Identifier(MOD_ID, "worm"), FabricParticleTypes.simple(true)); 14 | 15 | public static void init() { 16 | 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/core/AnglingPreLaunch.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.core; 2 | 3 | import com.llamalad7.mixinextras.MixinExtrasBootstrap; 4 | import net.fabricmc.loader.api.entrypoint.PreLaunchEntrypoint; 5 | 6 | public class AnglingPreLaunch implements PreLaunchEntrypoint { 7 | @Override 8 | public void onPreLaunch() { 9 | MixinExtrasBootstrap.init(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/core/ai/AnglingMemoryModuleTypes.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.core.ai; 2 | 3 | import com.mojang.serialization.Codec; 4 | import net.minecraft.entity.ai.brain.MemoryModuleType; 5 | import net.minecraft.util.Identifier; 6 | import net.minecraft.util.Unit; 7 | import net.minecraft.util.registry.Registry; 8 | 9 | import java.util.Optional; 10 | 11 | import static com.eightsidedsquare.angling.core.AnglingMod.MOD_ID; 12 | 13 | public class AnglingMemoryModuleTypes { 14 | 15 | public static final MemoryModuleType SOARING_COOLDOWN = register("soaring_cooldown", Codec.unit(Unit.INSTANCE)); 16 | public static final MemoryModuleType CAN_TRADE = register("can_trade", Codec.unit(Unit.INSTANCE)); 17 | public static final MemoryModuleType HAS_TRADED = register("has_traded", Codec.unit(Unit.INSTANCE)); 18 | 19 | private static MemoryModuleType register(String id, Codec codec) { 20 | return Registry.register(Registry.MEMORY_MODULE_TYPE, new Identifier(MOD_ID, id), new MemoryModuleType<>(Optional.of(codec))); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/core/ai/AnglingSensorTypes.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.core.ai; 2 | 3 | import com.eightsidedsquare.angling.common.entity.ai.PelicanAttackablesSensor; 4 | import net.minecraft.entity.ai.brain.sensor.Sensor; 5 | import net.minecraft.entity.ai.brain.sensor.SensorType; 6 | import net.minecraft.util.Identifier; 7 | import net.minecraft.util.registry.Registry; 8 | 9 | import java.util.function.Supplier; 10 | 11 | import static com.eightsidedsquare.angling.core.AnglingMod.MOD_ID; 12 | 13 | public class AnglingSensorTypes { 14 | 15 | public static final SensorType PELICAN_ATTACKABLES = register("pelican_attackables", PelicanAttackablesSensor::new); 16 | 17 | private static > SensorType register(String id, Supplier factory) { 18 | return Registry.register(Registry.SENSOR_TYPE, new Identifier(MOD_ID, id), new SensorType<>(factory)); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/core/tags/AnglingBiomeTags.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.core.tags; 2 | 3 | import net.minecraft.tag.TagKey; 4 | import net.minecraft.util.Identifier; 5 | import net.minecraft.util.registry.Registry; 6 | import net.minecraft.world.biome.Biome; 7 | 8 | import static com.eightsidedsquare.angling.core.AnglingMod.MOD_ID; 9 | 10 | public class AnglingBiomeTags { 11 | 12 | public static final TagKey SUNFISH_SPAWN_IN = create("sunfish_spawn_in"); 13 | public static final TagKey NAUTILUS_SPAWN_IN = create("nautilus_spawn_in"); 14 | public static final TagKey SEA_SLUG_SPAWN_IN = create("sea_slug_spawn_in"); 15 | public static final TagKey CATFISH_SPAWN_IN = create("catfish_spawn_in"); 16 | public static final TagKey SEAHORSE_SPAWN_IN = create("seahorse_spawn_in"); 17 | public static final TagKey BUBBLE_EYE_SPAWN_IN = create("bubble_eye_spawn_in"); 18 | public static final TagKey ANOMALOCARIS_SPAWN_IN = create("anomalocaris_spawn_in"); 19 | public static final TagKey ANGLERFISH_SPAWN_IN = create("anglerfish_spawn_in"); 20 | public static final TagKey MAHI_MAHI_SPAWN_IN = create("mahi_mahi_spawn_in"); 21 | public static final TagKey CRAB_SPAWN_IN = create("crab_spawn_in"); 22 | public static final TagKey DUNGENESS_CRAB_BIOMES = create("dungeness_crab_biomes"); 23 | public static final TagKey GHOST_CRAB_BIOMES = create("ghost_crab_biomes"); 24 | public static final TagKey BLUE_CLAW_CRAB_BIOMES = create("blue_claw_crab_biomes"); 25 | public static final TagKey OYSTER_REEF_BIOMES = create("oyster_reef_biomes"); 26 | public static final TagKey CLAMS_BIOMES = create("clams_biomes"); 27 | public static final TagKey DUCKWEED_BIOMES = create("duckweed_biomes"); 28 | public static final TagKey SARGASSUM_BIOMES = create("sargassum_biomes"); 29 | public static final TagKey PAPYRUS_BIOMES = create("papyrus_biomes"); 30 | 31 | private static TagKey create(String id) { 32 | return TagKey.of(Registry.BIOME_KEY, new Identifier(MOD_ID, id)); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/core/tags/AnglingBlockTags.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.core.tags; 2 | 3 | import net.minecraft.block.Block; 4 | import net.minecraft.tag.TagKey; 5 | import net.minecraft.util.Identifier; 6 | import net.minecraft.util.registry.Registry; 7 | 8 | import static com.eightsidedsquare.angling.core.AnglingMod.MOD_ID; 9 | 10 | public class AnglingBlockTags { 11 | 12 | public static final TagKey FILTER_FEEDERS = create("filter_feeders"); 13 | public static final TagKey STARFISH_FOOD = create("starfish_food"); 14 | public static final TagKey CRAB_SPAWNABLE_ON = create("crab_spawnable_on"); 15 | 16 | private static TagKey create(String id) { 17 | return TagKey.of(Registry.BLOCK_KEY, new Identifier(MOD_ID, id)); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/core/tags/AnglingEntityTypeTags.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.core.tags; 2 | 3 | import net.minecraft.entity.EntityType; 4 | import net.minecraft.tag.TagKey; 5 | import net.minecraft.util.Identifier; 6 | import net.minecraft.util.registry.Registry; 7 | 8 | import static com.eightsidedsquare.angling.core.AnglingMod.MOD_ID; 9 | 10 | public class AnglingEntityTypeTags { 11 | 12 | public static final TagKey> SPAWNING_FISH = create("spawning_fish"); 13 | public static final TagKey> COMMON_ENTITIES_IN_PELICAN_BEAK = create("common_entities_in_pelican_beak"); 14 | public static final TagKey> UNCOMMON_ENTITIES_IN_PELICAN_BEAK = create("uncommon_entities_in_pelican_beak"); 15 | public static final TagKey> HUNTED_BY_PELICAN = create("hunted_by_pelican"); 16 | public static final TagKey> HUNTED_BY_PELICAN_WHEN_BABY = create("hunted_by_pelican_when_baby"); 17 | 18 | private static TagKey> create(String id) { 19 | return TagKey.of(Registry.ENTITY_TYPE_KEY, new Identifier(MOD_ID, id)); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/core/world/AnglingFeatures.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.core.world; 2 | 3 | import com.eightsidedsquare.angling.common.feature.*; 4 | import net.minecraft.util.Identifier; 5 | import net.minecraft.util.registry.Registry; 6 | import net.minecraft.world.gen.feature.*; 7 | 8 | import static com.eightsidedsquare.angling.core.AnglingMod.MOD_ID; 9 | 10 | public class AnglingFeatures { 11 | 12 | public static final Feature WATERLOGGABLE_PATCH = register("waterloggable_patch", new WaterloggablePatchFeature(SimpleBlockFeatureConfig.CODEC)); 13 | public static final Feature WORMY_BLOCK = register("wormy_block", new WormyBlockFeature(DefaultFeatureConfig.CODEC)); 14 | public static final Feature NOISE_PATCH = register("noise_patch", new NoisePatchFeature(NoisePatchFeatureConfig.CODEC)); 15 | public static final Feature WATER_ADJACENT_PATCH = register("water_adjacent_patch", new WaterAdjacentPatchFeature(RandomPatchFeatureConfig.CODEC)); 16 | 17 | private static > F register(String name, F feature) { 18 | return Registry.register(Registry.FEATURE, new Identifier(MOD_ID, name), feature); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/mixin/CoralFeatureMixin.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.mixin; 2 | 3 | import com.eightsidedsquare.angling.common.block.StarfishBlock; 4 | import com.eightsidedsquare.angling.core.AnglingBlocks; 5 | import net.minecraft.block.Block; 6 | import net.minecraft.block.BlockState; 7 | import net.minecraft.block.Blocks; 8 | import net.minecraft.block.FacingBlock; 9 | import net.minecraft.state.property.Properties; 10 | import net.minecraft.tag.BlockTags; 11 | import net.minecraft.util.math.BlockPos; 12 | import net.minecraft.util.math.Direction; 13 | import net.minecraft.util.math.random.Random; 14 | import net.minecraft.world.WorldAccess; 15 | import net.minecraft.world.gen.feature.CoralFeature; 16 | import org.spongepowered.asm.mixin.Mixin; 17 | import org.spongepowered.asm.mixin.injection.At; 18 | import org.spongepowered.asm.mixin.injection.Inject; 19 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 20 | 21 | @Mixin(CoralFeature.class) 22 | public abstract class CoralFeatureMixin { 23 | 24 | @Inject(method = "generateCoralPiece", at = @At("RETURN")) 25 | protected void generateCoralPiece(WorldAccess world, Random random, BlockPos pos, BlockState state, CallbackInfoReturnable cir) { 26 | if(cir.getReturnValue()) { 27 | Direction.stream() 28 | .filter(d -> random.nextFloat() < 0.0125d && canPlace(pos.offset(d), world)) 29 | .forEach(d -> { 30 | world.setBlockState(pos.offset(d), 31 | AnglingBlocks.STARFISH.getDefaultState().with(FacingBlock.FACING, d), Block.NOTIFY_LISTENERS); 32 | StarfishBlock.randomize(world, pos.offset(d), random); 33 | }); 34 | if(random.nextFloat() < 0.025f && canPlace(pos.up(), world)) { 35 | world.setBlockState(pos.up(), 36 | (random.nextBoolean() ? AnglingBlocks.URCHIN : AnglingBlocks.ANEMONE) 37 | .getDefaultState().with(Properties.WATERLOGGED, true), Block.NOTIFY_LISTENERS); 38 | } 39 | } 40 | } 41 | 42 | private boolean canPlace(BlockPos pos, WorldAccess world) { 43 | BlockState state = world.getBlockState(pos); 44 | return state.isIn(BlockTags.CORALS) || state.isIn(BlockTags.WALL_CORALS) || state.isOf(Blocks.WATER); 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/mixin/FluidRendererMixin.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.mixin; 2 | 3 | import net.fabricmc.fabric.api.tag.convention.v1.ConventionalBlockTags; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.client.render.block.FluidRenderer; 6 | import net.minecraft.fluid.FluidState; 7 | import net.minecraft.tag.FluidTags; 8 | import net.minecraft.util.math.BlockPos; 9 | import net.minecraft.util.math.Direction; 10 | import net.minecraft.world.BlockRenderView; 11 | import org.spongepowered.asm.mixin.Mixin; 12 | import org.spongepowered.asm.mixin.injection.At; 13 | import org.spongepowered.asm.mixin.injection.Inject; 14 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 15 | 16 | @Mixin(FluidRenderer.class) 17 | public abstract class FluidRendererMixin { 18 | 19 | @Inject(method = "shouldRenderSide", at = @At("HEAD"), cancellable = true) 20 | private static void shouldRenderSide(BlockRenderView world, BlockPos pos, FluidState fluidState, BlockState blockState, Direction direction, FluidState neighborFluidState, CallbackInfoReturnable cir) { 21 | if(fluidState.isIn(FluidTags.WATER)) { 22 | if(world.getBlockState(pos.offset(direction)).isIn(ConventionalBlockTags.GLASS_BLOCKS)) { 23 | cir.setReturnValue(false); 24 | } 25 | } 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/mixin/FollowGroupLeaderGoalMixin.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.mixin; 2 | 3 | import com.eightsidedsquare.angling.cca.AnglingEntityComponents; 4 | import com.eightsidedsquare.angling.cca.FishSpawningComponent; 5 | import net.minecraft.entity.ai.goal.FollowGroupLeaderGoal; 6 | import net.minecraft.entity.passive.SchoolingFishEntity; 7 | import org.spongepowered.asm.mixin.Final; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.Shadow; 10 | import org.spongepowered.asm.mixin.injection.At; 11 | import org.spongepowered.asm.mixin.injection.Inject; 12 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 13 | 14 | @Mixin(FollowGroupLeaderGoal.class) 15 | public abstract class FollowGroupLeaderGoalMixin { 16 | 17 | @Shadow @Final private SchoolingFishEntity fish; 18 | 19 | @Inject(method = "canStart", at = @At("HEAD"), cancellable = true) 20 | public void canStart(CallbackInfoReturnable cir) { 21 | FishSpawningComponent component = AnglingEntityComponents.FISH_SPAWNING.get(fish); 22 | if(component.isInLove() || component.isCarryingRoe()) { 23 | cir.setReturnValue(false); 24 | } 25 | } 26 | 27 | 28 | @Inject(method = "shouldContinue", at = @At("HEAD"), cancellable = true) 29 | public void shouldContinue(CallbackInfoReturnable cir) { 30 | FishSpawningComponent component = AnglingEntityComponents.FISH_SPAWNING.get(fish); 31 | if(component.isInLove() || component.isCarryingRoe()) { 32 | cir.setReturnValue(false); 33 | } 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/mixin/SchoolingFishEntityMixin.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.mixin; 2 | 3 | import com.eightsidedsquare.angling.cca.AnglingEntityComponents; 4 | import com.eightsidedsquare.angling.cca.FishSpawningComponent; 5 | import net.minecraft.entity.EntityType; 6 | import net.minecraft.entity.passive.FishEntity; 7 | import net.minecraft.entity.passive.SchoolingFishEntity; 8 | import net.minecraft.world.World; 9 | import org.spongepowered.asm.mixin.Mixin; 10 | import org.spongepowered.asm.mixin.injection.At; 11 | import org.spongepowered.asm.mixin.injection.Inject; 12 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 13 | 14 | @Mixin(SchoolingFishEntity.class) 15 | public abstract class SchoolingFishEntityMixin extends FishEntity { 16 | 17 | public SchoolingFishEntityMixin(EntityType entityType, World world) { 18 | super(entityType, world); 19 | } 20 | 21 | @Inject(method = "hasLeader", at = @At("HEAD"), cancellable = true) 22 | public void hasLeader(CallbackInfoReturnable cir) { 23 | FishSpawningComponent component = AnglingEntityComponents.FISH_SPAWNING.get(this); 24 | if(component.isInLove() || component.isCarryingRoe()) { 25 | cir.setReturnValue(false); 26 | } 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/mixin/TadpoleEntityMixin.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.mixin; 2 | 3 | import com.eightsidedsquare.angling.cca.AnglingEntityComponents; 4 | import com.eightsidedsquare.angling.cca.FishSpawningComponent; 5 | import net.minecraft.entity.EntityType; 6 | import net.minecraft.entity.passive.FishEntity; 7 | import net.minecraft.entity.passive.TadpoleEntity; 8 | import net.minecraft.entity.player.PlayerEntity; 9 | import net.minecraft.item.ItemStack; 10 | import net.minecraft.item.Items; 11 | import net.minecraft.util.ActionResult; 12 | import net.minecraft.util.Hand; 13 | import net.minecraft.world.World; 14 | import org.spongepowered.asm.mixin.Mixin; 15 | import org.spongepowered.asm.mixin.injection.At; 16 | import org.spongepowered.asm.mixin.injection.Inject; 17 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 18 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 19 | 20 | @Mixin(TadpoleEntity.class) 21 | public abstract class TadpoleEntityMixin extends FishEntity { 22 | 23 | public TadpoleEntityMixin(EntityType entityType, World world) { 24 | super(entityType, world); 25 | } 26 | 27 | @Inject(method = "growUp", at = @At("HEAD"), cancellable = true) 28 | private void growUp(CallbackInfo ci) { 29 | FishSpawningComponent component = AnglingEntityComponents.FISH_SPAWNING.get(this); 30 | if(!component.canGrowUp()) { 31 | ci.cancel(); 32 | } 33 | } 34 | 35 | @Inject(method = "interactMob", at = @At("HEAD"), cancellable = true) 36 | public void interactMob(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { 37 | ItemStack stack = player.getStackInHand(hand); 38 | FishSpawningComponent component = AnglingEntityComponents.FISH_SPAWNING.get(this); 39 | if(stack.isOf(Items.FERMENTED_SPIDER_EYE) && component.canGrowUp()) { 40 | if(!player.getAbilities().creativeMode) 41 | stack.decrement(1); 42 | component.setCanGrowUp(false); 43 | cir.setReturnValue(ActionResult.success(world.isClient)); 44 | } 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/com/eightsidedsquare/angling/mixin/integration/SodiumFluidRendererMixin.java: -------------------------------------------------------------------------------- 1 | package com.eightsidedsquare.angling.mixin.integration; 2 | 3 | import me.jellysquid.mods.sodium.client.render.pipeline.FluidRenderer; 4 | import net.fabricmc.fabric.api.tag.convention.v1.ConventionalBlockTags; 5 | import net.minecraft.block.BlockState; 6 | import net.minecraft.fluid.Fluid; 7 | import net.minecraft.tag.FluidTags; 8 | import net.minecraft.util.math.BlockPos; 9 | import net.minecraft.util.math.Direction; 10 | import net.minecraft.world.BlockRenderView; 11 | import org.spongepowered.asm.mixin.Final; 12 | import org.spongepowered.asm.mixin.Mixin; 13 | import org.spongepowered.asm.mixin.Shadow; 14 | import org.spongepowered.asm.mixin.injection.At; 15 | import org.spongepowered.asm.mixin.injection.Inject; 16 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 17 | 18 | @Mixin(value = FluidRenderer.class, remap = false) 19 | public abstract class SodiumFluidRendererMixin { 20 | 21 | @Shadow @Final private BlockPos.Mutable scratchPos; 22 | 23 | @Inject(method = "isFluidOccluded", at = @At("RETURN"), cancellable = true) 24 | private void isFluidOccluded(BlockRenderView world, int x, int y, int z, Direction dir, Fluid fluid, CallbackInfoReturnable cir) { 25 | if(!cir.getReturnValue()) { 26 | BlockState state = world.getBlockState(new BlockPos(scratchPos).offset(dir.getOpposite())); 27 | BlockState sideState = world.getBlockState(scratchPos); 28 | if(state.getFluidState().isIn(FluidTags.WATER) && sideState.isIn(ConventionalBlockTags.GLASS_BLOCKS)) { 29 | cir.setReturnValue(true); 30 | } 31 | } 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /src/main/resources/angling.accesswidener: -------------------------------------------------------------------------------- 1 | accessWidener v1 named 2 | 3 | accessible class net/minecraft/entity/passive/FishEntity$SwimToRandomPlaceGoal 4 | accessible class net/minecraft/entity/passive/FishEntity$FishMoveControl 5 | accessible method net/minecraft/entity/ai/brain/MemoryModuleType (Ljava/util/Optional;)V 6 | accessible method net/minecraft/entity/ai/brain/Activity (Ljava/lang/String;)V 7 | accessible method net/minecraft/entity/ai/brain/sensor/SensorType (Ljava/util/function/Supplier;)V 8 | accessible method net/minecraft/item/EntityBucketItem playEmptyingSound (Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/world/WorldAccess;Lnet/minecraft/util/math/BlockPos;)V 9 | accessible field net/minecraft/item/EntityBucketItem entityType Lnet/minecraft/entity/EntityType; 10 | accessible field net/minecraft/client/gui/screen/SplashOverlay reloading Z -------------------------------------------------------------------------------- /src/main/resources/angling.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "com.eightsidedsquare.angling.mixin", 5 | "plugin": "com.eightsidedsquare.angling.core.AnglingMixinPlugin", 6 | "compatibilityLevel": "JAVA_17", 7 | "mixins": [ 8 | "CoralFeatureMixin", 9 | "EntityBucketItemMixin", 10 | "FishEntityMixin", 11 | "FishEntityMixin$SwimToRandomPlaceGoalMixin", 12 | "FollowGroupLeaderGoalMixin", 13 | "SchoolingFishEntityMixin", 14 | "TadpoleEntityMixin" 15 | ], 16 | "client": [ 17 | "FluidRendererMixin", 18 | "integration.SodiumFluidRendererMixin" 19 | ], 20 | "injectors": { 21 | "defaultRequire": 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/resources/assets/angling/animations/anemone.animation.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.8.0", 3 | "animations": { 4 | "animation.anemone.idle": { 5 | "loop": true, 6 | "animation_length": 16, 7 | "bones": { 8 | "root": { 9 | "rotation": { 10 | "vector": ["math.sin(query.anim_time * 22.5) * 5", 0, "math.cos(query.anim_time * 22.5) * 5"] 11 | }, 12 | "scale": { 13 | "vector": [1, 0.5, 1] 14 | } 15 | }, 16 | "body": { 17 | "rotation": { 18 | "vector": ["math.sin(query.anim_time * 22.5) * -10", 0, "math.cos(query.anim_time * 22.5) * -10"] 19 | }, 20 | "scale": { 21 | "vector": [1, 2, 1] 22 | } 23 | }, 24 | "north_tentacles": { 25 | "rotation": { 26 | "vector": ["math.sin(query.anim_time * 90) * 15 - 5", 0, 0] 27 | } 28 | }, 29 | "south_tentacles": { 30 | "rotation": { 31 | "vector": ["math.sin(query.anim_time * 90) * -15", 0, 0] 32 | } 33 | }, 34 | "east_tentacles": { 35 | "rotation": { 36 | "vector": [0, 0, "math.sin(query.anim_time * 90) * -15 + 5"] 37 | } 38 | }, 39 | "west_tentacles": { 40 | "rotation": { 41 | "vector": [0, 0, "math.sin(query.anim_time * 90) * 15 - 5"] 42 | } 43 | } 44 | } 45 | } 46 | }, 47 | "geckolib_format_version": 2 48 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/animations/anglerfish.animation.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.8.0", 3 | "animations": { 4 | "animation.anglerfish.idle": { 5 | "loop": true, 6 | "animation_length": 4, 7 | "bones": { 8 | "root": { 9 | "rotation": { 10 | "vector": [0, "math.sin(query.anim_time*180)*2.5", 0] 11 | } 12 | }, 13 | "jaw": { 14 | "rotation": { 15 | "vector": ["math.sin(query.anim_time*270)*5+10", 0, 0] 16 | } 17 | }, 18 | "illicium": { 19 | "rotation": { 20 | "vector": ["math.sin(query.anim_time*90)*5+25", 0, 0] 21 | } 22 | }, 23 | "tail": { 24 | "rotation": { 25 | "vector": [0, "math.cos(query.anim_time*180)*15", 0] 26 | } 27 | }, 28 | "left_fin": { 29 | "rotation": { 30 | "vector": ["math.sin(query.anim_time*90)*10-10", 15, -20] 31 | } 32 | }, 33 | "right_fin": { 34 | "rotation": { 35 | "vector": ["math.sin(query.anim_time*90)*10-10", -15, 20] 36 | } 37 | } 38 | } 39 | }, 40 | "animation.anglerfish.flop": { 41 | "loop": true, 42 | "animation_length": 2, 43 | "bones": { 44 | "root": { 45 | "rotation": { 46 | "vector": ["math.sin(query.anim_time*360)*22.5", 0, 0] 47 | } 48 | }, 49 | "illicium": { 50 | "rotation": { 51 | "vector": ["math.sin(query.anim_time*360-90)*22.5+22.5", 0, 0] 52 | } 53 | }, 54 | "tail": { 55 | "rotation": { 56 | "vector": [0, "math.sin(query.anim_time*720)*22.5", 0] 57 | } 58 | }, 59 | "left_fin": { 60 | "rotation": { 61 | "vector": [0, 22.5, 0] 62 | } 63 | }, 64 | "right_fin": { 65 | "rotation": { 66 | "vector": [0, -22.5, 0] 67 | } 68 | } 69 | } 70 | } 71 | }, 72 | "geckolib_format_version": 2 73 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/animations/anomalocaris.animation.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.8.0", 3 | "animations": { 4 | "animation.anomalocaris.idle": { 5 | "loop": true, 6 | "animation_length": 4, 7 | "bones": { 8 | "left_lobes": { 9 | "rotation": { 10 | "vector": ["math.sin(query.anim_time * 360) * 5", 0, "-math.cos(query.anim_time * 360) * 10"] 11 | } 12 | }, 13 | "right_lobes": { 14 | "rotation": { 15 | "vector": ["math.sin(query.anim_time * 360) * 5", 0, "math.cos(query.anim_time * 360) * 10"] 16 | } 17 | }, 18 | "tail": { 19 | "rotation": { 20 | "vector": ["math.cos(query.anim_time * 360) * 5", 0, 0] 21 | } 22 | } 23 | } 24 | } 25 | }, 26 | "geckolib_format_version": 2 27 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/animations/bubble_eye.animation.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.8.0", 3 | "animations": { 4 | "animation.bubble_eye.idle": { 5 | "loop": true, 6 | "animation_length": 4, 7 | "bones": { 8 | "right_eye": { 9 | "rotation": { 10 | "vector": ["math.sin(query.anim_time * 90) * -2.5", 0, "math.cos(query.anim_time * 90) * -2.5"] 11 | } 12 | }, 13 | "left_eye": { 14 | "rotation": { 15 | "vector": ["math.sin(query.anim_time * 90) * 2.5", 0, "math.cos(query.anim_time * 90) * 2.5"] 16 | } 17 | }, 18 | "tail": { 19 | "rotation": { 20 | "vector": ["math.sin(query.anim_time * 180 + 45) * 7.5", 0, 0] 21 | } 22 | }, 23 | "left_fin": { 24 | "rotation": { 25 | "vector": [0, 0, "math.sin(query.anim_time * 90) * 10 + 15"] 26 | } 27 | }, 28 | "right_fin": { 29 | "rotation": { 30 | "vector": [0, 0, "math.sin(query.anim_time * 90) * -10 - 15"] 31 | } 32 | } 33 | } 34 | }, 35 | "animation.bubble_eye.flop": { 36 | "loop": true, 37 | "animation_length": 1, 38 | "bones": { 39 | "root": { 40 | "rotation": { 41 | "0.0": { 42 | "vector": [15, 0, 0] 43 | }, 44 | "0.5": { 45 | "vector": [-15, 0, 0], 46 | "easing": "easeInOutSine" 47 | }, 48 | "1.0": { 49 | "vector": [15, 0, 0], 50 | "easing": "easeInOutSine" 51 | } 52 | } 53 | }, 54 | "right_eye": { 55 | "rotation": { 56 | "vector": [0, 0, "math.cos(query.anim_time * 360 + 40) * 15 "] 57 | } 58 | }, 59 | "left_eye": { 60 | "rotation": { 61 | "vector": [0, 0, "math.cos(query.anim_time * 360 + 80) * -15 "] 62 | } 63 | } 64 | } 65 | } 66 | }, 67 | "geckolib_format_version": 2 68 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/animations/fry.animation.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.8.0", 3 | "animations": { 4 | "animation.fry.idle": { 5 | "loop": true, 6 | "animation_length": 2, 7 | "bones": { 8 | "tail": { 9 | "rotation": { 10 | "0.0": { 11 | "vector": [0.00005, -22.5, -0.00004] 12 | }, 13 | "1.0": { 14 | "vector": [0, 22.5, 0], 15 | "easing": "easeInOutSine" 16 | }, 17 | "2.0": { 18 | "vector": [0.00005, -22.5, -0.00004], 19 | "easing": "easeInOutSine" 20 | } 21 | } 22 | } 23 | } 24 | }, 25 | "animation.fry.flop": { 26 | "loop": true, 27 | "animation_length": 0.5, 28 | "bones": { 29 | "root": { 30 | "rotation": { 31 | "0.0": { 32 | "vector": [0, -30, 0] 33 | }, 34 | "0.25": { 35 | "vector": [0, 30, 0], 36 | "easing": "easeInOutSine" 37 | }, 38 | "0.5": { 39 | "vector": [0, -30, 0], 40 | "easing": "easeInOutSine" 41 | } 42 | } 43 | }, 44 | "tail": { 45 | "rotation": { 46 | "0.0": { 47 | "vector": [0, 60, 0] 48 | }, 49 | "0.25": { 50 | "vector": [0, -60, 0] 51 | }, 52 | "0.5": { 53 | "vector": [0, 60, 0] 54 | } 55 | } 56 | } 57 | } 58 | } 59 | }, 60 | "geckolib_format_version": 2 61 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/animations/mahi_mahi.animation.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.8.0", 3 | "animations": { 4 | "animation.mahi_mahi.idle": { 5 | "loop": true, 6 | "animation_length": 4, 7 | "bones": { 8 | "front": { 9 | "rotation": { 10 | "vector": [0, "math.sin(query.anim_time * 180) * 2.5", 0] 11 | } 12 | }, 13 | "right_fin": { 14 | "rotation": { 15 | "vector": [0, "math.sin(query.anim_time * 270) * -10", 0] 16 | } 17 | }, 18 | "left_fin": { 19 | "rotation": { 20 | "vector": [0, "math.sin(query.anim_time * 270) * 10", 0] 21 | } 22 | }, 23 | "back": { 24 | "rotation": { 25 | "vector": [0, "math.sin(query.anim_time * 180 + 45) * 10", 0] 26 | } 27 | }, 28 | "tail": { 29 | "rotation": { 30 | "vector": [0, "math.sin(query.anim_time * 180 + 45) * 10", 0] 31 | } 32 | } 33 | } 34 | }, 35 | "animation.mahi_mahi.flop": { 36 | "loop": true, 37 | "animation_length": 4, 38 | "bones": { 39 | "root": { 40 | "rotation": { 41 | "vector": ["math.sin(query.anim_time * 360) * 15", 0, 0] 42 | } 43 | }, 44 | "right_fin": { 45 | "rotation": { 46 | "vector": [0, "math.cos(query.anim_time * 360) * -10", 0] 47 | } 48 | }, 49 | "left_fin": { 50 | "rotation": { 51 | "vector": [0, "math.cos(query.anim_time * 360) * 10", 0] 52 | } 53 | }, 54 | "tail": { 55 | "rotation": { 56 | "vector": [0, "math.cos(query.anim_time * 720) * 22.5", 0] 57 | } 58 | } 59 | } 60 | } 61 | }, 62 | "geckolib_format_version": 2 63 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/animations/seahorse.animation.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.8.0", 3 | "animations": { 4 | "animation.seahorse.idle": { 5 | "loop": true, 6 | "animation_length": 4, 7 | "bones": { 8 | "head": { 9 | "rotation": { 10 | "vector": ["math.sin(query.anim_time*90)*2.5+2.5", 0, 0] 11 | } 12 | }, 13 | "body": { 14 | "rotation": { 15 | "vector": ["math.sin(query.anim_time*90+40)*-5", 0, 0] 16 | } 17 | }, 18 | "tail": { 19 | "rotation": { 20 | "vector": ["math.sin(query.anim_time*90+20)*-10", 0, 0] 21 | } 22 | }, 23 | "fin": { 24 | "rotation": { 25 | "vector": [0, "math.sin(query.anim_time*720)*22.5", 0] 26 | } 27 | } 28 | } 29 | }, 30 | "animation.seahorse.flop": { 31 | "loop": true, 32 | "animation_length": 0.5, 33 | "bones": { 34 | "root": { 35 | "rotation": { 36 | "0.0": { 37 | "vector": [-15, 0, 0] 38 | }, 39 | "0.25": { 40 | "vector": [15, 0, 0], 41 | "easing": "easeInOutSine" 42 | }, 43 | "0.5": { 44 | "vector": [-15, 0, 0], 45 | "easing": "easeInOutSine" 46 | } 47 | }, 48 | "position": { 49 | "vector": [0, -6, 0] 50 | } 51 | } 52 | } 53 | } 54 | }, 55 | "geckolib_format_version": 2 56 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/animations/urchin.animation.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.8.0", 3 | "animations": { 4 | "animation.urchin.idle": { 5 | "loop": true, 6 | "animation_length": 8, 7 | "bones": { 8 | "root": { 9 | "rotation": { 10 | "vector": ["math.sin(query.anim_time*45)*5", 0, "math.cos(query.anim_time*45)*5"] 11 | } 12 | } 13 | } 14 | } 15 | }, 16 | "geckolib_format_version": 2 17 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/blockstates/anemone.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "angling:block/anemone" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/blockstates/clam.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=east": { 4 | "model": "angling:block/clam", 5 | "y": 90 6 | }, 7 | "facing=north": { 8 | "model": "angling:block/clam" 9 | }, 10 | "facing=south": { 11 | "model": "angling:block/clam", 12 | "y": 180 13 | }, 14 | "facing=west": { 15 | "model": "angling:block/clam", 16 | "y": 270 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/blockstates/dead_starfish.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "angling:block/dead_starfish" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/blockstates/duckweed.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "angling:block/duckweed" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/blockstates/oysters.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "angling:block/oysters" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/blockstates/papyrus.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "age=0": [ 4 | { 5 | "model": "angling:block/papyrus_age0" 6 | }, 7 | { 8 | "model": "angling:block/papyrus_age0", 9 | "y": 90 10 | }, 11 | { 12 | "model": "angling:block/papyrus_age0", 13 | "y": 180 14 | }, 15 | { 16 | "model": "angling:block/papyrus_age0", 17 | "y": 270 18 | } 19 | ], 20 | "age=1": [ 21 | { 22 | "model": "angling:block/papyrus_age1" 23 | }, 24 | { 25 | "model": "angling:block/papyrus_age1", 26 | "y": 90 27 | }, 28 | { 29 | "model": "angling:block/papyrus_age1", 30 | "y": 180 31 | }, 32 | { 33 | "model": "angling:block/papyrus_age1", 34 | "y": 270 35 | } 36 | ], 37 | "age=2": [ 38 | { 39 | "model": "angling:block/papyrus_age2" 40 | }, 41 | { 42 | "model": "angling:block/papyrus_age2", 43 | "y": 90 44 | }, 45 | { 46 | "model": "angling:block/papyrus_age2", 47 | "y": 180 48 | }, 49 | { 50 | "model": "angling:block/papyrus_age2", 51 | "y": 270 52 | } 53 | ] 54 | } 55 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/blockstates/roe.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "angling:block/roe" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/blockstates/sargassum.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "angling:block/sargassum" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/blockstates/sea_slug_eggs.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": [ 4 | { 5 | "model": "angling:block/sea_slug_eggs" 6 | }, 7 | { 8 | "model": "angling:block/sea_slug_eggs", 9 | "y": 90 10 | }, 11 | { 12 | "model": "angling:block/sea_slug_eggs", 13 | "y": 180 14 | }, 15 | { 16 | "model": "angling:block/sea_slug_eggs", 17 | "y": 270 18 | } 19 | ] 20 | } 21 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/blockstates/starfish.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "angling:block/starfish" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/blockstates/urchin.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { 4 | "model": "angling:block/urchin" 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/blockstates/wormy_dirt.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "worms=1": { 4 | "model": "angling:block/wormy_dirt_1" 5 | }, 6 | "worms=2": { 7 | "model": "angling:block/wormy_dirt_2" 8 | }, 9 | "worms=3": { 10 | "model": "angling:block/wormy_dirt_3" 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/blockstates/wormy_mud.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "worms=1": { 4 | "model": "angling:block/wormy_mud_1" 5 | }, 6 | "worms=2": { 7 | "model": "angling:block/wormy_mud_2" 8 | }, 9 | "worms=3": { 10 | "model": "angling:block/wormy_mud_3" 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/geo/anemone.geo.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.12.0", 3 | "minecraft:geometry": [ 4 | { 5 | "description": { 6 | "identifier": "geometry.anemone", 7 | "texture_width": 64, 8 | "texture_height": 64, 9 | "visible_bounds_width": 3, 10 | "visible_bounds_height": 2.5, 11 | "visible_bounds_offset": [0, 0.75, 0] 12 | }, 13 | "bones": [ 14 | { 15 | "name": "root", 16 | "pivot": [0, 0, 0] 17 | }, 18 | { 19 | "name": "body", 20 | "parent": "root", 21 | "pivot": [0, 0, 0], 22 | "cubes": [ 23 | {"origin": [-3, 0, -3], "size": [6, 9, 6], "uv": [0, 0]}, 24 | {"origin": [-6, 9, -6], "size": [12, 0, 12], "uv": [-12, 35]} 25 | ] 26 | }, 27 | { 28 | "name": "north_tentacles", 29 | "parent": "body", 30 | "pivot": [0, 9, -3], 31 | "cubes": [ 32 | {"origin": [-4, 9, -3], "size": [8, 4, 0], "pivot": [0, 9, -3], "rotation": [90, 0, 180], "uv": [4, 31]} 33 | ] 34 | }, 35 | { 36 | "name": "east_tentacles", 37 | "parent": "body", 38 | "pivot": [-3, 9, 0], 39 | "cubes": [ 40 | {"origin": [-3, 9, -4], "size": [0, 4, 8], "pivot": [-3, 9, 0], "rotation": [0, 0, -90], "uv": [0, 15], "mirror": true} 41 | ] 42 | }, 43 | { 44 | "name": "west_tentacles", 45 | "parent": "body", 46 | "pivot": [3, 9, 0], 47 | "cubes": [ 48 | {"origin": [3, 9, -4], "size": [0, 4, 8], "pivot": [3, 9, 0], "rotation": [0, 0, 90], "uv": [0, 15]} 49 | ] 50 | }, 51 | { 52 | "name": "south_tentacles", 53 | "parent": "body", 54 | "pivot": [0, 9, 3], 55 | "cubes": [ 56 | {"origin": [-4, 9, 3], "size": [8, 4, 0], "pivot": [0, 9, 3], "rotation": [-90, 0, 0], "uv": [4, 31], "mirror": true} 57 | ] 58 | } 59 | ] 60 | } 61 | ] 62 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/geo/anglerfish.geo.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.12.0", 3 | "minecraft:geometry": [ 4 | { 5 | "description": { 6 | "identifier": "geometry.unknown", 7 | "texture_width": 32, 8 | "texture_height": 32, 9 | "visible_bounds_width": 3, 10 | "visible_bounds_height": 2.5, 11 | "visible_bounds_offset": [0, 0.75, 0] 12 | }, 13 | "bones": [ 14 | { 15 | "name": "root", 16 | "pivot": [0, 3, 0], 17 | "cubes": [ 18 | {"origin": [-3, 0, -4], "size": [6, 6, 8], "uv": [0, 0]}, 19 | {"origin": [0, 6, -2], "size": [0, 2, 6], "uv": [20, 0]}, 20 | {"origin": [0, -2, 0], "size": [0, 2, 4], "uv": [20, 0]} 21 | ] 22 | }, 23 | { 24 | "name": "jaw", 25 | "parent": "root", 26 | "pivot": [0, 2.5, -0.5], 27 | "cubes": [ 28 | {"origin": [-3, 0, -4.25], "size": [6, 3, 4], "inflate": 0.25, "uv": [0, 14]} 29 | ] 30 | }, 31 | { 32 | "name": "illicium", 33 | "parent": "root", 34 | "pivot": [0, 6, -2], 35 | "cubes": [ 36 | {"origin": [-0.5, 6, -8], "size": [1, 6, 6], "uv": [14, 15]} 37 | ] 38 | }, 39 | { 40 | "name": "tail", 41 | "parent": "root", 42 | "pivot": [0, 3, 4], 43 | "cubes": [ 44 | {"origin": [0, 0, 4], "size": [0, 6, 6], "uv": [0, 15]} 45 | ] 46 | }, 47 | { 48 | "name": "left_fin", 49 | "parent": "root", 50 | "pivot": [3, 4.5, 0], 51 | "cubes": [ 52 | {"origin": [3, 2, 0], "size": [0, 3, 4], "uv": [0, 0]} 53 | ] 54 | }, 55 | { 56 | "name": "right_fin", 57 | "parent": "root", 58 | "pivot": [-3, 4.5, 0], 59 | "cubes": [ 60 | {"origin": [-3, 2, 0], "size": [0, 3, 4], "uv": [22, 10]} 61 | ] 62 | } 63 | ] 64 | } 65 | ] 66 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/geo/anomalocaris.geo.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.12.0", 3 | "minecraft:geometry": [ 4 | { 5 | "description": { 6 | "identifier": "geometry.anomalocaris", 7 | "texture_width": 64, 8 | "texture_height": 64, 9 | "visible_bounds_width": 3, 10 | "visible_bounds_height": 1.5, 11 | "visible_bounds_offset": [0, 0.25, 0] 12 | }, 13 | "bones": [ 14 | { 15 | "name": "root", 16 | "pivot": [0, 2, 0], 17 | "cubes": [ 18 | {"origin": [-2.5, 0, -6], "size": [5, 3, 12], "uv": [0, 0]} 19 | ] 20 | }, 21 | { 22 | "name": "head", 23 | "parent": "root", 24 | "pivot": [0, 2, -6], 25 | "cubes": [ 26 | {"origin": [-2.5, 0, -10], "size": [5, 3, 4], "uv": [20, 21]}, 27 | {"origin": [-3, 3, -10], "size": [1, 2, 2], "pivot": [-2, 3, -8], "rotation": [22.5, 0, -45], "uv": [6, 0]}, 28 | {"origin": [2, 3, -10], "size": [1, 2, 2], "pivot": [2, 3, -8], "rotation": [22.5, 0, 45], "uv": [0, 0]}, 29 | {"origin": [-1.5, -3, -15], "size": [0, 5, 5], "pivot": [-1.5, 1, -10], "rotation": [0, 11.25, 0], "uv": [0, 0]}, 30 | {"origin": [1.5, -3, -15], "size": [0, 5, 5], "pivot": [1.5, 1, -10], "rotation": [0, -11.25, 0], "uv": [0, 10]} 31 | ] 32 | }, 33 | { 34 | "name": "left_lobes", 35 | "parent": "root", 36 | "pivot": [2.5, 2, 0], 37 | "cubes": [ 38 | {"origin": [2.5, 2, -6], "size": [4, 0, 12], "uv": [10, 0]} 39 | ] 40 | }, 41 | { 42 | "name": "right_lobes", 43 | "parent": "root", 44 | "pivot": [-2.5, 2, 0], 45 | "cubes": [ 46 | {"origin": [-6.5, 2, -6], "size": [4, 0, 12], "uv": [0, 15]} 47 | ] 48 | }, 49 | { 50 | "name": "tail", 51 | "parent": "root", 52 | "pivot": [0, 2, 6], 53 | "cubes": [ 54 | {"origin": [-3.5, 2, 6], "size": [7, 0, 6], "uv": [14, 15]} 55 | ] 56 | } 57 | ] 58 | } 59 | ] 60 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/geo/bubble_eye.geo.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.12.0", 3 | "minecraft:geometry": [ 4 | { 5 | "description": { 6 | "identifier": "geometry.bubble_eye", 7 | "texture_width": 32, 8 | "texture_height": 32, 9 | "visible_bounds_width": 2, 10 | "visible_bounds_height": 1.5, 11 | "visible_bounds_offset": [0, 0.25, 0] 12 | }, 13 | "bones": [ 14 | { 15 | "name": "root", 16 | "pivot": [0, 1.5, 0], 17 | "cubes": [ 18 | {"origin": [-1, 0, -3], "size": [2, 3, 6], "uv": [0, 0]}, 19 | {"origin": [0, -1, 0], "size": [0, 1, 2], "uv": [0, -2]} 20 | ] 21 | }, 22 | { 23 | "name": "left_eye", 24 | "parent": "root", 25 | "pivot": [1, 3, 0], 26 | "rotation": [15, 0, 22.5], 27 | "cubes": [ 28 | {"origin": [1, 1.51764, -2.93185], "size": [2, 2, 2], "uv": [8, 9]} 29 | ] 30 | }, 31 | { 32 | "name": "right_eye", 33 | "parent": "root", 34 | "pivot": [-1, 3, 0], 35 | "rotation": [15, 0, -22.5], 36 | "cubes": [ 37 | {"origin": [-3, 1.51764, -2.93185], "size": [2, 2, 2], "uv": [0, 9]} 38 | ] 39 | }, 40 | { 41 | "name": "tail", 42 | "parent": "root", 43 | "pivot": [0, 2, 3], 44 | "cubes": [ 45 | {"origin": [-3, 2, 3], "size": [6, 0, 3], "uv": [7, 0]} 46 | ] 47 | }, 48 | { 49 | "name": "left_fin", 50 | "parent": "root", 51 | "pivot": [1, 0, -1], 52 | "cubes": [ 53 | {"origin": [1, 0, -2], "size": [2, 0, 3], "uv": [4, 13]} 54 | ] 55 | }, 56 | { 57 | "name": "right_fin", 58 | "parent": "root", 59 | "pivot": [-1, 0, -1], 60 | "cubes": [ 61 | {"origin": [-3, 0, -2], "size": [2, 0, 3], "uv": [0, 13]} 62 | ] 63 | } 64 | ] 65 | } 66 | ] 67 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/geo/catfish.geo.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.12.0", 3 | "minecraft:geometry": [ 4 | { 5 | "description": { 6 | "identifier": "geometry.unknown", 7 | "texture_width": 64, 8 | "texture_height": 64, 9 | "visible_bounds_width": 3, 10 | "visible_bounds_height": 1.5, 11 | "visible_bounds_offset": [0, 0.25, 0] 12 | }, 13 | "bones": [ 14 | { 15 | "name": "root", 16 | "pivot": [0, 1, 0], 17 | "cubes": [ 18 | {"origin": [0, -2, 0], "size": [0, 3, 8], "uv": [14, 11]}, 19 | {"origin": [-2.5, 0, -6], "size": [5, 4, 12], "uv": [0, 0]}, 20 | {"origin": [-2.5, 0, -6], "size": [5, 4, 12], "inflate": 0.15, "uv": [0, 26]}, 21 | {"origin": [0, 4, -4], "size": [0, 3, 10], "uv": [0, 6]} 22 | ] 23 | }, 24 | { 25 | "name": "left_whisker", 26 | "parent": "root", 27 | "pivot": [2.5, 4, -5.5], 28 | "cubes": [ 29 | {"origin": [2.5, 4, -6], "size": [5, 0, 1], "uv": [0, 9]} 30 | ] 31 | }, 32 | { 33 | "name": "right_whisker", 34 | "parent": "root", 35 | "pivot": [-2.5, 4, -5.5], 36 | "cubes": [ 37 | {"origin": [-7.5, 4, -6], "size": [5, 0, 1], "uv": [0, 8]} 38 | ] 39 | }, 40 | { 41 | "name": "chin_whiskers", 42 | "parent": "root", 43 | "pivot": [0, 0, -5], 44 | "cubes": [ 45 | {"origin": [-2.5, -1, -5], "size": [5, 1, 0], "uv": [0, 10]} 46 | ] 47 | }, 48 | { 49 | "name": "tail", 50 | "parent": "root", 51 | "pivot": [0, 2.5, 6], 52 | "cubes": [ 53 | {"origin": [-1.5, 1, 6], "size": [3, 3, 4], "uv": [22, 0]} 54 | ] 55 | }, 56 | { 57 | "name": "tail_fin", 58 | "parent": "tail", 59 | "pivot": [0, 2.5, 10], 60 | "cubes": [ 61 | {"origin": [0, -1, 9], "size": [0, 7, 7], "uv": [0, 12]} 62 | ] 63 | }, 64 | { 65 | "name": "left_fin", 66 | "parent": "root", 67 | "pivot": [2.5, 1, -3], 68 | "cubes": [ 69 | {"origin": [2.5, 1, -4], "size": [3, 0, 4], "uv": [0, 4]} 70 | ] 71 | }, 72 | { 73 | "name": "right_fin", 74 | "parent": "root", 75 | "pivot": [-2.5, 1, -3], 76 | "cubes": [ 77 | {"origin": [-5.5, 1, -4], "size": [3, 0, 4], "uv": [0, 0]} 78 | ] 79 | } 80 | ] 81 | } 82 | ] 83 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/geo/dongfish.geo.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.12.0", 3 | "minecraft:geometry": [ 4 | { 5 | "description": { 6 | "identifier": "geometry.unknown", 7 | "texture_width": 16, 8 | "texture_height": 16, 9 | "visible_bounds_width": 2, 10 | "visible_bounds_height": 1.5, 11 | "visible_bounds_offset": [0, 0.25, 0] 12 | }, 13 | "bones": [ 14 | { 15 | "name": "root", 16 | "pivot": [0, 0, -1] 17 | }, 18 | { 19 | "name": "head", 20 | "parent": "root", 21 | "pivot": [0, 1, 0], 22 | "cubes": [ 23 | {"origin": [-1, 0, -4], "size": [2, 2, 4], "uv": [0, 8]} 24 | ] 25 | }, 26 | { 27 | "name": "right_fin", 28 | "parent": "head", 29 | "pivot": [-1, 0, -1.5], 30 | "cubes": [ 31 | {"origin": [-2, 0, -2], "size": [1, 0, 1], "uv": [0, 8]} 32 | ] 33 | }, 34 | { 35 | "name": "left_fin", 36 | "parent": "head", 37 | "pivot": [1, 0, -1.5], 38 | "cubes": [ 39 | {"origin": [1, 0, -2], "size": [1, 0, 1], "uv": [8, 0]} 40 | ] 41 | }, 42 | { 43 | "name": "scungle", 44 | "parent": "head", 45 | "pivot": [0, 0, -1], 46 | "cubes": [ 47 | {"origin": [-0.5, -3, -1], "size": [1, 3, 0], "uv": [0, 0]} 48 | ] 49 | }, 50 | { 51 | "name": "horngus", 52 | "parent": "scungle", 53 | "pivot": [0, -3, -1], 54 | "cubes": [ 55 | {"origin": [-1.5, -6, -2.5], "size": [3, 3, 3], "uv": [0, 0]} 56 | ] 57 | }, 58 | { 59 | "name": "tail", 60 | "parent": "root", 61 | "pivot": [0, 1, 0], 62 | "cubes": [ 63 | {"origin": [0, 0, 0], "size": [0, 2, 6], "uv": [0, 0]} 64 | ] 65 | } 66 | ] 67 | } 68 | ] 69 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/geo/fry.geo.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.12.0", 3 | "minecraft:geometry": [ 4 | { 5 | "description": { 6 | "identifier": "geometry.unknown", 7 | "texture_width": 8, 8 | "texture_height": 8, 9 | "visible_bounds_width": 2, 10 | "visible_bounds_height": 1.5, 11 | "visible_bounds_offset": [0, 0.25, 0] 12 | }, 13 | "bones": [ 14 | { 15 | "name": "root", 16 | "pivot": [0, 0.5, 0], 17 | "cubes": [ 18 | {"origin": [-0.5, 0, -2], "size": [1, 1, 2], "inflate": -0.1, "uv": [0, 3]}, 19 | {"origin": [-0.5, 0, -2], "size": [1, 1, 2], "uv": [0, 0]} 20 | ] 21 | }, 22 | { 23 | "name": "tail", 24 | "parent": "root", 25 | "pivot": [0, 0.5, 0], 26 | "cubes": [ 27 | {"origin": [0, 0, 0], "size": [0, 1, 2], "uv": [4, 5]} 28 | ] 29 | } 30 | ] 31 | } 32 | ] 33 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/geo/mahi_mahi.geo.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.12.0", 3 | "minecraft:geometry": [ 4 | { 5 | "description": { 6 | "identifier": "geometry.unknown", 7 | "texture_width": 64, 8 | "texture_height": 64, 9 | "visible_bounds_width": 4, 10 | "visible_bounds_height": 2.5, 11 | "visible_bounds_offset": [0, 0.75, 0] 12 | }, 13 | "bones": [ 14 | { 15 | "name": "root", 16 | "pivot": [0, 4, 0] 17 | }, 18 | { 19 | "name": "front", 20 | "parent": "root", 21 | "pivot": [0, 5, -2], 22 | "cubes": [ 23 | {"origin": [-2, 0, -13], "size": [4, 9, 11], "uv": [0, 0]}, 24 | {"origin": [-1, -6, -7], "size": [2, 6, 6], "uv": [36, 32]}, 25 | {"origin": [0, 9, -13], "size": [0, 5, 11], "uv": [20, 22]} 26 | ] 27 | }, 28 | { 29 | "name": "right_fin", 30 | "parent": "front", 31 | "pivot": [-2, 2, -7], 32 | "rotation": [0, -30, 0], 33 | "cubes": [ 34 | {"origin": [-2, 1, -7], "size": [0, 4, 7], "uv": [0, 13]} 35 | ] 36 | }, 37 | { 38 | "name": "left_fin", 39 | "parent": "front", 40 | "pivot": [2, 2, -7], 41 | "rotation": [0, 30, 0], 42 | "cubes": [ 43 | {"origin": [2, 1, -7], "size": [0, 4, 7], "uv": [0, 17]} 44 | ] 45 | }, 46 | { 47 | "name": "back", 48 | "parent": "root", 49 | "pivot": [0, 5, -2], 50 | "cubes": [ 51 | {"origin": [-2, 1, -2], "size": [4, 8, 11], "uv": [19, 9]}, 52 | {"origin": [0, 9, -2], "size": [0, 5, 11], "uv": [20, 17]} 53 | ] 54 | }, 55 | { 56 | "name": "tail", 57 | "parent": "back", 58 | "pivot": [0, 5, 9], 59 | "cubes": [ 60 | {"origin": [0, 0, 9], "size": [0, 11, 10], "uv": [0, 18]} 61 | ] 62 | } 63 | ] 64 | } 65 | ] 66 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/geo/nautilus.geo.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.12.0", 3 | "minecraft:geometry": [ 4 | { 5 | "description": { 6 | "identifier": "geometry.unknown", 7 | "texture_width": 64, 8 | "texture_height": 64, 9 | "visible_bounds_width": 3, 10 | "visible_bounds_height": 2.5, 11 | "visible_bounds_offset": [0, 0.75, 0] 12 | }, 13 | "bones": [ 14 | { 15 | "name": "root", 16 | "pivot": [0, 4, 0], 17 | "rotation": [0, 180, 0] 18 | }, 19 | { 20 | "name": "shell", 21 | "parent": "root", 22 | "pivot": [0, 7, 2], 23 | "rotation": [35, 0, 0], 24 | "cubes": [ 25 | {"origin": [-3, 7, 1], "size": [6, 5, 6], "uv": [0, 19]}, 26 | {"origin": [-3, 1, -6], "size": [6, 6, 13], "uv": [0, 0]} 27 | ] 28 | }, 29 | { 30 | "name": "head", 31 | "parent": "root", 32 | "pivot": [0, 6, 0], 33 | "cubes": [ 34 | {"origin": [-3, 9, -4.5], "size": [6, 2, 4], "inflate": 0.01, "pivot": [0, 10, -1], "rotation": [15, 0, 0], "uv": [0, 32]}, 35 | {"origin": [-2.5, 3, -4], "size": [5, 6, 6], "uv": [18, 24]} 36 | ] 37 | }, 38 | { 39 | "name": "tentacles_up", 40 | "parent": "head", 41 | "pivot": [0, 8, -4], 42 | "cubes": [ 43 | {"origin": [-2.5, 8, -8], "size": [5, 0, 4], "uv": [25, 0]} 44 | ] 45 | }, 46 | { 47 | "name": "tentacles_down", 48 | "parent": "head", 49 | "pivot": [0, 3, -4], 50 | "cubes": [ 51 | {"origin": [-2.5, 3, -8], "size": [5, 0, 4], "uv": [25, 0]} 52 | ] 53 | }, 54 | { 55 | "name": "tentacles_left", 56 | "parent": "head", 57 | "pivot": [2.5, 5.5, -4], 58 | "cubes": [ 59 | {"origin": [2.5, 3, -8], "size": [0, 5, 4], "uv": [0, 0]} 60 | ] 61 | }, 62 | { 63 | "name": "tentacles_right", 64 | "parent": "head", 65 | "pivot": [-2.5, 5.5, -4], 66 | "cubes": [ 67 | {"origin": [-2.5, 3, -8], "size": [0, 5, 4], "uv": [0, 0]} 68 | ] 69 | } 70 | ] 71 | } 72 | ] 73 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/geo/sea_slug.geo.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.12.0", 3 | "minecraft:geometry": [ 4 | { 5 | "description": { 6 | "identifier": "geometry.sea_slug", 7 | "texture_width": 32, 8 | "texture_height": 32, 9 | "visible_bounds_width": 2, 10 | "visible_bounds_height": 1.5, 11 | "visible_bounds_offset": [0, 0.25, 0] 12 | }, 13 | "bones": [ 14 | { 15 | "name": "root", 16 | "pivot": [0, 0, 0] 17 | }, 18 | { 19 | "name": "head", 20 | "parent": "root", 21 | "pivot": [0, 1.25, 1], 22 | "cubes": [ 23 | {"origin": [-2, 0, -4], "size": [4, 3, 5], "uv": [0, 0]} 24 | ] 25 | }, 26 | { 27 | "name": "frills1", 28 | "parent": "head", 29 | "pivot": [0, 3, -3], 30 | "cubes": [ 31 | {"origin": [-2, 3, -3], "size": [4, 2, 0], "uv": [12, 12]} 32 | ] 33 | }, 34 | { 35 | "name": "frills2", 36 | "parent": "head", 37 | "pivot": [0, 3, -1], 38 | "cubes": [ 39 | {"origin": [-2, 3, -1], "size": [4, 2, 0], "uv": [12, 10]} 40 | ] 41 | }, 42 | { 43 | "name": "frills3", 44 | "parent": "head", 45 | "pivot": [0, 3, 1], 46 | "cubes": [ 47 | {"origin": [-2, 3, 1], "size": [4, 2, 0], "uv": [9, 8]} 48 | ] 49 | }, 50 | { 51 | "name": "butt", 52 | "parent": "root", 53 | "pivot": [0, 1.5, 1], 54 | "cubes": [ 55 | {"origin": [-1.5, 0, 1], "size": [3, 3, 3], "uv": [0, 8]} 56 | ] 57 | }, 58 | { 59 | "name": "frills4", 60 | "parent": "butt", 61 | "pivot": [0, 3, 3], 62 | "cubes": [ 63 | {"origin": [-1.5, 3, 3], "size": [3, 2, 0], "uv": [13, 0]} 64 | ] 65 | } 66 | ] 67 | } 68 | ] 69 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/geo/seahorse.geo.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.12.0", 3 | "minecraft:geometry": [ 4 | { 5 | "description": { 6 | "identifier": "geometry.seahorse", 7 | "texture_width": 16, 8 | "texture_height": 16, 9 | "visible_bounds_width": 2, 10 | "visible_bounds_height": 2.5, 11 | "visible_bounds_offset": [0, 0.75, 0] 12 | }, 13 | "bones": [ 14 | { 15 | "name": "root", 16 | "pivot": [0, 6, 0] 17 | }, 18 | { 19 | "name": "head", 20 | "parent": "root", 21 | "pivot": [0, 8, 0], 22 | "cubes": [ 23 | {"origin": [0, 8, -4], "size": [0, 3, 5], "uv": [0, 0]}, 24 | {"origin": [-1, 8, -2], "size": [2, 2, 3], "uv": [0, 0]} 25 | ] 26 | }, 27 | { 28 | "name": "body", 29 | "parent": "root", 30 | "pivot": [0, 8, 0], 31 | "cubes": [ 32 | {"origin": [-1, 4, 0], "size": [2, 4, 2], "inflate": 0.01, "uv": [8, 6]} 33 | ] 34 | }, 35 | { 36 | "name": "tail", 37 | "parent": "body", 38 | "pivot": [0, 4, 2], 39 | "cubes": [ 40 | {"origin": [0, 0, -3], "size": [0, 4, 5], "uv": [0, 7]} 41 | ] 42 | }, 43 | { 44 | "name": "fin", 45 | "parent": "body", 46 | "pivot": [0, 6, 2], 47 | "cubes": [ 48 | {"origin": [0, 4, 2], "size": [0, 4, 1], "uv": [10, 11]} 49 | ] 50 | } 51 | ] 52 | } 53 | ] 54 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/geo/starfish.geo.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.12.0", 3 | "minecraft:geometry": [ 4 | { 5 | "description": { 6 | "identifier": "geometry.unknown", 7 | "texture_width": 32, 8 | "texture_height": 32, 9 | "visible_bounds_width": 2, 10 | "visible_bounds_height": 1.5, 11 | "visible_bounds_offset": [0, 0.25, 0] 12 | }, 13 | "bones": [ 14 | { 15 | "name": "root", 16 | "pivot": [0, 8, 0] 17 | }, 18 | { 19 | "name": "starfish", 20 | "parent": "root", 21 | "pivot": [0, 1, 0], 22 | "cubes": [ 23 | {"origin": [-4, 0, -4], "size": [8, 2, 8], "inflate": 0.15, "uv": [0, 0]} 24 | ] 25 | }, 26 | { 27 | "name": "arm_1", 28 | "parent": "starfish", 29 | "pivot": [0, 1, 0], 30 | "cubes": [ 31 | {"origin": [-1, 0, 1], "size": [2, 2, 5], "uv": [0, 10]} 32 | ] 33 | }, 34 | { 35 | "name": "arm_2", 36 | "parent": "starfish", 37 | "pivot": [0, 1, 0], 38 | "cubes": [ 39 | {"origin": [-1, 0, 1], "size": [2, 2, 5], "uv": [0, 10]} 40 | ] 41 | }, 42 | { 43 | "name": "arm_3", 44 | "parent": "starfish", 45 | "pivot": [0, 1, 0], 46 | "cubes": [ 47 | {"origin": [-1, 0, 1], "size": [2, 2, 5], "uv": [0, 10]} 48 | ] 49 | }, 50 | { 51 | "name": "arm_4", 52 | "parent": "starfish", 53 | "pivot": [0, 1, 0], 54 | "cubes": [ 55 | {"origin": [-1, 0, 1], "size": [2, 2, 5], "uv": [0, 10]} 56 | ] 57 | }, 58 | { 59 | "name": "arm_5", 60 | "parent": "starfish", 61 | "pivot": [0, 1, 0], 62 | "cubes": [ 63 | {"origin": [-1, 0, 1], "size": [2, 2, 5], "uv": [0, 10]} 64 | ] 65 | } 66 | ] 67 | } 68 | ] 69 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/geo/sunfish.geo.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.12.0", 3 | "minecraft:geometry": [ 4 | { 5 | "description": { 6 | "identifier": "geometry.unknown", 7 | "texture_width": 32, 8 | "texture_height": 32, 9 | "visible_bounds_width": 2, 10 | "visible_bounds_height": 1.5, 11 | "visible_bounds_offset": [0, 0.25, 0] 12 | }, 13 | "bones": [ 14 | { 15 | "name": "root", 16 | "pivot": [0, 2, -0.5], 17 | "cubes": [ 18 | {"origin": [-1, 0, -2.5], "size": [2, 5, 6], "uv": [0, 0]}, 19 | {"origin": [-1, 0, -4.5], "size": [2, 4, 2], "uv": [10, 0]}, 20 | {"origin": [0, 5, -2.5], "size": [0, 1, 6], "uv": [0, 5]}, 21 | {"origin": [0, -1, 0.5], "size": [0, 1, 2], "uv": [0, 0]}, 22 | {"origin": [-1, -1, -2.5], "size": [2, 1, 2], "uv": [0, 16]} 23 | ] 24 | }, 25 | { 26 | "name": "right_fin", 27 | "parent": "root", 28 | "pivot": [-1, 1, -1.5], 29 | "rotation": [0, -32.5, 0], 30 | "cubes": [ 31 | {"origin": [-1, 0, -1.5], "size": [0, 2, 3], "uv": [6, 11]} 32 | ] 33 | }, 34 | { 35 | "name": "left_fin", 36 | "parent": "root", 37 | "pivot": [1, 1, -1.5], 38 | "rotation": [0, 32.5, 0], 39 | "cubes": [ 40 | {"origin": [1, 0, -1.5], "size": [0, 2, 3], "uv": [0, 0]} 41 | ] 42 | }, 43 | { 44 | "name": "tail", 45 | "parent": "root", 46 | "pivot": [0, 2, 3.5], 47 | "cubes": [ 48 | {"origin": [0, 0, 3.5], "size": [0, 4, 3], "uv": [0, 9]} 49 | ] 50 | } 51 | ] 52 | } 53 | ] 54 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/geo/urchin.geo.json: -------------------------------------------------------------------------------- 1 | { 2 | "format_version": "1.12.0", 3 | "minecraft:geometry": [ 4 | { 5 | "description": { 6 | "identifier": "geometry.unknown", 7 | "texture_width": 32, 8 | "texture_height": 32, 9 | "visible_bounds_width": 2, 10 | "visible_bounds_height": 2.5, 11 | "visible_bounds_offset": [0, 0.75, 0] 12 | }, 13 | "bones": [ 14 | { 15 | "name": "root", 16 | "pivot": [0, 0, 0], 17 | "cubes": [ 18 | {"origin": [-2.5, 2, -2.5], "size": [5, 5, 5], "uv": [0, 0]}, 19 | {"origin": [0, 0, -7.5], "size": [0, 13, 15], "uv": [0, 4]}, 20 | {"origin": [2.5, 2, 2.5], "size": [0, 5, 2], "pivot": [2.5, 4.5, 2.5], "rotation": [0, 45, 0], "uv": [10, 8]}, 21 | {"origin": [-2.5, 2, 2.5], "size": [0, 5, 2], "pivot": [-2.5, 4.5, 2.5], "rotation": [0, -45, 0], "uv": [10, 8]}, 22 | {"origin": [-2.5, 2, -4.5], "size": [0, 5, 2], "pivot": [-2.5, 4.5, -2.5], "rotation": [0, 45, 0], "uv": [14, 8]}, 23 | {"origin": [2.5, 2, -4.5], "size": [0, 5, 2], "pivot": [2.5, 4.5, -2.5], "rotation": [0, -45, 0], "uv": [14, 8]}, 24 | {"origin": [-7.5, 0, 0], "size": [15, 13, 0], "uv": [0, 19]} 25 | ] 26 | } 27 | ] 28 | } 29 | ] 30 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/icon.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/block/algae.json: -------------------------------------------------------------------------------- 1 | { 2 | "ambientocclusion": false, 3 | "textures": { 4 | "particle": "angling:block/algae", 5 | "0": "angling:block/algae" 6 | }, 7 | "elements": [ 8 | { "from": [ 0, 0, 0.1 ], 9 | "to": [ 16, 16, 0.1 ], 10 | "faces": { 11 | "north": { "uv": [ 16, 0, 0, 16 ], "texture": "#0" }, 12 | "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#0" } 13 | } 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/block/anemone.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "texture_size": [64, 64], 4 | "textures": { 5 | "0": "angling:entity/anemone/anemone", 6 | "particle": "minecraft:block/slime_block" 7 | }, 8 | "elements": [ 9 | { 10 | "name": "body", 11 | "from": [5, 0, 5], 12 | "to": [11, 9, 11], 13 | "faces": { 14 | "north": {"uv": [1.5, 1.5, 3, 3.75], "texture": "#0"}, 15 | "east": {"uv": [0, 1.5, 1.5, 3.75], "texture": "#0"}, 16 | "south": {"uv": [4.5, 1.5, 6, 3.75], "texture": "#0"}, 17 | "west": {"uv": [3, 1.5, 4.5, 3.75], "texture": "#0"}, 18 | "up": {"uv": [3, 1.5, 1.5, 0], "texture": "#0"}, 19 | "down": {"uv": [4.5, 0, 3, 1.5], "texture": "#0"} 20 | } 21 | }, 22 | { 23 | "name": "body", 24 | "from": [2, 9, 2], 25 | "to": [14, 9, 14], 26 | "faces": { 27 | "north": {"uv": [0, 11.75, 3, 11.75], "texture": "#0"}, 28 | "east": {"uv": [-3, 11.75, 0, 11.75], "texture": "#0"}, 29 | "south": {"uv": [6, 11.75, 9, 11.75], "texture": "#0"}, 30 | "west": {"uv": [3, 11.75, 6, 11.75], "texture": "#0"}, 31 | "up": {"uv": [3, 11.75, 0, 8.75], "texture": "#0"}, 32 | "down": {"uv": [3, 8.75, 0, 11.75], "texture": "#0"} 33 | } 34 | } 35 | ] 36 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/block/clam.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": { 3 | "0": "angling:block/clam", 4 | "particle": "angling:block/clam" 5 | }, 6 | "elements": [ 7 | { 8 | "from": [4, 0.1, 5.5], 9 | "to": [12, 0.1, 10.5], 10 | "shade": false, 11 | "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 0.1, 10.5]}, 12 | "faces": { 13 | "up": {"uv": [0, 0, 8, 5], "texture": "#0"}, 14 | "down": {"uv": [8, 5, 16, 0], "texture": "#0"} 15 | } 16 | }, 17 | { 18 | "from": [4, 0.1, 5.5], 19 | "to": [12, 0.1, 10.5], 20 | "shade": false, 21 | "rotation": {"angle": 0, "axis": "y", "origin": [8, 0.1, 10.5]}, 22 | "faces": { 23 | "up": {"uv": [8, 0, 16, 5], "texture": "#0"}, 24 | "down": {"uv": [0, 5, 8, 0], "texture": "#0"} 25 | } 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/block/dead_starfish.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": { 3 | "particle": "angling:item/dead_starfish" 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/block/duckweed.json: -------------------------------------------------------------------------------- 1 | { 2 | "ambientocclusion": false, 3 | "textures": { 4 | "particle": "angling:block/duckweed", 5 | "texture": "angling:block/duckweed" 6 | }, 7 | "elements": [ 8 | { "from": [ 0, 0.25, 0 ], 9 | "to": [ 16, 0.25, 16 ], 10 | "faces": { 11 | "down": { "uv": [ 0, 16, 16, 0 ], "texture": "#texture" }, 12 | "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#texture"} 13 | } 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/block/roe.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": { 3 | "0": "angling:block/roe_bottom", 4 | "1": "angling:block/roe_top", 5 | "particle": "angling:block/roe_bottom" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [0, 0.25, 0], 10 | "to": [16, 0.25, 16], 11 | "faces": { 12 | "up": {"uv": [0, 0, 16, 16], "texture": "#0", "tintindex": 0}, 13 | "down": {"uv": [0, 0, 16, 16], "texture": "#0", "tintindex": 0} 14 | } 15 | }, 16 | { 17 | "from": [0, 0.75, 0], 18 | "to": [16, 0.75, 16], 19 | "faces": { 20 | "up": {"uv": [0, 0, 16, 16], "texture": "#1", "tintindex": 1}, 21 | "down": {"uv": [0, 0, 16, 16], "texture": "#1", "tintindex": 1} 22 | } 23 | } 24 | ] 25 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/block/sargassum.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "ambientocclusion": false, 4 | "textures": { 5 | "0": "angling:block/sargassum", 6 | "1": "angling:block/sargassum_side", 7 | "particle": "angling:block/sargassum" 8 | }, 9 | "elements": [ 10 | { 11 | "from": [0, 0.5, 0], 12 | "to": [16, 0.5, 16], 13 | "shade": false, 14 | "faces": { 15 | "up": {"uv": [0, 0, 16, 16], "texture": "#0"}, 16 | "down": {"uv": [0, 16, 16, 0], "texture": "#0"} 17 | } 18 | }, 19 | { 20 | "from": [-3.31371, -3.5, 8], 21 | "to": [19.31371, 4.5, 8], 22 | "shade": false, 23 | "rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]}, 24 | "faces": { 25 | "north": {"uv": [0, 4, 16, 12], "texture": "#1"}, 26 | "south": {"uv": [0, 4, 16, 12], "texture": "#1"} 27 | } 28 | }, 29 | { 30 | "from": [-3.31371, -3.5, 8], 31 | "to": [19.31371, 4.5, 8], 32 | "shade": false, 33 | "rotation": {"angle": -45, "axis": "y", "origin": [8, 0, 8]}, 34 | "faces": { 35 | "north": {"uv": [0, 4, 16, 12], "texture": "#1"}, 36 | "south": {"uv": [0, 4, 16, 12], "texture": "#1"} 37 | } 38 | } 39 | ] 40 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/block/starfish.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": { 3 | "particle": "angling:item/starfish" 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/block/urchin.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "texture_size": [64, 64], 4 | "textures": { 5 | "0": "angling:entity/anemone/anemone", 6 | "particle": "minecraft:block/slime_block" 7 | }, 8 | "elements": [ 9 | { 10 | "name": "body", 11 | "from": [5, 0, 5], 12 | "to": [11, 9, 11], 13 | "faces": { 14 | "north": {"uv": [1.5, 1.5, 3, 3.75], "texture": "#0"}, 15 | "east": {"uv": [0, 1.5, 1.5, 3.75], "texture": "#0"}, 16 | "south": {"uv": [4.5, 1.5, 6, 3.75], "texture": "#0"}, 17 | "west": {"uv": [3, 1.5, 4.5, 3.75], "texture": "#0"}, 18 | "up": {"uv": [3, 1.5, 1.5, 0], "texture": "#0"}, 19 | "down": {"uv": [4.5, 0, 3, 1.5], "texture": "#0"} 20 | } 21 | }, 22 | { 23 | "name": "body", 24 | "from": [2, 9, 2], 25 | "to": [14, 9, 14], 26 | "faces": { 27 | "north": {"uv": [0, 11.75, 3, 11.75], "texture": "#0"}, 28 | "east": {"uv": [-3, 11.75, 0, 11.75], "texture": "#0"}, 29 | "south": {"uv": [6, 11.75, 9, 11.75], "texture": "#0"}, 30 | "west": {"uv": [3, 11.75, 6, 11.75], "texture": "#0"}, 31 | "up": {"uv": [3, 11.75, 0, 8.75], "texture": "#0"}, 32 | "down": {"uv": [3, 8.75, 0, 11.75], "texture": "#0"} 33 | } 34 | } 35 | ] 36 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/block/wormy_dirt_1.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/cube_all", 3 | "textures": { 4 | "all": "angling:block/wormy_dirt_1" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/block/wormy_dirt_2.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/cube_all", 3 | "textures": { 4 | "all": "angling:block/wormy_dirt_2" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/block/wormy_dirt_3.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/cube_all", 3 | "textures": { 4 | "all": "angling:block/wormy_dirt_3" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/block/wormy_mud_1.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/cube_all", 3 | "textures": { 4 | "all": "angling:block/wormy_mud_1" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/block/wormy_mud_2.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/cube_all", 3 | "textures": { 4 | "all": "angling:block/wormy_mud_2" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/block/wormy_mud_3.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/cube_all", 3 | "textures": { 4 | "all": "angling:block/wormy_mud_3" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/algae.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:block/algae" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/anemone.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "angling:block/anemone" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/anglerfish_bucket.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/anglerfish_bucket" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/anglerfish_spawn_egg.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/template_spawn_egg" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/anomalocaris_bucket.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/anomalocaris_bucket" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/anomalocaris_spawn_egg.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/template_spawn_egg" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/bubble_eye_bucket.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/bubble_eye_bucket" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/bubble_eye_spawn_egg.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/template_spawn_egg" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/catfish_bucket.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/catfish_bucket" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/catfish_spawn_egg.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/template_spawn_egg" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/clam.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/clam" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/crab_bucket.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/crab_bucket" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/crab_spawn_egg.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/template_spawn_egg" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/dead_starfish.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/dead_starfish" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/dongfish_bucket.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/dongfish_bucket" 5 | }, 6 | "overrides": [ 7 | { 8 | "predicate": { 9 | "angling:has_horngus": 0 10 | }, 11 | "model": "angling:item/dongfish_bucket_no_horngus" 12 | }, 13 | { 14 | "predicate": { 15 | "angling:has_horngus": 1 16 | }, 17 | "model": "angling:item/dongfish_bucket_horngus" 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/dongfish_bucket_horngus.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/dongfish_bucket" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/dongfish_bucket_no_horngus.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/dongfish_bucket_no_horngus" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/dongfish_spawn_egg.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/template_spawn_egg" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/duckweed.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:block/duckweed" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/fried_sunfish.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/fried_sunfish" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/fry_bucket.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/fry_bucket", 5 | "layer1": "angling:item/fry_bucket_overlay" 6 | } 7 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/fry_spawn_egg.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/template_spawn_egg" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/mahi_mahi_bucket.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/mahi_mahi_bucket" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/mahi_mahi_spawn_egg.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/template_spawn_egg" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/nautilus_bucket.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/nautilus_bucket" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/nautilus_spawn_egg.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/template_spawn_egg" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/oysters.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/oysters" 5 | }, 6 | "display": { 7 | "fixed": { 8 | "translation": [ 0, 6, 0 ] 9 | }, 10 | "firstperson_righthand": { 11 | "rotation": [ 0, -90, 25 ], 12 | "translation": [ 0, 5, 0 ], 13 | "scale": [ 0.68, 0.68, 0.68 ] 14 | }, 15 | "thirdperson_righthand": { 16 | "translation": [ 0, 4, 1 ], 17 | "scale": [ 0.55, 0.55, 0.55 ] 18 | }, 19 | "head": { 20 | "translation": [ 0, 14, -5 ] 21 | }, 22 | "gui": { 23 | "translation": [ 0, 2, 0 ] 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/papyrus.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/papyrus" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/pelican_spawn_egg.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/template_spawn_egg" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/roe.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/roe", 5 | "layer1": "angling:item/roe_overlay" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/sargassum.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:block/sargassum" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/sea_slug_bucket.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/sea_slug_bucket", 5 | "layer1": "angling:item/sea_slug_bucket_overlay_0", 6 | "layer2": "angling:item/sea_slug_bucket_overlay_1" 7 | } 8 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/sea_slug_eggs.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "angling:block/sea_slug_eggs" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/sea_slug_spawn_egg.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/template_spawn_egg" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/seahorse_bucket.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/seahorse_bucket" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/seahorse_spawn_egg.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/template_spawn_egg" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/starfish.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/starfish" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/sunfish.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/sunfish" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/sunfish_bucket.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/sunfish_bucket" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/sunfish_spawn_egg.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/template_spawn_egg" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/urchin_bucket.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/urchin_bucket" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/urchin_spawn_egg.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/template_spawn_egg" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/worm.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "angling:item/worm" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/wormy_dirt.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "angling:block/wormy_dirt_1" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/models/item/wormy_mud.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "angling:block/wormy_mud_1" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/particles/algae.json: -------------------------------------------------------------------------------- 1 | { 2 | "textures": [ 3 | "minecraft:generic_0" 4 | ] 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/angling/sounds/block/shell/step1.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/sounds/block/shell/step1.ogg -------------------------------------------------------------------------------- /src/main/resources/assets/angling/sounds/block/shell/step2.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/sounds/block/shell/step2.ogg -------------------------------------------------------------------------------- /src/main/resources/assets/angling/sounds/block/shell/step3.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/sounds/block/shell/step3.ogg -------------------------------------------------------------------------------- /src/main/resources/assets/angling/sounds/block/shell/step4.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/sounds/block/shell/step4.ogg -------------------------------------------------------------------------------- /src/main/resources/assets/angling/sounds/entity/pelican/ambient1.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/sounds/entity/pelican/ambient1.ogg -------------------------------------------------------------------------------- /src/main/resources/assets/angling/sounds/entity/pelican/ambient2.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/sounds/entity/pelican/ambient2.ogg -------------------------------------------------------------------------------- /src/main/resources/assets/angling/sounds/entity/pelican/ambient3.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/sounds/entity/pelican/ambient3.ogg -------------------------------------------------------------------------------- /src/main/resources/assets/angling/sounds/entity/pelican/ambient4.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/sounds/entity/pelican/ambient4.ogg -------------------------------------------------------------------------------- /src/main/resources/assets/angling/sounds/entity/pelican/hurt1.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/sounds/entity/pelican/hurt1.ogg -------------------------------------------------------------------------------- /src/main/resources/assets/angling/sounds/entity/pelican/hurt2.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/sounds/entity/pelican/hurt2.ogg -------------------------------------------------------------------------------- /src/main/resources/assets/angling/sounds/entity/pelican/hurt3.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/sounds/entity/pelican/hurt3.ogg -------------------------------------------------------------------------------- /src/main/resources/assets/angling/sounds/entity/pelican/hurt4.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/sounds/entity/pelican/hurt4.ogg -------------------------------------------------------------------------------- /src/main/resources/assets/angling/sounds/item/worm/use1.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/sounds/item/worm/use1.ogg -------------------------------------------------------------------------------- /src/main/resources/assets/angling/sounds/item/worm/use2.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/sounds/item/worm/use2.ogg -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/block/algae.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/block/algae.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/block/clam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/block/clam.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/block/duckweed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/block/duckweed.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/block/oysters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/block/oysters.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/block/papyrus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/block/papyrus.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/block/roe_bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/block/roe_bottom.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/block/roe_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/block/roe_top.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/block/sargassum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/block/sargassum.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/block/sargassum_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/block/sargassum_side.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/block/sea_slug_eggs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/block/sea_slug_eggs.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/block/wormy_dirt_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/block/wormy_dirt_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/block/wormy_dirt_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/block/wormy_dirt_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/block/wormy_dirt_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/block/wormy_dirt_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/block/wormy_mud_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/block/wormy_mud_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/block/wormy_mud_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/block/wormy_mud_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/block/wormy_mud_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/block/wormy_mud_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/anemone/anemone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/anemone/anemone.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/anglerfish/anglerfish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/anglerfish/anglerfish.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/anglerfish/anglerfish_overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/anglerfish/anglerfish_overlay.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/anomalocaris/anomalocaris.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/anomalocaris/anomalocaris.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/bubble_eye/bubble_eye.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/bubble_eye/bubble_eye.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/catfish/catfish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/catfish/catfish.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/crab/blue_claw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/crab/blue_claw.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/crab/dungeness.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/crab/dungeness.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/crab/ghost.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/crab/ghost.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/dongfish/dongfish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/dongfish/dongfish.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/fry/fry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/fry/fry.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/fry/fry_innards.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/fry/fry_innards.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/mahi_mahi/mahi_mahi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/mahi_mahi/mahi_mahi.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/nautilus/nautilus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/nautilus/nautilus.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/pelican/pelican.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/pelican/pelican.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/sea_slug/rings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/sea_slug/rings.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/sea_slug/sea_slug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/sea_slug/sea_slug.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/sea_slug/spots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/sea_slug/spots.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/sea_slug/squiggles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/sea_slug/squiggles.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/sea_slug/stripes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/sea_slug/stripes.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/seahorse/seahorse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/seahorse/seahorse.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/starfish/dead_starfish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/starfish/dead_starfish.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/starfish/starfish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/starfish/starfish.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/sunfish/bluegill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/sunfish/bluegill.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/sunfish/bluegill_and_pumpkinseed_hybrid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/sunfish/bluegill_and_pumpkinseed_hybrid.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/sunfish/bluegill_and_redbreast_hybrid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/sunfish/bluegill_and_redbreast_hybrid.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/sunfish/diansus_diansur.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/sunfish/diansus_diansur.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/sunfish/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/sunfish/green.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/sunfish/longear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/sunfish/longear.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/sunfish/pumpkinseed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/sunfish/pumpkinseed.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/sunfish/redbreast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/sunfish/redbreast.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/sunfish/warmouth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/sunfish/warmouth.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/entity/urchin/urchin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/entity/urchin/urchin.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/anglerfish_bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/anglerfish_bucket.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/anomalocaris_bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/anomalocaris_bucket.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/bubble_eye_bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/bubble_eye_bucket.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/catfish_bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/catfish_bucket.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/clam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/clam.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/crab_bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/crab_bucket.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/dead_starfish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/dead_starfish.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/dongfish_bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/dongfish_bucket.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/dongfish_bucket_no_horngus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/dongfish_bucket_no_horngus.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/fried_sunfish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/fried_sunfish.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/fry_bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/fry_bucket.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/fry_bucket_overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/fry_bucket_overlay.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/mahi_mahi_bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/mahi_mahi_bucket.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/nautilus_bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/nautilus_bucket.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/oysters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/oysters.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/papyrus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/papyrus.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/roe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/roe.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/roe_overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/roe_overlay.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/sea_slug_bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/sea_slug_bucket.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/sea_slug_bucket_overlay_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/sea_slug_bucket_overlay_0.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/sea_slug_bucket_overlay_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/sea_slug_bucket_overlay_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/seahorse_bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/seahorse_bucket.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/starfish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/starfish.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/sunfish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/sunfish.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/sunfish_bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/sunfish_bucket.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/urchin_bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/urchin_bucket.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/item/worm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/item/worm.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/particle/worm_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/particle/worm_0.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/particle/worm_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/particle/worm_1.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/particle/worm_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/particle/worm_2.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/particle/worm_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/particle/worm_3.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/particle/worm_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/particle/worm_4.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/particle/worm_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/particle/worm_5.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/particle/worm_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/particle/worm_6.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/particle/worm_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/particle/worm_7.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/particle/worm_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/particle/worm_8.png -------------------------------------------------------------------------------- /src/main/resources/assets/angling/textures/particle/worm_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/angling/textures/particle/worm_9.png -------------------------------------------------------------------------------- /src/main/resources/assets/minecraft/models/item/tropical_fish_bucket.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "minecraft:item/tropical_fish_bucket", 5 | "layer1": "minecraft:item/tropical_fish_bucket_overlay_0", 6 | "layer2": "minecraft:item/tropical_fish_bucket_overlay_1" 7 | } 8 | } -------------------------------------------------------------------------------- /src/main/resources/assets/minecraft/textures/item/tropical_fish_bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/minecraft/textures/item/tropical_fish_bucket.png -------------------------------------------------------------------------------- /src/main/resources/assets/minecraft/textures/item/tropical_fish_bucket_overlay_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/minecraft/textures/item/tropical_fish_bucket_overlay_0.png -------------------------------------------------------------------------------- /src/main/resources/assets/minecraft/textures/item/tropical_fish_bucket_overlay_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/8s2/Angling/e0c99ab904cc3d0e5ece2d04a39347b5c1e346ea/src/main/resources/assets/minecraft/textures/item/tropical_fish_bucket_overlay_1.png -------------------------------------------------------------------------------- /src/main/resources/data/angling/advancements/husbandry/look_at_nautilus.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:husbandry/fishy_business", 3 | "criteria": { 4 | "look_at_nautilus": { 5 | "conditions": { 6 | "player": [ 7 | { 8 | "condition": "minecraft:entity_properties", 9 | "entity": "this", 10 | "predicate": { 11 | "type_specific": { 12 | "type": "player", 13 | "looking_at": { 14 | "type": "angling:nautilus" 15 | } 16 | } 17 | } 18 | } 19 | ] 20 | }, 21 | "trigger": "minecraft:tick" 22 | } 23 | }, 24 | "display": { 25 | "announce_to_chat": true, 26 | "description": { 27 | "translate": "advancements.husbandry.look_at_nautilus.description" 28 | }, 29 | "frame": "task", 30 | "hidden": false, 31 | "icon": { 32 | "item": "angling:nautilus_bucket" 33 | }, 34 | "show_toast": true, 35 | "title": { 36 | "translate": "advancements.husbandry.look_at_nautilus.title" 37 | } 38 | }, 39 | "requirements": [ 40 | [ 41 | "look_at_nautilus" 42 | ] 43 | ] 44 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/advancements/husbandry/obtain_roe.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "angling:husbandry/put_worm_in_block", 3 | "criteria": { 4 | "roe": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": [ 9 | "angling:roe" 10 | ] 11 | } 12 | ] 13 | }, 14 | "trigger": "minecraft:inventory_changed" 15 | } 16 | }, 17 | "display": { 18 | "announce_to_chat": true, 19 | "description": { 20 | "translate": "advancements.husbandry.obtain_roe.description" 21 | }, 22 | "frame": "task", 23 | "hidden": false, 24 | "icon": { 25 | "item": "angling:roe", 26 | "nbt": "{BlockEntityTag:{PrimaryColor:16739110,SecondaryColor:16739110}}" 27 | }, 28 | "show_toast": true, 29 | "title": { 30 | "translate": "advancements.husbandry.obtain_roe.title" 31 | } 32 | }, 33 | "requirements": [ 34 | [ 35 | "roe" 36 | ] 37 | ] 38 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/advancements/husbandry/obtain_sea_slug_eggs.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "angling:husbandry/obtain_roe", 3 | "criteria": { 4 | "sea_slug_eggs": { 5 | "conditions": { 6 | "items": [ 7 | { 8 | "items": [ 9 | "angling:sea_slug_eggs" 10 | ] 11 | } 12 | ] 13 | }, 14 | "trigger": "minecraft:inventory_changed" 15 | } 16 | }, 17 | "display": { 18 | "announce_to_chat": true, 19 | "description": { 20 | "translate": "advancements.husbandry.obtain_sea_slug_eggs.description" 21 | }, 22 | "frame": "task", 23 | "hidden": false, 24 | "icon": { 25 | "item": "angling:sea_slug_eggs", 26 | "nbt": "{BlockEntityTag:{Color:7294519}}" 27 | }, 28 | "show_toast": true, 29 | "title": { 30 | "translate": "advancements.husbandry.obtain_sea_slug_eggs.title" 31 | } 32 | }, 33 | "requirements": [ 34 | [ 35 | "sea_slug_eggs" 36 | ] 37 | ] 38 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/advancements/husbandry/put_worm_in_block.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:husbandry/root", 3 | "criteria": { 4 | "put_worm_in_block": { 5 | "conditions": { 6 | "item": { 7 | "items": [ 8 | "angling:worm" 9 | ] 10 | }, 11 | "location": { 12 | "block": { 13 | "blocks": [ 14 | "minecraft:dirt", 15 | "minecraft:mud", 16 | "angling:wormy_dirt", 17 | "angling:wormy_mud" 18 | ] 19 | } 20 | } 21 | }, 22 | "trigger": "minecraft:item_used_on_block" 23 | } 24 | }, 25 | "display": { 26 | "announce_to_chat": true, 27 | "description": { 28 | "translate": "advancements.husbandry.put_worm_in_block.description" 29 | }, 30 | "frame": "task", 31 | "hidden": false, 32 | "icon": { 33 | "item": "angling:worm" 34 | }, 35 | "show_toast": true, 36 | "title": { 37 | "translate": "advancements.husbandry.put_worm_in_block.title" 38 | } 39 | }, 40 | "requirements": [ 41 | [ 42 | "put_worm_in_block" 43 | ] 44 | ] 45 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/advancements/husbandry/traded_with_pelican.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:husbandry/tactical_fishing", 3 | "criteria": { 4 | "traded_with_pelican": { 5 | "conditions": {}, 6 | "trigger": "angling:traded_with_pelican" 7 | } 8 | }, 9 | "display": { 10 | "announce_to_chat": true, 11 | "description": { 12 | "translate": "advancements.husbandry.traded_with_pelican.description" 13 | }, 14 | "frame": "task", 15 | "hidden": true, 16 | "icon": { 17 | "item": "minecraft:salmon_bucket" 18 | }, 19 | "show_toast": true, 20 | "title": { 21 | "translate": "advancements.husbandry.traded_with_pelican.title" 22 | } 23 | }, 24 | "requirements": [ 25 | [ 26 | "traded_with_pelican" 27 | ] 28 | ] 29 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/loot_tables/blocks/anemone.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "bonus_rolls": 0.0, 6 | "conditions": [ 7 | { 8 | "condition": "minecraft:survives_explosion" 9 | } 10 | ], 11 | "entries": [ 12 | { 13 | "type": "minecraft:item", 14 | "name": "angling:anemone" 15 | } 16 | ], 17 | "rolls": 1.0 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/loot_tables/blocks/clam.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "bonus_rolls": 0.0, 6 | "conditions": [ 7 | { 8 | "condition": "minecraft:survives_explosion" 9 | } 10 | ], 11 | "entries": [ 12 | { 13 | "type": "minecraft:item", 14 | "name": "angling:clam" 15 | } 16 | ], 17 | "rolls": 1.0 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/loot_tables/blocks/dead_starfish.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "bonus_rolls": 0.0, 6 | "conditions": [ 7 | { 8 | "condition": "minecraft:survives_explosion" 9 | } 10 | ], 11 | "entries": [ 12 | { 13 | "type": "minecraft:item", 14 | "name": "angling:dead_starfish" 15 | } 16 | ], 17 | "rolls": 1.0 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/loot_tables/blocks/duckweed.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "bonus_rolls": 0.0, 6 | "conditions": [ 7 | { 8 | "condition": "minecraft:match_tool", 9 | "predicate": { 10 | "items": [ 11 | "minecraft:shears" 12 | ] 13 | } 14 | } 15 | ], 16 | "entries": [ 17 | { 18 | "type": "minecraft:item", 19 | "name": "angling:duckweed" 20 | } 21 | ], 22 | "rolls": 1.0 23 | } 24 | ] 25 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/loot_tables/blocks/oysters.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "bonus_rolls": 0.0, 6 | "conditions": [ 7 | { 8 | "condition": "minecraft:survives_explosion" 9 | } 10 | ], 11 | "entries": [ 12 | { 13 | "type": "minecraft:item", 14 | "name": "angling:oysters" 15 | } 16 | ], 17 | "rolls": 1.0 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/loot_tables/blocks/papyrus.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "bonus_rolls": 0, 7 | "entries": [ 8 | { 9 | "type": "minecraft:item", 10 | "name": "angling:papyrus" 11 | } 12 | ] 13 | }, 14 | { 15 | "rolls": 1, 16 | "bonus_rolls": 0, 17 | "entries": [ 18 | { 19 | "type": "minecraft:item", 20 | "name": "angling:papyrus" 21 | } 22 | ], 23 | "conditions": [ 24 | { 25 | "condition": "minecraft:block_state_property", 26 | "block": "angling:papyrus", 27 | "properties": { 28 | "age": "2" 29 | } 30 | } 31 | ] 32 | } 33 | ], 34 | "functions": [ 35 | { 36 | "function": "minecraft:explosion_decay" 37 | } 38 | ] 39 | } 40 | -------------------------------------------------------------------------------- /src/main/resources/data/angling/loot_tables/blocks/roe.json: -------------------------------------------------------------------------------- 1 | { 2 | "pools": [ 3 | { 4 | "rolls": 1, 5 | "bonus_rolls": 0, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "name": "angling:roe", 10 | "functions": [ 11 | { 12 | "function": "minecraft:set_count", 13 | "count": 1 14 | }, 15 | { 16 | "function": "minecraft:copy_nbt", 17 | "source": "block_entity", 18 | "ops": [ 19 | { 20 | "source": "PrimaryColor", 21 | "target": "BlockEntityTag.PrimaryColor", 22 | "op": "replace" 23 | }, 24 | { 25 | "source": "SecondaryColor", 26 | "target": "BlockEntityTag.SecondaryColor", 27 | "op": "replace" 28 | }, 29 | { 30 | "source": "ParentData", 31 | "target": "BlockEntityTag.ParentData", 32 | "op": "replace" 33 | }, 34 | { 35 | "source": "MateData", 36 | "target": "BlockEntityTag.MateData", 37 | "op": "replace" 38 | }, 39 | { 40 | "source": "EntityType", 41 | "target": "BlockEntityTag.EntityType", 42 | "op": "replace" 43 | } 44 | ] 45 | } 46 | ], 47 | "conditions": [ 48 | { 49 | "condition": "minecraft:match_tool", 50 | "predicate": { 51 | "enchantments": [ 52 | { 53 | "enchantment": "minecraft:silk_touch", 54 | "levels": { 55 | "min": 1 56 | } 57 | } 58 | ] 59 | } 60 | } 61 | ] 62 | } 63 | ], 64 | "conditions": [ 65 | { 66 | "condition": "minecraft:survives_explosion" 67 | } 68 | ] 69 | } 70 | ] 71 | } 72 | -------------------------------------------------------------------------------- /src/main/resources/data/angling/loot_tables/blocks/sargassum.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "bonus_rolls": 0.0, 6 | "conditions": [ 7 | { 8 | "condition": "minecraft:match_tool", 9 | "predicate": { 10 | "items": [ 11 | "minecraft:shears" 12 | ] 13 | } 14 | } 15 | ], 16 | "entries": [ 17 | { 18 | "type": "minecraft:item", 19 | "name": "angling:sargassum" 20 | } 21 | ], 22 | "rolls": 1.0 23 | } 24 | ] 25 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/loot_tables/blocks/sea_slug_eggs.json: -------------------------------------------------------------------------------- 1 | { 2 | "pools": [ 3 | { 4 | "rolls": 1, 5 | "bonus_rolls": 0, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "name": "angling:sea_slug_eggs", 10 | "functions": [ 11 | { 12 | "function": "minecraft:set_count", 13 | "count": 1 14 | }, 15 | { 16 | "function": "minecraft:copy_nbt", 17 | "source": "block_entity", 18 | "ops": [ 19 | { 20 | "source": "Color", 21 | "target": "BlockEntityTag.Color", 22 | "op": "replace" 23 | }, 24 | { 25 | "source": "ParentData", 26 | "target": "BlockEntityTag.ParentData", 27 | "op": "replace" 28 | }, 29 | { 30 | "source": "MateData", 31 | "target": "BlockEntityTag.MateData", 32 | "op": "replace" 33 | } 34 | ] 35 | } 36 | ], 37 | "conditions": [ 38 | { 39 | "condition": "minecraft:match_tool", 40 | "predicate": { 41 | "enchantments": [ 42 | { 43 | "enchantment": "minecraft:silk_touch", 44 | "levels": { 45 | "min": 1 46 | } 47 | } 48 | ] 49 | } 50 | } 51 | ] 52 | } 53 | ], 54 | "conditions": [ 55 | { 56 | "condition": "minecraft:survives_explosion" 57 | } 58 | ] 59 | } 60 | ] 61 | } 62 | -------------------------------------------------------------------------------- /src/main/resources/data/angling/loot_tables/blocks/starfish.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "name": "angling:starfish", 10 | "functions": [ 11 | { 12 | "function": "minecraft:copy_nbt", 13 | "source": "block_entity", 14 | "ops": [ 15 | { 16 | "source": "Color", 17 | "target": "BlockEntityTag.Color", 18 | "op": "replace" 19 | }, 20 | { 21 | "source": "Rainbow", 22 | "target": "BlockEntityTag.Rainbow", 23 | "op": "replace" 24 | } 25 | ] 26 | }, 27 | { 28 | "function": "minecraft:set_count", 29 | "count": 1 30 | } 31 | ] 32 | } 33 | ], 34 | "conditions": [ 35 | { 36 | "condition": "minecraft:survives_explosion" 37 | } 38 | ] 39 | } 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /src/main/resources/data/angling/loot_tables/blocks/urchin.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block" 3 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/loot_tables/entities/crab.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:entity" 3 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/loot_tables/entities/dongfish.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:entity" 3 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/loot_tables/entities/fry.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:entity" 3 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/loot_tables/entities/nautilus.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:entity", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "bonus_rolls": 0.0, 7 | "entries": [ 8 | { 9 | "type": "minecraft:item", 10 | "name": "minecraft:nautilus_shell", 11 | "functions": [ 12 | { 13 | "function": "minecraft:set_count", 14 | "count": 1 15 | } 16 | ], 17 | "conditions": [ 18 | { 19 | "condition": "minecraft:damage_source_properties", 20 | "predicate": { 21 | "source_entity": { 22 | "type": "minecraft:axolotl" 23 | } 24 | } 25 | } 26 | ] 27 | } 28 | ] 29 | } 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /src/main/resources/data/angling/loot_tables/entities/pelican.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:entity", 3 | "pools": [ 4 | { 5 | "bonus_rolls": 0.0, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "functions": [ 10 | { 11 | "add": false, 12 | "count": { 13 | "type": "minecraft:uniform", 14 | "max": 2.0, 15 | "min": 1.0 16 | }, 17 | "function": "minecraft:set_count" 18 | }, 19 | { 20 | "count": { 21 | "type": "minecraft:uniform", 22 | "max": 1.0, 23 | "min": 0.0 24 | }, 25 | "function": "minecraft:looting_enchant" 26 | } 27 | ], 28 | "name": "minecraft:feather" 29 | } 30 | ], 31 | "rolls": 1.0 32 | } 33 | ] 34 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/loot_tables/entities/sunfish.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:entity", 3 | "pools": [ 4 | { 5 | "bonus_rolls": 0.0, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "functions": [ 10 | { 11 | "conditions": [ 12 | { 13 | "condition": "minecraft:entity_properties", 14 | "entity": "this", 15 | "predicate": { 16 | "flags": { 17 | "is_on_fire": true 18 | } 19 | } 20 | } 21 | ], 22 | "function": "minecraft:furnace_smelt" 23 | } 24 | ], 25 | "name": "angling:sunfish" 26 | } 27 | ], 28 | "rolls": 1.0 29 | }, 30 | { 31 | "bonus_rolls": 0.0, 32 | "conditions": [ 33 | { 34 | "chance": 0.05, 35 | "condition": "minecraft:random_chance" 36 | } 37 | ], 38 | "entries": [ 39 | { 40 | "type": "minecraft:item", 41 | "name": "minecraft:bone_meal" 42 | } 43 | ], 44 | "rolls": 1.0 45 | } 46 | ] 47 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/recipes/fried_sunfish.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:smelting", 3 | "cookingtime": 150, 4 | "experience": 0.35, 5 | "ingredient": { 6 | "item": "angling:sunfish" 7 | }, 8 | "result": "angling:fried_sunfish" 9 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/recipes/fried_sunfish_from_campfire_cooking.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:campfire_cooking", 3 | "cookingtime": 450, 4 | "experience": 0.35, 5 | "ingredient": { 6 | "item": "angling:sunfish" 7 | }, 8 | "result": "angling:fried_sunfish" 9 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/recipes/fried_sunfish_from_smoking.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:smoking", 3 | "cookingtime": 75, 4 | "experience": 0.35, 5 | "ingredient": { 6 | "item": "angling:sunfish" 7 | }, 8 | "result": "angling:fried_sunfish" 9 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/recipes/paper_from_papyrus.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "key": { 4 | "#": { 5 | "item": "angling:papyrus" 6 | } 7 | }, 8 | "pattern": [ 9 | "##" 10 | ], 11 | "result": { 12 | "count": 1, 13 | "item": "minecraft:paper" 14 | } 15 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/blocks/crab_spawnable_on.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "minecraft:sand", 4 | "minecraft:mud", 5 | "minecraft:muddy_mangrove_roots", 6 | "#minecraft:base_stone_overworld" 7 | ] 8 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/blocks/filter_feeders.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "angling:oysters", 4 | "angling:clam", 5 | "minecraft:sea_pickle", 6 | "#minecraft:corals", 7 | "#minecraft:wall_corals", 8 | "#minecraft:coral_blocks" 9 | ] 10 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/blocks/starfish_food.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "angling:oysters", 4 | "angling:clam" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/crab_variant/natural_variants.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "angling:dungeness", 4 | "angling:ghost", 5 | "angling:blue_claw" 6 | ] 7 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/entity_types/common_entities_in_pelican_beak.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "minecraft:cod", 4 | "minecraft:salmon", 5 | "minecraft:pufferfish", 6 | "minecraft:tropical_fish", 7 | "minecraft:tadpole", 8 | "angling:fry", 9 | "angling:sunfish", 10 | "angling:sea_slug", 11 | "angling:crab", 12 | "angling:catfish", 13 | "angling:bubble_eye", 14 | "angling:seahorse", 15 | "angling:nautilus", 16 | "angling:mahi_mahi" 17 | ] 18 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/entity_types/hunted_by_pelican.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "#angling:common_entities_in_pelican_beak", 4 | "#angling:uncommon_entities_in_pelican_beak" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/entity_types/hunted_by_pelican_when_baby.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "minecraft:turtle", 4 | "minecraft:rabbit", 5 | "minecraft:axolotl", 6 | "minecraft:bee", 7 | "angling:crab" 8 | ] 9 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/entity_types/spawning_fish.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "minecraft:cod", 4 | "minecraft:salmon", 5 | "minecraft:pufferfish", 6 | "minecraft:tropical_fish", 7 | "angling:sunfish", 8 | "angling:dongfish", 9 | "angling:catfish", 10 | "angling:bubble_eye", 11 | "angling:anomalocaris", 12 | "angling:anglerfish", 13 | "angling:mahi_mahi" 14 | ] 15 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/entity_types/uncommon_entities_in_pelican_beak.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "minecraft:frog", 4 | "angling:dongfish", 5 | "angling:anomalocaris", 6 | "angling:anglerfish", 7 | "#angling:hunted_by_pelican_when_baby" 8 | ] 9 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/sea_slug_color/base_colors.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "angling:ivory", 4 | "angling:onyx", 5 | "angling:periwinkle", 6 | "angling:jade", 7 | "angling:midnight", 8 | "angling:ultramarine", 9 | "angling:coffee", 10 | "angling:eggplant", 11 | "angling:cyclamen", 12 | "angling:amber", 13 | "angling:iris" 14 | ] 15 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/sea_slug_color/pattern_colors.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "angling:ivory", 4 | "angling:burgundy", 5 | "angling:coquelicot", 6 | "angling:gamboge", 7 | "angling:celeste", 8 | "angling:olivine", 9 | "angling:pear", 10 | "angling:amber", 11 | "angling:orchid", 12 | "angling:folly" 13 | ] 14 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/sea_slug_pattern/natural_patterns.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "angling:none", 4 | "angling:stripes", 5 | "angling:squiggles", 6 | "angling:spots", 7 | "angling:rings" 8 | ] 9 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/sunfish_variant/natural_sunfish.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "angling:pumpkinseed", 4 | "angling:longear", 5 | "angling:bluegill", 6 | "angling:redbreast", 7 | "angling:green", 8 | "angling:warmouth" 9 | ] 10 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/sunfish_variant/pelican_beak_variants.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "#angling:natural_sunfish", 4 | "angling:bluegill_and_redbreast_hybrid", 5 | "angling:bluegill_and_pumpkinseed_hybrid" 6 | ] 7 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/worldgen/biome/anglerfish_spawn_in.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "minecraft:deep_cold_ocean" 4 | ] 5 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/worldgen/biome/anomalocaris_spawn_in.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "#c:mushroom" 4 | ] 5 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/worldgen/biome/blue_claw_crab_biomes.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "minecraft:stony_shore" 4 | ] 5 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/worldgen/biome/bubble_eye_spawn_in.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "minecraft:old_growth_spruce_taiga", 4 | "minecraft:old_growth_pine_taiga" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/worldgen/biome/catfish_spawn_in.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "minecraft:swamp" 4 | ] 5 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/worldgen/biome/clams_biomes.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "minecraft:stony_shore", 4 | "minecraft:beach", 5 | "minecraft:ocean", 6 | "minecraft:deep_ocean", 7 | "minecraft:lukewarm_ocean", 8 | "minecraft:deep_lukewarm_ocean", 9 | "minecraft:warm_ocean" 10 | ] 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/worldgen/biome/crab_spawn_in.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "#angling:dungeness_crab_biomes", 4 | "#angling:ghost_crab_biomes", 5 | "#angling:blue_claw_crab_biomes" 6 | ] 7 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/worldgen/biome/duckweed_biomes.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "minecraft:swamp" 4 | ] 5 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/worldgen/biome/dungeness_crab_biomes.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "minecraft:beach" 4 | ] 5 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/worldgen/biome/ghost_crab_biomes.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "minecraft:mangrove_swamp" 4 | ] 5 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/worldgen/biome/mahi_mahi_spawn_in.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "minecraft:warm_ocean", 4 | "minecraft:lukewarm_ocean", 5 | "minecraft:deep_lukewarm_ocean" 6 | ] 7 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/worldgen/biome/nautilus_spawn_in.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "minecraft:deep_lukewarm_ocean", 4 | "minecraft:deep_ocean" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/worldgen/biome/oyster_reef_biomes.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "minecraft:stony_shore", 4 | "minecraft:snowy_beach", 5 | "minecraft:ocean", 6 | "minecraft:deep_ocean", 7 | "minecraft:cold_ocean", 8 | "minecraft:deep_cold_ocean", 9 | "minecraft:frozen_ocean", 10 | "minecraft:deep_frozen_ocean" 11 | ] 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/worldgen/biome/papyrus_biomes.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "#c:savanna" 4 | ] 5 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/worldgen/biome/sargassum_biomes.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "minecraft:lukewarm_ocean", 4 | "minecraft:deep_lukewarm_ocean" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/worldgen/biome/sea_slug_spawn_in.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "minecraft:warm_ocean" 4 | ] 5 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/worldgen/biome/seahorse_spawn_in.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "minecraft:lukewarm_ocean", 4 | "minecraft:deep_lukewarm_ocean" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/data/angling/tags/worldgen/biome/sunfish_spawn_in.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "minecraft:swamp" 4 | ] 5 | } -------------------------------------------------------------------------------- /src/main/resources/data/minecraft/tags/blocks/dirt.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "angling:wormy_dirt", 4 | "angling:wormy_mud" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/data/minecraft/tags/blocks/mineable/hoe.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "angling:algae", 4 | "angling:duckweed", 5 | "angling:roe" 6 | ] 7 | } -------------------------------------------------------------------------------- /src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "angling:oysters", 4 | "angling:clam", 5 | "angling:starfish", 6 | "angling:dead_starfish" 7 | ] 8 | } -------------------------------------------------------------------------------- /src/main/resources/data/minecraft/tags/blocks/mineable/shovel.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "angling:wormy_dirt", 4 | "angling:wormy_mud" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/data/minecraft/tags/entity_types/axolotl_hunt_targets.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | "angling:sunfish", 4 | "angling:fry", 5 | "angling:nautilus", 6 | "angling:sea_slug", 7 | "angling:crab", 8 | "angling:dongfish", 9 | "angling:catfish", 10 | "angling:seahorse", 11 | "angling:bubble_eye" 12 | ] 13 | } -------------------------------------------------------------------------------- /src/main/resources/fabric.mod.json: -------------------------------------------------------------------------------- 1 | { 2 | "schemaVersion": 1, 3 | "id": "angling", 4 | "version": "${version}", 5 | 6 | "name": "Angling Mod", 7 | "description": "FISH!", 8 | "authors": [ 9 | "EightSidedSquare", 10 | "Diansu", 11 | "Sillvia" 12 | ], 13 | "contact": { 14 | "homepage": "https://eightsidedsquare.com/" 15 | }, 16 | 17 | "license": "CC0-1.0", 18 | "icon": "assets/angling/icon.png", 19 | 20 | "environment": "*", 21 | "entrypoints": { 22 | "main": [ 23 | "com.eightsidedsquare.angling.core.AnglingMod" 24 | ], 25 | "client": [ 26 | "com.eightsidedsquare.angling.client.AnglingClient" 27 | ], 28 | "cardinal-components-entity": [ 29 | "com.eightsidedsquare.angling.cca.AnglingEntityComponents" 30 | ], 31 | "preLaunch": [ 32 | "com.eightsidedsquare.angling.core.AnglingPreLaunch" 33 | ] 34 | }, 35 | "mixins": [ 36 | "angling.mixins.json" 37 | ], 38 | "accessWidener": "angling.accesswidener", 39 | 40 | "depends": { 41 | "fabricloader": ">=0.14.6", 42 | "fabric": "*", 43 | "minecraft": "~1.19", 44 | "java": ">=17", 45 | "geckolib3": ">=3.1.0" 46 | }, 47 | "custom": { 48 | "cardinal-components": [ 49 | "angling:fish_spawning" 50 | ] 51 | }, 52 | "suggests": { 53 | } 54 | } 55 | --------------------------------------------------------------------------------