2
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

194 lines
8.4 KiB
Java

package com.zivilon.cinder_loe.entity;
import com.zivilon.cinder_loe.CinderLoE;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.IRangedAttackMob;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.EntityAIBase;
import net.minecraft.entity.ai.EntityAILookIdle;
import net.minecraft.entity.ai.EntityAIOpenDoor;
import net.minecraft.entity.ai.EntityAISwimming;
import net.minecraft.entity.ai.EntityAIWander;
import net.minecraft.entity.ai.EntityAIWatchClosest;
import net.minecraft.entity.ai.EntityAIWatchClosest2;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
import lotr.common.LOTRFoods;
import lotr.common.LOTRMod;
import lotr.common.entity.ai.LOTREntityAIAttackOnCollide;
import lotr.common.entity.ai.LOTREntityAIDrink;
import lotr.common.entity.ai.LOTREntityAIEat;
import lotr.common.entity.ai.LOTREntityAIFollowHiringPlayer;
import lotr.common.entity.ai.LOTREntityAIHiredRemainStill;
import lotr.common.entity.animal.LOTREntityHorse;
import lotr.common.entity.npc.LOTREntityMan;
import lotr.common.entity.npc.LOTREntityNPC;
import lotr.common.entity.npc.LOTRNPCMount;
import lotr.common.entity.npc.LOTRNames;
import lotr.common.fac.LOTRFaction;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class Renegade extends LOTREntityMan {
public Renegade(World world) {
super(world);
setSize(0.6F, 1.8F);
getNavigator().setAvoidsWater(true);
getNavigator().setBreakDoors(true);
((EntityLiving) this).tasks.addTask(0, (EntityAIBase) new EntityAISwimming((EntityLiving) this));
((EntityLiving) this).tasks.addTask(1, (EntityAIBase) new LOTREntityAIHiredRemainStill(this));
((EntityLiving) this).tasks.addTask(2, (EntityAIBase) new LOTREntityAIAttackOnCollide(this, 1.3D, false));
((EntityLiving) this).tasks.addTask(3, (EntityAIBase) new LOTREntityAIFollowHiringPlayer(this));
((EntityLiving) this).tasks.addTask(4, (EntityAIBase) new EntityAIOpenDoor((EntityLiving) this, true));
((EntityLiving) this).tasks.addTask(6, (EntityAIBase) new LOTREntityAIEat(this, LOTRFoods.DUNLENDING, 8000));
((EntityLiving) this).tasks.addTask(6, (EntityAIBase) new LOTREntityAIDrink(this, LOTRFoods.DUNLENDING_DRINK, 8000));
((EntityLiving) this).tasks.addTask(7, (EntityAIBase) new EntityAIWatchClosest2((EntityLiving) this, EntityPlayer.class, 8.0F, 0.02F));
((EntityLiving) this).tasks.addTask(7, (EntityAIBase) new EntityAIWatchClosest2((EntityLiving) this, LOTREntityNPC.class, 5.0F, 0.02F));
((EntityLiving) this).tasks.addTask(8, (EntityAIBase) new EntityAIWatchClosest((EntityLiving) this, EntityLiving.class, 8.0F, 0.02F));
((EntityLiving) this).tasks.addTask(9, (EntityAIBase) new EntityAILookIdle((EntityLiving) this));
addTargetTasks(true);
}
public void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor) {
// Do nothing
}
public LOTRNPCMount createMountToRide() {
LOTREntityHorse horse = (LOTREntityHorse) super.createMountToRide();
horse.setMountArmor(new ItemStack(LOTRMod.horseArmorIron));
return (LOTRNPCMount) horse;
}
public void setupNPCGender() {
this.familyInfo.setMale(this.rand.nextBoolean());
}
protected void applyEntityAttributes() {
super.applyEntityAttributes();
getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(20.0D);
getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.2D);
}
public LOTRFaction getFaction() {
return LOTRFaction.UTUMNO;
}
public String getNPCName() {
return this.familyInfo.getName();
}
public String getNPCFormattedName(String npcName, String entityName) {
if (getClass() == Renegade.class) return StatCollector
.translateToLocalFormatted("entity.cinder_loe.Renegade.entityName", new Object[] { npcName });
return super.getNPCFormattedName(npcName, entityName);
}
protected void onAttackModeChange(LOTREntityNPC.AttackMode mode, boolean mounted) {
if (mode == LOTREntityNPC.AttackMode.IDLE) {
setCurrentItemOrArmor(0, this.npcItemsInv.getIdleItem());
} else {
setCurrentItemOrArmor(0, this.npcItemsInv.getMeleeWeapon());
((EntityLiving) this).tasks.addTask(5, (EntityAIBase) new EntityAIWander(this, 1.0D));
}
}
protected void dropFewItems(boolean flag, int i) {
super.dropFewItems(flag, i);
int bones = this.rand.nextInt(2) + this.rand.nextInt(i + 1);
for (int l = 0; l < bones; l++) dropItem(Items.bone, 1);
}
public boolean getCanSpawnHere() {
return false;
}
public String getSpeechBank(EntityPlayer entityplayer) {
if (isDrunkard()) return "renegade/drunkard/neutral";
return "renegade/man/hostile";
}
List<Runnable> codeOptions = Arrays.asList(() -> {
this.familyInfo.setName(LOTRNames.getGondorName(this.rand, this.familyInfo.isMale()));
}, () -> {
this.familyInfo.setName(LOTRNames.getBreeName(this.rand, this.familyInfo.isMale()));
}, () -> {
this.familyInfo.setName(LOTRNames.getRhudaurName(this.rand, this.familyInfo.isMale()));
}, () -> {
this.familyInfo.setName(LOTRNames.getRohirricName(this.rand, this.familyInfo.isMale()));
},
/*
* () -> {
* System.out.println("[CinderCore] Executing GondorName");
* this.familyInfo.setName(LOTRNames.getDunlendingName(this.rand, this.familyInfo.isMale())),
* }
* () -> {
* System.out.println("[CinderCore] Executing GondorName");
* this.familyInfo.setName(LOTRNames.getDorwinionName(this.rand, this.familyInfo.isMale())),
* }
* () -> {
* System.out.println("[CinderCore] Executing GondorName");
* this.familyInfo.setName(LOTRNames.getDalishName(this.rand, this.familyInfo.isMale())),
* }
* () -> {
* System.out.println("[CinderCore] Executing GondorName");
* this.familyInfo.setName(LOTRNames.getRhunicName(this.rand, this.familyInfo.isMale())),
* }
* () -> {
* System.out.println("[CinderCore] Executing GondorName");
* this.familyInfo.setName(LOTRNames.getUmbarName(this.rand, this.familyInfo.isMale())),
* }
* () -> {
* System.out.println("[CinderCore] Executing GondorName");
* this.familyInfo.setName(LOTRNames.getHarnennorName(this.rand, this.familyInfo.isMale())),
* }
* () -> {
* System.out.println("[CinderCore] Executing GondorName");
* this.familyInfo.setName(LOTRNames.getSouthronCoastName(this.rand, this.familyInfo.isMale())),
* }
* () -> {
* System.out.println("[CinderCore] Executing GondorName");
* this.familyInfo.setName(LOTRNames.getNomadName(this.rand, this.familyInfo.isMale())),
* }
* () -> {
* System.out.println("[CinderCore] Executing GondorName");
* this.familyInfo.setName(LOTRNames.getGulfHaradName(this.rand, this.familyInfo.isMale())),
* }
* () -> {
* System.out.println("[CinderCore] Executing GondorName");
* this.familyInfo.setName(LOTRNames.getMoredainName(this.rand, this.familyInfo.isMale())),
* }
*/
() -> {
this.familyInfo.setName(LOTRNames.getTauredainName(this.rand, this.familyInfo.isMale()));
});
public void setupNPCName() {
if (this.familyInfo == null) System.out.println("[CinderCore] Family info is null");
if (this.rand == null) System.out.println("[CinderCore] rand is null");
Boolean gender = this.familyInfo.isMale();
if (gender == null) System.out.println("[CinderCore] Gender is null");
/*
* int randomIndex = this.rand.nextInt(codeOptions.size());
* codeOptions.get(randomIndex)
* .run();;
*/
this.familyInfo.setName(LOTRNames.getDorwinionName(this.rand, this.familyInfo.isMale()));
}
@Override
public ItemStack getPickedResult(MovingObjectPosition target) {
return new ItemStack(CinderLoE.spawnEgg, 1, 0);
}
}