This commit is contained in:
Mya 2023-12-31 00:29:04 +01:00
commit 4ed7d86a71
28 changed files with 634 additions and 127 deletions

View file

@ -13,22 +13,22 @@
<img alt="License (MIT)" src="https://img.shields.io/badge/license-MIT-green.svg">
</p>
<!--
<p align="center">
<img alt="Modrinth Downloads" src="https://img.shields.io/modrinth/dt/Fs6mB0ic?label=Modrinth%20Downloads">
<img alt="CurseForge Downloads" src="https://img.shields.io/curseforge/dt/901062?label=CurseForge%20Downloads">
<img alt="Modrinth Downloads" src="https://img.shields.io/modrinth/dt/mGrSMF7Z?label=Modrinth%20Downloads">
<!--<img alt="CurseForge Downloads" src="https://img.shields.io/curseforge/dt/901062?label=CurseForge%20Downloads">-->
</p>
<p align="center">
<a href="https://modrinth.com/mod/arctic">
<img alt="curseforge" height="40" src="https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/compact/available/modrinth_vector.svg">
<img alt="modrinth" height="40" src="https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/compact/available/modrinth_vector.svg">
</a>
<!--
<a href="https://www.curseforge.com/minecraft/mc-mods/arctic">
<img alt="curseforge" height="40" src="https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/compact/available/curseforge_vector.svg">
</a>
</p>
-->
</p>
<p align="center">
<a href="https://modfest.net/1.20">

View file

@ -36,6 +36,9 @@ dependencies {
// Development Runtime Mods.
modLocalRuntime("maven.modrinth:modmenu:${project.modmenu_version}")
modLocalRuntime("maven.modrinth:wthit:fabric-10.0.1")
modLocalRuntime("maven.modrinth:badpackets:fabric-0.5.4")
}
processResources {

File diff suppressed because one or more lines are too long

View file

@ -1,6 +1,8 @@
package me.theclashfruit.arctic.client;
import me.theclashfruit.arctic.client.entity.penguin.BabyEmperorRenderer;
import me.theclashfruit.arctic.client.entity.penguin.CardboardRenderer;
import me.theclashfruit.arctic.client.entity.seal.SealRenderer;
import me.theclashfruit.arctic.entity.ArcticEntities;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry;
@ -15,5 +17,15 @@ public class ArcticClient implements ClientModInitializer {
ArcticEntities.BABY_EMPEROR,
BabyEmperorRenderer::new
);
EntityRendererRegistry.register(
ArcticEntities.SEAL,
SealRenderer::new
);
EntityRendererRegistry.register(
ArcticEntities.CARDBOARD,
CardboardRenderer::new
);
}
}

View file

@ -0,0 +1,25 @@
package me.theclashfruit.arctic.client.entity.penguin;
import me.theclashfruit.arctic.entity.penguin.BabyEmperorEntity;
import me.theclashfruit.arctic.entity.penguin.CardboardEntity;
import net.minecraft.util.Identifier;
import software.bernie.geckolib.model.GeoModel;
import static me.theclashfruit.arctic.Arctic.MOD_ID;
public class CardboardModel extends GeoModel<CardboardEntity> {
@Override
public Identifier getModelResource(CardboardEntity animatable) {
return new Identifier(MOD_ID, "geo/penguin/cardboard.geo.json");
}
@Override
public Identifier getTextureResource(CardboardEntity animatable) {
return new Identifier(MOD_ID, "textures/entity/penguin/hululu.png");
}
@Override
public Identifier getAnimationResource(CardboardEntity animatable) {
return new Identifier(MOD_ID, "animations/penguin/cardboard.animation.json");
}
}

View file

@ -0,0 +1,20 @@
package me.theclashfruit.arctic.client.entity.penguin;
import me.theclashfruit.arctic.entity.penguin.BabyEmperorEntity;
import me.theclashfruit.arctic.entity.penguin.CardboardEntity;
import net.minecraft.client.render.entity.EntityRendererFactory;
import net.minecraft.util.Identifier;
import software.bernie.geckolib.renderer.GeoEntityRenderer;
import static me.theclashfruit.arctic.Arctic.MOD_ID;
public class CardboardRenderer extends GeoEntityRenderer<CardboardEntity> {
public CardboardRenderer(EntityRendererFactory.Context ctx) {
super(ctx, new CardboardModel());
}
@Override
public Identifier getTextureLocation(CardboardEntity animatable) {
return new Identifier(MOD_ID, "textures/entity/penguin/hululu.png");
}
}

View file

@ -0,0 +1,25 @@
package me.theclashfruit.arctic.client.entity.seal;
import me.theclashfruit.arctic.entity.penguin.BabyEmperorEntity;
import me.theclashfruit.arctic.entity.seal.SealEntity;
import net.minecraft.util.Identifier;
import software.bernie.geckolib.model.GeoModel;
import static me.theclashfruit.arctic.Arctic.MOD_ID;
public class SealModel extends GeoModel<SealEntity> {
@Override
public Identifier getModelResource(SealEntity animatable) {
return new Identifier(MOD_ID, "geo/seal/seal.geo.json");
}
@Override
public Identifier getTextureResource(SealEntity animatable) {
return new Identifier(MOD_ID, "textures/entity/seal/seal.png");
}
@Override
public Identifier getAnimationResource(SealEntity animatable) {
return new Identifier(MOD_ID, "animations/seal/seal.animation.json");
}
}

View file

@ -0,0 +1,31 @@
package me.theclashfruit.arctic.client.entity.seal;
import me.theclashfruit.arctic.entity.penguin.BabyEmperorEntity;
import me.theclashfruit.arctic.entity.seal.SealEntity;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.entity.EntityRendererFactory;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.Identifier;
import software.bernie.geckolib.renderer.GeoEntityRenderer;
import static me.theclashfruit.arctic.Arctic.MOD_ID;
public class SealRenderer extends GeoEntityRenderer<SealEntity> {
public SealRenderer(EntityRendererFactory.Context ctx) {
super(ctx, new SealModel());
}
@Override
public Identifier getTextureLocation(SealEntity animatable) {
return new Identifier(MOD_ID, "textures/entity/seal/seal.png");
}
@Override
public void render(SealEntity entity, float entityYaw, float partialTick, MatrixStack poseStack, VertexConsumerProvider bufferSource, int packedLight) {
if(entity.isBaby()) {
poseStack.scale(0.5f, 0.5f, 0.5f);
}
super.render(entity, entityYaw, partialTick, poseStack, bufferSource, packedLight);
}
}

View file

@ -1,6 +1,8 @@
package me.theclashfruit.arctic.entity;
import me.theclashfruit.arctic.entity.penguin.BabyEmperorEntity;
import me.theclashfruit.arctic.entity.penguin.CardboardEntity;
import me.theclashfruit.arctic.entity.seal.SealEntity;
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry;
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder;
import net.minecraft.entity.EntityDimensions;
@ -15,7 +17,19 @@ import static me.theclashfruit.arctic.Arctic.MOD_ID;
public class ArcticEntities {
public static final EntityType<BabyEmperorEntity> BABY_EMPEROR = FabricEntityTypeBuilder
.create(SpawnGroup.CREATURE, BabyEmperorEntity::new)
.dimensions(EntityDimensions.fixed(0.8f, 1f))
.dimensions(EntityDimensions.fixed(0.75f, 1f))
.build();
public static final EntityType<SealEntity> SEAL = FabricEntityTypeBuilder
.create(SpawnGroup.CREATURE, SealEntity::new)
.dimensions(EntityDimensions.fixed(1f, 0.5f))
.build();
// WAHT?
public static final EntityType<CardboardEntity> CARDBOARD = FabricEntityTypeBuilder
.create(SpawnGroup.CREATURE, CardboardEntity::new)
.dimensions(EntityDimensions.fixed(0.7f, 2f))
.build();
public static void registerEntities() {
@ -25,9 +39,33 @@ public class ArcticEntities {
BABY_EMPEROR
);
Registry.register(
Registries.ENTITY_TYPE,
new Identifier(MOD_ID, "seal"),
SEAL
);
FabricDefaultAttributeRegistry.register(
ArcticEntities.BABY_EMPEROR,
BabyEmperorEntity.createBabyEmperorAttributes()
);
FabricDefaultAttributeRegistry.register(
ArcticEntities.SEAL,
SealEntity.createSealAttributes()
);
// WAHT?
Registry.register(
Registries.ENTITY_TYPE,
new Identifier(MOD_ID, "cardboard"),
CARDBOARD
);
FabricDefaultAttributeRegistry.register(
ArcticEntities.CARDBOARD,
CardboardEntity.createCardboardAttributes()
);
}
}

View file

@ -1,14 +1,26 @@
package me.theclashfruit.arctic.entity.penguin;
import me.theclashfruit.arctic.entity.seal.SealEntity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.SpawnReason;
import net.minecraft.entity.ai.goal.*;
import net.minecraft.entity.attribute.DefaultAttributeContainer;
import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.entity.passive.AnimalEntity;
import net.minecraft.entity.passive.PassiveEntity;
import net.minecraft.entity.passive.PolarBearEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Items;
import net.minecraft.recipe.Ingredient;
import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.registry.tag.BiomeTags;
import net.minecraft.registry.tag.BlockTags;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.random.Random;
import net.minecraft.world.World;
import net.minecraft.world.WorldAccess;
import net.minecraft.world.biome.Biome;
import org.jetbrains.annotations.Nullable;
import software.bernie.geckolib.animatable.GeoEntity;
import software.bernie.geckolib.core.animatable.GeoAnimatable;
@ -42,17 +54,31 @@ public class BabyEmperorEntity extends AnimalEntity implements GeoEntity {
@Override
protected void initGoals() {
this.goalSelector.add(0, new SwimGoal(this));
this.goalSelector.add(0, new EscapeDangerGoal(this, 0.65D));
this.goalSelector.add(1, new LookAroundGoal(this));
this.goalSelector.add(1, new WanderAroundGoal(this, 0.55D));
this.goalSelector.add(2, new LookAtEntityGoal(this, PlayerEntity.class, 6.0F));
this.goalSelector.add(1, new EscapeDangerGoal(this, 1.0));
// this.goalSelector.add(3, new AnimalMateGoal(this, 0.85));
// this.goalSelector.add(4, new TemptGoal(this, 1.2, Ingredient.ofItems(Items.SALMON), false));
// this.goalSelector.add(5, new FollowParentGoal(this, 1.1));
this.goalSelector.add(6, new WanderAroundGoal(this, 0.85));
this.goalSelector.add(7, new LookAtEntityGoal(this, PlayerEntity.class, 6.0f));
this.goalSelector.add(8, new LookAroundGoal(this));
}
public static boolean canSpawn(EntityType<BabyEmperorEntity> type, WorldAccess world, SpawnReason spawnReason, BlockPos pos, Random random) {
RegistryEntry<Biome> registryEntry = world.getBiome(pos);
if (registryEntry.isIn(BiomeTags.POLAR_BEARS_SPAWN_ON_ALTERNATE_BLOCKS))
return BabyEmperorEntity.isLightLevelValidForNaturalSpawn(world, pos) && world.getBlockState(pos.down()).isIn(BlockTags.POLAR_BEARS_SPAWNABLE_ON_ALTERNATE);
return BabyEmperorEntity.isValidNaturalSpawn(type, world, spawnReason, pos, random);
}
protected <E extends BabyEmperorEntity> PlayState predicate(final AnimationState<E> event) {
if(event.isMoving())
return event.setAndContinue(
RawAnimation.begin().thenLoop("animation.baby_emperor.walk")
);
// if(event.isMoving())
// return event.setAndContinue(
// RawAnimation.begin().thenLoop("animation.baby_emperor.walk")
// );
return PlayState.STOP;
}

View file

@ -0,0 +1,53 @@
package me.theclashfruit.arctic.entity.penguin;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.attribute.DefaultAttributeContainer;
import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.entity.passive.AnimalEntity;
import net.minecraft.entity.passive.PassiveEntity;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.world.World;
import org.jetbrains.annotations.Nullable;
import software.bernie.geckolib.animatable.GeoEntity;
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
import software.bernie.geckolib.core.animation.AnimatableManager;
import software.bernie.geckolib.core.animation.AnimationController;
import software.bernie.geckolib.core.animation.AnimationState;
import software.bernie.geckolib.core.animation.RawAnimation;
import software.bernie.geckolib.core.object.PlayState;
import software.bernie.geckolib.util.GeckoLibUtil;
public class CardboardEntity extends AnimalEntity implements GeoEntity {
private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this);
public CardboardEntity(EntityType<? extends AnimalEntity> entityType, World world) {
super(entityType, world);
}
public static DefaultAttributeContainer.Builder createCardboardAttributes() {
return AnimalEntity.createMobAttributes()
.add(EntityAttributes.GENERIC_MAX_HEALTH, 20)
.add(EntityAttributes.GENERIC_MOVEMENT_SPEED, 0);
}
@Nullable
@Override
public PassiveEntity createChild(ServerWorld world, PassiveEntity entity) {
return null;
}
protected <E extends CardboardEntity> PlayState predicate(final AnimationState<E> event) {
return PlayState.STOP;
}
@Override
public void registerControllers(AnimatableManager.ControllerRegistrar controllers) {
controllers.add(new AnimationController<>(this, "controller", 0, this::predicate));
}
@Override
public AnimatableInstanceCache getAnimatableInstanceCache() {
return this.geoCache;
}
}

View file

@ -0,0 +1,100 @@
package me.theclashfruit.arctic.entity.seal;
import me.theclashfruit.arctic.entity.ArcticEntities;
import me.theclashfruit.arctic.entity.penguin.BabyEmperorEntity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.SpawnReason;
import net.minecraft.entity.ai.goal.*;
import net.minecraft.entity.attribute.DefaultAttributeContainer;
import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.entity.passive.AnimalEntity;
import net.minecraft.entity.passive.PassiveEntity;
import net.minecraft.entity.passive.PolarBearEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.recipe.Ingredient;
import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.registry.tag.BiomeTags;
import net.minecraft.registry.tag.BlockTags;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.random.Random;
import net.minecraft.world.World;
import net.minecraft.world.WorldAccess;
import net.minecraft.world.biome.Biome;
import org.jetbrains.annotations.Nullable;
import software.bernie.geckolib.animatable.GeoEntity;
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
import software.bernie.geckolib.core.animation.AnimatableManager;
import software.bernie.geckolib.core.animation.AnimationController;
import software.bernie.geckolib.core.animation.AnimationState;
import software.bernie.geckolib.core.animation.RawAnimation;
import software.bernie.geckolib.core.object.PlayState;
import software.bernie.geckolib.util.GeckoLibUtil;
public class SealEntity extends AnimalEntity implements GeoEntity {
private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this);
public SealEntity(EntityType<? extends AnimalEntity> entityType, World world) {
super(entityType, world);
}
public static DefaultAttributeContainer.Builder createSealAttributes() {
return AnimalEntity.createMobAttributes()
.add(EntityAttributes.GENERIC_MAX_HEALTH, 15.0D)
.add(EntityAttributes.GENERIC_MOVEMENT_SPEED, 0.25D);
}
@Nullable
@Override
public PassiveEntity createChild(ServerWorld world, PassiveEntity entity) {
return ArcticEntities.SEAL.create(world);
}
@Override
public boolean isBreedingItem(ItemStack stack) {
return stack.getItem() == Items.SALMON;
}
@Override
protected void initGoals() {
this.goalSelector.add(0, new SwimGoal(this));
this.goalSelector.add(1, new EscapeDangerGoal(this, 1.0));
this.goalSelector.add(3, new AnimalMateGoal(this, 0.85));
this.goalSelector.add(4, new TemptGoal(this, 1.2, Ingredient.ofItems(Items.SALMON), false));
this.goalSelector.add(5, new FollowParentGoal(this, 1.1));
this.goalSelector.add(6, new WanderAroundGoal(this, 0.85));
this.goalSelector.add(7, new LookAtEntityGoal(this, PlayerEntity.class, 6.0f));
this.goalSelector.add(8, new LookAroundGoal(this));
}
public static boolean canSpawn(EntityType<SealEntity> type, WorldAccess world, SpawnReason spawnReason, BlockPos pos, Random random) {
RegistryEntry<Biome> registryEntry = world.getBiome(pos);
if (registryEntry.isIn(BiomeTags.POLAR_BEARS_SPAWN_ON_ALTERNATE_BLOCKS))
return SealEntity.isLightLevelValidForNaturalSpawn(world, pos) && world.getBlockState(pos.down()).isIn(BlockTags.POLAR_BEARS_SPAWNABLE_ON_ALTERNATE);
return SealEntity.isValidNaturalSpawn(type, world, spawnReason, pos, random);
}
protected <E extends SealEntity> PlayState predicate(final AnimationState<E> event) {
// if(event.isMoving())
// return event.setAndContinue(
// RawAnimation.begin().thenLoop("animation.seal.walk")
// );
return PlayState.STOP;
}
@Override
public void registerControllers(AnimatableManager.ControllerRegistrar controllers) {
controllers.add(new AnimationController<>(this, "controller", 0, this::predicate));
}
@Override
public AnimatableInstanceCache getAnimatableInstanceCache() {
return this.geoCache;
}
}

View file

@ -16,16 +16,28 @@ import static me.theclashfruit.arctic.Arctic.MOD_ID;
public class ArcticItems {
public static final Item BABY_EMPEROR_SPAWN_EGG = new SpawnEggItem(
ArcticEntities.BABY_EMPEROR,
0xB00B69,
0xffffff,
0xF2F2F2,
0x2E2E2E,
new FabricItemSettings()
);
public static final Item SEAL_SPAWN_EGG = new SpawnEggItem(
ArcticEntities.SEAL,
0xE3F2FC,
0x737f87,
new FabricItemSettings()
);
public static void registerItems() {
Registry.register(Registries.ITEM, new Identifier(MOD_ID, "baby_emperor_spawn_egg"), BABY_EMPEROR_SPAWN_EGG);
Registry.register(Registries.ITEM, new Identifier(MOD_ID, "seal_spawn_egg"), SEAL_SPAWN_EGG);
ItemGroupEvents.modifyEntriesEvent(ItemGroups.SPAWN_EGGS).register(content -> {
content.addAfter(Items.AXOLOTL_SPAWN_EGG, BABY_EMPEROR_SPAWN_EGG);
});
ItemGroupEvents.modifyEntriesEvent(ItemGroups.SPAWN_EGGS).register(content -> {
content.addAfter(Items.SALMON_SPAWN_EGG, SEAL_SPAWN_EGG);
});
}
}

View file

@ -5,6 +5,8 @@ import net.minecraft.client.world.ClientWorld;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
// add in future
@Mixin(WorldRenderer.class)
public interface WorldRendererAccessor {
@Accessor("world")

View file

@ -12,6 +12,8 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
// add in future
@Mixin(WorldRenderer.class)
public class WorldRendererMixin {
@Nullable

View file

@ -1,12 +1,25 @@
package me.theclashfruit.arctic.world;
import me.theclashfruit.arctic.entity.ArcticEntities;
import me.theclashfruit.arctic.entity.penguin.BabyEmperorEntity;
import me.theclashfruit.arctic.entity.seal.SealEntity;
import net.fabricmc.fabric.api.biome.v1.BiomeModifications;
import net.fabricmc.fabric.api.biome.v1.BiomeSelectors;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.SpawnGroup;
import net.minecraft.entity.SpawnReason;
import net.minecraft.entity.SpawnRestriction;
import net.minecraft.entity.passive.AnimalEntity;
import net.minecraft.entity.passive.PigEntity;
import net.minecraft.entity.passive.PolarBearEntity;
import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.registry.tag.BiomeTags;
import net.minecraft.registry.tag.BlockTags;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.random.Random;
import net.minecraft.world.Heightmap;
import net.minecraft.world.WorldAccess;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.BiomeKeys;
public class ArcticEntityGeneration {
@ -24,11 +37,31 @@ public class ArcticEntityGeneration {
6
);
BiomeModifications.addSpawn(
BiomeSelectors.includeByKey(
BiomeKeys.FROZEN_OCEAN,
BiomeKeys.DEEP_FROZEN_OCEAN,
BiomeKeys.SNOWY_BEACH
),
SpawnGroup.CREATURE,
ArcticEntities.SEAL,
50,
1,
3
);
SpawnRestriction.register(
ArcticEntities.BABY_EMPEROR,
SpawnRestriction.Location.NO_RESTRICTIONS,
Heightmap.Type.MOTION_BLOCKING_NO_LEAVES,
AnimalEntity::isValidNaturalSpawn
SpawnRestriction.Location.ON_GROUND,
Heightmap.Type.WORLD_SURFACE,
BabyEmperorEntity::canSpawn
);
SpawnRestriction.register(
ArcticEntities.SEAL,
SpawnRestriction.Location.ON_GROUND,
Heightmap.Type.WORLD_SURFACE,
SealEntity::canSpawn
);
}
}

View file

@ -6,8 +6,7 @@
"mixins": [
],
"client": [
"WorldRendererAccessor",
"WorldRendererMixin"
],
"injectors": {
"defaultRequire": 1

View file

@ -1,106 +1,7 @@
{
"format_version": "1.8.0",
"animations": {
"animation.FM-Penguin.new": {
"animation_length": 1.75,
"bones": {
"RightArm": {
"rotation": {
"0.0": {
"vector": [0, 0, 0]
},
"0.5": {
"vector": [0, 0, 0],
"easing": "easeInBack"
},
"1.0": {
"vector": [0, 0, -30],
"easing": "easeInBack"
},
"1.5": {
"vector": [0, 0, 5],
"easing": "easeInBack"
},
"1.75": {
"vector": [0, 0, 0],
"easing": "easeInBack"
}
}
},
"LeftArm": {
"rotation": {
"0.0": {
"vector": [0, 0, 0]
},
"0.5": {
"vector": [0, 0, 25],
"easing": "easeInBack"
},
"1.0": {
"vector": [0, 0, -5],
"easing": "easeInBack"
},
"1.25": {
"vector": [0, 0, 0],
"easing": "easeInBack"
}
}
}
}
},
"animation.baby_emperor.walk": {
"animation_length": 0.83333,
"bones": {
"LeftFoot": {
"rotation": {
"0.0": {
"vector": [0, 0, 0]
},
"0.0833": {
"vector": [-5, 0, 0]
},
"0.3333": {
"vector": [0, 0, 0]
}
},
"position": {
"0.0": {
"vector": [0, 0, 0]
},
"0.1667": {
"vector": [0, 0, -0.5]
},
"0.4167": {
"vector": [0, 0, 0]
}
}
},
"RightFoot": {
"rotation": {
"0.4167": {
"vector": [0, 0, 0]
},
"0.5": {
"vector": [-5, 0, 0]
},
"0.75": {
"vector": [0, 0, 0]
}
},
"position": {
"0.4167": {
"vector": [0, 0, 0]
},
"0.5833": {
"vector": [0, 0, -0.5]
},
"0.8333": {
"vector": [0, 0, 0]
}
}
}
}
}
},
"geckolib_format_version": 2
}

View file

@ -0,0 +1,7 @@
{
"format_version": "1.8.0",
"animations": {
},
"geckolib_format_version": 2
}

View file

@ -0,0 +1,7 @@
{
"format_version": "1.8.0",
"animations": {
},
"geckolib_format_version": 2
}

View file

@ -0,0 +1,47 @@
{
"format_version": "1.12.0",
"minecraft:geometry": [
{
"description": {
"identifier": "geometry.Arctic-Penguin-HululuCardboard",
"texture_width": 64,
"texture_height": 163,
"visible_bounds_width": 3,
"visible_bounds_height": 3.5,
"visible_bounds_offset": [0, 1.25, 0]
},
"bones": [
{
"name": "bb_main",
"pivot": [0, 0, 0],
"cubes": [
{
"origin": [0, 0, -8],
"size": [2, 38, 16],
"pivot": [0, 0, 0],
"rotation": [-89.99996, 87.5, -89.99996],
"uv": {
"north": {"uv": [0, 0], "uv_size": [8, 7]},
"east": {"uv": [0, 0], "uv_size": [7, 8]},
"south": {"uv": [0, 0], "uv_size": [9, 9]},
"west": {"uv": [0, 0], "uv_size": [64, 163]},
"up": {"uv": [0, 0], "uv_size": [5, 4]},
"down": {"uv": [0, 6], "uv_size": [8, -6]}
}
}
]
},
{
"name": "bone",
"pivot": [0, 0, 7],
"rotation": [35, 0, 0],
"cubes": [
{"origin": [-6, 0, 5], "size": [2, 12, 2], "uv": [0, 0]},
{"origin": [4, 0, 5], "size": [2, 12, 2], "uv": [0, 0]},
{"origin": [-4, 4, 5], "size": [8, 3, 2], "uv": [0, 0]}
]
}
]
}
]
}

View file

@ -0,0 +1,158 @@
{
"format_version": "1.12.0",
"minecraft:geometry": [
{
"description": {
"identifier": "geometry.Arctic-Seal",
"texture_width": 128,
"texture_height": 128,
"visible_bounds_width": 4,
"visible_bounds_height": 2.5,
"visible_bounds_offset": [0, 0.75, 0]
},
"bones": [
{
"name": "Head",
"pivot": [0, 1.75, 0],
"rotation": [-6, 5, 0],
"cubes": [
{"origin": [-5, 2.75, -11.5], "size": [10, 8, 10], "uv": [0, 28]}
]
},
{
"name": "Nose",
"parent": "Head",
"pivot": [0, 1.5, 0],
"cubes": [
{"origin": [-1, 4.5, -12], "size": [2, 1, 1], "uv": [9, 15]}
]
},
{
"name": "Whiskas",
"parent": "Head",
"pivot": [0, 1.75, 0]
},
{
"name": "Left",
"parent": "Whiskas",
"pivot": [-2, 3.5, -11.5],
"rotation": [0, -5, -7.5],
"cubes": [
{
"origin": [-6.75, 3.25, -11.52],
"size": [5, 0.5, 0],
"uv": {
"north": {"uv": [8, 11], "uv_size": [-6, 1]},
"east": {"uv": [1, 10], "uv_size": [0, 3]},
"south": {"uv": [1, 10], "uv_size": [1, 5]},
"west": {"uv": [6, 10], "uv_size": [0, 3]},
"up": {"uv": [1, 10], "uv_size": [5, 0]},
"down": {"uv": [6, 10], "uv_size": [5, 0]}
}
},
{
"origin": [-6.75, 4, -11.52],
"size": [5, 0.5, 0],
"pivot": [-2, 3.5, -11.5],
"rotation": [0, 0, 5],
"uv": {
"north": {"uv": [8, 11], "uv_size": [-6, 1]},
"east": {"uv": [1, 10], "uv_size": [0, 3]},
"south": {"uv": [1, 10], "uv_size": [1, 5]},
"west": {"uv": [6, 10], "uv_size": [0, 3]},
"up": {"uv": [1, 10], "uv_size": [5, 0]},
"down": {"uv": [6, 10], "uv_size": [5, 0]}
}
},
{
"origin": [-6.75, 2.5, -11.52],
"size": [5, 0.5, 0],
"pivot": [-2, 3.5, -11.5],
"rotation": [0, 0, -5],
"uv": {
"north": {"uv": [8, 11], "uv_size": [-6, 1]},
"east": {"uv": [1, 10], "uv_size": [0, 3]},
"south": {"uv": [1, 10], "uv_size": [1, 5]},
"west": {"uv": [6, 10], "uv_size": [0, 3]},
"up": {"uv": [1, 10], "uv_size": [5, 0]},
"down": {"uv": [6, 10], "uv_size": [5, 0]}
}
}
]
},
{
"name": "Right",
"parent": "Whiskas",
"pivot": [2, 3.5, -11.5],
"rotation": [0, 5, 7.5],
"cubes": [
{
"origin": [1.75, 4, -11.52],
"size": [5, 0.5, 0],
"pivot": [2, 3.5, -11.5],
"rotation": [0, 0, -5],
"uv": {
"north": {"uv": [2, 11], "uv_size": [6, 1]},
"east": {"uv": [1, 6], "uv_size": [0, 3]},
"south": {"uv": [1, 10], "uv_size": [1, 5]},
"west": {"uv": [6, 6], "uv_size": [0, 3]},
"up": {"uv": [1, 6], "uv_size": [5, 0]},
"down": {"uv": [6, 6], "uv_size": [5, 0]}
}
},
{
"origin": [1.75, 3.25, -11.52],
"size": [5, 0.5, 0],
"uv": {
"north": {"uv": [2, 11], "uv_size": [6, 1]},
"east": {"uv": [1, 6], "uv_size": [0, 3]},
"south": {"uv": [1, 10], "uv_size": [1, 5]},
"west": {"uv": [6, 6], "uv_size": [0, 3]},
"up": {"uv": [1, 6], "uv_size": [5, 0]},
"down": {"uv": [6, 6], "uv_size": [5, 0]}
}
},
{
"origin": [1.75, 2.5, -11.52],
"size": [5, 0.5, 0],
"pivot": [2, 3.5, -11.5],
"rotation": [0, 0, 5],
"uv": {
"north": {"uv": [2, 11], "uv_size": [6, 1]},
"east": {"uv": [1, 6], "uv_size": [0, 3]},
"south": {"uv": [1, 10], "uv_size": [1, 5]},
"west": {"uv": [6, 6], "uv_size": [0, 3]},
"up": {"uv": [1, 6], "uv_size": [5, 0]},
"down": {"uv": [6, 6], "uv_size": [5, 0]}
}
}
]
},
{
"name": "Body",
"pivot": [0, 10, 15.5],
"cubes": [
{"origin": [-7, 0, -3.5], "size": [14, 7, 21], "uv": [0, 0]},
{"origin": [-1.5, 6, 17], "size": [3, 1, 5], "uv": [-1, -1]}
]
},
{
"name": "bone2",
"pivot": [0, 0, 0],
"cubes": [
{"origin": [-10, 0, -5], "size": [4, 1.5, 7], "uv": [0, 46]},
{"origin": [6, 0, -5], "size": [4, 1.5, 7], "uv": [17, 47]}
]
},
{
"name": "bone3",
"pivot": [0, 0, 15],
"cubes": [
{"origin": [-10.5, 0, 11], "size": [4, 1.5, 7], "uv": [33, 39]},
{"origin": [6.5, 0, 11], "size": [4, 1.5, 7], "uv": [30, 28]}
]
}
]
}
]
}

View file

@ -1,4 +1,11 @@
{
"modmenu.nameTranslation.arctic": "Arctic",
"modmenu.descriptionTranslation.arctic": "A mini overhaul of cold biomes."
"modmenu.descriptionTranslation.arctic": "A mini overhaul of cold biomes.",
"item.arctic.baby_emperor_spawn_egg": "Baby Emperor Spawn Egg",
"item.arctic.seal_spawn_egg": "Seal Spawn Egg",
"entity.arctic.baby_emperor": "Baby Emperor",
"entity.arctic.seal": "Seal",
"entity.arctic.cardboard": "Hululu Cardboard"
}

View file

@ -1,4 +0,0 @@
{
"modmenu.nameTranslation.arctic": "Sarkvidék",
"modmenu.descriptionTranslation.arctic": "Mini felújítása a hideg biomoknak."
}

View file

@ -0,0 +1,3 @@
{
"parent": "minecraft:item/template_spawn_egg"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB