From 448026448beb2c55ed747a1f41fa99dd2314f268 Mon Sep 17 00:00:00 2001 From: MysticKoko <132279944+MysticKoko@users.noreply.github.com> Date: Mon, 15 Jan 2024 07:33:52 +0200 Subject: [PATCH] Temporarily removed thalassophobia, crab pots, and mantis shrimp Added colors to all new spawn eggs Edited entity loot tables Edited some item tags Fixed seahorse texture issue Fixed seahorse AI issue Removed whale shark glow --- .../fog/ThalassophobiaFogModifier.java | 27 - .../mixin/client/BackgroundRendererMixin.java | 17 - .../model/entity/KarkinosEntityModel.kt | 5 + .../entity/HybridAquaticEntityRenderers.kt | 1 + .../render/entity/KarkinosEntityRenderer.kt | 27 + .../render/entity/WhaleSharkEntityRenderer.kt | 4 - .../loot_tables/entities/crayfish.json | 48 + .../loot_tables/entities/lobster.json | 48 + .../loot/EntityTypeLootTableProvider.kt | 24 + .../entity/HybridAquaticEntityTypes.kt | 7 + .../aquatic/entity/critter/KarkinosEntity.kt | 81 ++ .../aquatic/entity/fish/SeahorseEntity.kt | 44 - .../animations/karkinos.animation.json | 1043 +++++++++++++++++ .../hybrid-aquatic/geo/karkinos.geo.json | 183 +++ .../textures/entity/karkinos.png | Bin 0 -> 4858 bytes .../textures/entity/seahorse_blue.png | Bin 506 -> 515 bytes .../textures/entity/seahorse_green.png | Bin 495 -> 494 bytes .../textures/entity/seahorse_orange.png | Bin 490 -> 508 bytes .../textures/entity/seahorse_pink.png | Bin 487 -> 487 bytes .../textures/entity/seahorse_purple.png | Bin 518 -> 523 bytes .../textures/entity/seahorse_yellow.png | Bin 483 -> 496 bytes .../textures/entity/whale_shark_glowmask.png | Bin 2461 -> 0 bytes 22 files changed, 1467 insertions(+), 92 deletions(-) delete mode 100644 src/client/java/dev/hybridlabs/aquatic/fog/ThalassophobiaFogModifier.java create mode 100644 src/client/kotlin/dev/hybridlabs/aquatic/client/model/entity/KarkinosEntityModel.kt create mode 100644 src/client/kotlin/dev/hybridlabs/aquatic/client/render/entity/KarkinosEntityRenderer.kt create mode 100644 src/generated/resources/data/hybrid-aquatic/loot_tables/entities/crayfish.json create mode 100644 src/generated/resources/data/hybrid-aquatic/loot_tables/entities/lobster.json create mode 100644 src/main/kotlin/dev/hybridlabs/aquatic/entity/critter/KarkinosEntity.kt create mode 100644 src/main/resources/assets/hybrid-aquatic/animations/karkinos.animation.json create mode 100644 src/main/resources/assets/hybrid-aquatic/geo/karkinos.geo.json create mode 100644 src/main/resources/assets/hybrid-aquatic/textures/entity/karkinos.png delete mode 100644 src/main/resources/assets/hybrid-aquatic/textures/entity/whale_shark_glowmask.png diff --git a/src/client/java/dev/hybridlabs/aquatic/fog/ThalassophobiaFogModifier.java b/src/client/java/dev/hybridlabs/aquatic/fog/ThalassophobiaFogModifier.java deleted file mode 100644 index b4164d39f..000000000 --- a/src/client/java/dev/hybridlabs/aquatic/fog/ThalassophobiaFogModifier.java +++ /dev/null @@ -1,27 +0,0 @@ -package dev.hybridlabs.aquatic.fog; - -import dev.hybridlabs.aquatic.effect.HybridAquaticStatusEffects; -import net.minecraft.client.render.BackgroundRenderer; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.effect.StatusEffect; -import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.util.math.MathHelper; - -public class ThalassophobiaFogModifier implements BackgroundRenderer.StatusEffectFogModifier { - @Override - public StatusEffect getStatusEffect() { - return HybridAquaticStatusEffects.INSTANCE.getTHALASSOPHOBIA(); - } - - @Override - public void applyStartEndModifier(BackgroundRenderer.FogData fogData, LivingEntity entity, StatusEffectInstance effect, float viewDistance, float tickDelta) { - float f = effect.isInfinite() ? 5.0F : MathHelper.lerp(Math.min(1.0F, (float)effect.getDuration() / 20.0F), viewDistance, 5.0F); - if (fogData.fogType == BackgroundRenderer.FogType.FOG_SKY) { - fogData.fogStart = 0.0F; - fogData.fogEnd = f * 0.8F; - } else { - fogData.fogStart = f * 0.25F; - fogData.fogEnd = f; - } - } -} diff --git a/src/client/java/dev/hybridlabs/aquatic/mixin/client/BackgroundRendererMixin.java b/src/client/java/dev/hybridlabs/aquatic/mixin/client/BackgroundRendererMixin.java index 5cb3987aa..cd09d9c05 100644 --- a/src/client/java/dev/hybridlabs/aquatic/mixin/client/BackgroundRendererMixin.java +++ b/src/client/java/dev/hybridlabs/aquatic/mixin/client/BackgroundRendererMixin.java @@ -1,28 +1,18 @@ package dev.hybridlabs.aquatic.mixin.client; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Lists; -import dev.hybridlabs.aquatic.fog.ThalassophobiaFogModifier; import dev.hybridlabs.aquatic.utils.MeasurementUtils; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.render.BackgroundRenderer; -import net.minecraft.client.render.BackgroundRenderer.BlindnessFogModifier; -import net.minecraft.client.render.BackgroundRenderer.DarknessFogModifier; import net.minecraft.client.render.Camera; import net.minecraft.client.render.CameraSubmersionType; import net.minecraft.client.render.FogShape; import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.effect.StatusEffect; -import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.registry.tag.BiomeTags; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; import net.minecraft.world.biome.Biome; -import dev.hybridlabs.aquatic.effect.HybridAquaticStatusEffects; import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -36,13 +26,6 @@ public class BackgroundRendererMixin { @Shadow private static float red, green, blue; @Mutable @Final @Shadow private static List FOG_MODIFIERS; - @Inject(method = "", at = @At("TAIL")) - private static void hybrid$initInject(CallbackInfo ci) { - List tempList = FOG_MODIFIERS; - tempList.add(new ThalassophobiaFogModifier()); - FOG_MODIFIERS = tempList; - System.out.println(FOG_MODIFIERS); - } // @Inject(method = "render", at=@At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;clearColor(FFFF)V"), locals = LocalCapture.CAPTURE_FAILHARD) // private static void hybrid$fogColor(Camera camera, float tickDelta, ClientWorld world, int viewDistance, float skyDarkness, CallbackInfo ci, CameraSubmersionType cameraSubmersionType, Entity entity) { diff --git a/src/client/kotlin/dev/hybridlabs/aquatic/client/model/entity/KarkinosEntityModel.kt b/src/client/kotlin/dev/hybridlabs/aquatic/client/model/entity/KarkinosEntityModel.kt new file mode 100644 index 000000000..465c3ba93 --- /dev/null +++ b/src/client/kotlin/dev/hybridlabs/aquatic/client/model/entity/KarkinosEntityModel.kt @@ -0,0 +1,5 @@ +package dev.hybridlabs.aquatic.client.model.entity + +import dev.hybridlabs.aquatic.entity.critter.HybridAquaticCritterEntity + +class KarkinosEntityModel : HybridAquaticCritterEntityModel("karkinos") \ No newline at end of file diff --git a/src/client/kotlin/dev/hybridlabs/aquatic/client/render/entity/HybridAquaticEntityRenderers.kt b/src/client/kotlin/dev/hybridlabs/aquatic/client/render/entity/HybridAquaticEntityRenderers.kt index eeac33757..0e63bb8b8 100644 --- a/src/client/kotlin/dev/hybridlabs/aquatic/client/render/entity/HybridAquaticEntityRenderers.kt +++ b/src/client/kotlin/dev/hybridlabs/aquatic/client/render/entity/HybridAquaticEntityRenderers.kt @@ -57,6 +57,7 @@ object HybridAquaticEntityRenderers { //endregion //region critters + val KARKINOS = EntityRendererRegistry.register(HybridAquaticEntityTypes.KARKINOS, ::KarkinosEntityRenderer) val CRAB = EntityRendererRegistry.register(HybridAquaticEntityTypes.CRAB, ::CrabEntityRenderer) val FIDDLER_CRAB = EntityRendererRegistry.register(HybridAquaticEntityTypes.FIDDLER_CRAB, ::FiddlerCrabEntityRenderer) val GHOST_CRAB = EntityRendererRegistry.register(HybridAquaticEntityTypes.GHOST_CRAB, ::GhostCrabEntityRenderer) diff --git a/src/client/kotlin/dev/hybridlabs/aquatic/client/render/entity/KarkinosEntityRenderer.kt b/src/client/kotlin/dev/hybridlabs/aquatic/client/render/entity/KarkinosEntityRenderer.kt new file mode 100644 index 000000000..b99a7af9e --- /dev/null +++ b/src/client/kotlin/dev/hybridlabs/aquatic/client/render/entity/KarkinosEntityRenderer.kt @@ -0,0 +1,27 @@ +package dev.hybridlabs.aquatic.client.render.entity + +import dev.hybridlabs.aquatic.client.model.entity.KarkinosEntityModel +import dev.hybridlabs.aquatic.entity.critter.HybridAquaticCritterEntity +import net.minecraft.client.render.VertexConsumerProvider +import net.minecraft.client.render.entity.EntityRendererFactory.Context +import net.minecraft.client.util.math.MatrixStack +import software.bernie.geckolib.renderer.GeoEntityRenderer + +class KarkinosEntityRenderer(context: Context) : GeoEntityRenderer(context, KarkinosEntityModel()) { + override fun render( + entity: HybridAquaticCritterEntity?, + entityYaw: Float, + partialTick: Float, + poseStack: MatrixStack?, + bufferSource: VertexConsumerProvider?, + packedLight: Int + ) { + val size = HybridAquaticCritterEntity.getScaleAdjustment(entity!!, 0.05f) + poseStack!!.scale(size, size, size) + super.render(entity, entityYaw, partialTick, poseStack, bufferSource, packedLight) + } + + override fun getMotionAnimThreshold(animatable: HybridAquaticCritterEntity?): Float { + return 0.0025f + } +} \ No newline at end of file diff --git a/src/client/kotlin/dev/hybridlabs/aquatic/client/render/entity/WhaleSharkEntityRenderer.kt b/src/client/kotlin/dev/hybridlabs/aquatic/client/render/entity/WhaleSharkEntityRenderer.kt index d4a6a38f9..a8640263a 100644 --- a/src/client/kotlin/dev/hybridlabs/aquatic/client/render/entity/WhaleSharkEntityRenderer.kt +++ b/src/client/kotlin/dev/hybridlabs/aquatic/client/render/entity/WhaleSharkEntityRenderer.kt @@ -6,11 +6,7 @@ import net.minecraft.client.render.VertexConsumerProvider import net.minecraft.client.render.entity.EntityRendererFactory.Context import net.minecraft.client.util.math.MatrixStack import software.bernie.geckolib.renderer.GeoEntityRenderer -import software.bernie.geckolib.renderer.layer.AutoGlowingGeoLayer class WhaleSharkEntityRenderer(context: Context) : GeoEntityRenderer(context, WhaleSharkEntityModel()) { - init { - addRenderLayer(AutoGlowingGeoLayer(this)) - } override fun render( entity: HybridAquaticSharkEntity?, entityYaw: Float, diff --git a/src/generated/resources/data/hybrid-aquatic/loot_tables/entities/crayfish.json b/src/generated/resources/data/hybrid-aquatic/loot_tables/entities/crayfish.json new file mode 100644 index 000000000..036d1bdc9 --- /dev/null +++ b/src/generated/resources/data/hybrid-aquatic/loot_tables/entities/crayfish.json @@ -0,0 +1,48 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "conditions": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "flags": { + "is_on_fire": true + } + } + } + ], + "function": "minecraft:furnace_smelt" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + }, + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 2.0, + "min": 1.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "hybrid-aquatic:crab_claw" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/hybrid-aquatic/loot_tables/entities/lobster.json b/src/generated/resources/data/hybrid-aquatic/loot_tables/entities/lobster.json new file mode 100644 index 000000000..036d1bdc9 --- /dev/null +++ b/src/generated/resources/data/hybrid-aquatic/loot_tables/entities/lobster.json @@ -0,0 +1,48 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "conditions": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "flags": { + "is_on_fire": true + } + } + } + ], + "function": "minecraft:furnace_smelt" + }, + { + "count": { + "type": "minecraft:uniform", + "max": 1.0, + "min": 0.0 + }, + "function": "minecraft:looting_enchant" + }, + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 2.0, + "min": 1.0 + }, + "function": "minecraft:set_count" + } + ], + "name": "hybrid-aquatic:crab_claw" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/kotlin/dev/hybridlabs/aquatic/data/server/loot/EntityTypeLootTableProvider.kt b/src/main/kotlin/dev/hybridlabs/aquatic/data/server/loot/EntityTypeLootTableProvider.kt index 06579dadd..a3de0d43c 100644 --- a/src/main/kotlin/dev/hybridlabs/aquatic/data/server/loot/EntityTypeLootTableProvider.kt +++ b/src/main/kotlin/dev/hybridlabs/aquatic/data/server/loot/EntityTypeLootTableProvider.kt @@ -152,6 +152,30 @@ class EntityTypeLootTableProvider(output: FabricDataOutput) : SimpleFabricLootTa ) } + export(exporter, HybridAquaticEntityTypes.LOBSTER) { + pool( + LootPool.builder() + .with( + ItemEntry.builder(HybridAquaticItems.CRAB_CLAW) + .apply(FurnaceSmeltLootFunction.builder().conditionally(EntityPropertiesLootCondition.builder(LootContext.EntityTarget.THIS, NEEDS_ENTITY_ON_FIRE))) + .apply(LootingEnchantLootFunction.builder(UniformLootNumberProvider.create(0.0F, 1.0F))) + .apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(1.0F, 2.0F))) + ) + ) + } + + export(exporter, HybridAquaticEntityTypes.CRAYFISH) { + pool( + LootPool.builder() + .with( + ItemEntry.builder(HybridAquaticItems.CRAB_CLAW) + .apply(FurnaceSmeltLootFunction.builder().conditionally(EntityPropertiesLootCondition.builder(LootContext.EntityTarget.THIS, NEEDS_ENTITY_ON_FIRE))) + .apply(LootingEnchantLootFunction.builder(UniformLootNumberProvider.create(0.0F, 1.0F))) + .apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(1.0F, 2.0F))) + ) + ) + } + // cephalopods export(exporter, HybridAquaticEntityTypes.VAMPIRE_SQUID) { pool( diff --git a/src/main/kotlin/dev/hybridlabs/aquatic/entity/HybridAquaticEntityTypes.kt b/src/main/kotlin/dev/hybridlabs/aquatic/entity/HybridAquaticEntityTypes.kt index 5579574e0..05bbf2c11 100644 --- a/src/main/kotlin/dev/hybridlabs/aquatic/entity/HybridAquaticEntityTypes.kt +++ b/src/main/kotlin/dev/hybridlabs/aquatic/entity/HybridAquaticEntityTypes.kt @@ -382,6 +382,13 @@ object HybridAquaticEntityTypes { YetiCrabEntity.createMobAttributes() ) + val KARKINOS = registerCritter( + "karkinos", + ::KarkinosEntity, + EntityDimensions.fixed(2.25f, 1.25f), + KarkinosEntity.createMobAttributes() + ) + //critters diff --git a/src/main/kotlin/dev/hybridlabs/aquatic/entity/critter/KarkinosEntity.kt b/src/main/kotlin/dev/hybridlabs/aquatic/entity/critter/KarkinosEntity.kt new file mode 100644 index 000000000..e26c61ad6 --- /dev/null +++ b/src/main/kotlin/dev/hybridlabs/aquatic/entity/critter/KarkinosEntity.kt @@ -0,0 +1,81 @@ +package dev.hybridlabs.aquatic.entity.critter + +import net.minecraft.enchantment.EnchantmentHelper +import net.minecraft.enchantment.Enchantments +import net.minecraft.entity.EntityType +import net.minecraft.entity.attribute.DefaultAttributeContainer +import net.minecraft.entity.attribute.EntityAttributes +import net.minecraft.entity.mob.WaterCreatureEntity +import net.minecraft.entity.player.PlayerEntity +import net.minecraft.world.Difficulty +import net.minecraft.world.World +import software.bernie.geckolib.core.animatable.GeoAnimatable +import software.bernie.geckolib.core.animation.AnimationState +import software.bernie.geckolib.core.`object`.PlayState + +class KarkinosEntity(entityType: EntityType, world: World) : + HybridAquaticCrabEntity(entityType, world) { + + private var isFlipped: Boolean = false + private var flipTimer: Int = 0 + + companion object { + fun createMobAttributes(): DefaultAttributeContainer.Builder { + return WaterCreatureEntity.createMobAttributes() + .add(EntityAttributes.GENERIC_MAX_HEALTH, 100.0) + .add(EntityAttributes.GENERIC_MOVEMENT_SPEED, 0.6) + .add(EntityAttributes.GENERIC_ATTACK_DAMAGE, 4.0) + .add(EntityAttributes.GENERIC_FOLLOW_RANGE, 32.0) + .add(EntityAttributes.GENERIC_KNOCKBACK_RESISTANCE, 100.0) + } + } + + private fun beFlipped() { + isFlipped = true + flipTimer = 100 + } + + override fun damage(source: net.minecraft.entity.damage.DamageSource?, amount: Float): Boolean { + val damaged = super.damage(source, amount) + + if (damaged && source?.source is PlayerEntity && !isFlipped) { + val player = source.source as PlayerEntity + val heldItem = player.mainHandStack + + if (EnchantmentHelper.getLevel(Enchantments.BANE_OF_ARTHROPODS, heldItem) > 2 || + (EnchantmentHelper.getLevel(Enchantments.RIPTIDE, heldItem) > 0) + ) { + beFlipped() + } + } + + return damaged + } + + override fun checkDespawn() { + if (world.difficulty == Difficulty.PEACEFUL && this.isDisallowedInPeaceful) { + discard() + } else { + despawnCounter = 0 + } + } + + override fun isPushable(): Boolean = + this.isFlipped + + + + override fun predicate(event: AnimationState): PlayState { + if (isFlipped) { + event.controller.setAnimation(FLIPPED_ANIMATION) + return PlayState.CONTINUE + } + + return super.predicate(event) + } + + + override fun getMovementSpeed(): Float { + return if (isFlipped) 0.0f else super.getMovementSpeed() + } +} \ No newline at end of file diff --git a/src/main/kotlin/dev/hybridlabs/aquatic/entity/fish/SeahorseEntity.kt b/src/main/kotlin/dev/hybridlabs/aquatic/entity/fish/SeahorseEntity.kt index 36bf11686..aad00bab1 100644 --- a/src/main/kotlin/dev/hybridlabs/aquatic/entity/fish/SeahorseEntity.kt +++ b/src/main/kotlin/dev/hybridlabs/aquatic/entity/fish/SeahorseEntity.kt @@ -4,15 +4,11 @@ import net.minecraft.entity.EntityType import net.minecraft.entity.attribute.DefaultAttributeContainer import net.minecraft.entity.attribute.EntityAttributes import net.minecraft.entity.mob.WaterCreatureEntity -import net.minecraft.registry.tag.BlockTags -import net.minecraft.util.math.BlockPos import net.minecraft.world.World class SeahorseEntity(entityType: EntityType, world: World) : HybridAquaticFishEntity(entityType, world, 6) { - private var targetCoralPos: BlockPos? = null - companion object { fun createMobAttributes(): DefaultAttributeContainer.Builder { return WaterCreatureEntity.createMobAttributes() @@ -28,44 +24,4 @@ class SeahorseEntity(entityType: EntityType, world: World) : override fun getMinSize(): Int { return -5 } - - override fun tick() { - super.tick() - - if (targetCoralPos == null || world.getBlockState(targetCoralPos).isIn(BlockTags.CORAL_PLANTS)) { - targetCoralPos = findNearbyCoralBlock() - } - - if (targetCoralPos != null) { - val distanceToCoral = distanceTo(targetCoralPos!!) - - if (distanceToCoral > 5.0) { - navigateToCoral(targetCoralPos!!) - } - } - } - - private fun navigateToCoral(coralBlockPos: BlockPos) { - this.navigation.startMovingTo(coralBlockPos.x.toDouble(), coralBlockPos.y.toDouble(), coralBlockPos.z.toDouble(), this.getAttributeValue(EntityAttributes.GENERIC_MOVEMENT_SPEED)) - } - - private fun findNearbyCoralBlock(): BlockPos? { - for (i in -16..16) { - for (j in -16..16) { - for (k in -16..16) { - val blockPos = BlockPos((x + i).toInt(), (y + j).toInt(), (z + k).toInt()) - val blockState = world.getBlockState(blockPos) - - if (blockState.isIn(BlockTags.CORAL_PLANTS)) { - return blockPos - } - } - } - } - return null - } - - private fun distanceTo(pos: BlockPos): Double { - return this.blockPos.getSquaredDistance(pos.x.toDouble(), pos.y.toDouble(), pos.z.toDouble()) - } } \ No newline at end of file diff --git a/src/main/resources/assets/hybrid-aquatic/animations/karkinos.animation.json b/src/main/resources/assets/hybrid-aquatic/animations/karkinos.animation.json new file mode 100644 index 000000000..8090bd4e5 --- /dev/null +++ b/src/main/resources/assets/hybrid-aquatic/animations/karkinos.animation.json @@ -0,0 +1,1043 @@ +{ +"format_version": "1.8.0", +"animations": { +"idle": { +"loop": true, +"animation_length": 3, +"bones": { +"right_arm_1": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"1.5": { +"vector": [0, -5, 0] +}, +"3.0": { +"vector": [0, 0, 0] +} +} +}, +"left_arm_1": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"1.5": { +"vector": [0, 5, 0] +}, +"3.0": { +"vector": [0, 0, 0] +} +} +} +} +}, +"walk": { +"loop": true, +"animation_length": 1, +"bones": { +"right_leg_1": { +"rotation": { +"0.0": { +"vector": [0, 22.5, 0] +}, +"0.25": { +"vector": [0, 0, 22.5] +}, +"0.5": { +"vector": [-22.5, -22.5, 22.5] +}, +"0.75": { +"vector": [0, -22.5, 0] +}, +"1.0": { +"vector": [0, 22.5, 0] +} +} +}, +"left_leg_1": { +"rotation": { +"0.0": { +"vector": [0, -22.5, 0] +}, +"0.25": { +"vector": [0, 0, -22.5] +}, +"0.5": { +"vector": [-22.5, 22.5, -22.5] +}, +"0.75": { +"vector": [0, 22.5, 0] +}, +"1.0": { +"vector": [0, -22.5, 0] +} +} +}, +"right_leg_2": { +"rotation": { +"0.0": { +"vector": [0, -22.5, 0] +}, +"0.25": { +"vector": [0, 0, 0] +}, +"0.5": { +"vector": [0, 0, 22.5] +}, +"0.75": { +"vector": [-22.5, -22.5, 22.5] +}, +"1.0": { +"vector": [0, -22.5, 0] +} +} +}, +"left_leg_2": { +"rotation": { +"0.0": { +"vector": [0, 22.5, 0] +}, +"0.25": { +"vector": [0, 0, 0] +}, +"0.5": { +"vector": [0, 0, -22.5] +}, +"0.75": { +"vector": [-22.5, 22.5, -22.5] +}, +"1.0": { +"vector": [0, 22.5, 0] +} +} +}, +"right_leg_3": { +"rotation": { +"0.0": { +"vector": [0, -45, 22.5] +}, +"0.25": { +"vector": [0, -45, 0] +}, +"0.5": { +"vector": [0, 0, 0] +}, +"0.75": { +"vector": [-22.5, -22.5, 22.5] +}, +"1.0": { +"vector": [0, -45, 22.5] +} +} +}, +"left_leg_3": { +"rotation": { +"0.0": { +"vector": [0, 45, -22.5] +}, +"0.25": { +"vector": [0, 45, 0] +}, +"0.5": { +"vector": [0, 0, 0] +}, +"0.75": { +"vector": [-22.5, 22.5, -22.5] +}, +"1.0": { +"vector": [0, 45, -22.5] +} +} +}, +"right_leg_4": { +"rotation": { +"0.0": { +"vector": [20.94102, -26.71053, 30.36119] +}, +"0.25": { +"vector": [9.00717, -46.79519, 24.14867] +}, +"0.5": { +"vector": [0, -45, 0] +}, +"0.75": { +"vector": [0, -22.5, 0] +}, +"1.0": { +"vector": [20.94102, -26.71053, 30.36119] +} +} +}, +"left_leg_4": { +"rotation": { +"0.0": { +"vector": [20.94102, 26.71053, -30.36119] +}, +"0.25": { +"vector": [9.00717, 46.79519, -24.14867] +}, +"0.5": { +"vector": [0, 45, 0] +}, +"0.75": { +"vector": [0, 22.5, 0] +}, +"1.0": { +"vector": [20.94102, 26.71053, -30.36119] +} +} +}, +"left_arm_2": { +"rotation": { +"0.0": { +"vector": [0, 22.5, 0] +}, +"0.5": { +"vector": [0, 15, 0] +}, +"1.0": { +"vector": [0, 22.5, 0] +} +} +}, +"right_arm_2": { +"rotation": { +"0.0": { +"vector": [0, -22.5, 0] +}, +"0.5": { +"vector": [0, -15, 0] +}, +"1.0": { +"vector": [0, -22.5, 0] +} +} +}, +"body": { +"rotation": { +"0.0": { +"vector": [-2.5, 0, 0] +}, +"0.5": { +"vector": [0, 0, 0] +}, +"1.0": { +"vector": [-2.5, 0, 0] +} +} +} +} +}, +"attack_left": { +"loop": true, +"animation_length": 1, +"bones": { +"body": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.5": { +"vector": [0, -5, 0] +}, +"0.75": { +"vector": [0, 5, 0] +}, +"1.0": { +"vector": [0, 0, 0] +} +} +}, +"left_arm_1": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.5417": { +"vector": [0, -35, 0] +}, +"0.75": { +"vector": [7.5, 0, 0] +}, +"1.0": { +"vector": [0, 0, 0] +} +} +}, +"left_arm_2": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.5417": { +"vector": [0, 5, 0] +}, +"0.75": { +"vector": [2.5, -15, 0] +}, +"1.0": { +"vector": [0, 0, 0] +} +} +}, +"left_claw": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.5": { +"vector": [0, 0, -45] +}, +"0.75": { +"vector": [0, 0, 0] +}, +"1.0": { +"vector": [0, 0, 0] +} +} +} +} +}, +"attack_right": { +"loop": true, +"animation_length": 1, +"bones": { +"body": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.5": { +"vector": [0, 5, 0] +}, +"0.75": { +"vector": [0, -5, 0] +}, +"1.0": { +"vector": [0, 0, 0] +} +} +}, +"right_arm_1": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.5417": { +"vector": [0, 35, 0] +}, +"0.75": { +"vector": [7.5, 0, 0] +}, +"1.0": { +"vector": [0, 0, 0] +} +} +}, +"right_arm_2": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.5417": { +"vector": [0, -5, 0] +}, +"0.75": { +"vector": [2.5, 15, 0] +}, +"1.0": { +"vector": [0, 0, 0] +} +} +}, +"right_claw": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.5": { +"vector": [0, 0, 45] +}, +"0.75": { +"vector": [0, 0, 0] +}, +"1.0": { +"vector": [0, 0, 0] +} +} +} +} +}, +"spit": { +"loop": true, +"animation_length": 1, +"bones": { +"body": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.3333": { +"vector": [5, 0, 0] +}, +"1.0": { +"vector": [0, 0, 0] +} +} +}, +"left_arm_1": { +"rotation": { +"0.0": { +"vector": [0, 22.5, 0] +}, +"0.3333": { +"vector": [0, -22.5, 0] +}, +"1.0": { +"vector": [0, 22.5, 0] +} +} +}, +"left_leg_2": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.3333": { +"vector": [-5, 0, 0] +}, +"1.0": { +"vector": [0, 0, 0] +} +} +}, +"left_leg_3": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.3333": { +"vector": [-8.5168, 0.34836, 7.67626] +}, +"1.0": { +"vector": [0, 0, 0] +} +} +}, +"left_leg_4": { +"rotation": { +"0.0": { +"vector": [0, 0, 25.30064] +}, +"0.3333": { +"vector": [-26.3261, 2.36489, 25.30064] +}, +"1.0": { +"vector": [0, 0, 25.30064] +} +} +}, +"left_mouthpiece": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.3333": { +"vector": [0, -67.5, 0] +}, +"1.0": { +"vector": [0, 0, 0] +} +} +}, +"right_arm_1": { +"rotation": { +"0.0": { +"vector": [0, -22.5, 0] +}, +"0.3333": { +"vector": [0, 22.5, 0] +}, +"1.0": { +"vector": [0, -22.5, 0] +} +} +}, +"right_leg_2": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.3333": { +"vector": [-5, 0, 0] +}, +"1.0": { +"vector": [0, 0, 0] +} +} +}, +"right_leg_3": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.3333": { +"vector": [-8.5168, -0.34836, -7.67626] +}, +"1.0": { +"vector": [0, 0, 0] +} +} +}, +"right_leg_4": { +"rotation": { +"0.0": { +"vector": [0, 0, -25.30064] +}, +"0.3333": { +"vector": [-26.3261, -2.36489, -25.30064] +}, +"1.0": { +"vector": [0, 0, -25.30064] +} +} +}, +"right_mouthpiece": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.3333": { +"vector": [0, 67.5, 0] +}, +"1.0": { +"vector": [0, 0, 0] +} +} +} +} +}, +"block": { +"loop": true, +"animation_length": 2, +"bones": { +"left_arm_2": { +"rotation": { +"0.0": { +"vector": [57.04902, 21.55151, 59.26162] +}, +"1.0": { +"vector": [48.48527, 18.51654, 49.82228] +}, +"2.0": { +"vector": [57.04902, 21.55151, 59.26162] +} +} +}, +"right_arm_1": { +"rotation": { +"vector": [0, -22.5, 0] +} +}, +"right_arm_2": { +"rotation": { +"0.0": { +"vector": [32.67199, -9.17273, -35.40187] +}, +"1.0": { +"vector": [29.36799, -4.88529, -31.21432] +}, +"2.0": { +"vector": [32.67199, -9.17273, -35.40187] +} +} +} +} +}, +"flipped": { +"loop": true, +"animation_length": 0.5, +"bones": { +"body": { +"rotation": { +"0.0": { +"vector": [-170.00933, 0.43399, -2.46207] +}, +"0.25": { +"vector": [-170.00933, -0.43399, 2.46207] +}, +"0.5": { +"vector": [-170.00933, 0.43399, -2.46207] +} +}, +"position": { +"vector": [0, -3.5, 0] +} +}, +"left_arm_1": { +"rotation": { +"0.0": { +"vector": [22.5, 0, 0] +}, +"0.25": { +"vector": [0, 0, 0] +}, +"0.5": { +"vector": [22.5, 0, 0] +} +} +}, +"left_arm_2": { +"rotation": { +"0.0": { +"vector": [-12.5, 0, -22.5] +}, +"0.25": { +"vector": [0, 0, 0] +}, +"0.5": { +"vector": [-12.5, 0, -22.5] +} +} +}, +"left_claw": { +"rotation": { +"0.0": { +"vector": [0, 0, -45] +}, +"0.25": { +"vector": [0, 0, 0] +}, +"0.5": { +"vector": [0, 0, -45] +} +} +}, +"left_leg_2": { +"rotation": { +"0.0": { +"vector": [0, 0, 22.5] +}, +"0.25": { +"vector": [0, 0, 0] +}, +"0.5": { +"vector": [0, 0, 22.5] +} +} +}, +"left_leg_1": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.25": { +"vector": [0, 0, 22.5] +}, +"0.5": { +"vector": [0, 0, 0] +} +} +}, +"left_leg_3": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.25": { +"vector": [0, 0, 22.5] +}, +"0.5": { +"vector": [0, 0, 0] +} +} +}, +"left_leg_4": { +"rotation": { +"0.0": { +"vector": [-54.12437, 14.60696, 58.37563] +}, +"0.25": { +"vector": [0, 0, 0] +}, +"0.5": { +"vector": [-54.12437, 14.60696, 58.37563] +} +} +}, +"left_mouthpiece": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.25": { +"vector": [0, -22.5, 0] +}, +"0.5": { +"vector": [0, 0, 0] +} +} +}, +"right_arm_1": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.25": { +"vector": [22.5, 0, 0] +}, +"0.5": { +"vector": [0, 0, 0] +} +} +}, +"right_arm_2": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.25": { +"vector": [-15, 0, 22.5] +}, +"0.5": { +"vector": [0, 0, 0] +} +} +}, +"right_claw": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.25": { +"vector": [0, 0, 45] +}, +"0.5": { +"vector": [0, 0, 0] +} +} +}, +"right_leg_1": { +"rotation": { +"0.0": { +"vector": [0, 0, -22.5] +}, +"0.25": { +"vector": [0, 0, 0] +}, +"0.5": { +"vector": [0, 0, -22.5] +} +} +}, +"right_leg_2": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.25": { +"vector": [0, 0, -22.5] +}, +"0.5": { +"vector": [0, 0, 0] +} +} +}, +"right_leg_3": { +"rotation": { +"0.0": { +"vector": [0, 0, -22.5] +}, +"0.25": { +"vector": [0, 0, 0] +}, +"0.5": { +"vector": [0, 0, -22.5] +} +} +}, +"right_leg_4": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.25": { +"vector": [-54.12437, -14.60696, -58.37563] +}, +"0.5": { +"vector": [0, 0, 0] +} +} +}, +"right_mouthpiece": { +"rotation": { +"0.0": { +"vector": [0, 22.5, 0] +}, +"0.25": { +"vector": [0, 0, 0] +}, +"0.5": { +"vector": [0, 22.5, 0] +} +} +} +} +}, +"death": { +"loop": "hold_on_last_frame", +"animation_length": 0.75, +"bones": { +"body": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.25": { +"vector": [-5, 0, 0] +}, +"0.75": { +"vector": [0, 0, 0] +} +}, +"position": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.25": { +"vector": [0, 0, 0] +}, +"0.75": { +"vector": [0, -4, 0] +} +} +}, +"left_arm_1": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.75": { +"vector": [0, -22.5, 0] +} +} +}, +"left_arm_2": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.375": { +"vector": [0, 0, 22.5] +}, +"0.75": { +"vector": [0, 0, 0] +} +} +}, +"left_claw": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.375": { +"vector": [0, 0, -45] +}, +"0.75": { +"vector": [0, 0, 0] +} +} +}, +"left_eye": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.375": { +"vector": [0, 0, -22.5] +}, +"0.75": { +"vector": [0, 0, 45] +} +} +}, +"left_leg_2": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.25": { +"vector": [4.99527, -0.21782, -0.0095] +}, +"0.75": { +"vector": [0, 0, -20] +} +} +}, +"left_leg_1": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.25": { +"vector": [5, 0, 2.5] +}, +"0.75": { +"vector": [0, 0, -22.5] +} +} +}, +"left_leg_3": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.25": { +"vector": [6.46247, -0.19537, -4.80035] +}, +"0.75": { +"vector": [0, 0, -22.5] +} +} +}, +"left_leg_4": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.25": { +"vector": [21.32437, 2.472, -19.96582] +}, +"0.75": { +"vector": [40.75099, 5.32056, -42.60557] +} +} +}, +"left_mouthpiece": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.75": { +"vector": [0, -22.5, 0] +} +} +}, +"right_arm_1": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.75": { +"vector": [0, 22.5, 0] +} +} +}, +"right_arm_2": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.375": { +"vector": [0, 0, -22.5] +}, +"0.75": { +"vector": [0, 0, 0] +} +} +}, +"right_claw": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.375": { +"vector": [0, 0, 45] +}, +"0.75": { +"vector": [0, 0, 0] +} +} +}, +"right_eye": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.375": { +"vector": [0, 0, 22.5] +}, +"0.75": { +"vector": [0, 0, -45] +} +} +}, +"right_leg_1": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.25": { +"vector": [5, 0, -2.5] +}, +"0.75": { +"vector": [0, 0, 22.5] +} +} +}, +"right_leg_2": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.25": { +"vector": [4.99527, 0.21782, 0.0095] +}, +"0.75": { +"vector": [0, 0, 20] +} +} +}, +"right_leg_3": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.25": { +"vector": [6.46247, 0.19537, 4.80035] +}, +"0.75": { +"vector": [0, 0, 22.5] +} +} +}, +"right_leg_4": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.25": { +"vector": [21.32437, -2.472, 19.96582] +}, +"0.75": { +"vector": [40.75099, -5.32056, 42.60557] +} +} +}, +"right_mouthpiece": { +"rotation": { +"0.0": { +"vector": [0, 0, 0] +}, +"0.75": { +"vector": [0, 22.5, 0] +} +} +} +} +} +}, +"geckolib_format_version": 2 +} \ No newline at end of file diff --git a/src/main/resources/assets/hybrid-aquatic/geo/karkinos.geo.json b/src/main/resources/assets/hybrid-aquatic/geo/karkinos.geo.json new file mode 100644 index 000000000..4d8a3ab91 --- /dev/null +++ b/src/main/resources/assets/hybrid-aquatic/geo/karkinos.geo.json @@ -0,0 +1,183 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 4, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "body", + "pivot": [0, 9.85685, 1.4562], + "cubes": [ + {"origin": [-16, 6.5, -11], "size": [32, 8, 25], "pivot": [-3, 9, 11.5], "rotation": [-10, 0, 0], "uv": [0, 0]}, + {"origin": [-13, 4, -10.5], "size": [26, 7, 23], "uv": [0, 33]} + ] + }, + { + "name": "left_arm_1", + "parent": "body", + "pivot": [8, 7, -6], + "rotation": [0, -112.5, 0], + "cubes": [ + {"origin": [0, 3, -13.5], "size": [8, 6, 7], "uv": [55, 83]} + ] + }, + { + "name": "left_arm_2", + "parent": "left_arm_1", + "pivot": [0, 8, -14], + "rotation": [0, 45, 0], + "cubes": [ + {"origin": [-10, 1.5, -14], "size": [10, 9, 8], "uv": [0, 63]}, + {"origin": [-20, 4, -13.5], "size": [10, 6, 7], "uv": [36, 63]} + ] + }, + { + "name": "left_claw", + "parent": "left_arm_2", + "pivot": [-10, 5, -10], + "cubes": [ + {"origin": [-18, 3, -12.5], "size": [8, 3, 5], "uv": [75, 47]} + ] + }, + { + "name": "left_eye", + "parent": "body", + "pivot": [1.5, 8.25, -10.5], + "rotation": [22.5, 0, 22.5], + "cubes": [ + {"origin": [-0.09567, 8.46339, -10.41161], "size": [3, 8, 3], "uv": [0, 8]} + ] + }, + { + "name": "left_leg_2", + "parent": "body", + "pivot": [12, 6, 3], + "cubes": [ + {"origin": [12, 0, 2], "size": [11, 8, 4], "uv": [84, 63]} + ] + }, + { + "name": "left_leg_1", + "parent": "body", + "pivot": [12, 7, -1], + "rotation": [0, 22.5, 0], + "cubes": [ + {"origin": [12, 0, -3], "size": [11, 10, 4], "uv": [75, 33]} + ] + }, + { + "name": "left_leg_3", + "parent": "body", + "pivot": [12, 5, 8.5], + "rotation": [0, -22.5, 0], + "cubes": [ + {"origin": [12, 0, 7.5], "size": [11, 7, 4], "uv": [89, 0]} + ] + }, + { + "name": "left_leg_4", + "parent": "body", + "pivot": [8, 4, 11], + "rotation": [0, -67.5, 0], + "cubes": [ + {"origin": [8, 0, 10], "size": [11, 6, 4], "uv": [26, 92]} + ] + }, + { + "name": "left_mouthpiece", + "parent": "body", + "pivot": [4.35, 7, -10], + "cubes": [ + {"origin": [0, 3.9924, -11], "size": [4, 5, 1], "uv": [0, 19]} + ] + }, + { + "name": "right_arm_1", + "parent": "body", + "pivot": [-8, 7, -6], + "rotation": [0, 112.5, 0], + "cubes": [ + {"origin": [-8, 3, -13.5], "size": [8, 6, 7], "uv": [0, 80]} + ] + }, + { + "name": "right_arm_2", + "parent": "right_arm_1", + "pivot": [0, 8, -14], + "rotation": [0, -45, 0], + "cubes": [ + {"origin": [0, 2.5, -14], "size": [7, 7, 8], "uv": [62, 68]}, + {"origin": [7, 4, -13.5], "size": [6, 5, 7], "uv": [0, 93]} + ] + }, + { + "name": "right_claw", + "parent": "right_arm_2", + "pivot": [7, 6, -10], + "cubes": [ + {"origin": [7, 3, -12.5], "size": [5, 3, 5], "uv": [0, 0]} + ] + }, + { + "name": "right_eye", + "parent": "body", + "pivot": [-1.5, 8.25, -10.5], + "rotation": [22.5, 0, -22.5], + "cubes": [ + {"origin": [-2.90433, 8.46339, -10.41161], "size": [3, 8, 3], "uv": [12, 8]} + ] + }, + { + "name": "right_leg_1", + "parent": "body", + "pivot": [-12, 7, -1], + "rotation": [0, -22.5, 0], + "cubes": [ + {"origin": [-23, 0, -3], "size": [11, 10, 4], "uv": [32, 76]} + ] + }, + { + "name": "right_leg_2", + "parent": "body", + "pivot": [-12, 6, 3], + "cubes": [ + {"origin": [-23, 0, 2], "size": [11, 8, 4], "uv": [85, 83]} + ] + }, + { + "name": "right_leg_3", + "parent": "body", + "pivot": [-12, 5, 8.5], + "rotation": [0, 22.5, 0], + "cubes": [ + {"origin": [-23, 0, 7.5], "size": [11, 7, 4], "uv": [89, 11]} + ] + }, + { + "name": "right_leg_4", + "parent": "body", + "pivot": [-8, 4, 11], + "rotation": [0, 67.5, 0], + "cubes": [ + {"origin": [-19, 0, 10], "size": [11, 6, 4], "uv": [81, 95]} + ] + }, + { + "name": "right_mouthpiece", + "parent": "body", + "pivot": [-4.35, 7, -10], + "cubes": [ + {"origin": [-4, 3.9924, -11], "size": [4, 5, 1], "uv": [10, 19]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/hybrid-aquatic/textures/entity/karkinos.png b/src/main/resources/assets/hybrid-aquatic/textures/entity/karkinos.png new file mode 100644 index 0000000000000000000000000000000000000000..5f9db0c5a03ae3cb7e7c95ec78e73ce2b1ca5f54 GIT binary patch literal 4858 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hybrid-aquatic/textures/entity/seahorse_blue.png b/src/main/resources/assets/hybrid-aquatic/textures/entity/seahorse_blue.png index fcf43ae61dd5e122b23df3c5511abe262d51ecef..94e37b6dcaf591d14d04c40ce6aa38434490618a 100644 GIT binary patch delta 489 zcmV7%?6VjFMI#}?7d)3XzHfZGH{m9NQUe3xqm`U-Pp|yIxPdcxk0bn zrfxRqb=xm~_~q^){^35xMFY_KgK?ZX%?ASpPT;Sk=Hhry062jU7)AY4i`)<=@Hw%! zIkC679o}baC-8~fkjM?0dUGQ8IW3VJa=O1&xHhz@H^%}#|NIRkH%r&I!+WOQJUgte zd)+p@yN9@F5PzB_b?RmVNMyI0JB((FrNpmyKx!|F=nuw!EhJTTNN%n=@3fLS_+KTo zw76b#p0|~ecNGE20D8%Ial9w;t#)W`mK#9o;LzL@N9WhEC3OJmW`hrJc2*95`}Jof zC0{?iE#3vA*&^HQ9!MrP9=ivUPRl^G!Skdn6D?m*kz!2x-hqEAPzK`Y{5no=oZR$RQF`&EXt0zvr^JLL0Cgs;gPJ9EF0Y2!$c@~P%c~)l)Ul+_>Hd}|TlR{I fii(PgiVBq{&Ogg^Ps<-W00000NkvXXu0mjf>OSwd delta 480 zcmV<60U!Q@1o{JzB!9t4L_t(oh3%CwYui8=hMx-xCLplEU_s8x;31}3VghOCn1uX^ zP6@_9>EDQ>f%k&vH6_lD_ZW zd%u$)MSn1gwTf78*BReWlKbB-4h1X1N>6$%2Y)eY8LcYk@_z!nW({!W+}PDC`Y!ba@xM(q?aW8z7M#;9>a0^JJQN!5H$( zkKZv+xCqOYc7GzR*R0_+w|IP+EhJvv0VZA)VNA6Qt+L&)w=k!{sP(@}Sb1~hljmb) z?0Xsk@2!>R>bNVutJh4dXxsf!fJt!B-bf4yu->lo`NLM`;jce`Wwzw{^kd;-tjCvG zGU@C~#`hCC`;uPEAsvJFld?>#yrHz5_q`AQRGK_=nw0?5Iu9Y)D%0H;&%YQI(X;kuMuwn*TgMt+^ z7blJu6Yt||=|wGo4rgOeB@Gv2Vhw3If!6d|4+H?D<-o)`YJQ|_=|Wl#I;AE$r6%^< zqkfl`16#VVrHkEa4_mr=qAgu?YwgJ1AnpFZTr=|L2R~I&LYheu?PfWAv0#8a$vGueoZoYnY{P@ z^WKY~Kz}&M6PvNxl1xT3|NQ3iw_riY;-a;-?62CWMfvjawtAIoL-fusa%~i9V+A0Peg5>qY%&ivxPrX?dy@l| zgOJ)NFKs7kLw^M0=Qrt#4$C-uRfH?5uSjebtkuR!;M}S8T_t3>xXRAUwmQzeh=BLj zDs#4fB>w!n4{TN2?n401!S;IB7bL)HOS1c;8@zn?a337W)z9O~!N~FRdoP}XnR%M@+EhoMvlvRqKwD4*s36sQByJHN+~RKOE-w>Lc&|-pS2c* zGhq=dX`>k3KKhZH*o@KbBibmmQJie`gp>C;y8X6iJ8US7a1B^h diff --git a/src/main/resources/assets/hybrid-aquatic/textures/entity/seahorse_orange.png b/src/main/resources/assets/hybrid-aquatic/textures/entity/seahorse_orange.png index ccc19d2a3552722aaaf33df505c09d754742eb46..0a7449eedd6b0bc26ee746b8cb188d21de3dbe66 100644 GIT binary patch delta 482 zcmV<80UiG81N;M!B!9z6L_t(oh3%EUYTG~@$3JIj2>1a!`5e3$4@MfhsKi5|9zy90 z)EV*sp-YzH!DQ)D`T!kbXdj?-$WTf`^a9FcyqHLy^Zo z{l0gE8l0ZFkj2osK{m&Una>kt3=@(##OrpJN5%pFq_kumVP+sFknvIW3%Z^G8ewafXY zt!;San+V7n(Ep6>>6M85&lQ_#*=-5X4y1Q3E`~$p$gH^BP80R!sJi&~O(i79vs?2j zSTE+qWb7R<^B)*{2U%=OHURQY`I6Y13FXKox;H#^16wbFxEKyqapD{+ii@Aohv{3^ zi}|y&{3&e6PQG1QApq-APuPn9N2YxL5u%e1;LiUyKRmq@zs9d0?G-gOH8nLgH8m#u Y1yK*YXo>!W$p8QV07*qoM6N<$g43$)J^%m! delta 464 zcmV;>0Wbdi1L^~iB!96c0wS zbRUbQ9lI?9O2DwXVM79#cijTndgN^dl6+wID)2 zf*_85fkL6UWN_)&K|7cTf?_0#bh#-V;$4$iEi`eapXQ?kfEt!7YH+;K9)AxVF`q`FR1Xy$VcqLH zVlKs<2gOjs@}(xz?GUye1y|IxK@AIPtpT;xz4^CHxdFXu2ar~wkY!Mg#hja^qVo$?U1kc7oRO`+Z_pD z4icq0FGv6oH5t;~weRKq+lMbD+Tb~~7=bRfe3C5}u+-2o{ub z=z9QvMj#5vwAymmi5b+e_|NF(=^k{kjlB360^pwfs6Dj~0=##^MFc2n5}zX-toQ(6 usn7XbZnlZ}@ObvFh>3}biHV7c3Bxz?iMu^Hc+(vK0000cijTndijuMpRQ2>l5{ zaqJ%`6pD+3OUDlCU?K>Lkz1t8P3fR_Cb72A#4XQqxm=R(z4!aR3xS7qukSLOLe42z zj%VWj-P@4hN=V*`oKK5Ux9PQF{vyEC#FzrWEaxCwmjkq-<(Pmg=G0k=DJw z%Rly$7-l)X)Nq*Pgo!IiFq?u|4vbm@My-MUXezFm<$&1~%%<3^c3?I|rrRL^z-$Vo z*$!PBWKwOpx}hRfDFX1=4q!i;Vzb)$Uf=~uU!Gk6p+!i#p$cndQ-f@3V2iD=_)-T% zl>)+x>Jlu_4S%Uh(HES%^Y<0;FRwuk%9%KANwA_ zpAJL;nN(XY-!X?-j`$hfK0f%`k{?7-ApwV-pS9LefIT<(HAv`&iurIXj$CF_%!gy> uh6>$Kp)}is+aC4qV`5@rVq#)q0N@*ib;o7PGS|ES0000^pj9=q7ski|<;gy~{sDaIZO8q`5PRhARCiR?`e z2yr@{zW2WGy-$J&wQAF!3>>t4fp(`AKL7UfLa-u~=s?YyXn)hYWjGN5s|p_zFwSMr zF&XDFtd%Qxu8o>Cp*z2@e$eyBxeRAVW}@sUwQAE>vq8{@#CWbfQ<{@6y8^&-ZFI~e zu>%2DCi(Zf= zkVtb%WVW802}PRgvEcE!q$!W{qR~Bk^n;D=q4>Q~B6=+w@!{C^0nU!h(2xLHzAzW? z>oJFReBKQD>* nZ$2;V6)7nxDJdx_DM|PPQ0ujPa%MC!00000NkvXXu0mjfGiByn delta 492 zcmVvmH? z@DC8tsl#yv>7X~rf#8ryad#>lH{7QF1CYL;GSHPftv{F=e%j^F?N0zUDyNKk<5IK-9c;jH>p}@~eyu0=hFDwNmUeE5g>nVpDeb_0 z>w@;6GxdQo%E!K;^vA6kIyAdd7KZ9TYqsu$E}OMUrI!;StGvv@Fc*|o)sDrz$g@-1^jq(Jynv| z#J?3S(|-sD<&{-hSC^DmR?+hodSniONv8~PNsJaZlx3akqI$#sGB69o+TylUJ5~g~ z7ygVsZ+<5eIhF@AXg*Oi81MY~(HaYg2A>C_wtOhtgAU4kFloD!vE$Z7ZTV0dh2qS2 ipOTW2l9G~=0`LeF*T66h3KPWu0000M+^ z0jBM`=S&8W@UVqjhSAe-~E=4tBFV1>* z9xv+|z3_0U@Umvsv{N)dc`Z`68sF%g|xx>oydU!}DJ9Dp&;KS<(vVTSJtz z0>ou91`#8@0_Y{R4=$QeiaKDo+~k2>K+I;b~a^O}FQp}_d66oO+3PFeKVD6g4O2Nb}za_ccCC_vJmkU9J{k+e8 z&xKxYV6|Aw=l077!HrO&gMwkpt66bxrFq$a8X8ay8%75R7=H~-jpUmByw8P6)v%$J ztW?oa_VYd$AN$Kpz-TNrf`HL9x{^EJa}h9#R{aUB`V-i4BJTr6;d?H8&&6)5!S`Gg zdouz6zUSh;JxX00gpRx1tQ=r;h5({r2iS6g-BydeAPVx^dE)?5n^4TkL55ZhQ*mTe zhWJtkWR(IUiht@7z8CKXqce<&i)dXN2_;!vN%7>|xzOwyT?qkxTPsPiHzS9yMQko@ z+npH@0$RzE1qlFpxdHv*IkwpUe2t}~I&e~(QI3&(Hmw>~i#3{74TZ26qZATn1>mIB zhmtHPv*OBK{uhBPAava2V#k7jQTa1^9KOfeQXE8Cp+W$sou9YX$v{;67Ld)f&39W3 zqWAzHI<5{JvYEEIUT$Q*`<$GdoSdAT902$McjdwLRk`DO00000NkvXXu0mjf3Vzt# diff --git a/src/main/resources/assets/hybrid-aquatic/textures/entity/whale_shark_glowmask.png b/src/main/resources/assets/hybrid-aquatic/textures/entity/whale_shark_glowmask.png deleted file mode 100644 index 57562deae9f9f0a9301a099143bc4d99ace2fc7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2461 zcmchY`#;l*AICp)jZMafwM&N~p=@;LM%Kmd#~^w7Hy)O1b7txi5{7 zYwp@8C8tFin!_}6tHpBL472U4?;r7f|MGsne|kS2@5k%)dfvT^v{zBqQU(A(#o>aT zD*%9YMi8(|VW;^-KMnn{;a%;|0Cj^pTmVq=bg;8^k1yg)!XsGiTEOKDwb#jTrgwr= z8sS(y!i9`w;2QJ&jL$lb6y^?s?myyu<>g!;9--JXvvs?-Bs{_M#2415iQC^q*%G0D zmOXEK#ab+~m#ztg-!@auZ*PnWcUE?H5}$)V`O;~rm%sAY)Z!}%^GSXtIM4bZ73B7U zN+eSImgiMTD4sw7WTe1mLRw&;E*5C zj=Xka2qTrbS>{Czc;qXD)*=j zj_hD|mQ7z#FM12qaGwaw-lVHk8mTl+S`m)h^VlV#;yRe|=i7ik*Q^+t4A)5f%<|wS z!df8V#ZX#d*JKOoWMA`fZP|8Lm-g9y0xMWL9D4@@_%gYQh?l2JXo2}iu{bx20j z2kaL=FbJ-HpR9^mzPuG2CU~L#2Ep$ zo$M6{DD8)zrZxY$)F^wzRX- z5jN=iXz>>au%lF7MkhBHVV|vELUx#g^XNQp;8qfY9Oj(z7et$SE%`r)4 zm}4K&Ld_2OdKAD_4@id}i!UP@Ol!ftu{s|4_nhB#OK*fX9ZY;y9A=*iN>|+z@3aYDt*zzq}IMqog?w{uUkb^^0kd&rV zPegEmU8$AyBMB${cU?%DHWxG#2pLF&xW*&jK94tgyQZSC{$u^c(vMMZD}NcdSF77w zfUT|CZJ1_p40_k2S~<)OO6&`ayj>LaE#k06>grQ)D)?hExf+4qDrm0J*y0%1F0@`} zk#I?9Nx3ZE82D{u8}BUwEs@vX##HV_WIm{i3cdtO+1GvZ_-mF3RSWI4oG^EzuHHx7r1KVlmS4dWUthp~ew*3qz6TKcPh z7%Nbsl&V3?Np9(@iRvOIM5dw*c8wP#-!(S<9q!pxuF4wJ`W+~X3N8+;a0g*Xil(@X zP{h;`4Ak9Zu8SN~7KmSR(9a$GA;Dc9U$~e~< zUs~U=i%s6r|Mnxvfv!28_0H0u)A+Bt>ou}-(W7!SD8zGoD&bZSPLmNsI&yU2=rPLD7$o(o3c{`KZ5TI5PD)b9nH zgs}XQ2OhGJI?ny-QV4&CD6^kSeOY|pjbj9Gr4toPTH+B+*wwzaDkXINQ_J|vY z==_FhSf|${yOZ=7iatpb-9NDNLY_M zMV~V`8S1Q;rWu{HVHvHq!RW+%YHQXHGQ6O4<>EjN^L><)SQ*3gA65k}K<3h&@Kc7p z_n8+-Ks>Q{-uou z#7uS*X0L5YR2?GpD@q15H*$W0sPtE9K9k*1(f_ebmy-JZSw(wGU@w1MbvTE#t2+~r F`d@HFuE+oY