What??
This commit is contained in:
commit
4ed7d86a71
10
README.md
10
README.md
|
@ -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">
|
||||
|
|
|
@ -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
|
@ -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
|
||||
);
|
||||
}
|
||||
}
|
|
@ -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");
|
||||
}
|
||||
}
|
|
@ -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");
|
||||
}
|
||||
}
|
|
@ -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");
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,8 +6,7 @@
|
|||
"mixins": [
|
||||
],
|
||||
"client": [
|
||||
"WorldRendererAccessor",
|
||||
"WorldRendererMixin"
|
||||
|
||||
],
|
||||
"injectors": {
|
||||
"defaultRequire": 1
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"format_version": "1.8.0",
|
||||
"animations": {
|
||||
|
||||
},
|
||||
"geckolib_format_version": 2
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"format_version": "1.8.0",
|
||||
"animations": {
|
||||
|
||||
},
|
||||
"geckolib_format_version": 2
|
||||
}
|
|
@ -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]}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
158
src/main/resources/assets/arctic/geo/seal/seal.geo.json
Normal file
158
src/main/resources/assets/arctic/geo/seal/seal.geo.json
Normal 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]}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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"
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
{
|
||||
"modmenu.nameTranslation.arctic": "Sarkvidék",
|
||||
"modmenu.descriptionTranslation.arctic": "Mini felújítása a hideg biomoknak."
|
||||
}
|
|
@ -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 |
BIN
src/main/resources/assets/arctic/textures/entity/seal/seal.png
Normal file
BIN
src/main/resources/assets/arctic/textures/entity/seal/seal.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2 KiB |
Loading…
Reference in a new issue