diff --git a/src/main/java/com/mrcrayfish/goblintraders/client/renderer/entity/GoblinTraderRenderer.java b/src/main/java/com/mrcrayfish/goblintraders/client/renderer/entity/GoblinTraderRenderer.java index 15ec0d9..11dddd5 100644 --- a/src/main/java/com/mrcrayfish/goblintraders/client/renderer/entity/GoblinTraderRenderer.java +++ b/src/main/java/com/mrcrayfish/goblintraders/client/renderer/entity/GoblinTraderRenderer.java @@ -2,10 +2,9 @@ import com.mrcrayfish.goblintraders.client.renderer.entity.model.GoblinTraderModel; import com.mrcrayfish.goblintraders.entity.AbstractGoblinEntity; -import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRendererManager; import net.minecraft.client.renderer.entity.MobRenderer; -import net.minecraft.client.renderer.entity.model.BipedModel; +import net.minecraft.client.renderer.entity.layers.HeldItemLayer; import net.minecraft.util.ResourceLocation; /** @@ -16,6 +15,7 @@ public class GoblinTraderRenderer extends MobRenderer(this)); } @Override diff --git a/src/main/java/com/mrcrayfish/goblintraders/client/renderer/entity/model/GoblinTraderModel.java b/src/main/java/com/mrcrayfish/goblintraders/client/renderer/entity/model/GoblinTraderModel.java index 9f07212..754187a 100644 --- a/src/main/java/com/mrcrayfish/goblintraders/client/renderer/entity/model/GoblinTraderModel.java +++ b/src/main/java/com/mrcrayfish/goblintraders/client/renderer/entity/model/GoblinTraderModel.java @@ -1,16 +1,20 @@ package com.mrcrayfish.goblintraders.client.renderer.entity.model; import com.google.common.collect.ImmutableList; +import com.mojang.blaze3d.matrix.MatrixStack; import com.mrcrayfish.goblintraders.entity.AbstractGoblinEntity; +import net.minecraft.client.renderer.entity.model.IHasArm; +import net.minecraft.client.renderer.entity.model.IHasHead; import net.minecraft.client.renderer.entity.model.SegmentedModel; import net.minecraft.client.renderer.model.ModelRenderer; +import net.minecraft.util.Hand; import net.minecraft.util.HandSide; import net.minecraft.util.math.MathHelper; /** * Author: MrCrayfish */ -public class GoblinTraderModel extends SegmentedModel +public class GoblinTraderModel extends SegmentedModel implements IHasArm, IHasHead { public ModelRenderer head; public ModelRenderer hood; @@ -125,5 +129,25 @@ public void render(AbstractGoblinEntity entity, float limbSwing, float limbSwing arm.rotateAngleY += this.body.rotateAngleY * 2.0F; arm.rotateAngleZ += MathHelper.sin(this.swingProgress * (float)Math.PI) * -0.4F; } + + if(entity.isHandActive()) + { + this.rightArm.rotateAngleX = (float) Math.toRadians(-90F + 5F * Math.sin(ageInTicks)); + this.leftArm.rotateAngleX = (float) Math.toRadians(-90F + 5F * Math.sin(ageInTicks)); + } + } + + @Override + public void func_225599_a_(HandSide handSide, MatrixStack matrixStack) + { + this.rightArm.setAnglesAndRotation(matrixStack); + matrixStack.translate(0.25, -0.15, 0.25); + matrixStack.scale(0.75F, 0.75F, 0.75F); + } + + @Override + public ModelRenderer getModelHead() + { + return this.head; } } diff --git a/src/main/java/com/mrcrayfish/goblintraders/entity/AbstractGoblinEntity.java b/src/main/java/com/mrcrayfish/goblintraders/entity/AbstractGoblinEntity.java index a0aa51d..f40d887 100644 --- a/src/main/java/com/mrcrayfish/goblintraders/entity/AbstractGoblinEntity.java +++ b/src/main/java/com/mrcrayfish/goblintraders/entity/AbstractGoblinEntity.java @@ -1,9 +1,7 @@ package com.mrcrayfish.goblintraders.entity; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Sets; -import com.mrcrayfish.goblintraders.entity.ai.goal.AttackRevengeTargetGoal; -import com.mrcrayfish.goblintraders.entity.ai.goal.FollowPotentialCustomerGoal; +import com.mrcrayfish.goblintraders.entity.ai.goal.*; import com.mrcrayfish.goblintraders.entity.ai.goal.LookAtCustomerGoal; import com.mrcrayfish.goblintraders.entity.ai.goal.TradeWithPlayerGoal; import net.minecraft.entity.CreatureEntity; @@ -58,6 +56,7 @@ protected void registerGoals() this.goalSelector.addGoal(2, new LookAtCustomerGoal(this)); this.goalSelector.addGoal(3, new AttackRevengeTargetGoal(this)); this.goalSelector.addGoal(4, new FollowPotentialCustomerGoal(this)); + this.goalSelector.addGoal(5, new EatAppleGoal(this)); this.goalSelector.addGoal(5, new WaterAvoidingRandomWalkingGoal(this, 0.4D)); this.goalSelector.addGoal(7, new LookAtWithoutMovingGoal(this, PlayerEntity.class, 4.0F, 1.0F)); this.goalSelector.addGoal(8, new LookAtGoal(this, MobEntity.class, 8.0F)); @@ -65,6 +64,30 @@ protected void registerGoals() public abstract ResourceLocation getTexture(); + @Override + protected void onItemUseFinish() + { + if(!this.activeItemStack.equals(this.getHeldItem(this.getActiveHand()))) + { + this.stopActiveHand(); + } + else + { + if(!this.activeItemStack.isEmpty() && this.isHandActive()) + { + this.func_226293_b_(this.activeItemStack, 16); + ItemStack copy = this.activeItemStack.copy(); + if(copy.getItem() == Items.APPLE && copy.getItem().getFood() != null) + { + this.setHealth(this.getHealth() + copy.getItem().getFood().getHealing()); + } + ItemStack stack = net.minecraftforge.event.ForgeEventFactory.onItemUseFinish(this, copy, getItemInUseCount(), this.activeItemStack.onItemUseFinish(this.world, this)); + this.setHeldItem(this.getActiveHand(), stack); + this.resetActiveHand(); + } + } + } + @Override public void livingTick() { diff --git a/src/main/java/com/mrcrayfish/goblintraders/entity/ai/goal/EatAppleGoal.java b/src/main/java/com/mrcrayfish/goblintraders/entity/ai/goal/EatAppleGoal.java new file mode 100644 index 0000000..4a220a3 --- /dev/null +++ b/src/main/java/com/mrcrayfish/goblintraders/entity/ai/goal/EatAppleGoal.java @@ -0,0 +1,21 @@ +package com.mrcrayfish.goblintraders.entity.ai.goal; + +import com.mrcrayfish.goblintraders.entity.AbstractGoblinEntity; +import net.minecraft.entity.ai.goal.Goal; +import net.minecraft.entity.ai.goal.UseItemGoal; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; + +import java.util.EnumSet; + +/** + * Author: MrCrayfish + */ +public class EatAppleGoal extends UseItemGoal +{ + public EatAppleGoal(AbstractGoblinEntity entity) + { + super(entity, new ItemStack(Items.APPLE), null, entity1 -> entity1.getHealth() < entity1.getMaxHealth() && entity1.getRNG().nextInt(40) == 0); //TODO change sound to a burp + this.setMutexFlags(EnumSet.of(Goal.Flag.MOVE)); + } +} diff --git a/src/main/java/com/mrcrayfish/goblintraders/init/ModEntities.java b/src/main/java/com/mrcrayfish/goblintraders/init/ModEntities.java index 93c93b4..f3c3963 100644 --- a/src/main/java/com/mrcrayfish/goblintraders/init/ModEntities.java +++ b/src/main/java/com/mrcrayfish/goblintraders/init/ModEntities.java @@ -24,7 +24,7 @@ public class ModEntities { private static final List> ENTITY_TYPES = new ArrayList<>(); - public static final EntityType GOBLIN_TRADER = build(new ResourceLocation(Reference.MOD_ID, "goblin_trader"), GoblinTraderEntity::new, 0.75F, 1.0F); + public static final EntityType GOBLIN_TRADER = build(new ResourceLocation(Reference.MOD_ID, "goblin_trader"), GoblinTraderEntity::new, 0.5F, 1.0F); private static EntityType build(ResourceLocation id, Function function, float width, float height) {