[add] Duck
This commit is contained in:
@@ -1,2 +1,2 @@
|
||||
// 1.21.1 2026-09-29T16:23:56.996726612 Languages: en_us for mod: masterwild
|
||||
35f1e1ce16f4613ff411eec96f0bcb280108e169 assets/masterwild/lang/en_us.json
|
||||
// 1.21.1 2026-10-03T14:21:42.612129097 Languages: en_us for mod: masterwild
|
||||
7994d49f6ed6926077869619b9bc8775e7d4956a assets/masterwild/lang/en_us.json
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
// 1.21.1 2026-09-29T16:23:56.997419393 Item Models: masterwild
|
||||
// 1.21.1 2026-10-03T14:21:42.613329425 Item Models: masterwild
|
||||
a92e1a88c1d3c3c04b2b001f0bffd19a1f3462f0 assets/masterwild/models/item/banana.json
|
||||
8cb5b876c97ae89d180a200612d0d14c8456c2f7 assets/masterwild/models/item/banana_peel.json
|
||||
63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/butterfly_spawn_egg.json
|
||||
63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/capybara_spawn_egg.json
|
||||
63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/duck_spawn_egg.json
|
||||
63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/firefly_spawn_egg.json
|
||||
63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/hedgehog_spawn_egg.json
|
||||
63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/monkey_spawn_egg.json
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
"creativetab.masterwild.masterwild": "MasterWild",
|
||||
"entity.masterwild.butterfly": "Butterfly",
|
||||
"entity.masterwild.capybara": "Capybara",
|
||||
"entity.masterwild.duck": "Duck",
|
||||
"entity.masterwild.firefly": "Firefly",
|
||||
"entity.masterwild.hedgehog": "Hedgehog",
|
||||
"entity.masterwild.monkey": "Monkey",
|
||||
@@ -14,6 +15,7 @@
|
||||
"item.masterwild.banana_peel": "Banana Peel",
|
||||
"item.masterwild.butterfly_spawn_egg": "Butterfly Spawn Egg",
|
||||
"item.masterwild.capybara_spawn_egg": "Capybara Spawn Egg",
|
||||
"item.masterwild.duck_spawn_egg": "Duck Spawn Egg",
|
||||
"item.masterwild.firefly_spawn_egg": "Firefly Spawn Egg",
|
||||
"item.masterwild.hedgehog_spawn_egg": "Hedgehog Spawn Egg",
|
||||
"item.masterwild.monkey_spawn_egg": "Monkey Spawn Egg",
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"parent": "minecraft:item/template_spawn_egg"
|
||||
}
|
||||
@@ -32,6 +32,7 @@ public class ModCreativeModeTabs {
|
||||
output.accept(ModItems.RACCOON_SPAWN_EGG);
|
||||
output.accept(ModItems.MONKEY_SPAWN_EGG);
|
||||
output.accept(ModItems.CAPYBARA_SPAWN_EGG);
|
||||
output.accept(ModItems.DUCK_SPAWN_EGG);
|
||||
|
||||
}).build());
|
||||
|
||||
|
||||
@@ -55,6 +55,9 @@ public class ModItems {
|
||||
public static final DeferredItem<Item> CAPYBARA_SPAWN_EGG = ITEMS.register("capybara_spawn_egg",
|
||||
() -> new DeferredSpawnEggItem(ModEntities.CAPYBARA, 0x372a21, 0x9e9178,
|
||||
new Item.Properties()));
|
||||
public static final DeferredItem<Item> DUCK_SPAWN_EGG = ITEMS.register("duck_spawn_egg",
|
||||
() -> new DeferredSpawnEggItem(ModEntities.DUCK, 0x341b10, 0x516a4c,
|
||||
new Item.Properties()));
|
||||
|
||||
public static void register(IEventBus eventBus) {
|
||||
ITEMS.register(eventBus);
|
||||
|
||||
@@ -26,6 +26,7 @@ import ovh.glitchlabs.masterwild.entity.client.Rooster.RoosterRenderer;
|
||||
import ovh.glitchlabs.masterwild.entity.client.Shark.SharkRenderer;
|
||||
import ovh.glitchlabs.masterwild.entity.client.butterfly.ButterflyRenderer;
|
||||
import ovh.glitchlabs.masterwild.entity.client.capibara.CapybaraRenderer;
|
||||
import ovh.glitchlabs.masterwild.entity.client.duck.duckRenderer;
|
||||
import ovh.glitchlabs.masterwild.entity.client.firefly.FireflyRenderer;
|
||||
import ovh.glitchlabs.masterwild.entity.client.hedgehog.HedgehogRenderer;
|
||||
import ovh.glitchlabs.masterwild.entity.client.red_panda.Red_PandaRenderer;
|
||||
@@ -86,6 +87,7 @@ public class Masterwild {
|
||||
EntityRenderers.register(ModEntities.RACCOON.get(), RaccoonRenderer::new);
|
||||
EntityRenderers.register(ModEntities.MONKEY.get(), MonkeyRenderer::new);
|
||||
EntityRenderers.register(ModEntities.CAPYBARA.get(), CapybaraRenderer::new);
|
||||
EntityRenderers.register(ModEntities.DUCK.get(), duckRenderer::new);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,5 +31,6 @@ public class ModItemModelProvider extends ItemModelProvider {
|
||||
withExistingParent(ModItems.RACCOON_SPAWN_EGG.getId().getPath(), mcLoc("item/template_spawn_egg"));
|
||||
withExistingParent(ModItems.MONKEY_SPAWN_EGG.getId().getPath(), mcLoc("item/template_spawn_egg"));
|
||||
withExistingParent(ModItems.CAPYBARA_SPAWN_EGG.getId().getPath(), mcLoc("item/template_spawn_egg"));
|
||||
withExistingParent(ModItems.DUCK_SPAWN_EGG.getId().getPath(), mcLoc("item/template_spawn_egg"));
|
||||
}
|
||||
}
|
||||
@@ -27,6 +27,7 @@ public class ModLanguageProvider extends LanguageProvider {
|
||||
add(ModEntities.RACCOON.get(), "Raccoon");
|
||||
add(ModEntities.MONKEY.get(), "Monkey");
|
||||
add(ModEntities.CAPYBARA.get(), "Capybara");
|
||||
add(ModEntities.DUCK.get(), "Duck");
|
||||
|
||||
add(ModItems.PINGUIN_SPAWN_EGG.get(), "Pinguin Spawn Egg");
|
||||
add(ModItems.FIREFLY_SPAWN_EGG.get(), "Firefly Spawn Egg");
|
||||
@@ -38,6 +39,7 @@ public class ModLanguageProvider extends LanguageProvider {
|
||||
add(ModItems.RACCOON_SPAWN_EGG.get(), "Raccoon Spawn Egg");
|
||||
add(ModItems.MONKEY_SPAWN_EGG.get(), "Monkey Spawn Egg");
|
||||
add(ModItems.CAPYBARA_SPAWN_EGG.get(), "Capybara Spawn Egg");
|
||||
add(ModItems.DUCK_SPAWN_EGG.get(), "Duck Spawn Egg");
|
||||
|
||||
add("creativetab.masterwild.masterwild", "MasterWild");
|
||||
|
||||
|
||||
@@ -54,6 +54,10 @@ public class ModEntities {
|
||||
ENTITY_TYPES.register("capybara", () -> EntityType.Builder.of(CapybaraEntity::new, MobCategory.CREATURE)
|
||||
.sized(0.6f, 0.5f).build("capybara"));
|
||||
|
||||
public static final Supplier<EntityType<duckEntity>> DUCK =
|
||||
ENTITY_TYPES.register("duck", () -> EntityType.Builder.of(duckEntity::new, MobCategory.CREATURE)
|
||||
.sized(0.6f, 0.5f).build("duck"));
|
||||
|
||||
|
||||
public static void register(IEventBus eventBus) {
|
||||
ENTITY_TYPES.register(eventBus);
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
package ovh.glitchlabs.masterwild.entity.client.duck;// Made with Blockbench 5.2.0
|
||||
// Exported for Minecraft version 1.17 or later with Mojang mappings
|
||||
// Paste this class into your mod and generate all required imports
|
||||
|
||||
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||
import net.minecraft.client.model.HierarchicalModel;
|
||||
import net.minecraft.client.model.geom.ModelLayerLocation;
|
||||
import net.minecraft.client.model.geom.ModelPart;
|
||||
import net.minecraft.client.model.geom.PartPose;
|
||||
import net.minecraft.client.model.geom.builders.*;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.util.Mth;
|
||||
import ovh.glitchlabs.masterwild.Masterwild;
|
||||
import ovh.glitchlabs.masterwild.entity.custom.duckEntity;
|
||||
|
||||
public class duckModel<T extends duckEntity> extends HierarchicalModel<T> {
|
||||
// This layer location should be baked with EntityRendererProvider.Context in the entity renderer and passed into this model's constructor
|
||||
public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(ResourceLocation.fromNamespaceAndPath(Masterwild.MODID, "duckmodel"), "main");
|
||||
private final ModelPart Duck;
|
||||
private final ModelPart body;
|
||||
private final ModelPart flapps;
|
||||
private final ModelPart R_flapps;
|
||||
private final ModelPart L_flapps;
|
||||
private final ModelPart head;
|
||||
private final ModelPart legs;
|
||||
private final ModelPart R_leg;
|
||||
private final ModelPart L_leg;
|
||||
|
||||
public duckModel(ModelPart root) {
|
||||
this.Duck = root.getChild("Duck");
|
||||
this.body = this.Duck.getChild("body");
|
||||
this.flapps = this.body.getChild("flapps");
|
||||
this.R_flapps = this.flapps.getChild("R_flapps");
|
||||
this.L_flapps = this.flapps.getChild("L_flapps");
|
||||
this.head = this.body.getChild("head");
|
||||
this.legs = this.body.getChild("legs");
|
||||
this.R_leg = this.legs.getChild("R_leg");
|
||||
this.L_leg = this.legs.getChild("L_leg");
|
||||
}
|
||||
|
||||
public static LayerDefinition createBodyLayer() {
|
||||
MeshDefinition meshdefinition = new MeshDefinition();
|
||||
PartDefinition partdefinition = meshdefinition.getRoot();
|
||||
|
||||
PartDefinition Duck = partdefinition.addOrReplaceChild("Duck", CubeListBuilder.create(), PartPose.offset(0.0F, 24.0F, 0.0F));
|
||||
|
||||
PartDefinition body = Duck.addOrReplaceChild("body", CubeListBuilder.create().texOffs(0, 0).addBox(-4.3214F, -2.7578F, -5.6071F, 7.0F, 7.0F, 9.0F, new CubeDeformation(0.0F))
|
||||
.texOffs(32, 0).addBox(-2.3214F, -0.7578F, 3.3929F, 3.0F, 0.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.8214F, -5.2422F, 1.6071F));
|
||||
|
||||
PartDefinition cube_r1 = body.addOrReplaceChild("cube_r1", CubeListBuilder.create().texOffs(32, 2).addBox(-2.0F, -2.0F, -1.0F, 3.0F, 0.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-0.3214F, 0.7422F, 5.1429F, 0.3927F, 0.0F, 0.0F));
|
||||
|
||||
PartDefinition cube_r2 = body.addOrReplaceChild("cube_r2", CubeListBuilder.create().texOffs(32, 4).addBox(-2.0F, -2.0F, -1.0F, 3.0F, 0.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-0.3214F, 1.4922F, 3.3929F, -0.3927F, 0.0F, 0.0F));
|
||||
|
||||
PartDefinition flapps = body.addOrReplaceChild("flapps", CubeListBuilder.create(), PartPose.offset(3.6786F, -0.0078F, -1.6071F));
|
||||
|
||||
PartDefinition R_flapps = flapps.addOrReplaceChild("R_flapps", CubeListBuilder.create(), PartPose.offset(-8.5F, -0.4036F, 0.3799F));
|
||||
|
||||
PartDefinition cube_r3 = R_flapps.addOrReplaceChild("cube_r3", CubeListBuilder.create().texOffs(20, 28).addBox(0.0F, -2.0F, -3.0F, 1.0F, 5.0F, 7.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-0.5F, 0.4036F, -0.3799F, -0.2182F, 0.0F, 0.0F));
|
||||
|
||||
PartDefinition L_flapps = flapps.addOrReplaceChild("L_flapps", CubeListBuilder.create(), PartPose.offset(-0.5F, -0.4036F, 0.3799F));
|
||||
|
||||
PartDefinition cube_r4 = L_flapps.addOrReplaceChild("cube_r4", CubeListBuilder.create().texOffs(20, 16).addBox(-1.0F, -2.0F, -3.0F, 1.0F, 5.0F, 7.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.5F, 0.4036F, -0.3799F, -0.2182F, 0.0F, 0.0F));
|
||||
|
||||
PartDefinition head = body.addOrReplaceChild("head", CubeListBuilder.create().texOffs(32, 6).addBox(-1.0F, -2.0F, -1.0F, 2.0F, 1.0F, 2.0F, new CubeDeformation(0.0F))
|
||||
.texOffs(0, 16).addBox(-2.5F, -4.0F, 1.0F, 5.0F, 9.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offset(-0.8214F, -3.7578F, -8.6071F));
|
||||
|
||||
PartDefinition legs = body.addOrReplaceChild("legs", CubeListBuilder.create(), PartPose.offset(0.4286F, 5.2422F, -1.6071F));
|
||||
|
||||
PartDefinition R_leg = legs.addOrReplaceChild("R_leg", CubeListBuilder.create().texOffs(0, 30).addBox(-4.5F, -1.0F, -1.0F, 3.0F, 1.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F));
|
||||
|
||||
PartDefinition L_leg = legs.addOrReplaceChild("L_leg", CubeListBuilder.create().texOffs(10, 30).addBox(1.5F, -1.0F, -1.0F, 3.0F, 1.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(-2.5F, 0.0F, 0.0F));
|
||||
|
||||
return LayerDefinition.create(meshdefinition, 64, 64);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupAnim(duckEntity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) {
|
||||
this.root().getAllParts().forEach(ModelPart::resetPose);
|
||||
this.applyHeadRotation(netHeadYaw, headPitch);
|
||||
this.walk(limbSwing, limbSwingAmount);
|
||||
}
|
||||
|
||||
private void applyHeadRotation(float headYaw, float headPitch) {
|
||||
headYaw = Mth.clamp(headYaw, -30f, 30f);
|
||||
headPitch = Mth.clamp(headPitch, -25f, 45f);
|
||||
this.head.yRot = headYaw * ((float) Math.PI / 180f);
|
||||
this.head.xRot = headPitch * ((float) Math.PI / 180f);
|
||||
}
|
||||
|
||||
private void walk(float limbSwing, float limbSwingAmount) {
|
||||
float amount = 1.0F * limbSwingAmount;
|
||||
this.R_leg.xRot = Mth.cos(limbSwing * 0.6662F) * amount;
|
||||
this.L_leg.xRot = Mth.cos(limbSwing * 0.6662F) * amount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, int color) {
|
||||
Duck.render(poseStack, vertexConsumer, packedLight, packedOverlay, color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelPart root() {
|
||||
return Duck;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package ovh.glitchlabs.masterwild.entity.client.duck;
|
||||
|
||||
import net.minecraft.client.renderer.entity.EntityRendererProvider;
|
||||
import net.minecraft.client.renderer.entity.MobRenderer;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import ovh.glitchlabs.masterwild.Masterwild;
|
||||
import ovh.glitchlabs.masterwild.entity.custom.duckEntity;
|
||||
|
||||
public class duckRenderer extends MobRenderer<duckEntity, duckModel<duckEntity>> {
|
||||
private static final ResourceLocation TEXTURE =
|
||||
ResourceLocation.fromNamespaceAndPath(Masterwild.MODID, "textures/entity/duck.png");
|
||||
|
||||
public duckRenderer(EntityRendererProvider.Context context) {
|
||||
super(context, new duckModel<>(context.bakeLayer(duckModel.LAYER_LOCATION)), 0.45f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getTextureLocation(duckEntity duckEntity) {
|
||||
return TEXTURE;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package ovh.glitchlabs.masterwild.entity.custom;
|
||||
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.world.entity.AgeableMob;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
import net.minecraft.world.entity.Mob;
|
||||
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
|
||||
import net.minecraft.world.entity.ai.attributes.Attributes;
|
||||
import net.minecraft.world.entity.ai.goal.*;
|
||||
import net.minecraft.world.entity.animal.Animal;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.item.crafting.Ingredient;
|
||||
import net.minecraft.world.level.Level;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import ovh.glitchlabs.masterwild.entity.ModEntities;
|
||||
|
||||
public class duckEntity extends Animal {
|
||||
private static final Ingredient FOOD = Ingredient.of(Items.BREAD);
|
||||
|
||||
public duckEntity(EntityType<? extends Animal> entityType, Level level) {
|
||||
super(entityType, level);
|
||||
}
|
||||
|
||||
public static AttributeSupplier.Builder createAttributes() {
|
||||
return Mob.createMobAttributes()
|
||||
.add(Attributes.MOVEMENT_SPEED, 0.3)
|
||||
.add(Attributes.MAX_HEALTH, 5)
|
||||
.add(Attributes.ARMOR, 0)
|
||||
.add(Attributes.ATTACK_DAMAGE, 0)
|
||||
.add(Attributes.FOLLOW_RANGE, 16)
|
||||
.add(Attributes.STEP_HEIGHT, 0.6);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFood(ItemStack itemStack) {
|
||||
return FOOD.test(itemStack);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerGoals() {
|
||||
this.goalSelector.addGoal(0, new FloatGoal(this));
|
||||
this.goalSelector.addGoal(1, new PanicGoal(this, 1.5));
|
||||
this.goalSelector.addGoal(2, new BreedGoal(this, 1.0));
|
||||
this.goalSelector.addGoal(3, new TemptGoal(this, 1.1, FOOD, false));
|
||||
this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.1));
|
||||
this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 0.8));
|
||||
this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F));
|
||||
this.goalSelector.addGoal(7, new RandomLookAroundGoal(this));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public AgeableMob getBreedOffspring(ServerLevel serverLevel, AgeableMob ageableMob) {
|
||||
return ModEntities.DUCK.get().create(serverLevel);
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,7 @@ import ovh.glitchlabs.masterwild.entity.client.Rooster.RoosterModel;
|
||||
import ovh.glitchlabs.masterwild.entity.client.Shark.SharkModel;
|
||||
import ovh.glitchlabs.masterwild.entity.client.butterfly.ButterflyModel;
|
||||
import ovh.glitchlabs.masterwild.entity.client.capibara.CapybaraModel;
|
||||
import ovh.glitchlabs.masterwild.entity.client.duck.duckModel;
|
||||
import ovh.glitchlabs.masterwild.entity.client.firefly.FireflyModel;
|
||||
import ovh.glitchlabs.masterwild.entity.client.hedgehog.HedgehogModel;
|
||||
import ovh.glitchlabs.masterwild.entity.client.red_panda.Red_PandaModel;
|
||||
@@ -32,6 +33,7 @@ public class ModEventBusEvents {
|
||||
event.registerLayerDefinition(RaccoonModel.LAYER_LOCATION, RaccoonModel::createBodyLayer);
|
||||
event.registerLayerDefinition(MonkeyModel.LAYER_LOCATION, MonkeyModel::createBodyLayer);
|
||||
event.registerLayerDefinition(CapybaraModel.LAYER_LOCATION, CapybaraModel::createBodyLayer);
|
||||
event.registerLayerDefinition(duckModel.LAYER_LOCATION, duckModel::createBodyLayer);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
@@ -45,5 +47,6 @@ public class ModEventBusEvents {
|
||||
event.put(ModEntities.RACCOON.get(), RaccoonEntity.createAttributes().build());
|
||||
event.put(ModEntities.MONKEY.get(), MonkeyEntity.createAttributes().build());
|
||||
event.put(ModEntities.CAPYBARA.get(), CapybaraEntity.createAttributes().build());
|
||||
event.put(ModEntities.DUCK.get(), duckEntity.createAttributes().build());
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 2.3 KiB |
Reference in New Issue
Block a user