Skip to content

Commit 747cc0c

Browse files
committed
Add trout: A fish entity.
1 parent 822c350 commit 747cc0c

30 files changed

+545
-14
lines changed

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ loader_version=0.14.21
1010

1111

1212
# Mod Properties
13-
mod_version=0.2.2
13+
mod_version=0.2.3
1414
maven_group=barch.mc_extended
1515
archives_base_name=mc-extended
1616

src/client/java/barch/mc_extended/EntitiesClient.java

+2
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@ public class EntitiesClient {
55
public static final EntitiesClient INSTANCE = new EntitiesClient();
66

77
public static final Lost LOST = Lost.INSTANCE;
8+
public static final TroutFish TROUT_FISH = TroutFish.INSTANCE;
89

910
public static void registerClient() {
1011

1112
LOST.registerClient();
13+
TROUT_FISH.registerClient();
1214

1315
}
1416

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package barch.mc_extended;
2+
3+
import barch.mc_extended.render.entity.model.TroutFishEntityModel;
4+
import barch.mc_extended.render.entity.renderer.LostEntityRenderer;
5+
import barch.mc_extended.render.entity.renderer.TroutFishEntityRenderer;
6+
import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry;
7+
import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry;
8+
import net.minecraft.client.render.entity.model.EntityModelLayer;
9+
import net.minecraft.util.Identifier;
10+
11+
import static barch.mc_extended.Entities.Entities.LOST;
12+
import static barch.mc_extended.Entities.Entities.TROUT_FISH;
13+
import static barch.mc_extended.MCExtended.NAMESPACE;
14+
15+
public class TroutFish {
16+
17+
public static final TroutFish INSTANCE = new TroutFish();
18+
19+
public static final EntityModelLayer MODEL_TROUT_FISH_LAYER = new EntityModelLayer(new Identifier(NAMESPACE, "trout_fish"), "main");
20+
21+
public static void registerClient() {
22+
23+
EntityRendererRegistry.register(TROUT_FISH, TroutFishEntityRenderer::new);
24+
25+
EntityModelLayerRegistry.registerModelLayer(MODEL_TROUT_FISH_LAYER, TroutFishEntityModel::getTexturedModelData);
26+
27+
}
28+
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package barch.mc_extended.render.entity.model;
2+
3+
import net.minecraft.client.model.*;
4+
import net.minecraft.client.render.entity.model.SinglePartEntityModel;
5+
import net.minecraft.entity.Entity;
6+
import net.minecraft.util.math.MathHelper;
7+
8+
public class TroutFishEntityModel<T extends Entity> extends SinglePartEntityModel<T> {
9+
private static final String BODY_FRONT = "body_front";
10+
private static final String BODY_BACK = "body_back";
11+
private final ModelPart root;
12+
private final ModelPart tail;
13+
14+
public TroutFishEntityModel(ModelPart root) {
15+
this.root = root;
16+
this.tail = root.getChild("body_back");
17+
}
18+
19+
public static TexturedModelData getTexturedModelData() {
20+
ModelData modelData = new ModelData();
21+
ModelPartData modelPartData = modelData.getRoot();
22+
boolean i = true;
23+
ModelPartData modelPartData2 = modelPartData.addChild("body_front", ModelPartBuilder.create().uv(0, 0).cuboid(-1.5F, -2.5F, 0.0F, 3.0F, 5.0F, 8.0F), ModelTransform.pivot(0.0F, 20.0F, 0.0F));
24+
ModelPartData modelPartData3 = modelPartData.addChild("body_back", ModelPartBuilder.create().uv(0, 13).cuboid(-1.5F, -2.5F, 0.0F, 3.0F, 5.0F, 8.0F), ModelTransform.pivot(0.0F, 20.0F, 8.0F));
25+
modelPartData.addChild("head", ModelPartBuilder.create().uv(22, 0).cuboid(-1.0F, -2.0F, -3.0F, 2.0F, 4.0F, 3.0F), ModelTransform.pivot(0.0F, 20.0F, 0.0F));
26+
modelPartData3.addChild("back_fin", ModelPartBuilder.create().uv(20, 10).cuboid(0.0F, -2.5F, 0.0F, 0.0F, 5.0F, 6.0F), ModelTransform.pivot(0.0F, 0.0F, 8.0F));
27+
modelPartData2.addChild("top_front_fin", ModelPartBuilder.create().uv(2, 1).cuboid(0.0F, 0.0F, 0.0F, 0.0F, 2.0F, 3.0F), ModelTransform.pivot(0.0F, -4.5F, 5.0F));
28+
modelPartData3.addChild("top_back_fin", ModelPartBuilder.create().uv(0, 2).cuboid(0.0F, 0.0F, 0.0F, 0.0F, 2.0F, 4.0F), ModelTransform.pivot(0.0F, -4.5F, -1.0F));
29+
modelPartData.addChild("right_fin", ModelPartBuilder.create().uv(-4, 0).cuboid(-2.0F, 0.0F, 0.0F, 2.0F, 0.0F, 2.0F), ModelTransform.of(-1.5F, 21.5F, 0.0F, 0.0F, 0.0F, -0.7853982F));
30+
modelPartData.addChild("left_fin", ModelPartBuilder.create().uv(0, 0).cuboid(0.0F, 0.0F, 0.0F, 2.0F, 0.0F, 2.0F), ModelTransform.of(1.5F, 21.5F, 0.0F, 0.0F, 0.0F, 0.7853982F));
31+
return TexturedModelData.of(modelData, 32, 32);
32+
}
33+
34+
public ModelPart getPart() {
35+
return this.root;
36+
}
37+
38+
public void setAngles(T entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) {
39+
float f = 1.0F;
40+
float g = 1.0F;
41+
if (!entity.isTouchingWater()) {
42+
f = 1.3F;
43+
g = 1.7F;
44+
}
45+
46+
this.tail.yaw = -f * 0.25F * MathHelper.sin(g * 0.6F * animationProgress);
47+
}
48+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package barch.mc_extended.render.entity.renderer;
2+
3+
import barch.mc_extended.Entities.TroutFishEntity;
4+
import barch.mc_extended.render.entity.model.TroutFishEntityModel;
5+
import net.minecraft.client.render.entity.EntityRendererFactory;
6+
import net.minecraft.client.render.entity.MobEntityRenderer;
7+
import net.minecraft.client.util.math.MatrixStack;
8+
import net.minecraft.util.Identifier;
9+
import net.minecraft.util.math.MathHelper;
10+
import net.minecraft.util.math.RotationAxis;
11+
12+
import static barch.mc_extended.MCExtended.NAMESPACE;
13+
import static barch.mc_extended.TroutFish.MODEL_TROUT_FISH_LAYER;
14+
15+
public class TroutFishEntityRenderer extends MobEntityRenderer<TroutFishEntity, TroutFishEntityModel<TroutFishEntity>> {
16+
private static final Identifier TEXTURE = new Identifier(NAMESPACE,"textures/entity/fish/trout_fish.png");
17+
18+
public TroutFishEntityRenderer(EntityRendererFactory.Context context) {
19+
super(context, new TroutFishEntityModel(context.getPart(MODEL_TROUT_FISH_LAYER)), 0.4F);
20+
}
21+
22+
public Identifier getTexture(TroutFishEntity TroutFishEntity) {
23+
return TEXTURE;
24+
}
25+
26+
protected void setupTransforms(TroutFishEntity TroutFishEntity, MatrixStack matrixStack, float f, float g, float h) {
27+
super.setupTransforms(TroutFishEntity, matrixStack, f, g, h);
28+
float i = 1.0F;
29+
float j = 1.0F;
30+
if (!TroutFishEntity.isTouchingWater()) {
31+
i = 1.3F;
32+
j = 1.7F;
33+
}
34+
35+
float k = i * 4.3F * MathHelper.sin(j * 0.6F * f);
36+
matrixStack.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(k));
37+
matrixStack.translate(0.0F, 0.0F, -0.4F);
38+
if (!TroutFishEntity.isTouchingWater()) {
39+
matrixStack.translate(0.2F, 0.1F, 0.0F);
40+
matrixStack.multiply(RotationAxis.POSITIVE_Z.rotationDegrees(90.0F));
41+
}
42+
43+
}
44+
}

src/main/java/barch/mc_extended/ArFoMiToVi.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import barch.mc_extended.Entities.Entities;
55
import barch.mc_extended.Foods.Foods;
66
import barch.mc_extended.Minerals.Minerals;
7+
import barch.mc_extended.Misc.Misc;
78
import barch.mc_extended.Tools.ToolMaterials;
89
import barch.mc_extended.Villagers.Villagers;
910

@@ -13,22 +14,19 @@ public class ArFoMiToVi {
1314

1415

1516
public static final Minerals MINERALS = Minerals.INSTANCE;
16-
1717
public static final Foods FOODS = Foods.INSTANCE;
18-
18+
public static final Misc MISC = Misc.INSTANCE;
1919
public static final ArmorMaterials ARMOR_MATERIALS = ArmorMaterials.INSTANCE;
20-
2120
public static final ToolMaterials TOOL_MATERIALS = ToolMaterials.INSTANCE;
22-
2321
public static final Villagers VILLAGERS = Villagers.INSTANCE;
24-
2522
public static final Entities ENTITIES = Entities.INSTANCE;
2623

2724

2825
public static void RegisterAll() {
2926

3027
MINERALS.RegisterAll();
3128
FOODS.RegisterAll();
29+
MISC.RegisterAll();
3230

3331
ARMOR_MATERIALS.RegisterAll();
3432
TOOL_MATERIALS.RegisterAll();

src/main/java/barch/mc_extended/Entities/Entities.java

+20
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,25 @@ public class Entities {
3333
);
3434
public static final Item LOST_SPAWN_EGG = new SpawnEggItem(LOST, 0x839f7D, 0x9f9f9f, new FabricItemSettings());
3535

36+
// trout_fish entity and spawn egg
37+
public static final EntityType<TroutFishEntity> TROUT_FISH = Registry.register(
38+
Registries.ENTITY_TYPE,
39+
new Identifier(NAMESPACE, "trout_fish"),
40+
FabricEntityTypeBuilder.create(SpawnGroup.CREATURE, TroutFishEntity::new).dimensions(EntityDimensions.fixed(.4f, .7f)).trackRangeBlocks(10).build()
41+
);
42+
public static final Item TROUT_FISH_SPAWN_EGG = new SpawnEggItem(TROUT_FISH, 0x835e50, 0xeac17c, new FabricItemSettings());
43+
3644
public static void RegisterAll() {
3745

3846
// lost entity
3947
FabricDefaultAttributeRegistry.register(LOST, LostEntity.createAbstractSkeletonAttributes());
4048
Registry.register(Registries.ITEM, new Identifier(NAMESPACE, "lost_spawn_egg"), LOST_SPAWN_EGG);
4149
BiomeModifications.addSpawn(BiomeSelectors.tag(Tags.BiomeTags.LOSTS_SPAWN_IN), SpawnGroup.MONSTER, LOST, 80, 1, 4);
4250

51+
// trout_fish entity
52+
FabricDefaultAttributeRegistry.register(TROUT_FISH, TroutFishEntity.createFishAttributes());
53+
Registry.register(Registries.ITEM, new Identifier(NAMESPACE, "trout_fish_spawn_egg"), TROUT_FISH_SPAWN_EGG);
54+
BiomeModifications.addSpawn(BiomeSelectors.spawnsOneOf(EntityType.SALMON), SpawnGroup.WATER_AMBIENT, TROUT_FISH, 5, 1, 5);
4355

4456
GroupAll();
4557

@@ -56,5 +68,13 @@ public static void GroupAll() {
5668
content.addAfter(Items.STRAY_SPAWN_EGG, LOST_SPAWN_EGG);
5769
});
5870

71+
// trout fish spawn egg
72+
ItemGroupEvents.modifyEntriesEvent(MC_EXTENDED_GROUP).register(content -> {
73+
content.add(TROUT_FISH_SPAWN_EGG);
74+
});
75+
ItemGroupEvents.modifyEntriesEvent(ItemGroups.SPAWN_EGGS).register(content -> {
76+
content.addAfter(Items.SALMON_SPAWN_EGG, TROUT_FISH_SPAWN_EGG);
77+
});
78+
5979
}
6080
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package barch.mc_extended.Entities;
2+
3+
import net.minecraft.entity.EntityType;
4+
import net.minecraft.entity.damage.DamageSource;
5+
import net.minecraft.entity.passive.SchoolingFishEntity;
6+
import net.minecraft.item.ItemStack;
7+
import net.minecraft.sound.SoundEvent;
8+
import net.minecraft.sound.SoundEvents;
9+
import net.minecraft.world.World;
10+
11+
import static barch.mc_extended.Misc.FishBuckets.TROUT_BUCKET;
12+
13+
14+
public class TroutFishEntity
15+
extends SchoolingFishEntity {
16+
public TroutFishEntity(EntityType<? extends TroutFishEntity> entityType, World world) {
17+
super((EntityType<? extends SchoolingFishEntity>)entityType, world);
18+
}
19+
20+
@Override
21+
public int getMaxGroupSize() {
22+
return 10;
23+
}
24+
25+
@Override
26+
public ItemStack getBucketItem() {
27+
return new ItemStack(TROUT_BUCKET);
28+
}
29+
30+
@Override
31+
protected SoundEvent getAmbientSound() {
32+
return SoundEvents.ENTITY_SALMON_AMBIENT;
33+
}
34+
35+
@Override
36+
protected SoundEvent getDeathSound() {
37+
return SoundEvents.ENTITY_SALMON_DEATH;
38+
}
39+
40+
@Override
41+
protected SoundEvent getHurtSound(DamageSource source) {
42+
return SoundEvents.ENTITY_SALMON_HURT;
43+
}
44+
45+
@Override
46+
protected SoundEvent getFlopSound() {
47+
return SoundEvents.ENTITY_SALMON_FLOP;
48+
}
49+
}

src/main/java/barch/mc_extended/Foods/Foods.java

+9-4
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@ public class Foods {
66
public static final Foods INSTANCE = new Foods();
77

88

9-
public static final Mushrooms MUSHROOMS = new Mushrooms();
10-
public static final Cheese CHEESE = new Cheese();
11-
public static final Tomato TOMATO = new Tomato();
12-
public static final Onion ONION = new Onion();
9+
public static final Mushrooms MUSHROOMS = Mushrooms.INSTANCE;
10+
public static final Cheese CHEESE = Cheese.INSTANCE;
11+
public static final Tomato TOMATO = Tomato.INSTANCE;
12+
public static final Onion ONION = Onion.INSTANCE;
13+
public static final Meats MEATS = Meats.INSTANCE;
1314

1415

1516
public static void RegisterAll() {
@@ -31,6 +32,10 @@ public static void RegisterAll() {
3132
CHEESE.RegisterAll();
3233
CHEESE.GroupItems();
3334

35+
// register meats
36+
MEATS.RegisterAll();
37+
MEATS.GroupItems();
38+
3439
}
3540

3641
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package barch.mc_extended.Foods;
2+
3+
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
4+
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
5+
import net.minecraft.item.*;
6+
import net.minecraft.registry.Registries;
7+
import net.minecraft.registry.Registry;
8+
import net.minecraft.util.Identifier;
9+
10+
import static barch.mc_extended.MCExtended.MC_EXTENDED_GROUP;
11+
import static barch.mc_extended.MCExtended.NAMESPACE;
12+
13+
public class Meats {
14+
15+
public static final Meats INSTANCE = new Meats();
16+
17+
// trout
18+
public static final Item TROUT = new Item(new FabricItemSettings().food(FoodComponents.SALMON));
19+
public static final Item COOKED_TROUT = new Item(new FabricItemSettings().food(FoodComponents.COOKED_SALMON));
20+
21+
22+
public static void RegisterAll() {
23+
24+
// trout
25+
Registry.register(Registries.ITEM, new Identifier(NAMESPACE, "trout"), TROUT);
26+
Registry.register(Registries.ITEM, new Identifier(NAMESPACE, "cooked_trout"), COOKED_TROUT);
27+
28+
GroupItems();
29+
30+
}
31+
public static void GroupItems() {
32+
33+
34+
// trout
35+
ItemGroupEvents.modifyEntriesEvent(MC_EXTENDED_GROUP).register(content -> {
36+
content.add(TROUT);
37+
});
38+
ItemGroupEvents.modifyEntriesEvent(ItemGroups.TOOLS).register(content -> {
39+
content.addAfter(Items.SALMON, TROUT);
40+
});
41+
// cooked trout
42+
ItemGroupEvents.modifyEntriesEvent(MC_EXTENDED_GROUP).register(content -> {
43+
content.add(COOKED_TROUT);
44+
});
45+
ItemGroupEvents.modifyEntriesEvent(ItemGroups.FOOD_AND_DRINK).register(content -> {
46+
content.addAfter(Items.COOKED_SALMON, COOKED_TROUT);
47+
});
48+
49+
}
50+
51+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package barch.mc_extended.Misc;
2+
3+
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
4+
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
5+
import net.minecraft.fluid.Fluids;
6+
import net.minecraft.item.EntityBucketItem;
7+
import net.minecraft.item.Item;
8+
import net.minecraft.item.ItemGroups;
9+
import net.minecraft.item.Items;
10+
import net.minecraft.registry.Registries;
11+
import net.minecraft.registry.Registry;
12+
import net.minecraft.sound.SoundEvents;
13+
import net.minecraft.util.Identifier;
14+
15+
import static barch.mc_extended.Entities.Entities.TROUT_FISH;
16+
import static barch.mc_extended.MCExtended.MC_EXTENDED_GROUP;
17+
import static barch.mc_extended.MCExtended.NAMESPACE;
18+
19+
public class FishBuckets {
20+
21+
public static final FishBuckets INSTANCE = new FishBuckets();
22+
23+
// trout bucket
24+
public static final Item TROUT_BUCKET = new EntityBucketItem(TROUT_FISH, Fluids.WATER, SoundEvents.ITEM_BUCKET_EMPTY_FISH, new FabricItemSettings());
25+
26+
27+
28+
public static void RegisterAll() {
29+
30+
Registry.register(Registries.ITEM, new Identifier(NAMESPACE, "trout_bucket"), TROUT_BUCKET);
31+
32+
GroupItems();
33+
}
34+
35+
public static void GroupItems() {
36+
37+
// onion tomato sauce
38+
ItemGroupEvents.modifyEntriesEvent(MC_EXTENDED_GROUP).register(content -> {
39+
content.add(TROUT_BUCKET);
40+
});
41+
ItemGroupEvents.modifyEntriesEvent(ItemGroups.TOOLS).register(content -> {
42+
content.addAfter(Items.SALMON_BUCKET, TROUT_BUCKET);
43+
});
44+
}
45+
}

0 commit comments

Comments
 (0)