forked from ACGaming/Spackenmobs
Auto-formatting "fix" and additional stuff
Adapt auto-formatting to own weird style Re-added missing Jens AI and loot Fixed creative tab
This commit is contained in:
parent
bac6384bff
commit
68b777bffb
|
@ -12,33 +12,38 @@ import net.minecraftforge.fml.relauncher.Side;
|
|||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
@Mod(modid = "spackenmobs", version = "RC1", acceptedMinecraftVersions = "[1.12.2]")
|
||||
public class Spackenmobs {
|
||||
public class Spackenmobs
|
||||
{
|
||||
public static final String MODID = "spackenmobs";
|
||||
public static final String VERSION = "RC1";
|
||||
|
||||
public static final CreativeTabs SPACKENMOBS_TAB = new SpackenmobsTab();
|
||||
public static final CreativeTabs SPACKENMOBS_TAB = new SpackenmobsTab("tabSpackenmobs");
|
||||
|
||||
@Instance
|
||||
public static Spackenmobs instance;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@EventHandler
|
||||
public void preInitClient(FMLPreInitializationEvent event) {
|
||||
public void preInitClient(FMLPreInitializationEvent event)
|
||||
{
|
||||
ModEntities.initModels();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void preInit(FMLPreInitializationEvent event) {
|
||||
public void preInit(FMLPreInitializationEvent event)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void init(FMLInitializationEvent event) {
|
||||
public void init(FMLInitializationEvent event)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void postInit(FMLPostInitializationEvent event) {
|
||||
public void postInit(FMLPostInitializationEvent event)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
|
@ -6,14 +6,17 @@ import net.minecraft.item.ItemStack;
|
|||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
public class SpackenmobsTab extends CreativeTabs {
|
||||
public SpackenmobsTab() {
|
||||
super(Spackenmobs.MODID);
|
||||
public class SpackenmobsTab extends CreativeTabs
|
||||
{
|
||||
public SpackenmobsTab(String name)
|
||||
{
|
||||
super(Spackenmobs.MODID + "." + name);
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@Override
|
||||
public ItemStack getTabIconItem() {
|
||||
public ItemStack getTabIconItem()
|
||||
{
|
||||
return new ItemStack(ModItems.RAM);
|
||||
}
|
||||
}
|
|
@ -9,48 +9,56 @@ import net.minecraft.item.ItemStack;
|
|||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class EntityAIEatDroppedFish extends EntityAIBase {
|
||||
public class EntityAIEatDroppedFish extends EntityAIBase
|
||||
{
|
||||
private EntityJens jens;
|
||||
private Random rand = new Random();
|
||||
private World world = null;
|
||||
double searchDistance = 10.0D;
|
||||
|
||||
public EntityAIEatDroppedFish(EntityJens jens) {
|
||||
public EntityAIEatDroppedFish(EntityJens jens)
|
||||
{
|
||||
this.jens = jens;
|
||||
this.world = jens.world;
|
||||
}
|
||||
|
||||
public EntityItem getNearbyFood() {
|
||||
public EntityItem getNearbyFood()
|
||||
{
|
||||
List<EntityItem> items = getItems();
|
||||
for (EntityItem item : items) {
|
||||
for (EntityItem item : items)
|
||||
{
|
||||
EntityItem stack = item;
|
||||
if (items != null) {
|
||||
if (items != null)
|
||||
{
|
||||
return stack;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
List<EntityItem> getItems() {
|
||||
return this.world.getEntitiesWithinAABB(EntityItem.class,
|
||||
new AxisAlignedBB(this.jens.posX - this.searchDistance, this.jens.posY - this.searchDistance,
|
||||
this.jens.posZ - this.searchDistance, this.jens.posX + this.searchDistance,
|
||||
this.jens.posY + this.searchDistance, this.jens.posZ + this.searchDistance));
|
||||
List<EntityItem> getItems()
|
||||
{
|
||||
return this.world.getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(this.jens.posX - this.searchDistance, this.jens.posY - this.searchDistance, this.jens.posZ - this.searchDistance,
|
||||
this.jens.posX + this.searchDistance, this.jens.posY + this.searchDistance, this.jens.posZ + this.searchDistance));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldExecute() {
|
||||
public boolean shouldExecute()
|
||||
{
|
||||
EntityItem getNearbyFood = getNearbyFood();
|
||||
if (getNearbyFood != null && !this.jens.isChild() && this.jens.yummy_in_tummy == false
|
||||
&& this.jens.isFishItem(getNearbyFood.getItem())) {
|
||||
if (getNearbyFood != null && !this.jens.isChild() && this.jens.yummy_in_tummy == false && this.jens.isFishItem(getNearbyFood.getItem()))
|
||||
{
|
||||
execute(this.jens, getNearbyFood);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean execute(EntityJens jens, EntityItem item) {
|
||||
if (jens.getNavigator().tryMoveToXYZ(item.posX, item.posY, item.posZ, 1.25D)) {
|
||||
if (jens.getDistance(item) < 1.0F) {
|
||||
public boolean execute(EntityJens jens, EntityItem item)
|
||||
{
|
||||
if (jens.getNavigator().tryMoveToXYZ(item.posX, item.posY, item.posZ, 1.25D))
|
||||
{
|
||||
if (jens.getDistance(item) < 1.0F)
|
||||
{
|
||||
eatItem(item);
|
||||
jens.digestFish();
|
||||
}
|
||||
|
@ -58,10 +66,12 @@ public class EntityAIEatDroppedFish extends EntityAIBase {
|
|||
return true;
|
||||
}
|
||||
|
||||
public void eatItem(EntityItem item) {
|
||||
public void eatItem(EntityItem item)
|
||||
{
|
||||
ItemStack stack = item.getItem();
|
||||
stack.setCount(stack.getCount() - 1);
|
||||
if (stack.getCount() == 0) {
|
||||
if (stack.getCount() == 0)
|
||||
{
|
||||
item.setDead();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,23 +6,28 @@ import net.minecraft.util.DamageSource;
|
|||
import net.minecraft.util.SoundEvent;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class EntityApoRed extends EntitySkeleton {
|
||||
public EntityApoRed(World worldIn) {
|
||||
public class EntityApoRed extends EntitySkeleton
|
||||
{
|
||||
public EntityApoRed(World worldIn)
|
||||
{
|
||||
super(worldIn);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getAmbientSound() {
|
||||
protected SoundEvent getAmbientSound()
|
||||
{
|
||||
return ModSoundEvents.ENTITY_APORED_AMBIENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getHurtSound(DamageSource damageSourceIn) {
|
||||
protected SoundEvent getHurtSound(DamageSource damageSourceIn)
|
||||
{
|
||||
return ModSoundEvents.ENTITY_APORED_HURT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getDeathSound() {
|
||||
protected SoundEvent getDeathSound()
|
||||
{
|
||||
return ModSoundEvents.ENTITY_APORED_DEATH;
|
||||
}
|
||||
}
|
|
@ -30,37 +30,42 @@ import net.minecraft.world.EnumDifficulty;
|
|||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.storage.loot.LootTableList;
|
||||
|
||||
public class EntityDrachenlord extends EntityZombie {
|
||||
private static final UUID ATTACK_SPEED_BOOST_MODIFIER_UUID = UUID
|
||||
.fromString("49455A49-7EC5-45BA-B886-3B90B23A1718");
|
||||
private static final AttributeModifier ATTACK_SPEED_BOOST_MODIFIER = (new AttributeModifier(
|
||||
ATTACK_SPEED_BOOST_MODIFIER_UUID, "Attacking speed boost", 0.05D, 0)).setSaved(false);
|
||||
public class EntityDrachenlord extends EntityZombie
|
||||
{
|
||||
private static final UUID ATTACK_SPEED_BOOST_MODIFIER_UUID = UUID.fromString("49455A49-7EC5-45BA-B886-3B90B23A1718");
|
||||
private static final AttributeModifier ATTACK_SPEED_BOOST_MODIFIER = (new AttributeModifier(ATTACK_SPEED_BOOST_MODIFIER_UUID, "Attacking speed boost", 0.05D, 0)).setSaved(false);
|
||||
private int angerLevel;
|
||||
private int randomSoundDelay;
|
||||
private UUID angerTargetUUID;
|
||||
|
||||
public EntityDrachenlord(World worldIn) {
|
||||
public EntityDrachenlord(World worldIn)
|
||||
{
|
||||
super(worldIn);
|
||||
this.isImmuneToFire = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRevengeTarget(@Nullable EntityLivingBase livingBase) {
|
||||
public void setRevengeTarget(@Nullable
|
||||
EntityLivingBase livingBase)
|
||||
{
|
||||
super.setRevengeTarget(livingBase);
|
||||
|
||||
if (livingBase != null) {
|
||||
if (livingBase != null)
|
||||
{
|
||||
this.angerTargetUUID = livingBase.getUniqueID();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void applyEntityAI() {
|
||||
protected void applyEntityAI()
|
||||
{
|
||||
this.targetTasks.addTask(1, new EntityDrachenlord.AIHurtByAggressor(this));
|
||||
this.targetTasks.addTask(2, new EntityDrachenlord.AITargetAggressor(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void applyEntityAttributes() {
|
||||
protected void applyEntityAttributes()
|
||||
{
|
||||
super.applyEntityAttributes();
|
||||
this.getEntityAttribute(SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(0.0D);
|
||||
this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.23000000417232513D);
|
||||
|
@ -68,24 +73,31 @@ public class EntityDrachenlord extends EntityZombie {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void updateAITasks() {
|
||||
protected void updateAITasks()
|
||||
{
|
||||
IAttributeInstance iattributeinstance = this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED);
|
||||
|
||||
if (this.isAngry()) {
|
||||
if (!this.isChild() && !iattributeinstance.hasModifier(ATTACK_SPEED_BOOST_MODIFIER)) {
|
||||
if (this.isAngry())
|
||||
{
|
||||
if (!this.isChild() && !iattributeinstance.hasModifier(ATTACK_SPEED_BOOST_MODIFIER))
|
||||
{
|
||||
iattributeinstance.applyModifier(ATTACK_SPEED_BOOST_MODIFIER);
|
||||
}
|
||||
|
||||
--this.angerLevel;
|
||||
} else if (iattributeinstance.hasModifier(ATTACK_SPEED_BOOST_MODIFIER)) {
|
||||
}
|
||||
else if (iattributeinstance.hasModifier(ATTACK_SPEED_BOOST_MODIFIER))
|
||||
{
|
||||
iattributeinstance.removeModifier(ATTACK_SPEED_BOOST_MODIFIER);
|
||||
}
|
||||
|
||||
if (this.randomSoundDelay > 0 && --this.randomSoundDelay == 0) {
|
||||
if (this.randomSoundDelay > 0 && --this.randomSoundDelay == 0)
|
||||
{
|
||||
this.playSound(ModSoundEvents.ENTITY_DRACHENLORD_ANGRY, this.getSoundVolume() * 2.0F, 1.0F);
|
||||
}
|
||||
|
||||
if (this.angerLevel > 0 && this.angerTargetUUID != null && this.getRevengeTarget() == null) {
|
||||
if (this.angerLevel > 0 && this.angerTargetUUID != null && this.getRevengeTarget() == null)
|
||||
{
|
||||
EntityPlayer entityplayer = this.world.getPlayerEntityByUUID(this.angerTargetUUID);
|
||||
this.setRevengeTarget(entityplayer);
|
||||
this.attackingPlayer = entityplayer;
|
||||
|
@ -96,45 +108,54 @@ public class EntityDrachenlord extends EntityZombie {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean getCanSpawnHere() {
|
||||
public boolean getCanSpawnHere()
|
||||
{
|
||||
return this.world.getDifficulty() != EnumDifficulty.PEACEFUL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNotColliding() {
|
||||
return this.world.checkNoEntityCollision(this.getEntityBoundingBox(), this)
|
||||
&& this.world.getCollisionBoxes(this, this.getEntityBoundingBox()).isEmpty()
|
||||
public boolean isNotColliding()
|
||||
{
|
||||
return this.world.checkNoEntityCollision(this.getEntityBoundingBox(), this) && this.world.getCollisionBoxes(this, this.getEntityBoundingBox()).isEmpty()
|
||||
&& !this.world.containsAnyLiquid(this.getEntityBoundingBox());
|
||||
}
|
||||
|
||||
public static void registerFixesPigZombie(DataFixer fixer) {
|
||||
public static void registerFixesPigZombie(DataFixer fixer)
|
||||
{
|
||||
EntityLiving.registerFixesMob(fixer, EntityDrachenlord.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeEntityToNBT(NBTTagCompound compound) {
|
||||
public void writeEntityToNBT(NBTTagCompound compound)
|
||||
{
|
||||
super.writeEntityToNBT(compound);
|
||||
compound.setShort("Anger", (short) this.angerLevel);
|
||||
|
||||
if (this.angerTargetUUID != null) {
|
||||
if (this.angerTargetUUID != null)
|
||||
{
|
||||
compound.setString("HurtBy", this.angerTargetUUID.toString());
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
compound.setString("HurtBy", "");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readEntityFromNBT(NBTTagCompound compound) {
|
||||
public void readEntityFromNBT(NBTTagCompound compound)
|
||||
{
|
||||
super.readEntityFromNBT(compound);
|
||||
this.angerLevel = compound.getShort("Anger");
|
||||
String s = compound.getString("HurtBy");
|
||||
|
||||
if (!s.isEmpty()) {
|
||||
if (!s.isEmpty())
|
||||
{
|
||||
this.angerTargetUUID = UUID.fromString(s);
|
||||
EntityPlayer entityplayer = this.world.getPlayerEntityByUUID(this.angerTargetUUID);
|
||||
this.setRevengeTarget(entityplayer);
|
||||
|
||||
if (entityplayer != null) {
|
||||
if (entityplayer != null)
|
||||
{
|
||||
this.attackingPlayer = entityplayer;
|
||||
this.recentlyHit = this.getRevengeTimer();
|
||||
}
|
||||
|
@ -142,13 +163,18 @@ public class EntityDrachenlord extends EntityZombie {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean attackEntityFrom(DamageSource source, float amount) {
|
||||
if (this.isEntityInvulnerable(source)) {
|
||||
public boolean attackEntityFrom(DamageSource source, float amount)
|
||||
{
|
||||
if (this.isEntityInvulnerable(source))
|
||||
{
|
||||
return false;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
Entity entity = source.getTrueSource();
|
||||
|
||||
if (entity instanceof EntityPlayer) {
|
||||
if (entity instanceof EntityPlayer)
|
||||
{
|
||||
this.becomeAngryAt(entity);
|
||||
}
|
||||
|
||||
|
@ -156,82 +182,100 @@ public class EntityDrachenlord extends EntityZombie {
|
|||
}
|
||||
}
|
||||
|
||||
private void becomeAngryAt(Entity p_70835_1_) {
|
||||
private void becomeAngryAt(Entity p_70835_1_)
|
||||
{
|
||||
this.angerLevel = 400 + this.rand.nextInt(400);
|
||||
this.randomSoundDelay = this.rand.nextInt(40);
|
||||
|
||||
if (p_70835_1_ instanceof EntityLivingBase) {
|
||||
if (p_70835_1_ instanceof EntityLivingBase)
|
||||
{
|
||||
this.setRevengeTarget((EntityLivingBase) p_70835_1_);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isAngry() {
|
||||
public boolean isAngry()
|
||||
{
|
||||
return this.angerLevel > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getAmbientSound() {
|
||||
protected SoundEvent getAmbientSound()
|
||||
{
|
||||
return ModSoundEvents.ENTITY_DRACHENLORD_AMBIENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getHurtSound(DamageSource damageSourceIn) {
|
||||
protected SoundEvent getHurtSound(DamageSource damageSourceIn)
|
||||
{
|
||||
return ModSoundEvents.ENTITY_DRACHENLORD_HURT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getDeathSound() {
|
||||
protected SoundEvent getDeathSound()
|
||||
{
|
||||
return ModSoundEvents.ENTITY_DRACHENLORD_DEATH;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected ResourceLocation getLootTable() {
|
||||
protected ResourceLocation getLootTable()
|
||||
{
|
||||
return LootTableList.ENTITIES_ZOMBIE_PIGMAN;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean processInteract(EntityPlayer player, EnumHand hand) {
|
||||
public boolean processInteract(EntityPlayer player, EnumHand hand)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setEquipmentBasedOnDifficulty(DifficultyInstance difficulty) {
|
||||
protected void setEquipmentBasedOnDifficulty(DifficultyInstance difficulty)
|
||||
{
|
||||
this.setItemStackToSlot(EntityEquipmentSlot.MAINHAND, new ItemStack(Items.GOLDEN_AXE));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ItemStack getSkullDrop() {
|
||||
protected ItemStack getSkullDrop()
|
||||
{
|
||||
return ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPreventingPlayerRest(EntityPlayer playerIn) {
|
||||
public boolean isPreventingPlayerRest(EntityPlayer playerIn)
|
||||
{
|
||||
return this.isAngry();
|
||||
}
|
||||
|
||||
static class AIHurtByAggressor extends EntityAIHurtByTarget {
|
||||
public AIHurtByAggressor(EntityDrachenlord p_i45828_1_) {
|
||||
static class AIHurtByAggressor extends EntityAIHurtByTarget
|
||||
{
|
||||
public AIHurtByAggressor(EntityDrachenlord p_i45828_1_)
|
||||
{
|
||||
super(p_i45828_1_, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setEntityAttackTarget(EntityCreature creatureIn, EntityLivingBase entityLivingBaseIn) {
|
||||
protected void setEntityAttackTarget(EntityCreature creatureIn, EntityLivingBase entityLivingBaseIn)
|
||||
{
|
||||
super.setEntityAttackTarget(creatureIn, entityLivingBaseIn);
|
||||
|
||||
if (creatureIn instanceof EntityDrachenlord) {
|
||||
if (creatureIn instanceof EntityDrachenlord)
|
||||
{
|
||||
((EntityDrachenlord) creatureIn).becomeAngryAt(entityLivingBaseIn);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static class AITargetAggressor extends EntityAINearestAttackableTarget<EntityPlayer> {
|
||||
public AITargetAggressor(EntityDrachenlord p_i45829_1_) {
|
||||
static class AITargetAggressor extends EntityAINearestAttackableTarget<EntityPlayer>
|
||||
{
|
||||
public AITargetAggressor(EntityDrachenlord p_i45829_1_)
|
||||
{
|
||||
super(p_i45829_1_, EntityPlayer.class, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldExecute() {
|
||||
public boolean shouldExecute()
|
||||
{
|
||||
return ((EntityDrachenlord) this.taskOwner).isAngry() && super.shouldExecute();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,10 +26,12 @@ import net.minecraft.util.SoundEvent;
|
|||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class EntityHolzstammhuhn extends EntityChicken {
|
||||
public class EntityHolzstammhuhn extends EntityChicken
|
||||
{
|
||||
private static final Set<Item> TEMPTATION_ITEMS = Sets.newHashSet(Items.STICK);
|
||||
|
||||
public EntityHolzstammhuhn(World worldIn) {
|
||||
public EntityHolzstammhuhn(World worldIn)
|
||||
{
|
||||
super(worldIn);
|
||||
this.setSize(0.4F, 0.7F);
|
||||
this.timeUntilNextEgg = this.rand.nextInt(6000) + 6000;
|
||||
|
@ -37,7 +39,8 @@ public class EntityHolzstammhuhn extends EntityChicken {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void initEntityAI() {
|
||||
protected void initEntityAI()
|
||||
{
|
||||
this.tasks.addTask(0, new EntityAISwimming(this));
|
||||
this.tasks.addTask(1, new EntityAIPanic(this, 1.4D));
|
||||
this.tasks.addTask(2, new EntityAIMate(this, 1.0D));
|
||||
|
@ -49,32 +52,38 @@ public class EntityHolzstammhuhn extends EntityChicken {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean isBreedingItem(ItemStack stack) {
|
||||
public boolean isBreedingItem(ItemStack stack)
|
||||
{
|
||||
return TEMPTATION_ITEMS.contains(stack.getItem());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getAmbientSound() {
|
||||
protected SoundEvent getAmbientSound()
|
||||
{
|
||||
return SoundEvents.BLOCK_WOOD_PLACE;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getHurtSound(DamageSource damageSourceIn) {
|
||||
protected SoundEvent getHurtSound(DamageSource damageSourceIn)
|
||||
{
|
||||
return SoundEvents.BLOCK_WOOD_HIT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getDeathSound() {
|
||||
protected SoundEvent getDeathSound()
|
||||
{
|
||||
return SoundEvents.BLOCK_WOOD_BREAK;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void playStepSound(BlockPos pos, Block blockIn) {
|
||||
protected void playStepSound(BlockPos pos, Block blockIn)
|
||||
{
|
||||
this.playSound(SoundEvents.BLOCK_WOOD_STEP, 0.15F, 1.0F);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityHolzstammhuhn createChild(EntityAgeable ageable) {
|
||||
public EntityHolzstammhuhn createChild(EntityAgeable ageable)
|
||||
{
|
||||
return new EntityHolzstammhuhn(this.world);
|
||||
}
|
||||
}
|
|
@ -6,39 +6,47 @@ import net.minecraft.util.DamageSource;
|
|||
import net.minecraft.util.SoundEvent;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class EntityIslamist extends EntityCreeper {
|
||||
public class EntityIslamist extends EntityCreeper
|
||||
{
|
||||
private int lastActiveTime;
|
||||
private int timeSinceIgnited;
|
||||
private int fuseTime = 30;
|
||||
private int explosionRadius = 6;
|
||||
|
||||
public EntityIslamist(World worldIn) {
|
||||
public EntityIslamist(World worldIn)
|
||||
{
|
||||
super(worldIn);
|
||||
this.setSize(0.6F, 1.7F);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate() {
|
||||
if (this.isEntityAlive()) {
|
||||
public void onUpdate()
|
||||
{
|
||||
if (this.isEntityAlive())
|
||||
{
|
||||
this.lastActiveTime = this.timeSinceIgnited;
|
||||
|
||||
if (this.hasIgnited()) {
|
||||
if (this.hasIgnited())
|
||||
{
|
||||
this.setCreeperState(1);
|
||||
}
|
||||
|
||||
int i = this.getCreeperState();
|
||||
|
||||
if (i > 0 && this.timeSinceIgnited == 0) {
|
||||
if (i > 0 && this.timeSinceIgnited == 0)
|
||||
{
|
||||
this.playSound(ModSoundEvents.ENTITY_ISLAMIST_FUSE, 1.0F, 0.5F);
|
||||
}
|
||||
|
||||
this.timeSinceIgnited += i;
|
||||
|
||||
if (this.timeSinceIgnited < 0) {
|
||||
if (this.timeSinceIgnited < 0)
|
||||
{
|
||||
this.timeSinceIgnited = 0;
|
||||
}
|
||||
|
||||
if (this.timeSinceIgnited >= this.fuseTime) {
|
||||
if (this.timeSinceIgnited >= this.fuseTime)
|
||||
{
|
||||
this.timeSinceIgnited = this.fuseTime;
|
||||
this.explode();
|
||||
}
|
||||
|
@ -47,25 +55,28 @@ public class EntityIslamist extends EntityCreeper {
|
|||
super.onUpdate();
|
||||
}
|
||||
|
||||
private void explode() {
|
||||
if (!this.world.isRemote) {
|
||||
private void explode()
|
||||
{
|
||||
if (!this.world.isRemote)
|
||||
{
|
||||
boolean flag = net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.world, this);
|
||||
float f = this.getPowered() ? 2.0F : 1.0F;
|
||||
this.dead = true;
|
||||
this.world.playSound(null, getPosition(), ModSoundEvents.ENTITY_ISLAMIST_BLOW, getSoundCategory(), 1.0F,
|
||||
1.0F);
|
||||
this.world.playSound(null, getPosition(), ModSoundEvents.ENTITY_ISLAMIST_BLOW, getSoundCategory(), 1.0F, 1.0F);
|
||||
this.world.createExplosion(this, this.posX, this.posY, this.posZ, this.explosionRadius * f, flag);
|
||||
this.setDead();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getHurtSound(DamageSource damageSourceIn) {
|
||||
protected SoundEvent getHurtSound(DamageSource damageSourceIn)
|
||||
{
|
||||
return ModSoundEvents.ENTITY_ISLAMIST_HURT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getAmbientSound() {
|
||||
protected SoundEvent getAmbientSound()
|
||||
{
|
||||
return ModSoundEvents.ENTITY_ISLAMIST_AMBIENT;
|
||||
}
|
||||
}
|
|
@ -2,13 +2,17 @@ package mod.acgaming.spackenmobs.entities;
|
|||
|
||||
import java.util.Set;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
import mod.acgaming.spackenmobs.misc.ModItems;
|
||||
import mod.acgaming.spackenmobs.misc.ModLootTableList;
|
||||
import mod.acgaming.spackenmobs.misc.ModSoundEvents;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityAgeable;
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
import net.minecraft.entity.SharedMonsterAttributes;
|
||||
import net.minecraft.entity.ai.EntityAIFollowParent;
|
||||
import net.minecraft.entity.ai.EntityAILookIdle;
|
||||
|
@ -18,33 +22,48 @@ import net.minecraft.entity.ai.EntityAISwimming;
|
|||
import net.minecraft.entity.ai.EntityAITempt;
|
||||
import net.minecraft.entity.ai.EntityAIWanderAvoidWater;
|
||||
import net.minecraft.entity.ai.EntityAIWatchClosest;
|
||||
import net.minecraft.entity.passive.EntityAnimal;
|
||||
import net.minecraft.entity.passive.EntityPig;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.datasync.DataParameter;
|
||||
import net.minecraft.network.datasync.DataSerializers;
|
||||
import net.minecraft.network.datasync.EntityDataManager;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.EnumParticleTypes;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.SoundEvent;
|
||||
import net.minecraft.util.datafix.DataFixer;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class EntityJens extends EntityAnimal {
|
||||
public class EntityJens extends EntityPig
|
||||
{
|
||||
private static final DataParameter<Boolean> SADDLED = EntityDataManager.<Boolean>createKey(EntityJens.class, DataSerializers.BOOLEAN);
|
||||
private static final DataParameter<Integer> BOOST_TIME = EntityDataManager.<Integer>createKey(EntityJens.class, DataSerializers.VARINT);
|
||||
private static final Set<Item> TEMPTATION_ITEMS = Sets.newHashSet(ModItems.RAM);
|
||||
private static final Set<Item> FISH_ITEMS = Sets.newHashSet(Items.FISH);
|
||||
|
||||
private boolean boosting;
|
||||
private int boostTime;
|
||||
private int totalBoostTime;
|
||||
public boolean yummy_in_tummy = false;
|
||||
public int time_until_surstroemming = 0;
|
||||
|
||||
Minecraft MINECRAFT = Minecraft.getMinecraft();
|
||||
|
||||
public EntityJens(World worldIn) {
|
||||
public EntityJens(World worldIn)
|
||||
{
|
||||
super(worldIn);
|
||||
setSize(0.6F, 2.2F);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initEntityAI() {
|
||||
protected void initEntityAI()
|
||||
{
|
||||
this.tasks.addTask(0, new EntityAISwimming(this));
|
||||
this.tasks.addTask(1, new EntityAIPanic(this, 1.25D));
|
||||
this.tasks.addTask(2, new EntityAIEatDroppedFish(this));
|
||||
|
@ -58,108 +77,310 @@ public class EntityJens extends EntityAnimal {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void applyEntityAttributes() {
|
||||
protected void applyEntityAttributes()
|
||||
{
|
||||
super.applyEntityAttributes();
|
||||
this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(10.0D);
|
||||
this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.25D);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBreedingItem(ItemStack stack) {
|
||||
@Nullable
|
||||
public Entity getControllingPassenger()
|
||||
{
|
||||
return this.getPassengers().isEmpty() ? null : (Entity) this.getPassengers().get(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeSteered()
|
||||
{
|
||||
Entity entity = this.getControllingPassenger();
|
||||
|
||||
if (!(entity instanceof EntityPlayer))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
EntityPlayer entityplayer = (EntityPlayer) entity;
|
||||
return entityplayer.getHeldItemMainhand().getItem() == ModItems.RAM_ON_A_STICK || entityplayer.getHeldItemOffhand().getItem() == ModItems.RAM_ON_A_STICK;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyDataManagerChange(DataParameter<?> key)
|
||||
{
|
||||
if (BOOST_TIME.equals(key) && this.world.isRemote)
|
||||
{
|
||||
this.boosting = true;
|
||||
this.boostTime = 0;
|
||||
this.totalBoostTime = this.dataManager.get(BOOST_TIME).intValue();
|
||||
}
|
||||
|
||||
super.notifyDataManagerChange(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void entityInit()
|
||||
{
|
||||
super.entityInit();
|
||||
this.dataManager.register(SADDLED, Boolean.valueOf(false));
|
||||
this.dataManager.register(BOOST_TIME, Integer.valueOf(0));
|
||||
}
|
||||
|
||||
public static void registerFixesJens(DataFixer fixer)
|
||||
{
|
||||
EntityLiving.registerFixesMob(fixer, EntityJens.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeEntityToNBT(NBTTagCompound compound)
|
||||
{
|
||||
super.writeEntityToNBT(compound);
|
||||
compound.setBoolean("Saddle", this.getSaddled());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readEntityFromNBT(NBTTagCompound compound)
|
||||
{
|
||||
super.readEntityFromNBT(compound);
|
||||
this.setSaddled(compound.getBoolean("Saddle"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeath(DamageSource cause)
|
||||
{
|
||||
super.onDeath(cause);
|
||||
|
||||
if (!this.world.isRemote)
|
||||
{
|
||||
if (this.getSaddled())
|
||||
{
|
||||
this.dropItem(Items.SADDLE, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean getSaddled()
|
||||
{
|
||||
return this.dataManager.get(SADDLED).booleanValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSaddled(boolean saddled)
|
||||
{
|
||||
if (saddled)
|
||||
{
|
||||
this.dataManager.set(SADDLED, Boolean.valueOf(true));
|
||||
}
|
||||
else
|
||||
{
|
||||
this.dataManager.set(SADDLED, Boolean.valueOf(false));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBreedingItem(ItemStack stack)
|
||||
{
|
||||
return TEMPTATION_ITEMS.contains(stack.getItem());
|
||||
}
|
||||
|
||||
public boolean isFishItem(ItemStack stack) {
|
||||
public boolean isFishItem(ItemStack stack)
|
||||
{
|
||||
return FISH_ITEMS.contains(stack.getItem());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeSteered() {
|
||||
Entity entity = this.getControllingPassenger();
|
||||
|
||||
if (!(entity instanceof EntityPlayer)) {
|
||||
return false;
|
||||
} else {
|
||||
EntityPlayer entityplayer = (EntityPlayer) entity;
|
||||
return entityplayer.getHeldItemMainhand().getItem() == ModItems.RAM_ON_A_STICK
|
||||
|| entityplayer.getHeldItemOffhand().getItem() == ModItems.RAM_ON_A_STICK;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityJens createChild(EntityAgeable ageable) {
|
||||
public EntityJens createChild(EntityAgeable ageable)
|
||||
{
|
||||
return new EntityJens(this.world);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean processInteract(EntityPlayer player, EnumHand hand) {
|
||||
public boolean processInteract(EntityPlayer player, EnumHand hand)
|
||||
{
|
||||
if (!super.processInteract(player, hand))
|
||||
{
|
||||
ItemStack itemstack = player.getHeldItem(hand);
|
||||
|
||||
if (itemstack.getItem() == Items.FISH && !player.capabilities.isCreativeMode && !this.isChild()
|
||||
&& this.yummy_in_tummy == false) {
|
||||
if (itemstack.getItem() == Items.FISH && !player.capabilities.isCreativeMode && !this.isChild() && this.yummy_in_tummy == false)
|
||||
{
|
||||
itemstack.shrink(1);
|
||||
digestFish();
|
||||
return true;
|
||||
} else {
|
||||
return super.processInteract(player, hand);
|
||||
}
|
||||
else if (itemstack.getItem() == Items.NAME_TAG)
|
||||
{
|
||||
itemstack.interactWithEntity(player, this, hand);
|
||||
return true;
|
||||
}
|
||||
else if (this.getSaddled() && !this.isBeingRidden())
|
||||
{
|
||||
if (!this.world.isRemote)
|
||||
{
|
||||
player.startRiding(this);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else if (itemstack.getItem() == Items.SADDLE)
|
||||
{
|
||||
itemstack.interactWithEntity(player, this, hand);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLivingUpdate() {
|
||||
public void onLivingUpdate()
|
||||
{
|
||||
super.onLivingUpdate();
|
||||
|
||||
if (!this.world.isRemote && this.yummy_in_tummy == true && this.time_until_surstroemming > 0) {
|
||||
if (!this.world.isRemote && this.yummy_in_tummy == true && this.time_until_surstroemming > 0)
|
||||
{
|
||||
this.time_until_surstroemming--;
|
||||
}
|
||||
|
||||
if (!this.world.isRemote && this.yummy_in_tummy == true && this.time_until_surstroemming <= 0) {
|
||||
for (int i = 0; i < 7; ++i) {
|
||||
if (!this.world.isRemote && this.yummy_in_tummy == true && this.time_until_surstroemming <= 0)
|
||||
{
|
||||
for (int i = 0; i < 7; ++i)
|
||||
{
|
||||
double d0 = this.rand.nextGaussian() * 0.02D;
|
||||
double d1 = this.rand.nextGaussian() * 0.02D;
|
||||
double d2 = this.rand.nextGaussian() * 0.02D;
|
||||
MINECRAFT.world.spawnParticle(EnumParticleTypes.SMOKE_LARGE,
|
||||
this.posX + this.rand.nextFloat() * this.width * 2.0F - this.width,
|
||||
this.posY + 0.5D + this.rand.nextFloat() * this.height,
|
||||
MINECRAFT.world.spawnParticle(EnumParticleTypes.SMOKE_LARGE, this.posX + this.rand.nextFloat() * this.width * 2.0F - this.width, this.posY + 0.5D + this.rand.nextFloat() * this.height,
|
||||
this.posZ + this.rand.nextFloat() * this.width * 2.0F - this.width, d0, d1, d2);
|
||||
}
|
||||
this.playSound(ModSoundEvents.ENTITY_JENS_POOP, 1.0F,
|
||||
(this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F);
|
||||
this.playSound(ModSoundEvents.ENTITY_JENS_POOP, 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F);
|
||||
this.dropItem(ModItems.SURSTROEMMING, 1);
|
||||
this.yummy_in_tummy = false;
|
||||
this.time_until_surstroemming = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public void digestFish() {
|
||||
public void digestFish()
|
||||
{
|
||||
this.playSound(ModSoundEvents.ENTITY_JENS_EAT, 1.0F, 1.0F);
|
||||
|
||||
this.yummy_in_tummy = true;
|
||||
this.time_until_surstroemming = 200;
|
||||
|
||||
for (int i = 0; i < 7; ++i) {
|
||||
for (int i = 0; i < 7; ++i)
|
||||
{
|
||||
double d0 = this.rand.nextGaussian() * 0.02D;
|
||||
double d1 = this.rand.nextGaussian() * 0.02D;
|
||||
double d2 = this.rand.nextGaussian() * 0.02D;
|
||||
MINECRAFT.world.spawnParticle(EnumParticleTypes.HEART,
|
||||
this.posX + this.rand.nextFloat() * this.width * 2.0F - this.width,
|
||||
this.posY + 0.5D + this.rand.nextFloat() * this.height,
|
||||
MINECRAFT.world.spawnParticle(EnumParticleTypes.HEART, this.posX + this.rand.nextFloat() * this.width * 2.0F - this.width, this.posY + 0.5D + this.rand.nextFloat() * this.height,
|
||||
this.posZ + this.rand.nextFloat() * this.width * 2.0F - this.width, d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getAmbientSound() {
|
||||
public void travel(float strafe, float vertical, float forward)
|
||||
{
|
||||
Entity entity = this.getPassengers().isEmpty() ? null : (Entity) this.getPassengers().get(0);
|
||||
|
||||
if (this.isBeingRidden() && this.canBeSteered())
|
||||
{
|
||||
this.rotationYaw = entity.rotationYaw;
|
||||
this.prevRotationYaw = this.rotationYaw;
|
||||
this.rotationPitch = entity.rotationPitch * 0.5F;
|
||||
this.setRotation(this.rotationYaw, this.rotationPitch);
|
||||
this.renderYawOffset = this.rotationYaw;
|
||||
this.rotationYawHead = this.rotationYaw;
|
||||
this.stepHeight = 1.0F;
|
||||
this.jumpMovementFactor = this.getAIMoveSpeed() * 0.1F;
|
||||
|
||||
if (this.boosting && this.boostTime++ > this.totalBoostTime)
|
||||
{
|
||||
this.boosting = false;
|
||||
}
|
||||
|
||||
if (this.canPassengerSteer())
|
||||
{
|
||||
float f = (float) this.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).getAttributeValue() * 0.225F;
|
||||
|
||||
if (this.boosting)
|
||||
{
|
||||
f += f * 1.15F * MathHelper.sin((float) this.boostTime / (float) this.totalBoostTime * (float) Math.PI);
|
||||
}
|
||||
|
||||
this.setAIMoveSpeed(f);
|
||||
super.travel(0.0F, 0.0F, 1.0F);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.motionX = 0.0D;
|
||||
this.motionY = 0.0D;
|
||||
this.motionZ = 0.0D;
|
||||
}
|
||||
|
||||
this.prevLimbSwingAmount = this.limbSwingAmount;
|
||||
double d1 = this.posX - this.prevPosX;
|
||||
double d0 = this.posZ - this.prevPosZ;
|
||||
float f1 = MathHelper.sqrt(d1 * d1 + d0 * d0) * 4.0F;
|
||||
|
||||
if (f1 > 1.0F)
|
||||
{
|
||||
f1 = 1.0F;
|
||||
}
|
||||
|
||||
this.limbSwingAmount += (f1 - this.limbSwingAmount) * 0.4F;
|
||||
this.limbSwing += this.limbSwingAmount;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.stepHeight = 0.5F;
|
||||
this.jumpMovementFactor = 0.02F;
|
||||
super.travel(strafe, vertical, forward);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean boost()
|
||||
{
|
||||
if (this.boosting)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.boosting = true;
|
||||
this.boostTime = 0;
|
||||
this.totalBoostTime = this.getRNG().nextInt(841) + 140;
|
||||
this.getDataManager().set(BOOST_TIME, Integer.valueOf(this.totalBoostTime));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ResourceLocation getLootTable()
|
||||
{
|
||||
return ModLootTableList.ENTITIES_JENS;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getAmbientSound()
|
||||
{
|
||||
return ModSoundEvents.ENTITY_JENS_AMBIENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getHurtSound(DamageSource damageSourceIn) {
|
||||
protected SoundEvent getHurtSound(DamageSource damageSourceIn)
|
||||
{
|
||||
return ModSoundEvents.ENTITY_JENS_HURT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getDeathSound() {
|
||||
protected SoundEvent getDeathSound()
|
||||
{
|
||||
return ModSoundEvents.ENTITY_JENS_DEATH;
|
||||
}
|
||||
}
|
|
@ -6,24 +6,29 @@ import net.minecraft.util.DamageSource;
|
|||
import net.minecraft.util.SoundEvent;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class EntityMarcellDAvis extends EntityZombie {
|
||||
public EntityMarcellDAvis(World worldIn) {
|
||||
public class EntityMarcellDAvis extends EntityZombie
|
||||
{
|
||||
public EntityMarcellDAvis(World worldIn)
|
||||
{
|
||||
super(worldIn);
|
||||
this.setSize(0.6F, 1.95F);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getAmbientSound() {
|
||||
protected SoundEvent getAmbientSound()
|
||||
{
|
||||
return ModSoundEvents.ENTITY_MARCELLDAVIS_AMBIENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getHurtSound(DamageSource damageSourceIn) {
|
||||
protected SoundEvent getHurtSound(DamageSource damageSourceIn)
|
||||
{
|
||||
return ModSoundEvents.ENTITY_MARCELLDAVIS_HURT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getDeathSound() {
|
||||
protected SoundEvent getDeathSound()
|
||||
{
|
||||
return ModSoundEvents.ENTITY_MARCELLDAVIS_DEATH;
|
||||
}
|
||||
}
|
|
@ -6,24 +6,29 @@ import net.minecraft.util.DamageSource;
|
|||
import net.minecraft.util.SoundEvent;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class EntityMrBean extends EntityZombie {
|
||||
public EntityMrBean(World worldIn) {
|
||||
public class EntityMrBean extends EntityZombie
|
||||
{
|
||||
public EntityMrBean(World worldIn)
|
||||
{
|
||||
super(worldIn);
|
||||
this.setSize(0.6F, 1.95F);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getAmbientSound() {
|
||||
protected SoundEvent getAmbientSound()
|
||||
{
|
||||
return ModSoundEvents.ENTITY_MRBEAN_AMBIENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getHurtSound(DamageSource damageSourceIn) {
|
||||
protected SoundEvent getHurtSound(DamageSource damageSourceIn)
|
||||
{
|
||||
return ModSoundEvents.ENTITY_MRBEAN_HURT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getDeathSound() {
|
||||
protected SoundEvent getDeathSound()
|
||||
{
|
||||
return ModSoundEvents.ENTITY_MRBEAN_DEATH;
|
||||
}
|
||||
}
|
|
@ -52,25 +52,22 @@ import net.minecraft.world.storage.loot.LootTableList;
|
|||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
public class EntitySchalker extends EntityGolem implements IMob {
|
||||
public class EntitySchalker extends EntityGolem implements IMob
|
||||
{
|
||||
private static final UUID COVERED_ARMOR_BONUS_ID = UUID.fromString("7E0292F2-9434-48D5-A29F-9583AF7DF27F");
|
||||
private static final AttributeModifier COVERED_ARMOR_BONUS_MODIFIER = (new AttributeModifier(COVERED_ARMOR_BONUS_ID,
|
||||
"Covered armor bonus", 20.0D, 0)).setSaved(false);
|
||||
protected static final DataParameter<EnumFacing> ATTACHED_FACE = EntityDataManager
|
||||
.<EnumFacing>createKey(EntitySchalker.class, DataSerializers.FACING);
|
||||
protected static final DataParameter<Optional<BlockPos>> ATTACHED_BLOCK_POS = EntityDataManager
|
||||
.<Optional<BlockPos>>createKey(EntitySchalker.class, DataSerializers.OPTIONAL_BLOCK_POS);
|
||||
protected static final DataParameter<Byte> PEEK_TICK = EntityDataManager.<Byte>createKey(EntitySchalker.class,
|
||||
DataSerializers.BYTE);
|
||||
protected static final DataParameter<Byte> COLOR = EntityDataManager.<Byte>createKey(EntitySchalker.class,
|
||||
DataSerializers.BYTE);
|
||||
private static final AttributeModifier COVERED_ARMOR_BONUS_MODIFIER = (new AttributeModifier(COVERED_ARMOR_BONUS_ID, "Covered armor bonus", 20.0D, 0)).setSaved(false);
|
||||
protected static final DataParameter<EnumFacing> ATTACHED_FACE = EntityDataManager.<EnumFacing>createKey(EntitySchalker.class, DataSerializers.FACING);
|
||||
protected static final DataParameter<Optional<BlockPos>> ATTACHED_BLOCK_POS = EntityDataManager.<Optional<BlockPos>>createKey(EntitySchalker.class, DataSerializers.OPTIONAL_BLOCK_POS);
|
||||
protected static final DataParameter<Byte> PEEK_TICK = EntityDataManager.<Byte>createKey(EntitySchalker.class, DataSerializers.BYTE);
|
||||
protected static final DataParameter<Byte> COLOR = EntityDataManager.<Byte>createKey(EntitySchalker.class, DataSerializers.BYTE);
|
||||
public static final EnumDyeColor DEFAULT_COLOR = EnumDyeColor.PURPLE;
|
||||
private float prevPeekAmount;
|
||||
private float peekAmount;
|
||||
private BlockPos currentAttachmentPosition;
|
||||
private int clientSideTeleportInterpolation;
|
||||
|
||||
public EntitySchalker(World worldIn) {
|
||||
public EntitySchalker(World worldIn)
|
||||
{
|
||||
super(worldIn);
|
||||
this.setSize(1.0F, 1.0F);
|
||||
this.prevRenderYawOffset = 180.0F;
|
||||
|
@ -82,7 +79,9 @@ public class EntitySchalker extends EntityGolem implements IMob {
|
|||
|
||||
@Override
|
||||
@Nullable
|
||||
public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable IEntityLivingData livingdata) {
|
||||
public IEntityLivingData onInitialSpawn(DifficultyInstance difficulty, @Nullable
|
||||
IEntityLivingData livingdata)
|
||||
{
|
||||
this.renderYawOffset = 180.0F;
|
||||
this.prevRenderYawOffset = 180.0F;
|
||||
this.rotationYaw = 180.0F;
|
||||
|
@ -93,7 +92,8 @@ public class EntitySchalker extends EntityGolem implements IMob {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void initEntityAI() {
|
||||
protected void initEntityAI()
|
||||
{
|
||||
this.tasks.addTask(1, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));
|
||||
this.tasks.addTask(4, new EntitySchalker.AIAttack());
|
||||
this.tasks.addTask(7, new EntitySchalker.AIPeek());
|
||||
|
@ -104,39 +104,47 @@ public class EntitySchalker extends EntityGolem implements IMob {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected boolean canTriggerWalking() {
|
||||
protected boolean canTriggerWalking()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundCategory getSoundCategory() {
|
||||
public SoundCategory getSoundCategory()
|
||||
{
|
||||
return SoundCategory.HOSTILE;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getAmbientSound() {
|
||||
protected SoundEvent getAmbientSound()
|
||||
{
|
||||
return ModSoundEvents.ENTITY_SCHALKER_AMBIENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playLivingSound() {
|
||||
if (!this.isClosed()) {
|
||||
public void playLivingSound()
|
||||
{
|
||||
if (!this.isClosed())
|
||||
{
|
||||
super.playLivingSound();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getDeathSound() {
|
||||
protected SoundEvent getDeathSound()
|
||||
{
|
||||
return ModSoundEvents.ENTITY_SCHALKER_DEATH;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getHurtSound(DamageSource damageSourceIn) {
|
||||
protected SoundEvent getHurtSound(DamageSource damageSourceIn)
|
||||
{
|
||||
return this.isClosed() ? SoundEvents.ENTITY_SHULKER_HURT_CLOSED : SoundEvents.ENTITY_SHULKER_HURT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void entityInit() {
|
||||
protected void entityInit()
|
||||
{
|
||||
super.entityInit();
|
||||
this.dataManager.register(ATTACHED_FACE, EnumFacing.DOWN);
|
||||
this.dataManager.register(ATTACHED_BLOCK_POS, Optional.absent());
|
||||
|
@ -145,46 +153,55 @@ public class EntitySchalker extends EntityGolem implements IMob {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void applyEntityAttributes() {
|
||||
protected void applyEntityAttributes()
|
||||
{
|
||||
super.applyEntityAttributes();
|
||||
this.getEntityAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(30.0D);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected EntityBodyHelper createBodyHelper() {
|
||||
protected EntityBodyHelper createBodyHelper()
|
||||
{
|
||||
return new EntitySchalker.BodyHelper(this);
|
||||
}
|
||||
|
||||
public static void registerFixesSchalker(DataFixer fixer) {
|
||||
public static void registerFixesSchalker(DataFixer fixer)
|
||||
{
|
||||
EntityLiving.registerFixesMob(fixer, EntitySchalker.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readEntityFromNBT(NBTTagCompound compound) {
|
||||
public void readEntityFromNBT(NBTTagCompound compound)
|
||||
{
|
||||
super.readEntityFromNBT(compound);
|
||||
this.dataManager.set(ATTACHED_FACE, EnumFacing.getFront(compound.getByte("AttachFace")));
|
||||
this.dataManager.set(PEEK_TICK, Byte.valueOf(compound.getByte("Peek")));
|
||||
this.dataManager.set(COLOR, Byte.valueOf(compound.getByte("Color")));
|
||||
|
||||
if (compound.hasKey("APX")) {
|
||||
if (compound.hasKey("APX"))
|
||||
{
|
||||
int i = compound.getInteger("APX");
|
||||
int j = compound.getInteger("APY");
|
||||
int k = compound.getInteger("APZ");
|
||||
this.dataManager.set(ATTACHED_BLOCK_POS, Optional.of(new BlockPos(i, j, k)));
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
this.dataManager.set(ATTACHED_BLOCK_POS, Optional.absent());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeEntityToNBT(NBTTagCompound compound) {
|
||||
public void writeEntityToNBT(NBTTagCompound compound)
|
||||
{
|
||||
super.writeEntityToNBT(compound);
|
||||
compound.setByte("AttachFace", (byte) this.dataManager.get(ATTACHED_FACE).getIndex());
|
||||
compound.setByte("Peek", this.dataManager.get(PEEK_TICK).byteValue());
|
||||
compound.setByte("Color", this.dataManager.get(COLOR).byteValue());
|
||||
BlockPos blockpos = this.getAttachmentPos();
|
||||
|
||||
if (blockpos != null) {
|
||||
if (blockpos != null)
|
||||
{
|
||||
compound.setInteger("APX", blockpos.getX());
|
||||
compound.setInteger("APY", blockpos.getY());
|
||||
compound.setInteger("APZ", blockpos.getZ());
|
||||
|
@ -192,72 +209,94 @@ public class EntitySchalker extends EntityGolem implements IMob {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate() {
|
||||
public void onUpdate()
|
||||
{
|
||||
super.onUpdate();
|
||||
BlockPos blockpos = (BlockPos) ((Optional) this.dataManager.get(ATTACHED_BLOCK_POS)).orNull();
|
||||
|
||||
if (blockpos == null && !this.world.isRemote) {
|
||||
if (blockpos == null && !this.world.isRemote)
|
||||
{
|
||||
blockpos = new BlockPos(this);
|
||||
this.dataManager.set(ATTACHED_BLOCK_POS, Optional.of(blockpos));
|
||||
}
|
||||
|
||||
if (this.isRiding()) {
|
||||
if (this.isRiding())
|
||||
{
|
||||
blockpos = null;
|
||||
float f = this.getRidingEntity().rotationYaw;
|
||||
this.rotationYaw = f;
|
||||
this.renderYawOffset = f;
|
||||
this.prevRenderYawOffset = f;
|
||||
this.clientSideTeleportInterpolation = 0;
|
||||
} else if (!this.world.isRemote) {
|
||||
}
|
||||
else if (!this.world.isRemote)
|
||||
{
|
||||
IBlockState iblockstate = this.world.getBlockState(blockpos);
|
||||
|
||||
if (iblockstate.getMaterial() != Material.AIR) {
|
||||
if (iblockstate.getBlock() == Blocks.PISTON_EXTENSION) {
|
||||
if (iblockstate.getMaterial() != Material.AIR)
|
||||
{
|
||||
if (iblockstate.getBlock() == Blocks.PISTON_EXTENSION)
|
||||
{
|
||||
EnumFacing enumfacing = iblockstate.getValue(BlockDirectional.FACING);
|
||||
|
||||
if (this.world.isAirBlock(blockpos.offset(enumfacing))) {
|
||||
if (this.world.isAirBlock(blockpos.offset(enumfacing)))
|
||||
{
|
||||
blockpos = blockpos.offset(enumfacing);
|
||||
this.dataManager.set(ATTACHED_BLOCK_POS, Optional.of(blockpos));
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
this.tryTeleportToNewPosition();
|
||||
}
|
||||
} else if (iblockstate.getBlock() == Blocks.PISTON_HEAD) {
|
||||
}
|
||||
else if (iblockstate.getBlock() == Blocks.PISTON_HEAD)
|
||||
{
|
||||
EnumFacing enumfacing3 = iblockstate.getValue(BlockDirectional.FACING);
|
||||
|
||||
if (this.world.isAirBlock(blockpos.offset(enumfacing3))) {
|
||||
if (this.world.isAirBlock(blockpos.offset(enumfacing3)))
|
||||
{
|
||||
blockpos = blockpos.offset(enumfacing3);
|
||||
this.dataManager.set(ATTACHED_BLOCK_POS, Optional.of(blockpos));
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
this.tryTeleportToNewPosition();
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
this.tryTeleportToNewPosition();
|
||||
}
|
||||
}
|
||||
|
||||
BlockPos blockpos1 = blockpos.offset(this.getAttachmentFacing());
|
||||
|
||||
if (!this.world.isBlockNormalCube(blockpos1, false)) {
|
||||
if (!this.world.isBlockNormalCube(blockpos1, false))
|
||||
{
|
||||
boolean flag = false;
|
||||
|
||||
for (EnumFacing enumfacing1 : EnumFacing.values()) {
|
||||
for (EnumFacing enumfacing1 : EnumFacing.values())
|
||||
{
|
||||
blockpos1 = blockpos.offset(enumfacing1);
|
||||
|
||||
if (this.world.isBlockNormalCube(blockpos1, false)) {
|
||||
if (this.world.isBlockNormalCube(blockpos1, false))
|
||||
{
|
||||
this.dataManager.set(ATTACHED_FACE, enumfacing1);
|
||||
flag = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!flag) {
|
||||
if (!flag)
|
||||
{
|
||||
this.tryTeleportToNewPosition();
|
||||
}
|
||||
}
|
||||
|
||||
BlockPos blockpos2 = blockpos.offset(this.getAttachmentFacing().getOpposite());
|
||||
|
||||
if (this.world.isBlockNormalCube(blockpos2, false)) {
|
||||
if (this.world.isBlockNormalCube(blockpos2, false))
|
||||
{
|
||||
this.tryTeleportToNewPosition();
|
||||
}
|
||||
}
|
||||
|
@ -265,17 +304,25 @@ public class EntitySchalker extends EntityGolem implements IMob {
|
|||
float f1 = this.getPeekTick() * 0.01F;
|
||||
this.prevPeekAmount = this.peekAmount;
|
||||
|
||||
if (this.peekAmount > f1) {
|
||||
if (this.peekAmount > f1)
|
||||
{
|
||||
this.peekAmount = MathHelper.clamp(this.peekAmount - 0.05F, f1, 1.0F);
|
||||
} else if (this.peekAmount < f1) {
|
||||
}
|
||||
else if (this.peekAmount < f1)
|
||||
{
|
||||
this.peekAmount = MathHelper.clamp(this.peekAmount + 0.05F, 0.0F, f1);
|
||||
}
|
||||
|
||||
if (blockpos != null) {
|
||||
if (this.world.isRemote) {
|
||||
if (this.clientSideTeleportInterpolation > 0 && this.currentAttachmentPosition != null) {
|
||||
if (blockpos != null)
|
||||
{
|
||||
if (this.world.isRemote)
|
||||
{
|
||||
if (this.clientSideTeleportInterpolation > 0 && this.currentAttachmentPosition != null)
|
||||
{
|
||||
--this.clientSideTeleportInterpolation;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
this.currentAttachmentPosition = blockpos;
|
||||
}
|
||||
}
|
||||
|
@ -305,44 +352,43 @@ public class EntitySchalker extends EntityGolem implements IMob {
|
|||
double d2 = 0.0D;
|
||||
EnumFacing enumfacing2 = this.getAttachmentFacing();
|
||||
|
||||
switch (enumfacing2) {
|
||||
switch (enumfacing2)
|
||||
{
|
||||
case DOWN:
|
||||
this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.5D, this.posY, this.posZ - 0.5D,
|
||||
this.posX + 0.5D, this.posY + 1.0D + d3, this.posZ + 0.5D));
|
||||
this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.5D, this.posY, this.posZ - 0.5D, this.posX + 0.5D, this.posY + 1.0D + d3, this.posZ + 0.5D));
|
||||
d1 = d5;
|
||||
break;
|
||||
case UP:
|
||||
this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.5D, this.posY - d3, this.posZ - 0.5D,
|
||||
this.posX + 0.5D, this.posY + 1.0D, this.posZ + 0.5D));
|
||||
this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.5D, this.posY - d3, this.posZ - 0.5D, this.posX + 0.5D, this.posY + 1.0D, this.posZ + 0.5D));
|
||||
d1 = -d5;
|
||||
break;
|
||||
case NORTH:
|
||||
this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.5D, this.posY, this.posZ - 0.5D,
|
||||
this.posX + 0.5D, this.posY + 1.0D, this.posZ + 0.5D + d3));
|
||||
this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.5D, this.posY, this.posZ - 0.5D, this.posX + 0.5D, this.posY + 1.0D, this.posZ + 0.5D + d3));
|
||||
d2 = d5;
|
||||
break;
|
||||
case SOUTH:
|
||||
this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.5D, this.posY, this.posZ - 0.5D - d3,
|
||||
this.posX + 0.5D, this.posY + 1.0D, this.posZ + 0.5D));
|
||||
this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.5D, this.posY, this.posZ - 0.5D - d3, this.posX + 0.5D, this.posY + 1.0D, this.posZ + 0.5D));
|
||||
d2 = -d5;
|
||||
break;
|
||||
case WEST:
|
||||
this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.5D, this.posY, this.posZ - 0.5D,
|
||||
this.posX + 0.5D + d3, this.posY + 1.0D, this.posZ + 0.5D));
|
||||
this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.5D, this.posY, this.posZ - 0.5D, this.posX + 0.5D + d3, this.posY + 1.0D, this.posZ + 0.5D));
|
||||
d0 = d5;
|
||||
break;
|
||||
case EAST:
|
||||
this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.5D - d3, this.posY, this.posZ - 0.5D,
|
||||
this.posX + 0.5D, this.posY + 1.0D, this.posZ + 0.5D));
|
||||
this.setEntityBoundingBox(new AxisAlignedBB(this.posX - 0.5D - d3, this.posY, this.posZ - 0.5D, this.posX + 0.5D, this.posY + 1.0D, this.posZ + 0.5D));
|
||||
d0 = -d5;
|
||||
}
|
||||
|
||||
if (d5 > 0.0D) {
|
||||
if (d5 > 0.0D)
|
||||
{
|
||||
List<Entity> list = this.world.getEntitiesWithinAABBExcludingEntity(this, this.getEntityBoundingBox());
|
||||
|
||||
if (!list.isEmpty()) {
|
||||
for (Entity entity : list) {
|
||||
if (!(entity instanceof EntitySchalker) && !entity.noClip) {
|
||||
if (!list.isEmpty())
|
||||
{
|
||||
for (Entity entity : list)
|
||||
{
|
||||
if (!(entity instanceof EntitySchalker) && !entity.noClip)
|
||||
{
|
||||
entity.move(MoverType.SHULKER, d0, d1, d2);
|
||||
}
|
||||
}
|
||||
|
@ -352,23 +398,30 @@ public class EntitySchalker extends EntityGolem implements IMob {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void move(MoverType type, double x, double y, double z) {
|
||||
if (type == MoverType.SHULKER_BOX) {
|
||||
public void move(MoverType type, double x, double y, double z)
|
||||
{
|
||||
if (type == MoverType.SHULKER_BOX)
|
||||
{
|
||||
this.tryTeleportToNewPosition();
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
super.move(type, x, y, z);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPosition(double x, double y, double z) {
|
||||
public void setPosition(double x, double y, double z)
|
||||
{
|
||||
super.setPosition(x, y, z);
|
||||
|
||||
if (this.dataManager != null && this.ticksExisted != 0) {
|
||||
if (this.dataManager != null && this.ticksExisted != 0)
|
||||
{
|
||||
Optional<BlockPos> optional = this.dataManager.get(ATTACHED_BLOCK_POS);
|
||||
Optional<BlockPos> optional1 = Optional.<BlockPos>of(new BlockPos(x, y, z));
|
||||
|
||||
if (!optional1.equals(optional)) {
|
||||
if (!optional1.equals(optional))
|
||||
{
|
||||
this.dataManager.set(ATTACHED_BLOCK_POS, optional1);
|
||||
this.dataManager.set(PEEK_TICK, Byte.valueOf((byte) 0));
|
||||
this.isAirBorne = true;
|
||||
|
@ -376,35 +429,41 @@ public class EntitySchalker extends EntityGolem implements IMob {
|
|||
}
|
||||
}
|
||||
|
||||
protected boolean tryTeleportToNewPosition() {
|
||||
if (!this.isAIDisabled() && this.isEntityAlive()) {
|
||||
protected boolean tryTeleportToNewPosition()
|
||||
{
|
||||
if (!this.isAIDisabled() && this.isEntityAlive())
|
||||
{
|
||||
BlockPos blockpos = new BlockPos(this);
|
||||
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
BlockPos blockpos1 = blockpos.add(8 - this.rand.nextInt(17), 8 - this.rand.nextInt(17),
|
||||
8 - this.rand.nextInt(17));
|
||||
for (int i = 0; i < 5; ++i)
|
||||
{
|
||||
BlockPos blockpos1 = blockpos.add(8 - this.rand.nextInt(17), 8 - this.rand.nextInt(17), 8 - this.rand.nextInt(17));
|
||||
|
||||
if (blockpos1.getY() > 0 && this.world.isAirBlock(blockpos1) && this.world.isInsideWorldBorder(this)
|
||||
&& this.world.getCollisionBoxes(this, new AxisAlignedBB(blockpos1)).isEmpty()) {
|
||||
if (blockpos1.getY() > 0 && this.world.isAirBlock(blockpos1) && this.world.isInsideWorldBorder(this) && this.world.getCollisionBoxes(this, new AxisAlignedBB(blockpos1)).isEmpty())
|
||||
{
|
||||
boolean flag = false;
|
||||
|
||||
for (EnumFacing enumfacing : EnumFacing.values()) {
|
||||
if (this.world.isBlockNormalCube(blockpos1.offset(enumfacing), false)) {
|
||||
for (EnumFacing enumfacing : EnumFacing.values())
|
||||
{
|
||||
if (this.world.isBlockNormalCube(blockpos1.offset(enumfacing), false))
|
||||
{
|
||||
this.dataManager.set(ATTACHED_FACE, enumfacing);
|
||||
flag = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (flag) {
|
||||
net.minecraftforge.event.entity.living.EnderTeleportEvent event = new net.minecraftforge.event.entity.living.EnderTeleportEvent(
|
||||
this, blockpos1.getX(), blockpos1.getY(), blockpos1.getZ(), 0);
|
||||
if (flag)
|
||||
{
|
||||
net.minecraftforge.event.entity.living.EnderTeleportEvent event = new net.minecraftforge.event.entity.living.EnderTeleportEvent(this, blockpos1.getX(), blockpos1.getY(),
|
||||
blockpos1.getZ(), 0);
|
||||
if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event))
|
||||
flag = false;
|
||||
blockpos1 = new BlockPos(event.getTargetX(), event.getTargetY(), event.getTargetZ());
|
||||
}
|
||||
|
||||
if (flag) {
|
||||
if (flag)
|
||||
{
|
||||
this.playSound(SoundEvents.ENTITY_SHULKER_TELEPORT, 1.0F, 1.0F);
|
||||
this.dataManager.set(ATTACHED_BLOCK_POS, Optional.of(blockpos1));
|
||||
this.dataManager.set(PEEK_TICK, Byte.valueOf((byte) 0));
|
||||
|
@ -415,13 +474,16 @@ public class EntitySchalker extends EntityGolem implements IMob {
|
|||
}
|
||||
|
||||
return false;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLivingUpdate() {
|
||||
public void onLivingUpdate()
|
||||
{
|
||||
super.onLivingUpdate();
|
||||
this.motionX = 0.0D;
|
||||
this.motionY = 0.0D;
|
||||
|
@ -432,14 +494,20 @@ public class EntitySchalker extends EntityGolem implements IMob {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void notifyDataManagerChange(DataParameter<?> key) {
|
||||
if (ATTACHED_BLOCK_POS.equals(key) && this.world.isRemote && !this.isRiding()) {
|
||||
public void notifyDataManagerChange(DataParameter<?> key)
|
||||
{
|
||||
if (ATTACHED_BLOCK_POS.equals(key) && this.world.isRemote && !this.isRiding())
|
||||
{
|
||||
BlockPos blockpos = this.getAttachmentPos();
|
||||
|
||||
if (blockpos != null) {
|
||||
if (this.currentAttachmentPosition == null) {
|
||||
if (blockpos != null)
|
||||
{
|
||||
if (this.currentAttachmentPosition == null)
|
||||
{
|
||||
this.currentAttachmentPosition = blockpos;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
this.clientSideTeleportInterpolation = 6;
|
||||
}
|
||||
|
||||
|
@ -460,67 +528,86 @@ public class EntitySchalker extends EntityGolem implements IMob {
|
|||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch,
|
||||
int posRotationIncrements, boolean teleport) {
|
||||
public void setPositionAndRotationDirect(double x, double y, double z, float yaw, float pitch, int posRotationIncrements, boolean teleport)
|
||||
{
|
||||
this.newPosRotationIncrements = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean attackEntityFrom(DamageSource source, float amount) {
|
||||
if (this.isClosed()) {
|
||||
public boolean attackEntityFrom(DamageSource source, float amount)
|
||||
{
|
||||
if (this.isClosed())
|
||||
{
|
||||
Entity entity = source.getImmediateSource();
|
||||
|
||||
if (entity instanceof EntityArrow) {
|
||||
if (entity instanceof EntityArrow)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (super.attackEntityFrom(source, amount)) {
|
||||
if (this.getHealth() < this.getMaxHealth() * 0.5D && this.rand.nextInt(4) == 0) {
|
||||
if (super.attackEntityFrom(source, amount))
|
||||
{
|
||||
if (this.getHealth() < this.getMaxHealth() * 0.5D && this.rand.nextInt(4) == 0)
|
||||
{
|
||||
this.tryTeleportToNewPosition();
|
||||
}
|
||||
|
||||
return true;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isClosed() {
|
||||
private boolean isClosed()
|
||||
{
|
||||
return this.getPeekTick() == 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public AxisAlignedBB getCollisionBoundingBox() {
|
||||
public AxisAlignedBB getCollisionBoundingBox()
|
||||
{
|
||||
return this.isEntityAlive() ? this.getEntityBoundingBox() : null;
|
||||
}
|
||||
|
||||
public EnumFacing getAttachmentFacing() {
|
||||
public EnumFacing getAttachmentFacing()
|
||||
{
|
||||
return this.dataManager.get(ATTACHED_FACE);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public BlockPos getAttachmentPos() {
|
||||
public BlockPos getAttachmentPos()
|
||||
{
|
||||
return (BlockPos) ((Optional) this.dataManager.get(ATTACHED_BLOCK_POS)).orNull();
|
||||
}
|
||||
|
||||
public void setAttachmentPos(@Nullable BlockPos pos) {
|
||||
public void setAttachmentPos(@Nullable
|
||||
BlockPos pos)
|
||||
{
|
||||
this.dataManager.set(ATTACHED_BLOCK_POS, Optional.fromNullable(pos));
|
||||
}
|
||||
|
||||
public int getPeekTick() {
|
||||
public int getPeekTick()
|
||||
{
|
||||
return this.dataManager.get(PEEK_TICK).byteValue();
|
||||
}
|
||||
|
||||
public void updateArmorModifier(int p_184691_1_) {
|
||||
if (!this.world.isRemote) {
|
||||
public void updateArmorModifier(int p_184691_1_)
|
||||
{
|
||||
if (!this.world.isRemote)
|
||||
{
|
||||
this.getEntityAttribute(SharedMonsterAttributes.ARMOR).removeModifier(COVERED_ARMOR_BONUS_MODIFIER);
|
||||
|
||||
if (p_184691_1_ == 0) {
|
||||
if (p_184691_1_ == 0)
|
||||
{
|
||||
this.getEntityAttribute(SharedMonsterAttributes.ARMOR).applyModifier(COVERED_ARMOR_BONUS_MODIFIER);
|
||||
this.playSound(SoundEvents.ENTITY_SHULKER_CLOSE, 1.0F, 1.0F);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
this.playSound(ModSoundEvents.ENTITY_SCHALKER_OPEN, 1.0F, 1.0F);
|
||||
}
|
||||
}
|
||||
|
@ -529,109 +616,131 @@ public class EntitySchalker extends EntityGolem implements IMob {
|
|||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public float getClientPeekAmount(float p_184688_1_) {
|
||||
public float getClientPeekAmount(float p_184688_1_)
|
||||
{
|
||||
return this.prevPeekAmount + (this.peekAmount - this.prevPeekAmount) * p_184688_1_;
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public int getClientTeleportInterp() {
|
||||
public int getClientTeleportInterp()
|
||||
{
|
||||
return this.clientSideTeleportInterpolation;
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public BlockPos getOldAttachPos() {
|
||||
public BlockPos getOldAttachPos()
|
||||
{
|
||||
return this.currentAttachmentPosition;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getEyeHeight() {
|
||||
public float getEyeHeight()
|
||||
{
|
||||
return 0.5F;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getVerticalFaceSpeed() {
|
||||
public int getVerticalFaceSpeed()
|
||||
{
|
||||
return 180;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getHorizontalFaceSpeed() {
|
||||
public int getHorizontalFaceSpeed()
|
||||
{
|
||||
return 180;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void applyEntityCollision(Entity entityIn) {
|
||||
public void applyEntityCollision(Entity entityIn)
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getCollisionBorderSize() {
|
||||
public float getCollisionBorderSize()
|
||||
{
|
||||
return 0.0F;
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public boolean isAttachedToBlock() {
|
||||
public boolean isAttachedToBlock()
|
||||
{
|
||||
return this.currentAttachmentPosition != null && this.getAttachmentPos() != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
protected ResourceLocation getLootTable() {
|
||||
protected ResourceLocation getLootTable()
|
||||
{
|
||||
return LootTableList.ENTITIES_SHULKER;
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public EnumDyeColor getColor() {
|
||||
public EnumDyeColor getColor()
|
||||
{
|
||||
return EnumDyeColor.byMetadata(this.dataManager.get(COLOR).byteValue());
|
||||
}
|
||||
|
||||
class AIAttack extends EntityAIBase {
|
||||
class AIAttack extends EntityAIBase
|
||||
{
|
||||
private int attackTime;
|
||||
|
||||
public AIAttack() {
|
||||
public AIAttack()
|
||||
{
|
||||
this.setMutexBits(3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldExecute() {
|
||||
public boolean shouldExecute()
|
||||
{
|
||||
EntityLivingBase entitylivingbase = EntitySchalker.this.getAttackTarget();
|
||||
|
||||
if (entitylivingbase != null && entitylivingbase.isEntityAlive()) {
|
||||
if (entitylivingbase != null && entitylivingbase.isEntityAlive())
|
||||
{
|
||||
return EntitySchalker.this.world.getDifficulty() != EnumDifficulty.PEACEFUL;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startExecuting() {
|
||||
public void startExecuting()
|
||||
{
|
||||
this.attackTime = 20;
|
||||
EntitySchalker.this.updateArmorModifier(100);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetTask() {
|
||||
public void resetTask()
|
||||
{
|
||||
EntitySchalker.this.updateArmorModifier(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateTask() {
|
||||
if (EntitySchalker.this.world.getDifficulty() != EnumDifficulty.PEACEFUL) {
|
||||
public void updateTask()
|
||||
{
|
||||
if (EntitySchalker.this.world.getDifficulty() != EnumDifficulty.PEACEFUL)
|
||||
{
|
||||
--this.attackTime;
|
||||
EntityLivingBase entitylivingbase = EntitySchalker.this.getAttackTarget();
|
||||
EntitySchalker.this.getLookHelper().setLookPositionWithEntity(entitylivingbase, 180.0F, 180.0F);
|
||||
double d0 = EntitySchalker.this.getDistanceSq(entitylivingbase);
|
||||
|
||||
if (d0 < 400.0D) {
|
||||
if (this.attackTime <= 0) {
|
||||
if (d0 < 400.0D)
|
||||
{
|
||||
if (this.attackTime <= 0)
|
||||
{
|
||||
this.attackTime = 20 + EntitySchalker.this.rand.nextInt(10) * 20 / 2;
|
||||
EntitySchalkerBullet entityschalkerbullet = new EntitySchalkerBullet(EntitySchalker.this.world,
|
||||
EntitySchalker.this, entitylivingbase,
|
||||
EntitySchalkerBullet entityschalkerbullet = new EntitySchalkerBullet(EntitySchalker.this.world, EntitySchalker.this, entitylivingbase,
|
||||
EntitySchalker.this.getAttachmentFacing().getAxis());
|
||||
EntitySchalker.this.world.spawnEntity(entityschalkerbullet);
|
||||
EntitySchalker.this.playSound(ModSoundEvents.ENTITY_SCHALKER_SHOOT, 2.0F,
|
||||
(EntitySchalker.this.rand.nextFloat() - EntitySchalker.this.rand.nextFloat()) * 0.2F
|
||||
+ 1.0F);
|
||||
EntitySchalker.this.playSound(ModSoundEvents.ENTITY_SCHALKER_SHOOT, 2.0F, (EntitySchalker.this.rand.nextFloat() - EntitySchalker.this.rand.nextFloat()) * 0.2F + 1.0F);
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
EntitySchalker.this.setAttackTarget((EntityLivingBase) null);
|
||||
}
|
||||
|
||||
|
@ -640,101 +749,127 @@ public class EntitySchalker extends EntityGolem implements IMob {
|
|||
}
|
||||
}
|
||||
|
||||
class AIAttackNearest extends EntityAINearestAttackableTarget<EntityPlayer> {
|
||||
public AIAttackNearest(EntitySchalker schalker) {
|
||||
class AIAttackNearest extends EntityAINearestAttackableTarget<EntityPlayer>
|
||||
{
|
||||
public AIAttackNearest(EntitySchalker schalker)
|
||||
{
|
||||
super(schalker, EntityPlayer.class, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldExecute() {
|
||||
public boolean shouldExecute()
|
||||
{
|
||||
return EntitySchalker.this.world.getDifficulty() == EnumDifficulty.PEACEFUL ? false : super.shouldExecute();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AxisAlignedBB getTargetableArea(double targetDistance) {
|
||||
protected AxisAlignedBB getTargetableArea(double targetDistance)
|
||||
{
|
||||
EnumFacing enumfacing = ((EntitySchalker) this.taskOwner).getAttachmentFacing();
|
||||
|
||||
if (enumfacing.getAxis() == EnumFacing.Axis.X) {
|
||||
if (enumfacing.getAxis() == EnumFacing.Axis.X)
|
||||
{
|
||||
return this.taskOwner.getEntityBoundingBox().grow(4.0D, targetDistance, targetDistance);
|
||||
} else {
|
||||
return enumfacing.getAxis() == EnumFacing.Axis.Z
|
||||
? this.taskOwner.getEntityBoundingBox().grow(targetDistance, targetDistance, 4.0D)
|
||||
}
|
||||
else
|
||||
{
|
||||
return enumfacing.getAxis() == EnumFacing.Axis.Z ? this.taskOwner.getEntityBoundingBox().grow(targetDistance, targetDistance, 4.0D)
|
||||
: this.taskOwner.getEntityBoundingBox().grow(targetDistance, 4.0D, targetDistance);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static class AIDefenseAttack extends EntityAINearestAttackableTarget<EntityLivingBase> {
|
||||
public AIDefenseAttack(EntitySchalker schalker) {
|
||||
super(schalker, EntityLivingBase.class, 10, true, false, new Predicate<EntityLivingBase>() {
|
||||
static class AIDefenseAttack extends EntityAINearestAttackableTarget<EntityLivingBase>
|
||||
{
|
||||
public AIDefenseAttack(EntitySchalker schalker)
|
||||
{
|
||||
super(schalker, EntityLivingBase.class, 10, true, false, new Predicate<EntityLivingBase>()
|
||||
{
|
||||
@Override
|
||||
public boolean apply(@Nullable EntityLivingBase p_apply_1_) {
|
||||
public boolean apply(@Nullable
|
||||
EntityLivingBase p_apply_1_)
|
||||
{
|
||||
return p_apply_1_ instanceof IMob;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldExecute() {
|
||||
public boolean shouldExecute()
|
||||
{
|
||||
return this.taskOwner.getTeam() == null ? false : super.shouldExecute();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AxisAlignedBB getTargetableArea(double targetDistance) {
|
||||
protected AxisAlignedBB getTargetableArea(double targetDistance)
|
||||
{
|
||||
EnumFacing enumfacing = ((EntitySchalker) this.taskOwner).getAttachmentFacing();
|
||||
|
||||
if (enumfacing.getAxis() == EnumFacing.Axis.X) {
|
||||
if (enumfacing.getAxis() == EnumFacing.Axis.X)
|
||||
{
|
||||
return this.taskOwner.getEntityBoundingBox().grow(4.0D, targetDistance, targetDistance);
|
||||
} else {
|
||||
return enumfacing.getAxis() == EnumFacing.Axis.Z
|
||||
? this.taskOwner.getEntityBoundingBox().grow(targetDistance, targetDistance, 4.0D)
|
||||
}
|
||||
else
|
||||
{
|
||||
return enumfacing.getAxis() == EnumFacing.Axis.Z ? this.taskOwner.getEntityBoundingBox().grow(targetDistance, targetDistance, 4.0D)
|
||||
: this.taskOwner.getEntityBoundingBox().grow(targetDistance, 4.0D, targetDistance);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class AIPeek extends EntityAIBase {
|
||||
class AIPeek extends EntityAIBase
|
||||
{
|
||||
private int peekTime;
|
||||
|
||||
private AIPeek() {
|
||||
private AIPeek()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldExecute() {
|
||||
public boolean shouldExecute()
|
||||
{
|
||||
return EntitySchalker.this.getAttackTarget() == null && EntitySchalker.this.rand.nextInt(40) == 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldContinueExecuting() {
|
||||
public boolean shouldContinueExecuting()
|
||||
{
|
||||
return EntitySchalker.this.getAttackTarget() == null && this.peekTime > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startExecuting() {
|
||||
public void startExecuting()
|
||||
{
|
||||
this.peekTime = 20 * (1 + EntitySchalker.this.rand.nextInt(3));
|
||||
EntitySchalker.this.updateArmorModifier(30);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetTask() {
|
||||
if (EntitySchalker.this.getAttackTarget() == null) {
|
||||
public void resetTask()
|
||||
{
|
||||
if (EntitySchalker.this.getAttackTarget() == null)
|
||||
{
|
||||
EntitySchalker.this.updateArmorModifier(0);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateTask() {
|
||||
public void updateTask()
|
||||
{
|
||||
--this.peekTime;
|
||||
}
|
||||
}
|
||||
|
||||
class BodyHelper extends EntityBodyHelper {
|
||||
public BodyHelper(EntityLivingBase theEntity) {
|
||||
class BodyHelper extends EntityBodyHelper
|
||||
{
|
||||
public BodyHelper(EntityLivingBase theEntity)
|
||||
{
|
||||
super(theEntity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateRenderAngles() {
|
||||
public void updateRenderAngles()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
|
@ -30,7 +30,8 @@ import net.minecraft.world.WorldServer;
|
|||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
public class EntitySchalkerBullet extends Entity {
|
||||
public class EntitySchalkerBullet extends Entity
|
||||
{
|
||||
private EntityLivingBase owner;
|
||||
private Entity target;
|
||||
@Nullable
|
||||
|
@ -46,20 +47,22 @@ public class EntitySchalkerBullet extends Entity {
|
|||
private UUID targetUniqueId;
|
||||
private BlockPos targetBlockPos;
|
||||
|
||||
public EntitySchalkerBullet(World worldIn) {
|
||||
public EntitySchalkerBullet(World worldIn)
|
||||
{
|
||||
super(worldIn);
|
||||
this.setSize(0.3125F, 0.3125F);
|
||||
this.noClip = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundCategory getSoundCategory() {
|
||||
public SoundCategory getSoundCategory()
|
||||
{
|
||||
return SoundCategory.HOSTILE;
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public EntitySchalkerBullet(World worldIn, double x, double y, double z, double motionXIn, double motionYIn,
|
||||
double motionZIn) {
|
||||
public EntitySchalkerBullet(World worldIn, double x, double y, double z, double motionXIn, double motionYIn, double motionZIn)
|
||||
{
|
||||
this(worldIn);
|
||||
this.setLocationAndAngles(x, y, z, this.rotationYaw, this.rotationPitch);
|
||||
this.motionX = motionXIn;
|
||||
|
@ -67,7 +70,8 @@ public class EntitySchalkerBullet extends Entity {
|
|||
this.motionZ = motionZIn;
|
||||
}
|
||||
|
||||
public EntitySchalkerBullet(World worldIn, EntityLivingBase ownerIn, Entity targetIn, EnumFacing.Axis p_i46772_4_) {
|
||||
public EntitySchalkerBullet(World worldIn, EntityLivingBase ownerIn, Entity targetIn, EnumFacing.Axis p_i46772_4_)
|
||||
{
|
||||
this(worldIn);
|
||||
this.owner = ownerIn;
|
||||
BlockPos blockpos = new BlockPos(ownerIn);
|
||||
|
@ -84,8 +88,10 @@ public class EntitySchalkerBullet extends Entity {
|
|||
* (abstract) Protected helper method to write subclass entity data to NBT.
|
||||
*/
|
||||
@Override
|
||||
protected void writeEntityToNBT(NBTTagCompound compound) {
|
||||
if (this.owner != null) {
|
||||
protected void writeEntityToNBT(NBTTagCompound compound)
|
||||
{
|
||||
if (this.owner != null)
|
||||
{
|
||||
BlockPos blockpos = new BlockPos(this.owner);
|
||||
NBTTagCompound nbttagcompound = NBTUtil.createUUIDTag(this.owner.getUniqueID());
|
||||
nbttagcompound.setInteger("X", blockpos.getX());
|
||||
|
@ -94,7 +100,8 @@ public class EntitySchalkerBullet extends Entity {
|
|||
compound.setTag("Owner", nbttagcompound);
|
||||
}
|
||||
|
||||
if (this.target != null) {
|
||||
if (this.target != null)
|
||||
{
|
||||
BlockPos blockpos1 = new BlockPos(this.target);
|
||||
NBTTagCompound nbttagcompound1 = NBTUtil.createUUIDTag(this.target.getUniqueID());
|
||||
nbttagcompound1.setInteger("X", blockpos1.getX());
|
||||
|
@ -103,7 +110,8 @@ public class EntitySchalkerBullet extends Entity {
|
|||
compound.setTag("Target", nbttagcompound1);
|
||||
}
|
||||
|
||||
if (this.direction != null) {
|
||||
if (this.direction != null)
|
||||
{
|
||||
compound.setInteger("Dir", this.direction.getIndex());
|
||||
}
|
||||
|
||||
|
@ -117,46 +125,56 @@ public class EntitySchalkerBullet extends Entity {
|
|||
* (abstract) Protected helper method to read subclass entity data from NBT.
|
||||
*/
|
||||
@Override
|
||||
protected void readEntityFromNBT(NBTTagCompound compound) {
|
||||
protected void readEntityFromNBT(NBTTagCompound compound)
|
||||
{
|
||||
this.steps = compound.getInteger("Steps");
|
||||
this.targetDeltaX = compound.getDouble("TXD");
|
||||
this.targetDeltaY = compound.getDouble("TYD");
|
||||
this.targetDeltaZ = compound.getDouble("TZD");
|
||||
|
||||
if (compound.hasKey("Dir", 99)) {
|
||||
if (compound.hasKey("Dir", 99))
|
||||
{
|
||||
this.direction = EnumFacing.getFront(compound.getInteger("Dir"));
|
||||
}
|
||||
|
||||
if (compound.hasKey("Owner", 10)) {
|
||||
if (compound.hasKey("Owner", 10))
|
||||
{
|
||||
NBTTagCompound nbttagcompound = compound.getCompoundTag("Owner");
|
||||
this.ownerUniqueId = NBTUtil.getUUIDFromTag(nbttagcompound);
|
||||
this.ownerBlockPos = new BlockPos(nbttagcompound.getInteger("X"), nbttagcompound.getInteger("Y"),
|
||||
nbttagcompound.getInteger("Z"));
|
||||
this.ownerBlockPos = new BlockPos(nbttagcompound.getInteger("X"), nbttagcompound.getInteger("Y"), nbttagcompound.getInteger("Z"));
|
||||
}
|
||||
|
||||
if (compound.hasKey("Target", 10)) {
|
||||
if (compound.hasKey("Target", 10))
|
||||
{
|
||||
NBTTagCompound nbttagcompound1 = compound.getCompoundTag("Target");
|
||||
this.targetUniqueId = NBTUtil.getUUIDFromTag(nbttagcompound1);
|
||||
this.targetBlockPos = new BlockPos(nbttagcompound1.getInteger("X"), nbttagcompound1.getInteger("Y"),
|
||||
nbttagcompound1.getInteger("Z"));
|
||||
this.targetBlockPos = new BlockPos(nbttagcompound1.getInteger("X"), nbttagcompound1.getInteger("Y"), nbttagcompound1.getInteger("Z"));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void entityInit() {
|
||||
protected void entityInit()
|
||||
{
|
||||
}
|
||||
|
||||
private void setDirection(@Nullable EnumFacing directionIn) {
|
||||
private void setDirection(@Nullable
|
||||
EnumFacing directionIn)
|
||||
{
|
||||
this.direction = directionIn;
|
||||
}
|
||||
|
||||
private void selectNextMoveDirection(@Nullable EnumFacing.Axis p_184569_1_) {
|
||||
private void selectNextMoveDirection(@Nullable
|
||||
EnumFacing.Axis p_184569_1_)
|
||||
{
|
||||
double d0 = 0.5D;
|
||||
BlockPos blockpos;
|
||||
|
||||
if (this.target == null) {
|
||||
if (this.target == null)
|
||||
{
|
||||
blockpos = (new BlockPos(this)).down();
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
d0 = this.target.height * 0.5D;
|
||||
blockpos = new BlockPos(this.target.posX, this.target.posY + d0, this.target.posZ);
|
||||
}
|
||||
|
@ -166,41 +184,58 @@ public class EntitySchalkerBullet extends Entity {
|
|||
double d3 = blockpos.getZ() + 0.5D;
|
||||
EnumFacing enumfacing = null;
|
||||
|
||||
if (blockpos.distanceSqToCenter(this.posX, this.posY, this.posZ) >= 4.0D) {
|
||||
if (blockpos.distanceSqToCenter(this.posX, this.posY, this.posZ) >= 4.0D)
|
||||
{
|
||||
BlockPos blockpos1 = new BlockPos(this);
|
||||
List<EnumFacing> list = Lists.<EnumFacing>newArrayList();
|
||||
|
||||
if (p_184569_1_ != EnumFacing.Axis.X) {
|
||||
if (blockpos1.getX() < blockpos.getX() && this.world.isAirBlock(blockpos1.east())) {
|
||||
if (p_184569_1_ != EnumFacing.Axis.X)
|
||||
{
|
||||
if (blockpos1.getX() < blockpos.getX() && this.world.isAirBlock(blockpos1.east()))
|
||||
{
|
||||
list.add(EnumFacing.EAST);
|
||||
} else if (blockpos1.getX() > blockpos.getX() && this.world.isAirBlock(blockpos1.west())) {
|
||||
}
|
||||
else if (blockpos1.getX() > blockpos.getX() && this.world.isAirBlock(blockpos1.west()))
|
||||
{
|
||||
list.add(EnumFacing.WEST);
|
||||
}
|
||||
}
|
||||
|
||||
if (p_184569_1_ != EnumFacing.Axis.Y) {
|
||||
if (blockpos1.getY() < blockpos.getY() && this.world.isAirBlock(blockpos1.up())) {
|
||||
if (p_184569_1_ != EnumFacing.Axis.Y)
|
||||
{
|
||||
if (blockpos1.getY() < blockpos.getY() && this.world.isAirBlock(blockpos1.up()))
|
||||
{
|
||||
list.add(EnumFacing.UP);
|
||||
} else if (blockpos1.getY() > blockpos.getY() && this.world.isAirBlock(blockpos1.down())) {
|
||||
}
|
||||
else if (blockpos1.getY() > blockpos.getY() && this.world.isAirBlock(blockpos1.down()))
|
||||
{
|
||||
list.add(EnumFacing.DOWN);
|
||||
}
|
||||
}
|
||||
|
||||
if (p_184569_1_ != EnumFacing.Axis.Z) {
|
||||
if (blockpos1.getZ() < blockpos.getZ() && this.world.isAirBlock(blockpos1.south())) {
|
||||
if (p_184569_1_ != EnumFacing.Axis.Z)
|
||||
{
|
||||
if (blockpos1.getZ() < blockpos.getZ() && this.world.isAirBlock(blockpos1.south()))
|
||||
{
|
||||
list.add(EnumFacing.SOUTH);
|
||||
} else if (blockpos1.getZ() > blockpos.getZ() && this.world.isAirBlock(blockpos1.north())) {
|
||||
}
|
||||
else if (blockpos1.getZ() > blockpos.getZ() && this.world.isAirBlock(blockpos1.north()))
|
||||
{
|
||||
list.add(EnumFacing.NORTH);
|
||||
}
|
||||
}
|
||||
|
||||
enumfacing = EnumFacing.random(this.rand);
|
||||
|
||||
if (list.isEmpty()) {
|
||||
for (int i = 5; !this.world.isAirBlock(blockpos1.offset(enumfacing)) && i > 0; --i) {
|
||||
if (list.isEmpty())
|
||||
{
|
||||
for (int i = 5; !this.world.isAirBlock(blockpos1.offset(enumfacing)) && i > 0; --i)
|
||||
{
|
||||
enumfacing = EnumFacing.random(this.rand);
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
enumfacing = list.get(this.rand.nextInt(list.size()));
|
||||
}
|
||||
|
||||
|
@ -215,11 +250,14 @@ public class EntitySchalkerBullet extends Entity {
|
|||
double d4 = d3 - this.posZ;
|
||||
double d5 = MathHelper.sqrt(d6 * d6 + d7 * d7 + d4 * d4);
|
||||
|
||||
if (d5 == 0.0D) {
|
||||
if (d5 == 0.0D)
|
||||
{
|
||||
this.targetDeltaX = 0.0D;
|
||||
this.targetDeltaY = 0.0D;
|
||||
this.targetDeltaZ = 0.0D;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
this.targetDeltaX = d6 / d5 * 0.15D;
|
||||
this.targetDeltaY = d7 / d5 * 0.15D;
|
||||
this.targetDeltaZ = d4 / d5 * 0.15D;
|
||||
|
@ -233,17 +271,25 @@ public class EntitySchalkerBullet extends Entity {
|
|||
* Called to update the entity's position/logic.
|
||||
*/
|
||||
@Override
|
||||
public void onUpdate() {
|
||||
if (!this.world.isRemote && this.world.getDifficulty() == EnumDifficulty.PEACEFUL) {
|
||||
public void onUpdate()
|
||||
{
|
||||
if (!this.world.isRemote && this.world.getDifficulty() == EnumDifficulty.PEACEFUL)
|
||||
{
|
||||
this.setDead();
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
super.onUpdate();
|
||||
|
||||
if (!this.world.isRemote) {
|
||||
if (this.target == null && this.targetUniqueId != null) {
|
||||
if (!this.world.isRemote)
|
||||
{
|
||||
if (this.target == null && this.targetUniqueId != null)
|
||||
{
|
||||
for (EntityLivingBase entitylivingbase : this.world.getEntitiesWithinAABB(EntityLivingBase.class,
|
||||
new AxisAlignedBB(this.targetBlockPos.add(-2, -2, -2), this.targetBlockPos.add(2, 2, 2)))) {
|
||||
if (entitylivingbase.getUniqueID().equals(this.targetUniqueId)) {
|
||||
new AxisAlignedBB(this.targetBlockPos.add(-2, -2, -2), this.targetBlockPos.add(2, 2, 2))))
|
||||
{
|
||||
if (entitylivingbase.getUniqueID().equals(this.targetUniqueId))
|
||||
{
|
||||
this.target = entitylivingbase;
|
||||
break;
|
||||
}
|
||||
|
@ -252,10 +298,13 @@ public class EntitySchalkerBullet extends Entity {
|
|||
this.targetUniqueId = null;
|
||||
}
|
||||
|
||||
if (this.owner == null && this.ownerUniqueId != null) {
|
||||
if (this.owner == null && this.ownerUniqueId != null)
|
||||
{
|
||||
for (EntityLivingBase entitylivingbase1 : this.world.getEntitiesWithinAABB(EntityLivingBase.class,
|
||||
new AxisAlignedBB(this.ownerBlockPos.add(-2, -2, -2), this.ownerBlockPos.add(2, 2, 2)))) {
|
||||
if (entitylivingbase1.getUniqueID().equals(this.ownerUniqueId)) {
|
||||
new AxisAlignedBB(this.ownerBlockPos.add(-2, -2, -2), this.ownerBlockPos.add(2, 2, 2))))
|
||||
{
|
||||
if (entitylivingbase1.getUniqueID().equals(this.ownerUniqueId))
|
||||
{
|
||||
this.owner = entitylivingbase1;
|
||||
break;
|
||||
}
|
||||
|
@ -264,12 +313,15 @@ public class EntitySchalkerBullet extends Entity {
|
|||
this.ownerUniqueId = null;
|
||||
}
|
||||
|
||||
if (this.target == null || !this.target.isEntityAlive()
|
||||
|| this.target instanceof EntityPlayer && ((EntityPlayer) this.target).isSpectator()) {
|
||||
if (!this.hasNoGravity()) {
|
||||
if (this.target == null || !this.target.isEntityAlive() || this.target instanceof EntityPlayer && ((EntityPlayer) this.target).isSpectator())
|
||||
{
|
||||
if (!this.hasNoGravity())
|
||||
{
|
||||
this.motionY -= 0.04D;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
this.targetDeltaX = MathHelper.clamp(this.targetDeltaX * 1.025D, -1.0D, 1.0D);
|
||||
this.targetDeltaY = MathHelper.clamp(this.targetDeltaY * 1.025D, -1.0D, 1.0D);
|
||||
this.targetDeltaZ = MathHelper.clamp(this.targetDeltaZ * 1.025D, -1.0D, 1.0D);
|
||||
|
@ -280,8 +332,8 @@ public class EntitySchalkerBullet extends Entity {
|
|||
|
||||
RayTraceResult raytraceresult = ProjectileHelper.forwardsRaycast(this, true, false, this.owner);
|
||||
|
||||
if (raytraceresult != null
|
||||
&& !net.minecraftforge.event.ForgeEventFactory.onProjectileImpact(this, raytraceresult)) {
|
||||
if (raytraceresult != null && !net.minecraftforge.event.ForgeEventFactory.onProjectileImpact(this, raytraceresult))
|
||||
{
|
||||
this.bulletHit(raytraceresult);
|
||||
}
|
||||
}
|
||||
|
@ -289,30 +341,38 @@ public class EntitySchalkerBullet extends Entity {
|
|||
this.setPosition(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ);
|
||||
ProjectileHelper.rotateTowardsMovement(this, 0.5F);
|
||||
|
||||
if (this.world.isRemote) {
|
||||
this.world.spawnParticle(EnumParticleTypes.END_ROD, this.posX - this.motionX,
|
||||
this.posY - this.motionY + 0.15D, this.posZ - this.motionZ, 0.0D, 0.0D, 0.0D);
|
||||
} else if (this.target != null && !this.target.isDead) {
|
||||
if (this.steps > 0) {
|
||||
if (this.world.isRemote)
|
||||
{
|
||||
this.world.spawnParticle(EnumParticleTypes.END_ROD, this.posX - this.motionX, this.posY - this.motionY + 0.15D, this.posZ - this.motionZ, 0.0D, 0.0D, 0.0D);
|
||||
}
|
||||
else if (this.target != null && !this.target.isDead)
|
||||
{
|
||||
if (this.steps > 0)
|
||||
{
|
||||
--this.steps;
|
||||
|
||||
if (this.steps == 0) {
|
||||
if (this.steps == 0)
|
||||
{
|
||||
this.selectNextMoveDirection(this.direction == null ? null : this.direction.getAxis());
|
||||
}
|
||||
}
|
||||
|
||||
if (this.direction != null) {
|
||||
if (this.direction != null)
|
||||
{
|
||||
BlockPos blockpos = new BlockPos(this);
|
||||
EnumFacing.Axis enumfacing$axis = this.direction.getAxis();
|
||||
|
||||
if (this.world.isBlockNormalCube(blockpos.offset(this.direction), false)) {
|
||||
if (this.world.isBlockNormalCube(blockpos.offset(this.direction), false))
|
||||
{
|
||||
this.selectNextMoveDirection(enumfacing$axis);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
BlockPos blockpos1 = new BlockPos(this.target);
|
||||
|
||||
if (enumfacing$axis == EnumFacing.Axis.X && blockpos.getX() == blockpos1.getX()
|
||||
|| enumfacing$axis == EnumFacing.Axis.Z && blockpos.getZ() == blockpos1.getZ()
|
||||
|| enumfacing$axis == EnumFacing.Axis.Y && blockpos.getY() == blockpos1.getY()) {
|
||||
if (enumfacing$axis == EnumFacing.Axis.X && blockpos.getX() == blockpos1.getX() || enumfacing$axis == EnumFacing.Axis.Z && blockpos.getZ() == blockpos1.getZ()
|
||||
|| enumfacing$axis == EnumFacing.Axis.Y && blockpos.getY() == blockpos1.getY())
|
||||
{
|
||||
this.selectNextMoveDirection(enumfacing$axis);
|
||||
}
|
||||
}
|
||||
|
@ -322,11 +382,11 @@ public class EntitySchalkerBullet extends Entity {
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns true if the entity is on fire. Used by render to add the fire effect
|
||||
* on rendering.
|
||||
* Returns true if the entity is on fire. Used by render to add the fire effect on rendering.
|
||||
*/
|
||||
@Override
|
||||
public boolean isBurning() {
|
||||
public boolean isBurning()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -335,7 +395,8 @@ public class EntitySchalkerBullet extends Entity {
|
|||
*/
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public boolean isInRangeToRenderDist(double distance) {
|
||||
public boolean isInRangeToRenderDist(double distance)
|
||||
{
|
||||
return distance < 16384.0D;
|
||||
}
|
||||
|
||||
|
@ -343,29 +404,35 @@ public class EntitySchalkerBullet extends Entity {
|
|||
* Gets how bright this entity is.
|
||||
*/
|
||||
@Override
|
||||
public float getBrightness() {
|
||||
public float getBrightness()
|
||||
{
|
||||
return 1.0F;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public int getBrightnessForRender() {
|
||||
public int getBrightnessForRender()
|
||||
{
|
||||
return 15728880;
|
||||
}
|
||||
|
||||
protected void bulletHit(RayTraceResult result) {
|
||||
if (result.entityHit == null) {
|
||||
((WorldServer) this.world).spawnParticle(EnumParticleTypes.EXPLOSION_LARGE, this.posX, this.posY, this.posZ,
|
||||
2, 0.2D, 0.2D, 0.2D, 0.0D);
|
||||
protected void bulletHit(RayTraceResult result)
|
||||
{
|
||||
if (result.entityHit == null)
|
||||
{
|
||||
((WorldServer) this.world).spawnParticle(EnumParticleTypes.EXPLOSION_LARGE, this.posX, this.posY, this.posZ, 2, 0.2D, 0.2D, 0.2D, 0.0D);
|
||||
this.playSound(SoundEvents.ENTITY_SHULKER_BULLET_HIT, 1.0F, 1.0F);
|
||||
} else {
|
||||
boolean flag = result.entityHit
|
||||
.attackEntityFrom(DamageSource.causeIndirectDamage(this, this.owner).setProjectile(), 4.0F);
|
||||
}
|
||||
else
|
||||
{
|
||||
boolean flag = result.entityHit.attackEntityFrom(DamageSource.causeIndirectDamage(this, this.owner).setProjectile(), 4.0F);
|
||||
|
||||
if (flag) {
|
||||
if (flag)
|
||||
{
|
||||
this.applyEnchantments(this.owner, result.entityHit);
|
||||
|
||||
if (result.entityHit instanceof EntityLivingBase) {
|
||||
if (result.entityHit instanceof EntityLivingBase)
|
||||
{
|
||||
((EntityLivingBase) result.entityHit).addPotionEffect(new PotionEffect(MobEffects.LEVITATION, 200));
|
||||
}
|
||||
}
|
||||
|
@ -375,11 +442,11 @@ public class EntitySchalkerBullet extends Entity {
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns true if other Entities should be prevented from moving through this
|
||||
* Entity.
|
||||
* Returns true if other Entities should be prevented from moving through this Entity.
|
||||
*/
|
||||
@Override
|
||||
public boolean canBeCollidedWith() {
|
||||
public boolean canBeCollidedWith()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -387,11 +454,12 @@ public class EntitySchalkerBullet extends Entity {
|
|||
* Called when the entity is attacked.
|
||||
*/
|
||||
@Override
|
||||
public boolean attackEntityFrom(DamageSource source, float amount) {
|
||||
if (!this.world.isRemote) {
|
||||
public boolean attackEntityFrom(DamageSource source, float amount)
|
||||
{
|
||||
if (!this.world.isRemote)
|
||||
{
|
||||
this.playSound(SoundEvents.ENTITY_SHULKER_BULLET_HURT, 1.0F, 1.0F);
|
||||
((WorldServer) this.world).spawnParticle(EnumParticleTypes.CRIT, this.posX, this.posY, this.posZ, 15, 0.2D,
|
||||
0.2D, 0.2D, 0.0D);
|
||||
((WorldServer) this.world).spawnParticle(EnumParticleTypes.CRIT, this.posX, this.posY, this.posZ, 15, 0.2D, 0.2D, 0.2D, 0.0D);
|
||||
this.setDead();
|
||||
}
|
||||
|
||||
|
|
|
@ -7,40 +7,48 @@ import net.minecraft.util.DamageSource;
|
|||
import net.minecraft.util.SoundEvent;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class EntitySmavaCreeper extends EntityCreeper {
|
||||
public class EntitySmavaCreeper extends EntityCreeper
|
||||
{
|
||||
private int lastActiveTime;
|
||||
private int timeSinceIgnited;
|
||||
private int fuseTime = 20;
|
||||
private int explosionRadius = 6;
|
||||
|
||||
public EntitySmavaCreeper(World worldIn) {
|
||||
public EntitySmavaCreeper(World worldIn)
|
||||
{
|
||||
super(worldIn);
|
||||
setSize(0.6F, 1.7F);
|
||||
getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.5D);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate() {
|
||||
if (this.isEntityAlive()) {
|
||||
public void onUpdate()
|
||||
{
|
||||
if (this.isEntityAlive())
|
||||
{
|
||||
this.lastActiveTime = this.timeSinceIgnited;
|
||||
|
||||
if (this.hasIgnited()) {
|
||||
if (this.hasIgnited())
|
||||
{
|
||||
this.setCreeperState(1);
|
||||
}
|
||||
|
||||
int i = this.getCreeperState();
|
||||
|
||||
if (i > 0 && this.timeSinceIgnited == 0) {
|
||||
if (i > 0 && this.timeSinceIgnited == 0)
|
||||
{
|
||||
this.playSound(ModSoundEvents.ENTITY_SMAVACREEPER_FUSE, 1.0F, 1.0F);
|
||||
}
|
||||
|
||||
this.timeSinceIgnited += i;
|
||||
|
||||
if (this.timeSinceIgnited < 0) {
|
||||
if (this.timeSinceIgnited < 0)
|
||||
{
|
||||
this.timeSinceIgnited = 0;
|
||||
}
|
||||
|
||||
if (this.timeSinceIgnited >= this.fuseTime) {
|
||||
if (this.timeSinceIgnited >= this.fuseTime)
|
||||
{
|
||||
this.timeSinceIgnited = this.fuseTime;
|
||||
this.explode();
|
||||
}
|
||||
|
@ -49,25 +57,28 @@ public class EntitySmavaCreeper extends EntityCreeper {
|
|||
super.onUpdate();
|
||||
}
|
||||
|
||||
private void explode() {
|
||||
if (!this.world.isRemote) {
|
||||
private void explode()
|
||||
{
|
||||
if (!this.world.isRemote)
|
||||
{
|
||||
boolean flag = net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this.world, this);
|
||||
float f = this.getPowered() ? 2.0F : 1.0F;
|
||||
this.dead = true;
|
||||
this.world.playSound(null, getPosition(), ModSoundEvents.ENTITY_SMAVACREEPER_BLOW, getSoundCategory(), 5.0F,
|
||||
1.0F);
|
||||
this.world.playSound(null, getPosition(), ModSoundEvents.ENTITY_SMAVACREEPER_BLOW, getSoundCategory(), 5.0F, 1.0F);
|
||||
this.world.createExplosion(this, this.posX, this.posY, this.posZ, this.explosionRadius * f, flag);
|
||||
this.setDead();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getHurtSound(DamageSource damageSourceIn) {
|
||||
protected SoundEvent getHurtSound(DamageSource damageSourceIn)
|
||||
{
|
||||
return ModSoundEvents.ENTITY_SMAVACREEPER_HURT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SoundEvent getAmbientSound() {
|
||||
protected SoundEvent getAmbientSound()
|
||||
{
|
||||
return ModSoundEvents.ENTITY_SMAVACREEPER_AMBIENT;
|
||||
}
|
||||
}
|
|
@ -18,13 +18,11 @@ import net.minecraft.network.datasync.DataSerializers;
|
|||
import net.minecraft.network.datasync.EntityDataManager;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class EntityWolfMZTE extends EntityWolf {
|
||||
private static final DataParameter<Float> DATA_HEALTH_ID = EntityDataManager.<Float>createKey(EntityWolf.class,
|
||||
DataSerializers.FLOAT);
|
||||
private static final DataParameter<Boolean> BEGGING = EntityDataManager.<Boolean>createKey(EntityWolf.class,
|
||||
DataSerializers.BOOLEAN);
|
||||
private static final DataParameter<Integer> COLLAR_COLOR = EntityDataManager.<Integer>createKey(EntityWolf.class,
|
||||
DataSerializers.VARINT);
|
||||
public class EntityWolfMZTE extends EntityWolf
|
||||
{
|
||||
private static final DataParameter<Float> DATA_HEALTH_ID = EntityDataManager.<Float>createKey(EntityWolf.class, DataSerializers.FLOAT);
|
||||
private static final DataParameter<Boolean> BEGGING = EntityDataManager.<Boolean>createKey(EntityWolf.class, DataSerializers.BOOLEAN);
|
||||
private static final DataParameter<Integer> COLLAR_COLOR = EntityDataManager.<Integer>createKey(EntityWolf.class, DataSerializers.VARINT);
|
||||
private float headRotationCourse;
|
||||
private float headRotationCourseOld;
|
||||
private boolean isWet;
|
||||
|
@ -32,18 +30,21 @@ public class EntityWolfMZTE extends EntityWolf {
|
|||
private float timeWolfIsShaking;
|
||||
private float prevTimeWolfIsShaking;
|
||||
|
||||
public EntityWolfMZTE(World worldIn) {
|
||||
public EntityWolfMZTE(World worldIn)
|
||||
{
|
||||
super(worldIn);
|
||||
this.setSize(0.6F, 0.85F);
|
||||
this.setTamed(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityWolfMZTE createChild(EntityAgeable ageable) {
|
||||
public EntityWolfMZTE createChild(EntityAgeable ageable)
|
||||
{
|
||||
EntityWolfMZTE entitywolfmzte = new EntityWolfMZTE(this.world);
|
||||
UUID uuid = this.getOwnerId();
|
||||
|
||||
if (uuid != null) {
|
||||
if (uuid != null)
|
||||
{
|
||||
entitywolfmzte.setOwnerId(uuid);
|
||||
entitywolfmzte.setTamed(true);
|
||||
}
|
||||
|
@ -52,53 +53,75 @@ public class EntityWolfMZTE extends EntityWolf {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean canMateWith(EntityAnimal otherAnimal) {
|
||||
if (otherAnimal == this) {
|
||||
public boolean canMateWith(EntityAnimal otherAnimal)
|
||||
{
|
||||
if (otherAnimal == this)
|
||||
{
|
||||
return false;
|
||||
} else if (!this.isTamed()) {
|
||||
}
|
||||
else if (!this.isTamed())
|
||||
{
|
||||
return false;
|
||||
} else if (!(otherAnimal instanceof EntityWolfMZTE)) {
|
||||
}
|
||||
else if (!(otherAnimal instanceof EntityWolfMZTE))
|
||||
{
|
||||
return false;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
EntityWolfMZTE entitywolfmzte = (EntityWolfMZTE) otherAnimal;
|
||||
|
||||
if (!entitywolfmzte.isTamed()) {
|
||||
if (!entitywolfmzte.isTamed())
|
||||
{
|
||||
return false;
|
||||
} else if (entitywolfmzte.isSitting()) {
|
||||
}
|
||||
else if (entitywolfmzte.isSitting())
|
||||
{
|
||||
return false;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
return this.isInLove() && entitywolfmzte.isInLove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldAttackEntity(EntityLivingBase target, EntityLivingBase owner) {
|
||||
if (!(target instanceof EntityCreeper) && !(target instanceof EntityGhast)) {
|
||||
if (target instanceof EntityWolfMZTE) {
|
||||
public boolean shouldAttackEntity(EntityLivingBase target, EntityLivingBase owner)
|
||||
{
|
||||
if (!(target instanceof EntityCreeper) && !(target instanceof EntityGhast))
|
||||
{
|
||||
if (target instanceof EntityWolfMZTE)
|
||||
{
|
||||
EntityWolfMZTE entitywolfmzte = (EntityWolfMZTE) target;
|
||||
|
||||
if (entitywolfmzte.isTamed() && entitywolfmzte.getOwner() == owner) {
|
||||
if (entitywolfmzte.isTamed() && entitywolfmzte.getOwner() == owner)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (target instanceof EntityPlayer && owner instanceof EntityPlayer
|
||||
&& !((EntityPlayer) owner).canAttackPlayer((EntityPlayer) target)) {
|
||||
if (target instanceof EntityPlayer && owner instanceof EntityPlayer && !((EntityPlayer) owner).canAttackPlayer((EntityPlayer) target))
|
||||
{
|
||||
return false;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
return !(target instanceof AbstractHorse) || !((AbstractHorse) target).isTame();
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
class AIAvoidEntity<T extends Entity> extends EntityAIAvoidEntity<T> {
|
||||
class AIAvoidEntity<T extends Entity> extends EntityAIAvoidEntity<T>
|
||||
{
|
||||
private final EntityWolfMZTE wolf;
|
||||
|
||||
public AIAvoidEntity(EntityWolfMZTE wolfIn, Class<T> p_i47251_3_, float p_i47251_4_, double p_i47251_5_,
|
||||
double p_i47251_7_) {
|
||||
public AIAvoidEntity(EntityWolfMZTE wolfIn, Class<T> p_i47251_3_, float p_i47251_4_, double p_i47251_5_, double p_i47251_7_)
|
||||
{
|
||||
super(wolfIn, p_i47251_3_, p_i47251_4_, p_i47251_5_, p_i47251_7_);
|
||||
this.wolf = wolfIn;
|
||||
}
|
||||
|
@ -107,15 +130,20 @@ public class EntityWolfMZTE extends EntityWolf {
|
|||
* Returns whether the EntityAIBase should begin execution.
|
||||
*/
|
||||
@Override
|
||||
public boolean shouldExecute() {
|
||||
if (super.shouldExecute() && this.closestLivingEntity instanceof EntityLlama) {
|
||||
public boolean shouldExecute()
|
||||
{
|
||||
if (super.shouldExecute() && this.closestLivingEntity instanceof EntityLlama)
|
||||
{
|
||||
return !this.wolf.isTamed() && this.avoidLlama((EntityLlama) this.closestLivingEntity);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean avoidLlama(EntityLlama p_190854_1_) {
|
||||
private boolean avoidLlama(EntityLlama p_190854_1_)
|
||||
{
|
||||
return p_190854_1_.getStrength() >= EntityWolfMZTE.this.rand.nextInt(5);
|
||||
}
|
||||
|
||||
|
@ -123,7 +151,8 @@ public class EntityWolfMZTE extends EntityWolf {
|
|||
* Execute a one shot task or start executing a continuous task
|
||||
*/
|
||||
@Override
|
||||
public void startExecuting() {
|
||||
public void startExecuting()
|
||||
{
|
||||
EntityWolfMZTE.this.setAttackTarget((EntityLivingBase) null);
|
||||
super.startExecuting();
|
||||
}
|
||||
|
@ -132,7 +161,8 @@ public class EntityWolfMZTE extends EntityWolf {
|
|||
* Keep ticking a continuous task that has already been started
|
||||
*/
|
||||
@Override
|
||||
public void updateTask() {
|
||||
public void updateTask()
|
||||
{
|
||||
EntityWolfMZTE.this.setAttackTarget((EntityLivingBase) null);
|
||||
super.updateTask();
|
||||
}
|
||||
|
|
|
@ -8,15 +8,18 @@ import net.minecraftforge.client.model.ModelLoader;
|
|||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
public class ItemBase extends Item {
|
||||
public ItemBase(String name, CreativeTabs tab) {
|
||||
public class ItemBase extends Item
|
||||
{
|
||||
public ItemBase(String name, CreativeTabs tab)
|
||||
{
|
||||
setRegistryName(name);
|
||||
setUnlocalizedName(Spackenmobs.MODID + "." + name);
|
||||
setCreativeTab(tab);
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void initModel() {
|
||||
public void initModel()
|
||||
{
|
||||
ModelLoader.setCustomModelResourceLocation(this, 0, new ModelResourceLocation(getRegistryName(), "inventory"));
|
||||
}
|
||||
}
|
|
@ -2,8 +2,10 @@ package mod.acgaming.spackenmobs.items;
|
|||
|
||||
import net.minecraft.potion.Potion;
|
||||
|
||||
public class ItemPotion extends Potion {
|
||||
public ItemPotion(String name, boolean isBadPotion, int color, int iconIndexX, int iconIndexY) {
|
||||
public class ItemPotion extends Potion
|
||||
{
|
||||
public ItemPotion(String name, boolean isBadPotion, int color, int iconIndexX, int iconIndexY)
|
||||
{
|
||||
super(isBadPotion, color);
|
||||
setPotionName("effect." + name);
|
||||
setIconIndex(iconIndexX, iconIndexY);
|
||||
|
|
|
@ -9,14 +9,18 @@ import net.minecraft.world.biome.Biome;
|
|||
import net.minecraft.world.biome.Biome.SpawnListEntry;
|
||||
|
||||
// Thanks to Vazkii!
|
||||
public class BiomeHelper {
|
||||
public class BiomeHelper
|
||||
{
|
||||
|
||||
public static Biome[] getBiomesWithMonster(Class<? extends Entity> clazz) {
|
||||
public static Biome[] getBiomesWithMonster(Class<? extends Entity> clazz)
|
||||
{
|
||||
List<Biome> biomes = new ArrayList<>();
|
||||
for (Biome b : Biome.REGISTRY) {
|
||||
for (Biome b : Biome.REGISTRY)
|
||||
{
|
||||
List<SpawnListEntry> spawnList = b.getSpawnableList(EnumCreatureType.MONSTER);
|
||||
for (SpawnListEntry e : spawnList)
|
||||
if (e.entityClass == clazz) {
|
||||
if (e.entityClass == clazz)
|
||||
{
|
||||
biomes.add(b);
|
||||
break;
|
||||
}
|
||||
|
@ -24,12 +28,15 @@ public class BiomeHelper {
|
|||
return biomes.toArray(new Biome[0]);
|
||||
}
|
||||
|
||||
public static Biome[] getBiomesWithCreature(Class<? extends Entity> clazz) {
|
||||
public static Biome[] getBiomesWithCreature(Class<? extends Entity> clazz)
|
||||
{
|
||||
List<Biome> biomes = new ArrayList<>();
|
||||
for (Biome b : Biome.REGISTRY) {
|
||||
for (Biome b : Biome.REGISTRY)
|
||||
{
|
||||
List<SpawnListEntry> spawnList = b.getSpawnableList(EnumCreatureType.CREATURE);
|
||||
for (SpawnListEntry e : spawnList)
|
||||
if (e.entityClass == clazz) {
|
||||
if (e.entityClass == clazz)
|
||||
{
|
||||
biomes.add(b);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -22,8 +22,10 @@ import mod.acgaming.spackenmobs.render.RenderSmavaCreeper;
|
|||
import mod.acgaming.spackenmobs.render.RenderWolfMZTE;
|
||||
import net.minecraftforge.fml.client.registry.RenderingRegistry;
|
||||
|
||||
public class ModEntities {
|
||||
public static void initModels() {
|
||||
public class ModEntities
|
||||
{
|
||||
public static void initModels()
|
||||
{
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntityApoRed.class, RenderApoRed.FACTORY);
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntityDrachenlord.class, RenderDrachenlord.FACTORY);
|
||||
RenderingRegistry.registerEntityRenderingHandler(EntityIslamist.class, RenderIslamist.FACTORY);
|
||||
|
|
|
@ -6,7 +6,8 @@ import net.minecraft.item.Item;
|
|||
import net.minecraftforge.fml.common.registry.GameRegistry.ObjectHolder;
|
||||
|
||||
@ObjectHolder(Spackenmobs.MODID)
|
||||
public class ModItems {
|
||||
public class ModItems
|
||||
{
|
||||
public static final Item RAM = new ItemBase("ram", Spackenmobs.SPACKENMOBS_TAB);
|
||||
public static final Item RAM_ON_A_STICK = new ItemBase("ram_on_a_stick", Spackenmobs.SPACKENMOBS_TAB);
|
||||
public static final Item SURSTROEMMING = new ItemBase("surstroemming", Spackenmobs.SPACKENMOBS_TAB);
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
package mod.acgaming.spackenmobs.misc;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.world.storage.loot.LootTable;
|
||||
import net.minecraft.world.storage.loot.LootTableManager;
|
||||
|
||||
public class ModLootTableList
|
||||
{
|
||||
private static final Set<ResourceLocation> LOOT_TABLES = Sets.<ResourceLocation>newHashSet();
|
||||
private static final Set<ResourceLocation> READ_ONLY_LOOT_TABLES = Collections.<ResourceLocation>unmodifiableSet(LOOT_TABLES);
|
||||
public static final ResourceLocation EMPTY = register("empty");
|
||||
public static final ResourceLocation ENTITIES_JENS = register("entities/jens");
|
||||
|
||||
private static ResourceLocation register(String id)
|
||||
{
|
||||
return register(new ResourceLocation("spackenmobs", id));
|
||||
}
|
||||
|
||||
public static ResourceLocation register(ResourceLocation id)
|
||||
{
|
||||
if (LOOT_TABLES.add(id))
|
||||
{
|
||||
return id;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new IllegalArgumentException(id + " is already a registered built-in loot table");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* An unmodifiable set is returned
|
||||
*/
|
||||
public static Set<ResourceLocation> getAll()
|
||||
{
|
||||
return READ_ONLY_LOOT_TABLES;
|
||||
}
|
||||
|
||||
public static boolean test()
|
||||
{
|
||||
LootTableManager loottablemanager = new LootTableManager((File) null);
|
||||
|
||||
for (ResourceLocation resourcelocation : READ_ONLY_LOOT_TABLES)
|
||||
{
|
||||
if (loottablemanager.getLootTableFromLocation(resourcelocation) == LootTable.EMPTY_LOOT_TABLE)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
package mod.acgaming.spackenmobs.misc;
|
||||
|
||||
public class ModPotions {
|
||||
public class ModPotions
|
||||
{
|
||||
|
||||
}
|
|
@ -6,74 +6,44 @@ import net.minecraft.util.SoundEvent;
|
|||
import net.minecraftforge.fml.common.registry.GameRegistry.ObjectHolder;
|
||||
|
||||
@ObjectHolder(Spackenmobs.MODID)
|
||||
public class ModSoundEvents {
|
||||
public static final SoundEvent ENTITY_SMAVACREEPER_FUSE = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.smava_creeper.fuse"));
|
||||
public static final SoundEvent ENTITY_SMAVACREEPER_BLOW = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.smava_creeper.blow"));
|
||||
public static final SoundEvent ENTITY_SMAVACREEPER_HURT = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.smava_creeper.hurt"));
|
||||
public static final SoundEvent ENTITY_SMAVACREEPER_AMBIENT = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.smava_creeper.ambient"));
|
||||
public class ModSoundEvents
|
||||
{
|
||||
public static final SoundEvent ENTITY_SMAVACREEPER_FUSE = new SoundEvent(new ResourceLocation("spackenmobs:entities.smava_creeper.fuse"));
|
||||
public static final SoundEvent ENTITY_SMAVACREEPER_BLOW = new SoundEvent(new ResourceLocation("spackenmobs:entities.smava_creeper.blow"));
|
||||
public static final SoundEvent ENTITY_SMAVACREEPER_HURT = new SoundEvent(new ResourceLocation("spackenmobs:entities.smava_creeper.hurt"));
|
||||
public static final SoundEvent ENTITY_SMAVACREEPER_AMBIENT = new SoundEvent(new ResourceLocation("spackenmobs:entities.smava_creeper.ambient"));
|
||||
|
||||
public static final SoundEvent ENTITY_MARCELLDAVIS_AMBIENT = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.marcell_davis.ambient"));
|
||||
public static final SoundEvent ENTITY_MARCELLDAVIS_HURT = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.marcell_davis.hurt"));
|
||||
public static final SoundEvent ENTITY_MARCELLDAVIS_DEATH = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.marcell_davis.death"));
|
||||
public static final SoundEvent ENTITY_MARCELLDAVIS_AMBIENT = new SoundEvent(new ResourceLocation("spackenmobs:entities.marcell_davis.ambient"));
|
||||
public static final SoundEvent ENTITY_MARCELLDAVIS_HURT = new SoundEvent(new ResourceLocation("spackenmobs:entities.marcell_davis.hurt"));
|
||||
public static final SoundEvent ENTITY_MARCELLDAVIS_DEATH = new SoundEvent(new ResourceLocation("spackenmobs:entities.marcell_davis.death"));
|
||||
|
||||
public static final SoundEvent ENTITY_ISLAMIST_FUSE = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.islamist.fuse"));
|
||||
public static final SoundEvent ENTITY_ISLAMIST_BLOW = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.islamist.blow"));
|
||||
public static final SoundEvent ENTITY_ISLAMIST_HURT = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.islamist.hurt"));
|
||||
public static final SoundEvent ENTITY_ISLAMIST_AMBIENT = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.islamist.ambient"));
|
||||
public static final SoundEvent ENTITY_ISLAMIST_FUSE = new SoundEvent(new ResourceLocation("spackenmobs:entities.islamist.fuse"));
|
||||
public static final SoundEvent ENTITY_ISLAMIST_BLOW = new SoundEvent(new ResourceLocation("spackenmobs:entities.islamist.blow"));
|
||||
public static final SoundEvent ENTITY_ISLAMIST_HURT = new SoundEvent(new ResourceLocation("spackenmobs:entities.islamist.hurt"));
|
||||
public static final SoundEvent ENTITY_ISLAMIST_AMBIENT = new SoundEvent(new ResourceLocation("spackenmobs:entities.islamist.ambient"));
|
||||
|
||||
public static final SoundEvent ENTITY_APORED_AMBIENT = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.apored.ambient"));
|
||||
public static final SoundEvent ENTITY_APORED_HURT = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.apored.hurt"));
|
||||
public static final SoundEvent ENTITY_APORED_DEATH = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.apored.death"));
|
||||
public static final SoundEvent ENTITY_APORED_AMBIENT = new SoundEvent(new ResourceLocation("spackenmobs:entities.apored.ambient"));
|
||||
public static final SoundEvent ENTITY_APORED_HURT = new SoundEvent(new ResourceLocation("spackenmobs:entities.apored.hurt"));
|
||||
public static final SoundEvent ENTITY_APORED_DEATH = new SoundEvent(new ResourceLocation("spackenmobs:entities.apored.death"));
|
||||
|
||||
public static final SoundEvent ENTITY_MRBEAN_AMBIENT = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.mr_bean.ambient"));
|
||||
public static final SoundEvent ENTITY_MRBEAN_HURT = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.mr_bean.hurt"));
|
||||
public static final SoundEvent ENTITY_MRBEAN_DEATH = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.mr_bean.death"));
|
||||
public static final SoundEvent ENTITY_MRBEAN_AMBIENT = new SoundEvent(new ResourceLocation("spackenmobs:entities.mr_bean.ambient"));
|
||||
public static final SoundEvent ENTITY_MRBEAN_HURT = new SoundEvent(new ResourceLocation("spackenmobs:entities.mr_bean.hurt"));
|
||||
public static final SoundEvent ENTITY_MRBEAN_DEATH = new SoundEvent(new ResourceLocation("spackenmobs:entities.mr_bean.death"));
|
||||
|
||||
public static final SoundEvent ENTITY_DRACHENLORD_AMBIENT = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.drachenlord.ambient"));
|
||||
public static final SoundEvent ENTITY_DRACHENLORD_HURT = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.drachenlord.hurt"));
|
||||
public static final SoundEvent ENTITY_DRACHENLORD_DEATH = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.drachenlord.death"));
|
||||
public static final SoundEvent ENTITY_DRACHENLORD_ANGRY = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.drachenlord.angry"));
|
||||
public static final SoundEvent ENTITY_DRACHENLORD_AMBIENT = new SoundEvent(new ResourceLocation("spackenmobs:entities.drachenlord.ambient"));
|
||||
public static final SoundEvent ENTITY_DRACHENLORD_HURT = new SoundEvent(new ResourceLocation("spackenmobs:entities.drachenlord.hurt"));
|
||||
public static final SoundEvent ENTITY_DRACHENLORD_DEATH = new SoundEvent(new ResourceLocation("spackenmobs:entities.drachenlord.death"));
|
||||
public static final SoundEvent ENTITY_DRACHENLORD_ANGRY = new SoundEvent(new ResourceLocation("spackenmobs:entities.drachenlord.angry"));
|
||||
|
||||
public static final SoundEvent ENTITY_SCHALKER_AMBIENT = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.schalker.ambient"));
|
||||
public static final SoundEvent ENTITY_SCHALKER_HURT = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.schalker.hurt"));
|
||||
public static final SoundEvent ENTITY_SCHALKER_DEATH = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.schalker.death"));
|
||||
public static final SoundEvent ENTITY_SCHALKER_OPEN = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.schalker.open"));
|
||||
public static final SoundEvent ENTITY_SCHALKER_SHOOT = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.schalker.shoot"));
|
||||
public static final SoundEvent ENTITY_SCHALKER_AMBIENT = new SoundEvent(new ResourceLocation("spackenmobs:entities.schalker.ambient"));
|
||||
public static final SoundEvent ENTITY_SCHALKER_HURT = new SoundEvent(new ResourceLocation("spackenmobs:entities.schalker.hurt"));
|
||||
public static final SoundEvent ENTITY_SCHALKER_DEATH = new SoundEvent(new ResourceLocation("spackenmobs:entities.schalker.death"));
|
||||
public static final SoundEvent ENTITY_SCHALKER_OPEN = new SoundEvent(new ResourceLocation("spackenmobs:entities.schalker.open"));
|
||||
public static final SoundEvent ENTITY_SCHALKER_SHOOT = new SoundEvent(new ResourceLocation("spackenmobs:entities.schalker.shoot"));
|
||||
|
||||
public static final SoundEvent ENTITY_JENS_AMBIENT = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.jens.ambient"));
|
||||
public static final SoundEvent ENTITY_JENS_HURT = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.jens.hurt"));
|
||||
public static final SoundEvent ENTITY_JENS_DEATH = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.jens.death"));
|
||||
public static final SoundEvent ENTITY_JENS_EAT = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.jens.eat"));
|
||||
public static final SoundEvent ENTITY_JENS_POOP = new SoundEvent(
|
||||
new ResourceLocation("spackenmobs:entities.jens.poop"));
|
||||
public static final SoundEvent ENTITY_JENS_AMBIENT = new SoundEvent(new ResourceLocation("spackenmobs:entities.jens.ambient"));
|
||||
public static final SoundEvent ENTITY_JENS_HURT = new SoundEvent(new ResourceLocation("spackenmobs:entities.jens.hurt"));
|
||||
public static final SoundEvent ENTITY_JENS_DEATH = new SoundEvent(new ResourceLocation("spackenmobs:entities.jens.death"));
|
||||
public static final SoundEvent ENTITY_JENS_EAT = new SoundEvent(new ResourceLocation("spackenmobs:entities.jens.eat"));
|
||||
public static final SoundEvent ENTITY_JENS_POOP = new SoundEvent(new ResourceLocation("spackenmobs:entities.jens.poop"));
|
||||
}
|
|
@ -11,7 +11,6 @@ import mod.acgaming.spackenmobs.entities.EntityMrBean;
|
|||
import mod.acgaming.spackenmobs.entities.EntitySchalker;
|
||||
import mod.acgaming.spackenmobs.entities.EntitySmavaCreeper;
|
||||
import mod.acgaming.spackenmobs.entities.EntityWolfMZTE;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.entity.EnumCreatureType;
|
||||
import net.minecraft.entity.monster.EntityCreeper;
|
||||
import net.minecraft.entity.monster.EntityPigZombie;
|
||||
|
@ -31,102 +30,77 @@ import net.minecraftforge.fml.common.registry.EntityEntry;
|
|||
import net.minecraftforge.fml.common.registry.EntityRegistry;
|
||||
|
||||
@EventBusSubscriber(modid = Spackenmobs.MODID)
|
||||
public class RegHandler {
|
||||
public class RegHandler
|
||||
{
|
||||
@SubscribeEvent
|
||||
public static void registerItems(Register<Item> event) {
|
||||
final Item[] items = {
|
||||
new Item().setRegistryName(Spackenmobs.MODID, "ram").setUnlocalizedName(Spackenmobs.MODID + "." + "ram")
|
||||
.setCreativeTab(CreativeTabs.MISC),
|
||||
new Item().setRegistryName(Spackenmobs.MODID, "ram_on_a_stick")
|
||||
.setUnlocalizedName(Spackenmobs.MODID + "." + "ram_on_a_stick")
|
||||
.setCreativeTab(CreativeTabs.MISC),
|
||||
new Item().setRegistryName(Spackenmobs.MODID, "surstroemming")
|
||||
.setUnlocalizedName(Spackenmobs.MODID + "." + "surstroemming")
|
||||
.setCreativeTab(CreativeTabs.MISC) };
|
||||
public static void registerItems(Register<Item> event)
|
||||
{
|
||||
final Item[] items =
|
||||
{
|
||||
new Item().setRegistryName(Spackenmobs.MODID, "ram").setUnlocalizedName(Spackenmobs.MODID + "." + "ram").setCreativeTab(Spackenmobs.SPACKENMOBS_TAB),
|
||||
new Item().setRegistryName(Spackenmobs.MODID, "ram_on_a_stick").setUnlocalizedName(Spackenmobs.MODID + "." + "ram_on_a_stick").setCreativeTab(Spackenmobs.SPACKENMOBS_TAB),
|
||||
new Item().setRegistryName(Spackenmobs.MODID, "surstroemming").setUnlocalizedName(Spackenmobs.MODID + "." + "surstroemming").setCreativeTab(Spackenmobs.SPACKENMOBS_TAB)
|
||||
};
|
||||
event.getRegistry().registerAll(items);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void registerEntities(Register<EntityEntry> event) {
|
||||
public static void registerEntities(Register<EntityEntry> event)
|
||||
{
|
||||
int id = 1;
|
||||
|
||||
// Smava Creeper
|
||||
EntityRegistry.registerModEntity(new ResourceLocation("spackenmobs:smava_creeper"), EntitySmavaCreeper.class,
|
||||
"smava_creeper", id++, Spackenmobs.instance, 64, 1, true, 7649828, 11053224);
|
||||
EntityRegistry.addSpawn(EntitySmavaCreeper.class, 25, 1, 4, EnumCreatureType.MONSTER,
|
||||
BiomeHelper.getBiomesWithMonster(EntityCreeper.class));
|
||||
EntityRegistry.registerModEntity(new ResourceLocation("spackenmobs:smava_creeper"), EntitySmavaCreeper.class, "smava_creeper", id++, Spackenmobs.instance, 64, 1, true, 7649828, 11053224);
|
||||
EntityRegistry.addSpawn(EntitySmavaCreeper.class, 25, 1, 4, EnumCreatureType.MONSTER, BiomeHelper.getBiomesWithMonster(EntityCreeper.class));
|
||||
|
||||
// Marcell D'Avis
|
||||
EntityRegistry.registerModEntity(new ResourceLocation("spackenmobs:marcell_davis"), EntityMarcellDAvis.class,
|
||||
"marcell_davis", id++, Spackenmobs.instance, 64, 1, true, 15759, 16777215);
|
||||
EntityRegistry.addSpawn(EntityMarcellDAvis.class, 50, 1, 4, EnumCreatureType.MONSTER,
|
||||
BiomeHelper.getBiomesWithMonster(EntityZombie.class));
|
||||
EntityRegistry.registerModEntity(new ResourceLocation("spackenmobs:marcell_davis"), EntityMarcellDAvis.class, "marcell_davis", id++, Spackenmobs.instance, 64, 1, true, 15759, 16777215);
|
||||
EntityRegistry.addSpawn(EntityMarcellDAvis.class, 50, 1, 4, EnumCreatureType.MONSTER, BiomeHelper.getBiomesWithMonster(EntityZombie.class));
|
||||
|
||||
// Islamist
|
||||
EntityRegistry.registerModEntity(new ResourceLocation("spackenmobs:islamist"), EntityIslamist.class, "islamist",
|
||||
id++, Spackenmobs.instance, 64, 1, true, 15263976, 15211548);
|
||||
EntityRegistry.addSpawn(EntityIslamist.class, 50, 1, 4, EnumCreatureType.MONSTER,
|
||||
BiomeHelper.getBiomesWithMonster(EntityCreeper.class));
|
||||
EntityRegistry.registerModEntity(new ResourceLocation("spackenmobs:islamist"), EntityIslamist.class, "islamist", id++, Spackenmobs.instance, 64, 1, true, 15263976, 15211548);
|
||||
EntityRegistry.addSpawn(EntityIslamist.class, 50, 1, 4, EnumCreatureType.MONSTER, BiomeHelper.getBiomesWithMonster(EntityCreeper.class));
|
||||
|
||||
// ApoRed
|
||||
EntityRegistry.registerModEntity(new ResourceLocation("spackenmobs:apored"), EntityApoRed.class, "apored", id++,
|
||||
Spackenmobs.instance, 64, 1, true, 2039583, 16711680);
|
||||
EntityRegistry.addSpawn(EntityApoRed.class, 50, 1, 4, EnumCreatureType.MONSTER,
|
||||
BiomeHelper.getBiomesWithMonster(EntitySkeleton.class));
|
||||
EntityRegistry.registerModEntity(new ResourceLocation("spackenmobs:apored"), EntityApoRed.class, "apored", id++, Spackenmobs.instance, 64, 1, true, 2039583, 16711680);
|
||||
EntityRegistry.addSpawn(EntityApoRed.class, 50, 1, 4, EnumCreatureType.MONSTER, BiomeHelper.getBiomesWithMonster(EntitySkeleton.class));
|
||||
|
||||
// Mr. Bean
|
||||
EntityRegistry.registerModEntity(new ResourceLocation("spackenmobs:mr_bean"), EntityMrBean.class, "mr_bean",
|
||||
id++, Spackenmobs.instance, 64, 1, true, 4802350, 3220238);
|
||||
EntityRegistry.addSpawn(EntityMrBean.class, 50, 1, 4, EnumCreatureType.MONSTER,
|
||||
BiomeHelper.getBiomesWithMonster(EntityZombie.class));
|
||||
EntityRegistry.registerModEntity(new ResourceLocation("spackenmobs:mr_bean"), EntityMrBean.class, "mr_bean", id++, Spackenmobs.instance, 64, 1, true, 4802350, 3220238);
|
||||
EntityRegistry.addSpawn(EntityMrBean.class, 50, 1, 4, EnumCreatureType.MONSTER, BiomeHelper.getBiomesWithMonster(EntityZombie.class));
|
||||
|
||||
// Drachenlord
|
||||
EntityRegistry.registerModEntity(new ResourceLocation("spackenmobs:drachenlord"), EntityDrachenlord.class,
|
||||
"drachenlord", id++, Spackenmobs.instance, 64, 1, true, 15256745, 8738878);
|
||||
EntityRegistry.addSpawn(EntityDrachenlord.class, 50, 1, 4, EnumCreatureType.MONSTER,
|
||||
BiomeHelper.getBiomesWithMonster(EntityPigZombie.class));
|
||||
EntityRegistry.registerModEntity(new ResourceLocation("spackenmobs:drachenlord"), EntityDrachenlord.class, "drachenlord", id++, Spackenmobs.instance, 64, 1, true, 15256745, 8738878);
|
||||
EntityRegistry.addSpawn(EntityDrachenlord.class, 50, 1, 4, EnumCreatureType.MONSTER, BiomeHelper.getBiomesWithMonster(EntityPigZombie.class));
|
||||
|
||||
// Schalker
|
||||
EntityRegistry.registerModEntity(new ResourceLocation("spackenmobs:schalker"), EntitySchalker.class, "schalker",
|
||||
id++, Spackenmobs.instance, 64, 1, true, 24745, 16777215);
|
||||
EntityRegistry.addSpawn(EntitySchalker.class, 50, 1, 4, EnumCreatureType.MONSTER,
|
||||
BiomeHelper.getBiomesWithMonster(EntityShulker.class));
|
||||
EntityRegistry.registerModEntity(new ResourceLocation("spackenmobs:schalker"), EntitySchalker.class, "schalker", id++, Spackenmobs.instance, 64, 1, true, 24745, 16777215);
|
||||
EntityRegistry.addSpawn(EntitySchalker.class, 50, 1, 4, EnumCreatureType.MONSTER, BiomeHelper.getBiomesWithMonster(EntityShulker.class));
|
||||
|
||||
// Jens
|
||||
EntityRegistry.registerModEntity(new ResourceLocation("spackenmobs:jens"), EntityJens.class, "jens", id++,
|
||||
Spackenmobs.instance, 64, 1, true, 6704526, 6767911);
|
||||
EntityRegistry.addSpawn(EntityJens.class, 50, 1, 4, EnumCreatureType.CREATURE,
|
||||
BiomeHelper.getBiomesWithCreature(EntityPig.class));
|
||||
EntityRegistry.registerModEntity(new ResourceLocation("spackenmobs:jens"), EntityJens.class, "jens", id++, Spackenmobs.instance, 64, 1, true, 6704526, 6767911);
|
||||
EntityRegistry.addSpawn(EntityJens.class, 25, 1, 4, EnumCreatureType.CREATURE, BiomeHelper.getBiomesWithCreature(EntityPig.class));
|
||||
|
||||
// WolfMZTE
|
||||
EntityRegistry.registerModEntity(new ResourceLocation("spackenmobs:wolfmzte"), EntityWolfMZTE.class, "wolfmzte",
|
||||
id++, Spackenmobs.instance, 64, 1, true, 16711680, 0);
|
||||
EntityRegistry.addSpawn(EntityJens.class, 50, 1, 4, EnumCreatureType.CREATURE,
|
||||
BiomeHelper.getBiomesWithCreature(EntityWolf.class));
|
||||
EntityRegistry.registerModEntity(new ResourceLocation("spackenmobs:wolfmzte"), EntityWolfMZTE.class, "wolfmzte", id++, Spackenmobs.instance, 64, 1, true, 16711680, 0);
|
||||
EntityRegistry.addSpawn(EntityJens.class, 50, 1, 4, EnumCreatureType.CREATURE, BiomeHelper.getBiomesWithCreature(EntityWolf.class));
|
||||
|
||||
// Holzstammhuhn
|
||||
EntityRegistry.registerModEntity(new ResourceLocation("spackenmobs:holzstammhuhn"), EntityHolzstammhuhn.class,
|
||||
"holzstammhuhn", id++, Spackenmobs.instance, 64, 1, true, 12096347, 5295899);
|
||||
EntityRegistry.addSpawn(EntityJens.class, 50, 1, 4, EnumCreatureType.CREATURE,
|
||||
BiomeHelper.getBiomesWithCreature(EntityChicken.class));
|
||||
|
||||
// LootTableList.register(EntityJens.LOOT);
|
||||
EntityRegistry.registerModEntity(new ResourceLocation("spackenmobs:holzstammhuhn"), EntityHolzstammhuhn.class, "holzstammhuhn", id++, Spackenmobs.instance, 64, 1, true, 12096347, 5295899);
|
||||
EntityRegistry.addSpawn(EntityJens.class, 50, 1, 4, EnumCreatureType.CREATURE, BiomeHelper.getBiomesWithCreature(EntityChicken.class));
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void registerSounds(Register<SoundEvent> event) {
|
||||
public static void registerSounds(Register<SoundEvent> event)
|
||||
{
|
||||
// Smava Creeper
|
||||
ModSoundEvents.ENTITY_SMAVACREEPER_FUSE
|
||||
.setRegistryName(new ResourceLocation("spackenmobs:entities.smava_creeper.fuse"));
|
||||
ModSoundEvents.ENTITY_SMAVACREEPER_FUSE.setRegistryName(new ResourceLocation("spackenmobs:entities.smava_creeper.fuse"));
|
||||
event.getRegistry().register(ModSoundEvents.ENTITY_SMAVACREEPER_FUSE);
|
||||
ModSoundEvents.ENTITY_SMAVACREEPER_BLOW
|
||||
.setRegistryName(new ResourceLocation("spackenmobs:entities.smava_creeper.blow"));
|
||||
ModSoundEvents.ENTITY_SMAVACREEPER_BLOW.setRegistryName(new ResourceLocation("spackenmobs:entities.smava_creeper.blow"));
|
||||
event.getRegistry().register(ModSoundEvents.ENTITY_SMAVACREEPER_BLOW);
|
||||
ModSoundEvents.ENTITY_SMAVACREEPER_HURT
|
||||
.setRegistryName(new ResourceLocation("spackenmobs:entities.smava_creeper.hurt"));
|
||||
ModSoundEvents.ENTITY_SMAVACREEPER_HURT.setRegistryName(new ResourceLocation("spackenmobs:entities.smava_creeper.hurt"));
|
||||
event.getRegistry().register(ModSoundEvents.ENTITY_SMAVACREEPER_HURT);
|
||||
ModSoundEvents.ENTITY_SMAVACREEPER_AMBIENT
|
||||
.setRegistryName(new ResourceLocation("spackenmobs:entities.smava_creeper.ambient"));
|
||||
ModSoundEvents.ENTITY_SMAVACREEPER_AMBIENT.setRegistryName(new ResourceLocation("spackenmobs:entities.smava_creeper.ambient"));
|
||||
event.getRegistry().register(ModSoundEvents.ENTITY_SMAVACREEPER_AMBIENT);
|
||||
|
||||
// Islamist
|
||||
|
@ -136,19 +110,15 @@ public class RegHandler {
|
|||
event.getRegistry().register(ModSoundEvents.ENTITY_ISLAMIST_HURT);
|
||||
|
||||
// Marcell D'Avis
|
||||
ModSoundEvents.ENTITY_MARCELLDAVIS_AMBIENT
|
||||
.setRegistryName(new ResourceLocation("spackenmobs:entities.marcell_davis.ambient"));
|
||||
ModSoundEvents.ENTITY_MARCELLDAVIS_AMBIENT.setRegistryName(new ResourceLocation("spackenmobs:entities.marcell_davis.ambient"));
|
||||
event.getRegistry().register(ModSoundEvents.ENTITY_MARCELLDAVIS_AMBIENT);
|
||||
ModSoundEvents.ENTITY_MARCELLDAVIS_HURT
|
||||
.setRegistryName(new ResourceLocation("spackenmobs:entities.marcell_davis.hurt"));
|
||||
ModSoundEvents.ENTITY_MARCELLDAVIS_HURT.setRegistryName(new ResourceLocation("spackenmobs:entities.marcell_davis.hurt"));
|
||||
event.getRegistry().register(ModSoundEvents.ENTITY_MARCELLDAVIS_HURT);
|
||||
ModSoundEvents.ENTITY_MARCELLDAVIS_DEATH
|
||||
.setRegistryName(new ResourceLocation("spackenmobs:entities.marcell_davis.death"));
|
||||
ModSoundEvents.ENTITY_MARCELLDAVIS_DEATH.setRegistryName(new ResourceLocation("spackenmobs:entities.marcell_davis.death"));
|
||||
event.getRegistry().register(ModSoundEvents.ENTITY_MARCELLDAVIS_DEATH);
|
||||
|
||||
// Mr. Bean
|
||||
ModSoundEvents.ENTITY_MRBEAN_AMBIENT
|
||||
.setRegistryName(new ResourceLocation("spackenmobs:entities.mr_bean.ambient"));
|
||||
ModSoundEvents.ENTITY_MRBEAN_AMBIENT.setRegistryName(new ResourceLocation("spackenmobs:entities.mr_bean.ambient"));
|
||||
event.getRegistry().register(ModSoundEvents.ENTITY_MRBEAN_AMBIENT);
|
||||
ModSoundEvents.ENTITY_MRBEAN_HURT.setRegistryName(new ResourceLocation("spackenmobs:entities.mr_bean.hurt"));
|
||||
event.getRegistry().register(ModSoundEvents.ENTITY_MRBEAN_HURT);
|
||||
|
@ -156,8 +126,7 @@ public class RegHandler {
|
|||
event.getRegistry().register(ModSoundEvents.ENTITY_MRBEAN_DEATH);
|
||||
|
||||
// ApoRed
|
||||
ModSoundEvents.ENTITY_APORED_AMBIENT
|
||||
.setRegistryName(new ResourceLocation("spackenmobs:entities.apored.ambient"));
|
||||
ModSoundEvents.ENTITY_APORED_AMBIENT.setRegistryName(new ResourceLocation("spackenmobs:entities.apored.ambient"));
|
||||
event.getRegistry().register(ModSoundEvents.ENTITY_APORED_AMBIENT);
|
||||
ModSoundEvents.ENTITY_APORED_HURT.setRegistryName(new ResourceLocation("spackenmobs:entities.apored.hurt"));
|
||||
event.getRegistry().register(ModSoundEvents.ENTITY_APORED_HURT);
|
||||
|
@ -165,32 +134,25 @@ public class RegHandler {
|
|||
event.getRegistry().register(ModSoundEvents.ENTITY_APORED_DEATH);
|
||||
|
||||
// Drachenlord
|
||||
ModSoundEvents.ENTITY_DRACHENLORD_AMBIENT
|
||||
.setRegistryName(new ResourceLocation("spackenmobs:entities.drachenlord.ambient"));
|
||||
ModSoundEvents.ENTITY_DRACHENLORD_AMBIENT.setRegistryName(new ResourceLocation("spackenmobs:entities.drachenlord.ambient"));
|
||||
event.getRegistry().register(ModSoundEvents.ENTITY_DRACHENLORD_AMBIENT);
|
||||
ModSoundEvents.ENTITY_DRACHENLORD_HURT
|
||||
.setRegistryName(new ResourceLocation("spackenmobs:entities.drachenlord.hurt"));
|
||||
ModSoundEvents.ENTITY_DRACHENLORD_HURT.setRegistryName(new ResourceLocation("spackenmobs:entities.drachenlord.hurt"));
|
||||
event.getRegistry().register(ModSoundEvents.ENTITY_DRACHENLORD_HURT);
|
||||
ModSoundEvents.ENTITY_DRACHENLORD_DEATH
|
||||
.setRegistryName(new ResourceLocation("spackenmobs:entities.drachenlord.death"));
|
||||
ModSoundEvents.ENTITY_DRACHENLORD_DEATH.setRegistryName(new ResourceLocation("spackenmobs:entities.drachenlord.death"));
|
||||
event.getRegistry().register(ModSoundEvents.ENTITY_DRACHENLORD_DEATH);
|
||||
ModSoundEvents.ENTITY_DRACHENLORD_ANGRY
|
||||
.setRegistryName(new ResourceLocation("spackenmobs:entities.drachenlord.angry"));
|
||||
ModSoundEvents.ENTITY_DRACHENLORD_ANGRY.setRegistryName(new ResourceLocation("spackenmobs:entities.drachenlord.angry"));
|
||||
event.getRegistry().register(ModSoundEvents.ENTITY_DRACHENLORD_ANGRY);
|
||||
|
||||
// Schalker
|
||||
ModSoundEvents.ENTITY_SCHALKER_AMBIENT
|
||||
.setRegistryName(new ResourceLocation("spackenmobs:entities.schalker.ambient"));
|
||||
ModSoundEvents.ENTITY_SCHALKER_AMBIENT.setRegistryName(new ResourceLocation("spackenmobs:entities.schalker.ambient"));
|
||||
event.getRegistry().register(ModSoundEvents.ENTITY_SCHALKER_AMBIENT);
|
||||
ModSoundEvents.ENTITY_SCHALKER_HURT.setRegistryName(new ResourceLocation("spackenmobs:entities.schalker.hurt"));
|
||||
event.getRegistry().register(ModSoundEvents.ENTITY_SCHALKER_HURT);
|
||||
ModSoundEvents.ENTITY_SCHALKER_DEATH
|
||||
.setRegistryName(new ResourceLocation("spackenmobs:entities.schalker.death"));
|
||||
ModSoundEvents.ENTITY_SCHALKER_DEATH.setRegistryName(new ResourceLocation("spackenmobs:entities.schalker.death"));
|
||||
event.getRegistry().register(ModSoundEvents.ENTITY_SCHALKER_DEATH);
|
||||
ModSoundEvents.ENTITY_SCHALKER_OPEN.setRegistryName(new ResourceLocation("spackenmobs:entities.schalker.open"));
|
||||
event.getRegistry().register(ModSoundEvents.ENTITY_SCHALKER_OPEN);
|
||||
ModSoundEvents.ENTITY_SCHALKER_SHOOT
|
||||
.setRegistryName(new ResourceLocation("spackenmobs:entities.schalker.shoot"));
|
||||
ModSoundEvents.ENTITY_SCHALKER_SHOOT.setRegistryName(new ResourceLocation("spackenmobs:entities.schalker.shoot"));
|
||||
event.getRegistry().register(ModSoundEvents.ENTITY_SCHALKER_SHOOT);
|
||||
|
||||
// Jens
|
||||
|
|
|
@ -10,16 +10,18 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
|||
import net.minecraftforge.fml.relauncher.Side;
|
||||
|
||||
@EventBusSubscriber(value = Side.CLIENT, modid = Spackenmobs.MODID)
|
||||
public class RegHandlerModels {
|
||||
public class RegHandlerModels
|
||||
{
|
||||
@SubscribeEvent
|
||||
public static void registerModels(ModelRegistryEvent event) {
|
||||
public static void registerModels(ModelRegistryEvent event)
|
||||
{
|
||||
registerModel(ModItems.RAM, 0);
|
||||
registerModel(ModItems.RAM_ON_A_STICK, 0);
|
||||
registerModel(ModItems.SURSTROEMMING, 0);
|
||||
}
|
||||
|
||||
private static void registerModel(Item item, int meta) {
|
||||
ModelLoader.setCustomModelResourceLocation(item, meta,
|
||||
new ModelResourceLocation(item.getRegistryName(), "inventory"));
|
||||
private static void registerModel(Item item, int meta)
|
||||
{
|
||||
ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(item.getRegistryName(), "inventory"));
|
||||
}
|
||||
}
|
|
@ -9,12 +9,14 @@ import net.minecraftforge.fml.relauncher.Side;
|
|||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class ModelSchalker extends ModelBase {
|
||||
public class ModelSchalker extends ModelBase
|
||||
{
|
||||
public final ModelRenderer base;
|
||||
public final ModelRenderer lid;
|
||||
public ModelRenderer head;
|
||||
|
||||
public ModelSchalker() {
|
||||
public ModelSchalker()
|
||||
{
|
||||
this.textureHeight = 64;
|
||||
this.textureWidth = 64;
|
||||
this.lid = new ModelRenderer(this);
|
||||
|
@ -29,23 +31,27 @@ public class ModelSchalker extends ModelBase {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw,
|
||||
float headPitch, float scaleFactor, Entity entityIn) {
|
||||
public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn)
|
||||
{
|
||||
EntitySchalker EntitySchalker = (EntitySchalker) entityIn;
|
||||
float f = ageInTicks - EntitySchalker.ticksExisted;
|
||||
float f1 = (0.5F + EntitySchalker.getClientPeekAmount(f)) * (float) Math.PI;
|
||||
float f2 = -1.0F + MathHelper.sin(f1);
|
||||
float f3 = 0.0F;
|
||||
|
||||
if (f1 > (float) Math.PI) {
|
||||
if (f1 > (float) Math.PI)
|
||||
{
|
||||
f3 = MathHelper.sin(ageInTicks * 0.1F) * 0.7F;
|
||||
}
|
||||
|
||||
this.lid.setRotationPoint(0.0F, 16.0F + MathHelper.sin(f1) * 8.0F + f3, 0.0F);
|
||||
|
||||
if (EntitySchalker.getClientPeekAmount(f) > 0.3F) {
|
||||
if (EntitySchalker.getClientPeekAmount(f) > 0.3F)
|
||||
{
|
||||
this.lid.rotateAngleY = f2 * f2 * f2 * f2 * (float) Math.PI * 0.125F;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
this.lid.rotateAngleY = 0.0F;
|
||||
}
|
||||
|
||||
|
@ -54,8 +60,8 @@ public class ModelSchalker extends ModelBase {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw,
|
||||
float headPitch, float scale) {
|
||||
public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale)
|
||||
{
|
||||
this.base.render(scale);
|
||||
this.lid.render(scale);
|
||||
}
|
||||
|
|
|
@ -15,17 +15,20 @@ import net.minecraftforge.fml.relauncher.Side;
|
|||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class RenderApoRed extends RenderSkeleton {
|
||||
private static final ResourceLocation APORED_TEXTURE = new ResourceLocation(
|
||||
"spackenmobs:textures/entities/apored.png");
|
||||
public class RenderApoRed extends RenderSkeleton
|
||||
{
|
||||
private static final ResourceLocation APORED_TEXTURE = new ResourceLocation("spackenmobs:textures/entities/apored.png");
|
||||
public static final Factory FACTORY = new Factory();
|
||||
|
||||
public RenderApoRed(RenderManager renderManagerIn) {
|
||||
public RenderApoRed(RenderManager renderManagerIn)
|
||||
{
|
||||
super(renderManagerIn);
|
||||
this.addLayer(new LayerHeldItem(this));
|
||||
this.addLayer(new LayerBipedArmor(this) {
|
||||
this.addLayer(new LayerBipedArmor(this)
|
||||
{
|
||||
@Override
|
||||
protected void initArmor() {
|
||||
protected void initArmor()
|
||||
{
|
||||
this.modelLeggings = new ModelSkeleton(0.5F, true);
|
||||
this.modelArmor = new ModelSkeleton(1.0F, true);
|
||||
}
|
||||
|
@ -33,18 +36,22 @@ public class RenderApoRed extends RenderSkeleton {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void transformHeldFull3DItemLayer() {
|
||||
public void transformHeldFull3DItemLayer()
|
||||
{
|
||||
GlStateManager.translate(0.09375F, 0.1875F, 0.0F);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ResourceLocation getEntityTexture(AbstractSkeleton entity) {
|
||||
protected ResourceLocation getEntityTexture(AbstractSkeleton entity)
|
||||
{
|
||||
return APORED_TEXTURE;
|
||||
}
|
||||
|
||||
public static class Factory implements IRenderFactory<EntityApoRed> {
|
||||
public static class Factory implements IRenderFactory<EntityApoRed>
|
||||
{
|
||||
@Override
|
||||
public Render<? super EntityApoRed> createRenderFor(RenderManager manager) {
|
||||
public Render<? super EntityApoRed> createRenderFor(RenderManager manager)
|
||||
{
|
||||
return new RenderApoRed(manager);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,16 +13,19 @@ import net.minecraftforge.fml.relauncher.Side;
|
|||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class RenderDrachenlord extends RenderZombie {
|
||||
private static final ResourceLocation DRACHENLORD_TEXTURE = new ResourceLocation(
|
||||
"spackenmobs:textures/entities/drachenlord.png");
|
||||
public class RenderDrachenlord extends RenderZombie
|
||||
{
|
||||
private static final ResourceLocation DRACHENLORD_TEXTURE = new ResourceLocation("spackenmobs:textures/entities/drachenlord.png");
|
||||
public static final Factory FACTORY = new Factory();
|
||||
|
||||
public RenderDrachenlord(RenderManager renderManagerIn) {
|
||||
public RenderDrachenlord(RenderManager renderManagerIn)
|
||||
{
|
||||
super(renderManagerIn);
|
||||
this.addLayer(new LayerBipedArmor(this) {
|
||||
this.addLayer(new LayerBipedArmor(this)
|
||||
{
|
||||
@Override
|
||||
protected void initArmor() {
|
||||
protected void initArmor()
|
||||
{
|
||||
this.modelLeggings = new ModelZombie(0.5F, true);
|
||||
this.modelArmor = new ModelZombie(1.0F, true);
|
||||
}
|
||||
|
@ -30,13 +33,16 @@ public class RenderDrachenlord extends RenderZombie {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected ResourceLocation getEntityTexture(EntityZombie entity) {
|
||||
protected ResourceLocation getEntityTexture(EntityZombie entity)
|
||||
{
|
||||
return DRACHENLORD_TEXTURE;
|
||||
}
|
||||
|
||||
public static class Factory implements IRenderFactory<EntityDrachenlord> {
|
||||
public static class Factory implements IRenderFactory<EntityDrachenlord>
|
||||
{
|
||||
@Override
|
||||
public Render<? super EntityDrachenlord> createRenderFor(RenderManager manager) {
|
||||
public Render<? super EntityDrachenlord> createRenderFor(RenderManager manager)
|
||||
{
|
||||
return new RenderDrachenlord(manager);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,23 +11,27 @@ import net.minecraftforge.fml.relauncher.Side;
|
|||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class RenderHolzstammhuhn extends RenderChicken {
|
||||
private static final ResourceLocation HOLZSTAMMHUHN_TEXTURE = new ResourceLocation(
|
||||
"spackenmobs:textures/entities/holzstammhuhn.png");
|
||||
public class RenderHolzstammhuhn extends RenderChicken
|
||||
{
|
||||
private static final ResourceLocation HOLZSTAMMHUHN_TEXTURE = new ResourceLocation("spackenmobs:textures/entities/holzstammhuhn.png");
|
||||
public static final Factory FACTORY = new Factory();
|
||||
|
||||
public RenderHolzstammhuhn(RenderManager renderManagerIn) {
|
||||
public RenderHolzstammhuhn(RenderManager renderManagerIn)
|
||||
{
|
||||
super(renderManagerIn);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ResourceLocation getEntityTexture(EntityChicken entity) {
|
||||
protected ResourceLocation getEntityTexture(EntityChicken entity)
|
||||
{
|
||||
return HOLZSTAMMHUHN_TEXTURE;
|
||||
}
|
||||
|
||||
public static class Factory implements IRenderFactory<EntityHolzstammhuhn> {
|
||||
public static class Factory implements IRenderFactory<EntityHolzstammhuhn>
|
||||
{
|
||||
@Override
|
||||
public Render<? super EntityHolzstammhuhn> createRenderFor(RenderManager manager) {
|
||||
public Render<? super EntityHolzstammhuhn> createRenderFor(RenderManager manager)
|
||||
{
|
||||
return new RenderHolzstammhuhn(manager);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,24 +12,28 @@ import net.minecraftforge.fml.relauncher.Side;
|
|||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class RenderIslamist extends RenderCreeper {
|
||||
private static final ResourceLocation ISLAMIST_TEXTURE = new ResourceLocation(
|
||||
"spackenmobs:textures/entities/islamist.png");
|
||||
public class RenderIslamist extends RenderCreeper
|
||||
{
|
||||
private static final ResourceLocation ISLAMIST_TEXTURE = new ResourceLocation("spackenmobs:textures/entities/islamist.png");
|
||||
public static final Factory FACTORY = new Factory();
|
||||
|
||||
public RenderIslamist(RenderManager renderManagerIn) {
|
||||
public RenderIslamist(RenderManager renderManagerIn)
|
||||
{
|
||||
super(renderManagerIn);
|
||||
this.addLayer(new LayerCreeperCharge(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ResourceLocation getEntityTexture(EntityCreeper entity) {
|
||||
protected ResourceLocation getEntityTexture(EntityCreeper entity)
|
||||
{
|
||||
return ISLAMIST_TEXTURE;
|
||||
}
|
||||
|
||||
public static class Factory implements IRenderFactory<EntityIslamist> {
|
||||
public static class Factory implements IRenderFactory<EntityIslamist>
|
||||
{
|
||||
@Override
|
||||
public Render<? super EntityIslamist> createRenderFor(RenderManager manager) {
|
||||
public Render<? super EntityIslamist> createRenderFor(RenderManager manager)
|
||||
{
|
||||
return new RenderIslamist(manager);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,22 +11,27 @@ import net.minecraftforge.fml.relauncher.Side;
|
|||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class RenderJens extends RenderBiped<EntityJens> {
|
||||
public class RenderJens extends RenderBiped<EntityJens>
|
||||
{
|
||||
private static final ResourceLocation JENS_TEXTURE = new ResourceLocation("spackenmobs:textures/entities/jens.png");
|
||||
public static final Factory FACTORY = new Factory();
|
||||
|
||||
public RenderJens(RenderManager renderManagerIn) {
|
||||
public RenderJens(RenderManager renderManagerIn)
|
||||
{
|
||||
super(renderManagerIn, new ModelBiped(), 0.25F);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ResourceLocation getEntityTexture(EntityJens entity) {
|
||||
protected ResourceLocation getEntityTexture(EntityJens entity)
|
||||
{
|
||||
return JENS_TEXTURE;
|
||||
}
|
||||
|
||||
private static class Factory implements IRenderFactory<EntityJens> {
|
||||
private static class Factory implements IRenderFactory<EntityJens>
|
||||
{
|
||||
@Override
|
||||
public Render<? super EntityJens> createRenderFor(RenderManager manager) {
|
||||
public Render<? super EntityJens> createRenderFor(RenderManager manager)
|
||||
{
|
||||
return new RenderJens(manager);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,16 +13,19 @@ import net.minecraftforge.fml.relauncher.Side;
|
|||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class RenderMarcellDAvis extends RenderZombie {
|
||||
private static final ResourceLocation MARCELLDAVIS_TEXTURE = new ResourceLocation(
|
||||
"spackenmobs:textures/entities/marcell_davis.png");
|
||||
public class RenderMarcellDAvis extends RenderZombie
|
||||
{
|
||||
private static final ResourceLocation MARCELLDAVIS_TEXTURE = new ResourceLocation("spackenmobs:textures/entities/marcell_davis.png");
|
||||
public static final Factory FACTORY = new Factory();
|
||||
|
||||
public RenderMarcellDAvis(RenderManager renderManagerIn) {
|
||||
public RenderMarcellDAvis(RenderManager renderManagerIn)
|
||||
{
|
||||
super(renderManagerIn);
|
||||
LayerBipedArmor layerbipedarmor = new LayerBipedArmor(this) {
|
||||
LayerBipedArmor layerbipedarmor = new LayerBipedArmor(this)
|
||||
{
|
||||
@Override
|
||||
protected void initArmor() {
|
||||
protected void initArmor()
|
||||
{
|
||||
this.modelLeggings = new ModelZombie(0.5F, true);
|
||||
this.modelArmor = new ModelZombie(1.0F, true);
|
||||
}
|
||||
|
@ -31,13 +34,16 @@ public class RenderMarcellDAvis extends RenderZombie {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected ResourceLocation getEntityTexture(EntityZombie entity) {
|
||||
protected ResourceLocation getEntityTexture(EntityZombie entity)
|
||||
{
|
||||
return MARCELLDAVIS_TEXTURE;
|
||||
}
|
||||
|
||||
public static class Factory implements IRenderFactory<EntityMarcellDAvis> {
|
||||
public static class Factory implements IRenderFactory<EntityMarcellDAvis>
|
||||
{
|
||||
@Override
|
||||
public Render<? super EntityMarcellDAvis> createRenderFor(RenderManager manager) {
|
||||
public Render<? super EntityMarcellDAvis> createRenderFor(RenderManager manager)
|
||||
{
|
||||
return new RenderMarcellDAvis(manager);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,16 +13,19 @@ import net.minecraftforge.fml.relauncher.Side;
|
|||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class RenderMrBean extends RenderZombie {
|
||||
private static final ResourceLocation MRBEAN_TEXTURE = new ResourceLocation(
|
||||
"spackenmobs:textures/entities/mr_bean.png");
|
||||
public class RenderMrBean extends RenderZombie
|
||||
{
|
||||
private static final ResourceLocation MRBEAN_TEXTURE = new ResourceLocation("spackenmobs:textures/entities/mr_bean.png");
|
||||
public static final Factory FACTORY = new Factory();
|
||||
|
||||
public RenderMrBean(RenderManager renderManagerIn) {
|
||||
public RenderMrBean(RenderManager renderManagerIn)
|
||||
{
|
||||
super(renderManagerIn);
|
||||
LayerBipedArmor layerbipedarmor = new LayerBipedArmor(this) {
|
||||
LayerBipedArmor layerbipedarmor = new LayerBipedArmor(this)
|
||||
{
|
||||
@Override
|
||||
protected void initArmor() {
|
||||
protected void initArmor()
|
||||
{
|
||||
this.modelLeggings = new ModelZombie(0.5F, true);
|
||||
this.modelArmor = new ModelZombie(1.0F, true);
|
||||
}
|
||||
|
@ -31,13 +34,16 @@ public class RenderMrBean extends RenderZombie {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected ResourceLocation getEntityTexture(EntityZombie entity) {
|
||||
protected ResourceLocation getEntityTexture(EntityZombie entity)
|
||||
{
|
||||
return MRBEAN_TEXTURE;
|
||||
}
|
||||
|
||||
public static class Factory implements IRenderFactory<EntityMrBean> {
|
||||
public static class Factory implements IRenderFactory<EntityMrBean>
|
||||
{
|
||||
@Override
|
||||
public Render<? super EntityMrBean> createRenderFor(RenderManager manager) {
|
||||
public Render<? super EntityMrBean> createRenderFor(RenderManager manager)
|
||||
{
|
||||
return new RenderMrBean(manager);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,41 +17,40 @@ import net.minecraftforge.fml.relauncher.Side;
|
|||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class RenderSchalker extends RenderLiving<EntitySchalker> {
|
||||
public static final ResourceLocation[] SCHALKER_TEXTURE = new ResourceLocation[] {
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png") };
|
||||
public class RenderSchalker extends RenderLiving<EntitySchalker>
|
||||
{
|
||||
public static final ResourceLocation[] SCHALKER_TEXTURE = new ResourceLocation[]
|
||||
{
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"), new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"), new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"), new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"), new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"), new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"), new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"), new ResourceLocation("spackenmobs:textures/entities/schalker.png"),
|
||||
new ResourceLocation("spackenmobs:textures/entities/schalker.png"), new ResourceLocation("spackenmobs:textures/entities/schalker.png")
|
||||
};
|
||||
public static final Factory FACTORY = new Factory();
|
||||
|
||||
public RenderSchalker(RenderManager p_i47194_1_) {
|
||||
public RenderSchalker(RenderManager p_i47194_1_)
|
||||
{
|
||||
super(p_i47194_1_, new ModelSchalker(), 0.0F);
|
||||
this.addLayer(new RenderSchalker.HeadLayer());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelSchalker getMainModel() {
|
||||
public ModelSchalker getMainModel()
|
||||
{
|
||||
return (ModelSchalker) super.getMainModel();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doRender(EntitySchalker entity, double x, double y, double z, float entityYaw, float partialTicks) {
|
||||
public void doRender(EntitySchalker entity, double x, double y, double z, float entityYaw, float partialTicks)
|
||||
{
|
||||
int i = entity.getClientTeleportInterp();
|
||||
|
||||
if (i > 0 && entity.isAttachedToBlock()) {
|
||||
if (i > 0 && entity.isAttachedToBlock())
|
||||
{
|
||||
BlockPos blockpos = entity.getAttachmentPos();
|
||||
BlockPos blockpos1 = entity.getOldAttachPos();
|
||||
double d0 = (i - partialTicks) / 6.0D;
|
||||
|
@ -60,24 +59,31 @@ public class RenderSchalker extends RenderLiving<EntitySchalker> {
|
|||
double d2 = (blockpos.getY() - blockpos1.getY()) * d0;
|
||||
double d3 = (blockpos.getZ() - blockpos1.getZ()) * d0;
|
||||
super.doRender(entity, x - d1, y - d2, z - d3, entityYaw, partialTicks);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
super.doRender(entity, x, y, z, entityYaw, partialTicks);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRender(EntitySchalker livingEntity, ICamera camera, double camX, double camY, double camZ) {
|
||||
if (super.shouldRender(livingEntity, camera, camX, camY, camZ)) {
|
||||
public boolean shouldRender(EntitySchalker livingEntity, ICamera camera, double camX, double camY, double camZ)
|
||||
{
|
||||
if (super.shouldRender(livingEntity, camera, camX, camY, camZ))
|
||||
{
|
||||
return true;
|
||||
} else {
|
||||
if (livingEntity.getClientTeleportInterp() > 0 && livingEntity.isAttachedToBlock()) {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (livingEntity.getClientTeleportInterp() > 0 && livingEntity.isAttachedToBlock())
|
||||
{
|
||||
BlockPos blockpos = livingEntity.getOldAttachPos();
|
||||
BlockPos blockpos1 = livingEntity.getAttachmentPos();
|
||||
Vec3d vec3d = new Vec3d(blockpos1.getX(), blockpos1.getY(), blockpos1.getZ());
|
||||
Vec3d vec3d1 = new Vec3d(blockpos.getX(), blockpos.getY(), blockpos.getZ());
|
||||
|
||||
if (camera.isBoundingBoxInFrustum(
|
||||
new AxisAlignedBB(vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y, vec3d.z))) {
|
||||
if (camera.isBoundingBoxInFrustum(new AxisAlignedBB(vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y, vec3d.z)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -87,16 +93,18 @@ public class RenderSchalker extends RenderLiving<EntitySchalker> {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected ResourceLocation getEntityTexture(EntitySchalker entity) {
|
||||
protected ResourceLocation getEntityTexture(EntitySchalker entity)
|
||||
{
|
||||
return SCHALKER_TEXTURE[entity.getColor().getMetadata()];
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void applyRotations(EntitySchalker entityLiving, float p_77043_2_, float rotationYaw,
|
||||
float partialTicks) {
|
||||
protected void applyRotations(EntitySchalker entityLiving, float p_77043_2_, float rotationYaw, float partialTicks)
|
||||
{
|
||||
super.applyRotations(entityLiving, p_77043_2_, rotationYaw, partialTicks);
|
||||
|
||||
switch (entityLiving.getAttachmentFacing()) {
|
||||
switch (entityLiving.getAttachmentFacing())
|
||||
{
|
||||
case DOWN:
|
||||
default:
|
||||
break;
|
||||
|
@ -126,22 +134,26 @@ public class RenderSchalker extends RenderLiving<EntitySchalker> {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void preRenderCallback(EntitySchalker entitylivingbaseIn, float partialTickTime) {
|
||||
protected void preRenderCallback(EntitySchalker entitylivingbaseIn, float partialTickTime)
|
||||
{
|
||||
float f = 0.999F;
|
||||
GlStateManager.scale(0.999F, 0.999F, 0.999F);
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
class HeadLayer implements LayerRenderer<EntitySchalker> {
|
||||
private HeadLayer() {
|
||||
class HeadLayer implements LayerRenderer<EntitySchalker>
|
||||
{
|
||||
private HeadLayer()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doRenderLayer(EntitySchalker entitylivingbaseIn, float limbSwing, float limbSwingAmount,
|
||||
float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) {
|
||||
public void doRenderLayer(EntitySchalker entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale)
|
||||
{
|
||||
GlStateManager.pushMatrix();
|
||||
|
||||
switch (entitylivingbaseIn.getAttachmentFacing()) {
|
||||
switch (entitylivingbaseIn.getAttachmentFacing())
|
||||
{
|
||||
case DOWN:
|
||||
default:
|
||||
break;
|
||||
|
@ -174,21 +186,23 @@ public class RenderSchalker extends RenderLiving<EntitySchalker> {
|
|||
ModelRenderer modelrenderer = RenderSchalker.this.getMainModel().head;
|
||||
modelrenderer.rotateAngleY = netHeadYaw * 0.017453292F;
|
||||
modelrenderer.rotateAngleX = headPitch * 0.017453292F;
|
||||
RenderSchalker.this
|
||||
.bindTexture(RenderSchalker.SCHALKER_TEXTURE[entitylivingbaseIn.getColor().getMetadata()]);
|
||||
RenderSchalker.this.bindTexture(RenderSchalker.SCHALKER_TEXTURE[entitylivingbaseIn.getColor().getMetadata()]);
|
||||
modelrenderer.render(scale);
|
||||
GlStateManager.popMatrix();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldCombineTextures() {
|
||||
public boolean shouldCombineTextures()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Factory implements IRenderFactory<EntitySchalker> {
|
||||
public static class Factory implements IRenderFactory<EntitySchalker>
|
||||
{
|
||||
@Override
|
||||
public Render<? super EntitySchalker> createRenderFor(RenderManager manager) {
|
||||
public Render<? super EntitySchalker> createRenderFor(RenderManager manager)
|
||||
{
|
||||
return new RenderSchalker(manager);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,24 +12,28 @@ import net.minecraftforge.fml.relauncher.Side;
|
|||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class RenderSmavaCreeper extends RenderCreeper {
|
||||
private static final ResourceLocation SMAVA_TEXTURE = new ResourceLocation(
|
||||
"spackenmobs:textures/entities/smava_creeper.png");
|
||||
public class RenderSmavaCreeper extends RenderCreeper
|
||||
{
|
||||
private static final ResourceLocation SMAVA_TEXTURE = new ResourceLocation("spackenmobs:textures/entities/smava_creeper.png");
|
||||
public static final Factory FACTORY = new Factory();
|
||||
|
||||
public RenderSmavaCreeper(RenderManager renderManagerIn) {
|
||||
public RenderSmavaCreeper(RenderManager renderManagerIn)
|
||||
{
|
||||
super(renderManagerIn);
|
||||
this.addLayer(new LayerCreeperCharge(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ResourceLocation getEntityTexture(EntityCreeper entity) {
|
||||
protected ResourceLocation getEntityTexture(EntityCreeper entity)
|
||||
{
|
||||
return SMAVA_TEXTURE;
|
||||
}
|
||||
|
||||
public static class Factory implements IRenderFactory<EntitySmavaCreeper> {
|
||||
public static class Factory implements IRenderFactory<EntitySmavaCreeper>
|
||||
{
|
||||
@Override
|
||||
public Render<? super EntitySmavaCreeper> createRenderFor(RenderManager manager) {
|
||||
public Render<? super EntitySmavaCreeper> createRenderFor(RenderManager manager)
|
||||
{
|
||||
return new RenderSmavaCreeper(manager);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,28 +13,30 @@ import net.minecraftforge.fml.relauncher.Side;
|
|||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public class RenderWolfMZTE extends RenderWolf {
|
||||
private static final ResourceLocation WOLFMZTE_TEXTURE = new ResourceLocation(
|
||||
"spackenmobs:textures/entities/wolfmzte.png");
|
||||
private static final ResourceLocation TAMED_WOLFMZTE_TEXTURE = new ResourceLocation(
|
||||
"spackenmobs:textures/entities/wolfmzte_tame.png");
|
||||
private static final ResourceLocation ANRGY_WOLFMZTE_TEXTURE = new ResourceLocation(
|
||||
"spackenmobs:textures/entities/wolfmzte_angry.png");
|
||||
public class RenderWolfMZTE extends RenderWolf
|
||||
{
|
||||
private static final ResourceLocation WOLFMZTE_TEXTURE = new ResourceLocation("spackenmobs:textures/entities/wolfmzte.png");
|
||||
private static final ResourceLocation TAMED_WOLFMZTE_TEXTURE = new ResourceLocation("spackenmobs:textures/entities/wolfmzte_tame.png");
|
||||
private static final ResourceLocation ANRGY_WOLFMZTE_TEXTURE = new ResourceLocation("spackenmobs:textures/entities/wolfmzte_angry.png");
|
||||
public static final Factory FACTORY = new Factory();
|
||||
|
||||
public RenderWolfMZTE(RenderManager renderManagerIn) {
|
||||
public RenderWolfMZTE(RenderManager renderManagerIn)
|
||||
{
|
||||
super(renderManagerIn);
|
||||
this.addLayer(new LayerWolfCollar(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected float handleRotationFloat(EntityWolf livingBase, float partialTicks) {
|
||||
protected float handleRotationFloat(EntityWolf livingBase, float partialTicks)
|
||||
{
|
||||
return livingBase.getTailRotation();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doRender(EntityWolf entity, double x, double y, double z, float entityYaw, float partialTicks) {
|
||||
if (entity.isWolfWet()) {
|
||||
public void doRender(EntityWolf entity, double x, double y, double z, float entityYaw, float partialTicks)
|
||||
{
|
||||
if (entity.isWolfWet())
|
||||
{
|
||||
float f = entity.getBrightness() * entity.getShadingWhileWet(partialTicks);
|
||||
GlStateManager.color(f, f, f);
|
||||
}
|
||||
|
@ -43,17 +45,23 @@ public class RenderWolfMZTE extends RenderWolf {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected ResourceLocation getEntityTexture(EntityWolf entity) {
|
||||
if (entity.isTamed()) {
|
||||
protected ResourceLocation getEntityTexture(EntityWolf entity)
|
||||
{
|
||||
if (entity.isTamed())
|
||||
{
|
||||
return TAMED_WOLFMZTE_TEXTURE;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
return entity.isAngry() ? ANRGY_WOLFMZTE_TEXTURE : WOLFMZTE_TEXTURE;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Factory implements IRenderFactory<EntityWolfMZTE> {
|
||||
public static class Factory implements IRenderFactory<EntityWolfMZTE>
|
||||
{
|
||||
@Override
|
||||
public Render<? super EntityWolfMZTE> createRenderFor(RenderManager manager) {
|
||||
public Render<? super EntityWolfMZTE> createRenderFor(RenderManager manager)
|
||||
{
|
||||
return new RenderWolfMZTE(manager);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
entity.smava_creeper.name=Smava-Creeper
|
||||
entity.marcell_davis.name=Marcell D'Avis
|
||||
entity.islamist.name=Islamist
|
||||
entity.apored.name=ApoRed
|
||||
entity.mr_bean.name=Mr. Bean
|
||||
entity.drachenlord.name=Drachenlord
|
||||
entity.schalker.name=Schalker
|
||||
entity.jens.name=Jens
|
||||
entity.wolfmzte.name=WolfMZTE
|
||||
entity.holzstammhuhn.name=Holzstammhuhn
|
||||
entity.islamist.name=Islamist
|
||||
entity.jens.name=Jens
|
||||
entity.marcell_davis.name=Marcell D'Avis
|
||||
entity.mr_bean.name=Mr. Bean
|
||||
entity.schalker.name=Schalker
|
||||
entity.smava_creeper.name=Smava-Creeper
|
||||
entity.wolfmzte.name=WolfMZTE
|
||||
item.spackenmobs.ram.name=RAM
|
||||
item.spackenmobs.ram_on_a_stick.name=RAM-Rute
|
||||
item.spackenmobs.surstroemming.name=Surströmming
|
||||
itemGroup.spackenmobs.tabSpackenmobs=Spackenmobs
|
|
@ -1,13 +1,14 @@
|
|||
entity.smava_creeper.name=Smava Creeper
|
||||
entity.marcell_davis.name=Marcell D'Avis
|
||||
entity.islamist.name=Islamist
|
||||
entity.apored.name=ApoRed
|
||||
entity.mr_bean.name=Mr. Bean
|
||||
entity.drachenlord.name=Drachenlord
|
||||
entity.schalker.name=Schalker
|
||||
entity.jens.name=Jens
|
||||
entity.wolfmzte.name=WolfMZTE
|
||||
entity.holzstammhuhn.name=Holzstammhuhn
|
||||
entity.islamist.name=Islamist
|
||||
entity.jens.name=Jens
|
||||
entity.marcell_davis.name=Marcell D'Avis
|
||||
entity.mr_bean.name=Mr. Bean
|
||||
entity.schalker.name=Schalker
|
||||
entity.smava_creeper.name=Smava Creeper
|
||||
entity.wolfmzte.name=WolfMZTE
|
||||
item.spackenmobs.ram.name=RAM
|
||||
item.spackenmobs.ram_on_a_stick.name=RAM on a Stick
|
||||
item.spackenmobs.surstroemming.name=Surströmming
|
||||
itemGroup.spackenmobs.tabSpackenmobs=Spackenmobs
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"pools": [{
|
||||
"name": "jens",
|
||||
"rolls": 1,
|
||||
"entries": [{
|
||||
"type": "item",
|
||||
"name": "spackenmobs:ram",
|
||||
"weight": 1,
|
||||
"functions": [{
|
||||
"function": "set_count",
|
||||
"count": {
|
||||
"min": 1,
|
||||
"max": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"function": "looting_enchant",
|
||||
"count": {
|
||||
"min": 0,
|
||||
"max": 1
|
||||
}
|
||||
}
|
||||
]
|
||||
}]
|
||||
}]
|
||||
}
|
Loading…
Reference in a new issue