[add] Monkey
This commit is contained in:
+1
-1
@@ -29,7 +29,7 @@ mod_name=MasterWild
|
||||
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
|
||||
mod_license=All Rights Reserved
|
||||
# The mod version. See https://semver.org/
|
||||
mod_version=0.1.1
|
||||
mod_version=0.2.0
|
||||
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
|
||||
# This should match the base package used for the mod sources.
|
||||
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
// 1.21.1 2026-09-28T19:54:04.141049615 Registries
|
||||
// 1.21.1 2026-09-28T22:23:06.416820898 Registries
|
||||
ead89faabf72208190d381bb26c0381632944e55 data/masterwild/neoforge/biome_modifier/spawn_butterfly.json
|
||||
7d8ae6f7dfb59ddf054cabf0a1169a571465c6bc data/masterwild/neoforge/biome_modifier/spawn_firefly.json
|
||||
794f7cd1a27f9d8b96379fb661eab0d120cad281 data/masterwild/neoforge/biome_modifier/spawn_hedgehog.json
|
||||
3d5b931996cbc1319a2e2afe8ddc7e455f407f18 data/masterwild/neoforge/biome_modifier/spawn_monkey.json
|
||||
643ad56ac8f259789977e34868ea4ea77122aafe data/masterwild/neoforge/biome_modifier/spawn_pinguin.json
|
||||
264ebbb0f1efd8cefc13e93c0031c3b19c80a225 data/masterwild/neoforge/biome_modifier/spawn_raccoon.json
|
||||
0f98182744360df8e11851c2b6782e325689090d data/masterwild/neoforge/biome_modifier/spawn_red_panda.json
|
||||
45ddc1dc9581863936a59213ce70f641b1d35d27 data/masterwild/neoforge/biome_modifier/spawn_rooster.json
|
||||
cc5600e4e2999812382684cc52f9d59e19a521e1 data/masterwild/neoforge/biome_modifier/spawn_rooster.json
|
||||
30308b10a3b95454e8678a8324ae88285a9e7b21 data/masterwild/neoforge/biome_modifier/spawn_shark.json
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
// 1.21.1 2026-09-27T20:26:19.448921416 Languages: en_us for mod: masterwild
|
||||
dbb49d790ec7f13dec78bc8b156cf7d37931bad9 assets/masterwild/lang/en_us.json
|
||||
// 1.21.1 2026-09-28T22:05:37.903072944 Languages: en_us for mod: masterwild
|
||||
df1875a313c5fc24443af962c80c27a3f57525b5 assets/masterwild/lang/en_us.json
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
// 1.21.1 2026-09-27T20:26:19.449663992 Item Models: masterwild
|
||||
// 1.21.1 2026-09-28T22:05:54.295366081 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/firefly_spawn_egg.json
|
||||
63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/hedgehog_spawn_egg.json
|
||||
63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/monkey_spawn_egg.json
|
||||
63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/pinguin_spawn_egg.json
|
||||
63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/raccoon_spawn_egg.json
|
||||
63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/masterwild/models/item/red-panda_spawn_egg.json
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"entity.masterwild.butterfly": "Butterfly",
|
||||
"entity.masterwild.firefly": "Firefly",
|
||||
"entity.masterwild.hedgehog": "Hedgehog",
|
||||
"entity.masterwild.monkey": "Monkey",
|
||||
"entity.masterwild.pinguin": "Pinguin",
|
||||
"entity.masterwild.raccoon": "Raccoon",
|
||||
"entity.masterwild.red_panda": "Red Panda",
|
||||
@@ -13,10 +14,12 @@
|
||||
"item.masterwild.butterfly_spawn_egg": "Butterfly 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",
|
||||
"item.masterwild.pinguin_spawn_egg": "Pinguin Spawn Egg",
|
||||
"item.masterwild.raccoon_spawn_egg": "Raccoon Spawn Egg",
|
||||
"item.masterwild.red-panda_spawn_egg": "Red Panda Spawn Egg",
|
||||
"item.masterwild.rooster_spawn_egg": "Rooster Spawn Egg",
|
||||
"item.masterwild.shark_spawn_egg": "Shark Spawn Egg",
|
||||
"subtitles.masterwild.monkey_hurt": "Monkey Hurt",
|
||||
"subtitles.masterwild.rooster_crow": "Rooster crows"
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"parent": "minecraft:item/template_spawn_egg"
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"type": "neoforge:add_spawns",
|
||||
"biomes": "minecraft:jungle",
|
||||
"spawners": {
|
||||
"type": "masterwild:monkey",
|
||||
"maxCount": 5,
|
||||
"minCount": 2,
|
||||
"weight": 9
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,6 @@
|
||||
"type": "masterwild:rooster",
|
||||
"maxCount": 3,
|
||||
"minCount": 2,
|
||||
"weight": 10
|
||||
"weight": 5
|
||||
}
|
||||
}
|
||||
@@ -30,6 +30,7 @@ public class ModCreativeModeTabs {
|
||||
output.accept(ModItems.RED_PANDA_SPAWN_EGG);
|
||||
output.accept(ModItems.BUTTERFLY_SPAWN_EGG);
|
||||
output.accept(ModItems.RACCOON_SPAWN_EGG);
|
||||
output.accept(ModItems.MONKEY_SPAWN_EGG);
|
||||
|
||||
}).build());
|
||||
|
||||
|
||||
@@ -49,6 +49,9 @@ public class ModItems {
|
||||
public static final DeferredItem<Item> RACCOON_SPAWN_EGG = ITEMS.register("raccoon_spawn_egg",
|
||||
() -> new DeferredSpawnEggItem(ModEntities.RACCOON, 0x68696a, 0xa6a4a3,
|
||||
new Item.Properties()));
|
||||
public static final DeferredItem<Item> MONKEY_SPAWN_EGG = ITEMS.register("monkey_spawn_egg",
|
||||
() -> new DeferredSpawnEggItem(ModEntities.MONKEY, 0x795136, 0x9e9178,
|
||||
new Item.Properties()));
|
||||
|
||||
public static void register(IEventBus eventBus) {
|
||||
ITEMS.register(eventBus);
|
||||
|
||||
@@ -19,6 +19,7 @@ import ovh.glitchlabs.masterwild.Item.ModCreativeModeTabs;
|
||||
import ovh.glitchlabs.masterwild.Item.ModItems;
|
||||
import ovh.glitchlabs.masterwild.Sounds.ModSounds;
|
||||
import ovh.glitchlabs.masterwild.entity.ModEntities;
|
||||
import ovh.glitchlabs.masterwild.entity.client.Monkey.MonkeyRenderer;
|
||||
import ovh.glitchlabs.masterwild.entity.client.Pinguin.PinguinRenderer;
|
||||
import ovh.glitchlabs.masterwild.entity.client.Raccoon.RaccoonRenderer;
|
||||
import ovh.glitchlabs.masterwild.entity.client.Rooster.RoosterRenderer;
|
||||
@@ -82,6 +83,7 @@ public class Masterwild {
|
||||
EntityRenderers.register(ModEntities.RED_PANDA.get(), Red_PandaRenderer::new);
|
||||
EntityRenderers.register(ModEntities.BUTTERFLY.get(), ButterflyRenderer::new);
|
||||
EntityRenderers.register(ModEntities.RACCOON.get(), RaccoonRenderer::new);
|
||||
EntityRenderers.register(ModEntities.MONKEY.get(), MonkeyRenderer::new);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ public class ModSounds {
|
||||
DeferredRegister.create(BuiltInRegistries.SOUND_EVENT, Masterwild.MODID);
|
||||
|
||||
public static final Supplier<SoundEvent> ROOSTER_CROW = registerSound("rooster_crow");
|
||||
public static final Supplier<SoundEvent> MONKEY_HURT = registerSound("monkey_hurt");
|
||||
|
||||
private static Supplier<SoundEvent> registerSound(String name) {
|
||||
ResourceLocation id = ResourceLocation.fromNamespaceAndPath(Masterwild.MODID, name);
|
||||
|
||||
@@ -29,5 +29,6 @@ public class ModItemModelProvider extends ItemModelProvider {
|
||||
withExistingParent(ModItems.RED_PANDA_SPAWN_EGG.getId().getPath(), mcLoc("item/template_spawn_egg"));
|
||||
withExistingParent(ModItems.BUTTERFLY_SPAWN_EGG.getId().getPath(), mcLoc("item/template_spawn_egg"));
|
||||
withExistingParent(ModItems.RACCOON_SPAWN_EGG.getId().getPath(), mcLoc("item/template_spawn_egg"));
|
||||
withExistingParent(ModItems.MONKEY_SPAWN_EGG.getId().getPath(), mcLoc("item/template_spawn_egg"));
|
||||
}
|
||||
}
|
||||
@@ -25,6 +25,7 @@ public class ModLanguageProvider extends LanguageProvider {
|
||||
add(ModEntities.RED_PANDA.get(), "Red Panda");
|
||||
add(ModEntities.BUTTERFLY.get(), "Butterfly");
|
||||
add(ModEntities.RACCOON.get(), "Raccoon");
|
||||
add(ModEntities.MONKEY.get(), "Monkey");
|
||||
|
||||
add(ModItems.PINGUIN_SPAWN_EGG.get(), "Pinguin Spawn Egg");
|
||||
add(ModItems.FIREFLY_SPAWN_EGG.get(), "Firefly Spawn Egg");
|
||||
@@ -34,8 +35,11 @@ public class ModLanguageProvider extends LanguageProvider {
|
||||
add(ModItems.RED_PANDA_SPAWN_EGG.get(), "Red Panda Spawn Egg");
|
||||
add(ModItems.BUTTERFLY_SPAWN_EGG.get(), "Butterfly Spawn Egg");
|
||||
add(ModItems.RACCOON_SPAWN_EGG.get(), "Raccoon Spawn Egg");
|
||||
add(ModItems.MONKEY_SPAWN_EGG.get(), "Monkey Spawn Egg");
|
||||
|
||||
add("creativetab.masterwild.masterwild", "MasterWild");
|
||||
|
||||
add("subtitles.masterwild.rooster_crow", "Rooster crows");
|
||||
add("subtitles.masterwild.monkey_hurt", "Monkey Hurt");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,6 +46,10 @@ public class ModEntities {
|
||||
ENTITY_TYPES.register("raccoon", () -> EntityType.Builder.of(RaccoonEntity::new, MobCategory.CREATURE)
|
||||
.sized(0.6f, 0.5f).build("raccoon"));
|
||||
|
||||
public static final Supplier<EntityType<MonkeyEntity>> MONKEY =
|
||||
ENTITY_TYPES.register("monkey", () -> EntityType.Builder.of(MonkeyEntity::new, MobCategory.CREATURE)
|
||||
.sized(0.6f, 0.5f).build("monkey"));
|
||||
|
||||
|
||||
public static void register(IEventBus eventBus) {
|
||||
ENTITY_TYPES.register(eventBus);
|
||||
|
||||
+78
@@ -0,0 +1,78 @@
|
||||
package ovh.glitchlabs.masterwild.entity.client.Monkey;// Save this class in your mod and generate all required imports
|
||||
|
||||
import net.minecraft.client.animation.AnimationChannel;
|
||||
import net.minecraft.client.animation.AnimationDefinition;
|
||||
import net.minecraft.client.animation.Keyframe;
|
||||
import net.minecraft.client.animation.KeyframeAnimations;
|
||||
/**
|
||||
* Made with Blockbench 5.2.0
|
||||
* Exported for Minecraft version 1.19 or later with Mojang mappings
|
||||
* @author Author
|
||||
*/
|
||||
public class MonkeyAnimation {
|
||||
public static final AnimationDefinition Monky_Running = AnimationDefinition.Builder.withLength(0.6667F).looping()
|
||||
.addAnimation("body", new AnimationChannel(AnimationChannel.Targets.ROTATION,
|
||||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.3333F, KeyframeAnimations.degreeVec(5.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.5F, KeyframeAnimations.degreeVec(7.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.6667F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM)
|
||||
))
|
||||
.addAnimation("bone2", new AnimationChannel(AnimationChannel.Targets.ROTATION,
|
||||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.1667F, KeyframeAnimations.degreeVec(2.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.6667F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM)
|
||||
))
|
||||
.addAnimation("R_front_Leg", new AnimationChannel(AnimationChannel.Targets.ROTATION,
|
||||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.1667F, KeyframeAnimations.degreeVec(-12.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.3333F, KeyframeAnimations.degreeVec(-30.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.6667F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM)
|
||||
))
|
||||
.addAnimation("L_front_Leg", new AnimationChannel(AnimationChannel.Targets.ROTATION,
|
||||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.1667F, KeyframeAnimations.degreeVec(-12.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.3333F, KeyframeAnimations.degreeVec(-30.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.6667F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM)
|
||||
))
|
||||
.addAnimation("L_up", new AnimationChannel(AnimationChannel.Targets.ROTATION,
|
||||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.1667F, KeyframeAnimations.degreeVec(22.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.3333F, KeyframeAnimations.degreeVec(52.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.5F, KeyframeAnimations.degreeVec(52.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.6667F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM)
|
||||
))
|
||||
.addAnimation("L_up", new AnimationChannel(AnimationChannel.Targets.POSITION,
|
||||
new Keyframe(0.0F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM)
|
||||
))
|
||||
.addAnimation("L_up", new AnimationChannel(AnimationChannel.Targets.SCALE,
|
||||
new Keyframe(0.0F, KeyframeAnimations.scaleVec(1.0F, 1.0F, 1.0F), AnimationChannel.Interpolations.CATMULLROM)
|
||||
))
|
||||
.addAnimation("L_down", new AnimationChannel(AnimationChannel.Targets.ROTATION,
|
||||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.1667F, KeyframeAnimations.degreeVec(-25.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.3333F, KeyframeAnimations.degreeVec(-42.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.5F, KeyframeAnimations.degreeVec(-7.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.6667F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM)
|
||||
))
|
||||
.addAnimation("R_up", new AnimationChannel(AnimationChannel.Targets.ROTATION,
|
||||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.1667F, KeyframeAnimations.degreeVec(22.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.3333F, KeyframeAnimations.degreeVec(52.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.5F, KeyframeAnimations.degreeVec(52.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.6667F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM)
|
||||
))
|
||||
.addAnimation("R_up", new AnimationChannel(AnimationChannel.Targets.POSITION,
|
||||
new Keyframe(0.0F, KeyframeAnimations.posVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM)
|
||||
))
|
||||
.addAnimation("R_up", new AnimationChannel(AnimationChannel.Targets.SCALE,
|
||||
new Keyframe(0.0F, KeyframeAnimations.scaleVec(1.0F, 1.0F, 1.0F), AnimationChannel.Interpolations.CATMULLROM)
|
||||
))
|
||||
.addAnimation("R_down", new AnimationChannel(AnimationChannel.Targets.ROTATION,
|
||||
new Keyframe(0.0F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.1667F, KeyframeAnimations.degreeVec(-25.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.3333F, KeyframeAnimations.degreeVec(-42.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.5F, KeyframeAnimations.degreeVec(-7.5F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM),
|
||||
new Keyframe(0.6667F, KeyframeAnimations.degreeVec(0.0F, 0.0F, 0.0F), AnimationChannel.Interpolations.CATMULLROM)
|
||||
))
|
||||
.build();
|
||||
}
|
||||
+126
@@ -0,0 +1,126 @@
|
||||
package ovh.glitchlabs.masterwild.entity.client.Monkey;// 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.EntityModel;
|
||||
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.MonkeyEntity;
|
||||
|
||||
public class MonkeyModel<T extends MonkeyEntity> 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, "monkeymodel"), "main");
|
||||
private final ModelPart monkey;
|
||||
private final ModelPart body;
|
||||
private final ModelPart bone2;
|
||||
private final ModelPart legs;
|
||||
private final ModelPart R_front_Leg;
|
||||
private final ModelPart R_back_Leg;
|
||||
private final ModelPart R_up;
|
||||
private final ModelPart R_down;
|
||||
private final ModelPart L_front_Leg;
|
||||
private final ModelPart L_back_Leg;
|
||||
private final ModelPart L_up;
|
||||
private final ModelPart L_down;
|
||||
private final ModelPart head;
|
||||
private final ModelPart tail;
|
||||
|
||||
public MonkeyModel(ModelPart root) {
|
||||
this.monkey = root.getChild("monkey");
|
||||
this.body = this.monkey.getChild("body");
|
||||
this.bone2 = this.body.getChild("bone2");
|
||||
this.legs = this.body.getChild("legs");
|
||||
this.R_front_Leg = this.legs.getChild("R_front_Leg");
|
||||
this.R_back_Leg = this.legs.getChild("R_back_Leg");
|
||||
this.R_up = this.R_back_Leg.getChild("R_up");
|
||||
this.R_down = this.R_up.getChild("R_down");
|
||||
this.L_front_Leg = this.legs.getChild("L_front_Leg");
|
||||
this.L_back_Leg = this.legs.getChild("L_back_Leg");
|
||||
this.L_up = this.L_back_Leg.getChild("L_up");
|
||||
this.L_down = this.L_up.getChild("L_down");
|
||||
this.head = this.body.getChild("head");
|
||||
this.tail = this.body.getChild("tail");
|
||||
}
|
||||
|
||||
public static LayerDefinition createBodyLayer() {
|
||||
MeshDefinition meshdefinition = new MeshDefinition();
|
||||
PartDefinition partdefinition = meshdefinition.getRoot();
|
||||
|
||||
PartDefinition monkey = partdefinition.addOrReplaceChild("monkey", CubeListBuilder.create(), PartPose.offset(0.5F, 20.0F, 0.0F));
|
||||
|
||||
PartDefinition body = monkey.addOrReplaceChild("body", CubeListBuilder.create(), PartPose.offset(-2.125F, -2.7083F, 2.2083F));
|
||||
|
||||
PartDefinition bone2 = body.addOrReplaceChild("bone2", CubeListBuilder.create(), PartPose.offset(1.625F, -0.1931F, -0.9507F));
|
||||
|
||||
PartDefinition cube_r1 = bone2.addOrReplaceChild("cube_r1", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -6.0F, -4.0F, 7.0F, 6.0F, 10.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.5F, 2.9014F, -1.2577F, -0.0873F, 0.0F, 0.0F));
|
||||
|
||||
PartDefinition legs = body.addOrReplaceChild("legs", CubeListBuilder.create(), PartPose.offset(2.125F, 2.7083F, -2.2083F));
|
||||
|
||||
PartDefinition R_front_Leg = legs.addOrReplaceChild("R_front_Leg", CubeListBuilder.create().texOffs(0, 33).addBox(-1.0F, -0.5F, -1.0F, 2.0F, 5.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(-2.75F, -0.5F, -2.75F));
|
||||
|
||||
PartDefinition R_back_Leg = legs.addOrReplaceChild("R_back_Leg", CubeListBuilder.create(), PartPose.offset(-3.0F, -0.9604F, 3.8174F));
|
||||
|
||||
PartDefinition R_up = R_back_Leg.addOrReplaceChild("R_up", CubeListBuilder.create(), PartPose.offset(0.0F, 0.0396F, -0.4326F));
|
||||
|
||||
PartDefinition cube_r2 = R_up.addOrReplaceChild("cube_r2", CubeListBuilder.create().texOffs(20, 25).addBox(-1.0F, -2.0F, -3.0F, 3.0F, 5.0F, 4.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-0.5F, -0.0793F, 1.1152F, -0.3927F, 0.0F, 0.0F));
|
||||
|
||||
PartDefinition R_down = R_up.addOrReplaceChild("R_down", CubeListBuilder.create().texOffs(34, 6).addBox(-1.0F, -1.0F, -1.0F, 2.0F, 4.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 1.9207F, -1.1348F));
|
||||
|
||||
PartDefinition L_front_Leg = legs.addOrReplaceChild("L_front_Leg", CubeListBuilder.create().texOffs(8, 33).addBox(-1.0F, -0.5F, -1.0F, 2.0F, 5.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(1.75F, -0.5F, -2.75F));
|
||||
|
||||
PartDefinition L_back_Leg = legs.addOrReplaceChild("L_back_Leg", CubeListBuilder.create(), PartPose.offset(2.0F, -0.9604F, 3.8174F));
|
||||
|
||||
PartDefinition L_up = L_back_Leg.addOrReplaceChild("L_up", CubeListBuilder.create(), PartPose.offset(0.0F, 0.0396F, -0.4326F));
|
||||
|
||||
PartDefinition cube_r3 = L_up.addOrReplaceChild("cube_r3", CubeListBuilder.create().texOffs(20, 16).addBox(-2.0F, -2.0F, -3.0F, 3.0F, 5.0F, 4.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.5F, -0.0793F, 1.1152F, -0.3927F, 0.0F, 0.0F));
|
||||
|
||||
PartDefinition L_down = L_up.addOrReplaceChild("L_down", CubeListBuilder.create().texOffs(34, 0).addBox(-1.0F, -1.0F, -1.0F, 2.0F, 4.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 1.9207F, -1.1348F));
|
||||
|
||||
PartDefinition head = body.addOrReplaceChild("head", CubeListBuilder.create().texOffs(0, 16).addBox(-3.0F, -3.0889F, -3.7083F, 6.0F, 6.0F, 4.0F, new CubeDeformation(0.0F))
|
||||
.texOffs(34, 12).addBox(-2.0F, -0.0889F, -4.7083F, 4.0F, 3.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offset(1.625F, -2.5361F, -5.6667F));
|
||||
|
||||
PartDefinition cube_r4 = head.addOrReplaceChild("cube_r4", CubeListBuilder.create().texOffs(16, 34).addBox(-2.0F, -2.0F, 0.0F, 3.0F, 3.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(4.0F, -0.2555F, -2.5417F, 0.0F, 0.0F, -0.1745F));
|
||||
|
||||
PartDefinition cube_r5 = head.addOrReplaceChild("cube_r5", CubeListBuilder.create().texOffs(34, 16).addBox(-1.0F, -2.0F, 0.0F, 3.0F, 3.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-4.0F, -0.2555F, -2.5417F, 0.0F, 0.0F, 0.1745F));
|
||||
|
||||
PartDefinition tail = body.addOrReplaceChild("tail", CubeListBuilder.create().texOffs(14, 29).addBox(-0.5F, 1.3686F, 3.5304F, 1.0F, 1.0F, 1.0F, new CubeDeformation(0.0F))
|
||||
.texOffs(0, 26).addBox(-0.5F, -0.6314F, -0.4696F, 1.0F, 1.0F, 6.0F, new CubeDeformation(0.0F))
|
||||
.texOffs(14, 26).addBox(-0.5F, 0.3686F, 4.5304F, 1.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(1.625F, -1.625F, 4.125F, 0.2618F, 0.0F, 0.0F));
|
||||
|
||||
return LayerDefinition.create(meshdefinition, 64, 64);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupAnim(MonkeyEntity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) {
|
||||
this.root().getAllParts().forEach(ModelPart::resetPose);
|
||||
this.animateWalk(MonkeyAnimation.Monky_Running, limbSwing, limbSwingAmount, 2f, 2.5f);
|
||||
this.applyHeadRotation(netHeadYaw, headPitch);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, int color) {
|
||||
monkey.render(poseStack, vertexConsumer, packedLight, packedOverlay, color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelPart root() {
|
||||
return monkey;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package ovh.glitchlabs.masterwild.entity.client.Monkey;
|
||||
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
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.MonkeyEntity;
|
||||
|
||||
public class MonkeyRenderer extends MobRenderer<MonkeyEntity, MonkeyModel<MonkeyEntity>> {
|
||||
private static final float ADULT_SCALE = 1.0f;
|
||||
private static final float BABY_SCALE = 0.45f;
|
||||
private static final float SHADOW = 0.45f;
|
||||
|
||||
private static final ResourceLocation TEXTURE =
|
||||
ResourceLocation.fromNamespaceAndPath(Masterwild.MODID, "textures/entity/monkey.png");
|
||||
|
||||
public MonkeyRenderer(EntityRendererProvider.Context context) {
|
||||
super(context, new MonkeyModel<>(context.bakeLayer(MonkeyModel.LAYER_LOCATION)), SHADOW);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getTextureLocation(MonkeyEntity entity) {
|
||||
return TEXTURE;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void scale(MonkeyEntity entity, PoseStack poseStack, float partialTick) {
|
||||
float scale = entity.isBaby() ? BABY_SCALE : ADULT_SCALE;
|
||||
poseStack.scale(scale, scale, scale);
|
||||
this.shadowRadius = SHADOW * scale;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
package ovh.glitchlabs.masterwild.entity.custom;
|
||||
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.world.damagesource.DamageSource;
|
||||
import net.minecraft.world.entity.AgeableMob;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.ai.attributes.Attribute;
|
||||
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.Item.ModItems;
|
||||
import ovh.glitchlabs.masterwild.Sounds.ModSounds;
|
||||
import ovh.glitchlabs.masterwild.entity.ModEntities;
|
||||
|
||||
public class MonkeyEntity extends Animal {
|
||||
private static final Ingredient FOOD = Ingredient.of(ModItems.BANANA);
|
||||
|
||||
public MonkeyEntity(EntityType<? extends Animal> entityType, Level level) {
|
||||
super(entityType, level);
|
||||
}
|
||||
|
||||
public static AttributeSupplier.Builder createAttributes() {
|
||||
return AgeableMob.createMobAttributes()
|
||||
.add(Attributes.MAX_HEALTH, 8)
|
||||
.add(Attributes.MOVEMENT_SPEED, 0.25)
|
||||
.add(Attributes.FOLLOW_RANGE, 10)
|
||||
.add(Attributes.STEP_HEIGHT, 0.6);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerGoals() {
|
||||
this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1, false) {
|
||||
@Override
|
||||
protected boolean canPerformAttack(LivingEntity entity) {
|
||||
return this.isTimeToAttack() && this.mob.distanceToSqr(entity) < (this.mob.getBbWidth() * this.mob.getBbWidth() + entity.getBbWidth()) && this.mob.getSensing().hasLineOfSight(entity);
|
||||
}
|
||||
});
|
||||
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));
|
||||
this.goalSelector.addGoal(0, new FloatGoal(this));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void dropCustomDeathLoot(ServerLevel serverLevel, DamageSource source, boolean recentlyHit) {
|
||||
super.dropCustomDeathLoot(serverLevel, source, recentlyHit);
|
||||
this.spawnAtLocation(new ItemStack(ModItems.BANANA_PEEL.get()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFood(ItemStack itemStack) {
|
||||
return FOOD.test(itemStack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable AgeableMob getBreedOffspring(ServerLevel serverLevel, AgeableMob ageableMob) {
|
||||
return ModEntities.MONKEY.get().create(serverLevel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundEvent getHurtSound(DamageSource damageSource) {
|
||||
return ModSounds.MONKEY_HURT.get();
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,7 @@ import net.neoforged.neoforge.event.entity.EntityAttributeCreationEvent;
|
||||
import net.neoforged.neoforge.event.entity.RegisterSpawnPlacementsEvent;
|
||||
import ovh.glitchlabs.masterwild.Masterwild;
|
||||
import ovh.glitchlabs.masterwild.entity.ModEntities;
|
||||
import ovh.glitchlabs.masterwild.entity.client.Monkey.MonkeyModel;
|
||||
import ovh.glitchlabs.masterwild.entity.client.Pinguin.PinguinModel;
|
||||
import ovh.glitchlabs.masterwild.entity.client.Raccoon.RaccoonModel;
|
||||
import ovh.glitchlabs.masterwild.entity.client.Rooster.RoosterModel;
|
||||
@@ -33,6 +34,7 @@ public class ModEventBusEvents {
|
||||
event.registerLayerDefinition(Red_PandaModel.LAYER_LOCATION, Red_PandaModel::createBodyLayer);
|
||||
event.registerLayerDefinition(ButterflyModel.LAYER_LOCATION, ButterflyModel::createBodyLayer);
|
||||
event.registerLayerDefinition(RaccoonModel.LAYER_LOCATION, RaccoonModel::createBodyLayer);
|
||||
event.registerLayerDefinition(MonkeyModel.LAYER_LOCATION, MonkeyModel::createBodyLayer);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
@@ -44,11 +46,6 @@ public class ModEventBusEvents {
|
||||
event.put(ModEntities.HEDGEHOG.get(), HedgehogEntity.createAttributes().build());
|
||||
event.put(ModEntities.RED_PANDA.get(), Red_PandaEntity.createAttributes().build());
|
||||
event.put(ModEntities.RACCOON.get(), RaccoonEntity.createAttributes().build());
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void registerSpawnPlacements(RegisterSpawnPlacementsEvent event) {
|
||||
event.register(ModEntities.RACCOON.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES,
|
||||
Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.REPLACE);
|
||||
event.put(ModEntities.MONKEY.get(), MonkeyEntity.createAttributes().build());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,6 +30,9 @@ public class ModSpawnPlacements {
|
||||
event.register(ModEntities.RED_PANDA.get(), SpawnPlacementTypes.ON_GROUND,
|
||||
Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Animal::checkAnimalSpawnRules,
|
||||
RegisterSpawnPlacementsEvent.Operation.REPLACE);
|
||||
event.register(ModEntities.MONKEY.get(), SpawnPlacementTypes.ON_GROUND,
|
||||
Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Animal::checkAnimalSpawnRules,
|
||||
RegisterSpawnPlacementsEvent.Operation.REPLACE);
|
||||
|
||||
event.register(ModEntities.SHARK.get(), SpawnPlacementTypes.IN_WATER,
|
||||
Heightmap.Types.OCEAN_FLOOR, WaterAnimal::checkSurfaceWaterAnimalSpawnRules,
|
||||
@@ -37,7 +40,7 @@ public class ModSpawnPlacements {
|
||||
|
||||
event.register(ModEntities.FIREFLY.get(), SpawnPlacementTypes.NO_RESTRICTIONS,
|
||||
Heightmap.Types.MOTION_BLOCKING,
|
||||
(type, level, reason, pos, random) -> level.getLevel().isNight() && level.canSeeSky(pos),
|
||||
(type, level, reason, pos, random) -> level.getLevel().isNight(),
|
||||
RegisterSpawnPlacementsEvent.Operation.REPLACE);
|
||||
event.register(ModEntities.BUTTERFLY.get(), SpawnPlacementTypes.NO_RESTRICTIONS,
|
||||
Heightmap.Types.MOTION_BLOCKING,
|
||||
|
||||
@@ -28,6 +28,7 @@ public class ModBiomeModifiers {
|
||||
public static final ResourceKey<BiomeModifier> SPAWN_HEDGEHOG = registerKey("spawn_hedgehog");
|
||||
public static final ResourceKey<BiomeModifier> SPAWN_RED_PANDA = registerKey("spawn_red_panda");
|
||||
public static final ResourceKey<BiomeModifier> SPAWN_BUTTERFLY = registerKey("spawn_butterfly");
|
||||
public static final ResourceKey<BiomeModifier> SPAWN_MONKEY = registerKey("spawn_monkey");
|
||||
|
||||
public static void bootstrap(BootstrapContext<BiomeModifier> context) {
|
||||
var placedFeatures = context.lookup(Registries.PLACED_FEATURE);
|
||||
@@ -64,7 +65,7 @@ public class ModBiomeModifiers {
|
||||
biomes.getOrThrow(Biomes.PLAINS),
|
||||
biomes.getOrThrow(Biomes.SUNFLOWER_PLAINS),
|
||||
biomes.getOrThrow(Biomes.MEADOW)),
|
||||
ModEntities.ROOSTER.get(), 10, 2, 3);
|
||||
ModEntities.ROOSTER.get(), 5, 2, 3);
|
||||
|
||||
addSpawn(context, SPAWN_SHARK,
|
||||
biomes.getOrThrow(BiomeTags.IS_OCEAN),
|
||||
@@ -81,6 +82,11 @@ public class ModBiomeModifiers {
|
||||
biomes.getOrThrow(Biomes.CHERRY_GROVE)),
|
||||
ModEntities.RED_PANDA.get(), 8, 1, 3);
|
||||
|
||||
addSpawn(context, SPAWN_MONKEY,
|
||||
HolderSet.direct(
|
||||
biomes.getOrThrow(Biomes.JUNGLE)),
|
||||
ModEntities.MONKEY.get(), 9, 2, 5);
|
||||
|
||||
addSpawn(context, SPAWN_BUTTERFLY,
|
||||
HolderSet.direct(
|
||||
biomes.getOrThrow(Biomes.FLOWER_FOREST),
|
||||
|
||||
@@ -2,5 +2,9 @@
|
||||
"rooster_crow": {
|
||||
"subtitle": "subtitles.masterwild.rooster_crow",
|
||||
"sounds": ["masterwild:rooster_crow"]
|
||||
},
|
||||
"monkey_hurt": {
|
||||
"subtitle": "subtitles.masterwild.monkey_hurt",
|
||||
"sounds": ["masterwild:monkey_hurt"]
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 2.1 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Reference in New Issue
Block a user