-
Posts
867 -
Joined
-
Last visited
-
Days Won
3
Everything posted by JimiIT92
-
Could you please send me a link to a LivingDeathEvent example? For the despawn i can think a workaround: if the player dies in the fight despawn all the zombies (so the reward is spawned only if the player wins)
-
Is there a way to do some mob team events? For example, i have a block that spawns 4 zombies when a player is near it. I want to spawn a chest when all the 4 zombies are dead, how can i do this?
-
Any idea?
-
Ok, so i've changed my horse class to this package blaze.entities; import java.util.Iterator; import java.util.List; import com.google.common.base.Predicate; import blaze.core.BLItems; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityAgeable; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EnumCreatureAttribute; import net.minecraft.entity.IEntityLivingData; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.EntityAIFollowParent; import net.minecraft.entity.ai.EntityAILookIdle; import net.minecraft.entity.ai.EntityAIMate; import net.minecraft.entity.ai.EntityAINearestAttackableTarget; import net.minecraft.entity.ai.EntityAIPanic; import net.minecraft.entity.ai.EntityAIRunAroundLikeCrazy; import net.minecraft.entity.ai.EntityAISwimming; import net.minecraft.entity.ai.EntityAITempt; import net.minecraft.entity.ai.EntityAIWander; import net.minecraft.entity.ai.EntityAIWatchClosest; import net.minecraft.entity.ai.attributes.IAttribute; import net.minecraft.entity.ai.attributes.IAttributeInstance; import net.minecraft.entity.ai.attributes.RangedAttribute; import net.minecraft.entity.monster.EntitySkeleton; import net.minecraft.entity.passive.EntityAnimal; import net.minecraft.entity.passive.EntityHorse; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.inventory.AnimalChest; import net.minecraft.inventory.IInvBasic; import net.minecraft.inventory.InventoryBasic; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.pathfinding.PathNavigateGround; import net.minecraft.potion.Potion; import net.minecraft.server.management.PreYggdrasilConverter; import net.minecraft.util.BlockPos; import net.minecraft.util.DamageSource; import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.MathHelper; import net.minecraft.util.StatCollector; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class EntityWitherHorse extends EntityHorse implements IInvBasic { private static final IAttribute horseJumpStrength = (new RangedAttribute((IAttribute)null, "horse.jumpStrength", 0.7D, 0.0D, 2.0D)).setDescription("Jump Strength").setShouldWatch(true); private static final String[] horseTextures = new String[] {"blaze:textures/entity/mobs/horse_skeleton_wither"}; private int eatingHaystackCounter; private int openMouthCounter; private int jumpRearingCounter; private float rearingAmount; private float prevRearingAmount; private float mouthOpenness; private float prevMouthOpenness; public EntityWitherHorse(World worldIn) { super(worldIn); this.isImmuneToFire = true; } protected void entityInit() { super.entityInit(); } /** * Gets the name of this command sender (usually username, but possibly "Rcon") */ public String getName() { if (this.hasCustomName()) { return this.getCustomNameTag(); } else { return StatCollector.translateToLocal("entity.witherskeletonhorse.name"); } } private void setHorseWatchableBoolean(int par1, boolean par2) { int j = this.dataWatcher.getWatchableObjectInt(16); if (par2) { this.dataWatcher.updateObject(16, Integer.valueOf(j | par1)); } else { this.dataWatcher.updateObject(16, Integer.valueOf(j & ~par1)); } } /** * Returns the sound this mob makes on death. */ protected String getDeathSound() { this.openHorseMouth(); return "mob.horse.skeleton.death"; } protected Item getDropItem() { boolean flag = this.rand.nextInt(4) == 0; return flag ? Items.coal : Items.bone; } /** * Returns the sound this mob makes when it is hurt. */ protected String getHurtSound() { this.openHorseMouth(); if (this.rand.nextInt(3) == 0) { this.makeHorseRear(); } return "mob.horse.skeleton.hit"; } /** * Returns the sound this mob makes while it's alive. */ protected String getLivingSound() { this.openHorseMouth(); if (this.rand.nextInt(10) == 0 && !this.isMovementBlocked()) { this.makeHorseRear(); } return "mob.horse.skeleton.idle"; } /** * Dead and sleeping entities cannot move */ protected boolean isMovementBlocked() { return false; } @Override public void setHorseType(int par1) { super.setHorseType(0); } /** * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons * use this to react to sunlight and start to burn. */ @Override public void onLivingUpdate() { super.onLivingUpdate(); float f = (float)this.getEntityBoundingBox().minY; float f1 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width * 0.5F; float f2 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width * 0.5F; if(this.rand.nextInt(5) == 0) { this.worldObj.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, this.posX + (double)f1, (double)(f + 0.8F), this.posZ + (double)f2, this.motionX, this.motionY, this.motionZ, new int[0]); } this.worldObj.spawnParticle(EnumParticleTypes.SPELL_MOB, this.posX + (double)f1, (double)(f + 0.8F), this.posZ + (double)f2, this.motionX, this.motionY, this.motionZ, new int[0]); } private void openHorseMouth() { if (!this.worldObj.isRemote) { this.openMouthCounter = 1; this.setHorseWatchableBoolean(128, true); } } private void makeHorseRear() { if (!this.worldObj.isRemote) { this.jumpRearingCounter = 1; this.setRearing(true); } } @Override public boolean isEntityInvulnerable(DamageSource source) { if(source.damageType.equals("lightningBolt")) return true; else return false; } public IEntityLivingData func_180482_a(DifficultyInstance difficulty, IEntityLivingData entity) { Object object = super.func_180482_a(difficulty, entity); boolean flag = false; int i = 0; int l; EntityWitherSkeleton entityskeleton = new EntityWitherSkeleton(this.worldObj); entityskeleton.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, 0.0F); entityskeleton.func_180482_a(difficulty, (IEntityLivingData)null); this.worldObj.spawnEntityInWorld(entityskeleton); entityskeleton.mountEntity(this); this.setHorseSaddled(true); this.setHorseTamed(true); if (object instanceof EntityWitherHorse.GroupData) { l = ((EntityWitherHorse.GroupData)object).field_111107_a; i = ((EntityWitherHorse.GroupData)object).field_111106_b & 255 | this.rand.nextInt(5) << 8; } else { if (this.rand.nextInt(10) == 0) { l = 1; } else { int j = this.rand.nextInt(7); int k = this.rand.nextInt(5); l = 0; i = j | k << 8; } object = new EntityWitherHorse.GroupData(l, i); } this.setHorseType(l); this.setHorseVariant(i); if (this.rand.nextInt(5) == 0) { this.setGrowingAge(-24000); } if (l != 4 && l != 3) { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue((double)this.func_110267_cL()); if (l == 0) { this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(this.func_110203_cN()); } else { this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.17499999701976776D); } } else { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(15.0D); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.20000000298023224D); } if (l != 2 && l != 1) { this.getEntityAttribute(horseJumpStrength).setBaseValue(this.func_110245_cM()); } else { this.getEntityAttribute(horseJumpStrength).setBaseValue(0.5D); } this.setHealth(this.getMaxHealth()); return (IEntityLivingData)object; } @SideOnly(Side.CLIENT) public float getRearingAmount(float par1) { return this.prevRearingAmount + (this.rearingAmount - this.prevRearingAmount) * par1; } @SideOnly(Side.CLIENT) public float func_110201_q(float par1) { return this.prevMouthOpenness + (this.mouthOpenness - this.prevMouthOpenness) * par1; } private float func_110267_cL() { return 15.0F + (float)this.rand.nextInt( + (float)this.rand.nextInt(9); } private double func_110245_cM() { return 0.4000000059604645D + this.rand.nextDouble() * 0.2D + this.rand.nextDouble() * 0.2D + this.rand.nextDouble() * 0.2D; } private double func_110203_cN() { return (0.44999998807907104D + this.rand.nextDouble() * 0.3D + this.rand.nextDouble() * 0.3D + this.rand.nextDouble() * 0.3D) * 0.25D; } public static class GroupData implements IEntityLivingData { public int field_111107_a; public int field_111106_b; public GroupData(int par1, int par2) { this.field_111107_a = par1; this.field_111106_b = par2; } } } I've also notice other 2 problems. 1. when the horse spawn is not always saddled 2. when jumping it doesn't do an animation (causing weird player positioning)
-
Yes, i mean the skeleton rides the horse. To give you an example it will looks like the actual skeleton horses in the last snapshots By the way i'm deleting all the unnecessary stuff from the horse class, so it will be more readable
-
i'm calling it from here if(!this.worldObj.isRemote) { this.worldObj.getWorldInfo().setCleanWeatherTime(0); this.worldObj.getWorldInfo().setRainTime(0); this.worldObj.getWorldInfo().setThunderTime(12000); this.worldObj.getWorldInfo().setRaining(true); this.worldObj.getWorldInfo().setThundering(true); } Is it correct? Doing this i have no problem, the weather is changed as well I'm just wondering if there is a way to not spawn the rain (so making the sky darker and make it thundering but without raining). As i said before i tried setting false the setRaining parameter, but if i do it will not change the weather
-
The code above is the exact code that vanilla use when the player does the weather thunder command. I've tried using setRaining(false) but if i do also the thunders doesn't spawns
-
Ok, so i've do this this.worldObj.getWorldInfo().setCleanWeatherTime(0); this.worldObj.getWorldInfo().setRainTime(0); this.worldObj.getWorldInfo().setThunderTime(12000); this.worldObj.getWorldInfo().setRaining(true); this.worldObj.getWorldInfo().setThundering(true); it works, but now i am wondering if there is any way to spawn only thunders (without the rain)
-
Ok, i was copy-pasting all the horse class just for test. I think that overriding only specific functions could solve the armor rendering problem, but what about the movement? Horse has no AI by default that makes them controllable by other entities (at least in 1.
-
Is there any chanche to change the weather when an event occurs? For example, i have a tile entity that spawns 4 mobs, then it destroys itself. How can i do to also change the weather to thunder before it disappear (so: it spawns the mob and then it change the weather to thunder)?
-
So i have some issues with my custom horse The first problem is that if he's saddled and i kill him it drops 2 saddle, but only 1 is added to the inventory. So it's only a visual effect, beacuse as i said there's only 1 saddle but are shown 2. Here is the code for my horse package blaze.entities; import java.util.Iterator; import java.util.List; import com.google.common.base.Predicate; import blaze.core.BLItems; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityAgeable; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EnumCreatureAttribute; import net.minecraft.entity.IEntityLivingData; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.ai.EntityAIFollowParent; import net.minecraft.entity.ai.EntityAILookIdle; import net.minecraft.entity.ai.EntityAIMate; import net.minecraft.entity.ai.EntityAIPanic; import net.minecraft.entity.ai.EntityAIRunAroundLikeCrazy; import net.minecraft.entity.ai.EntityAISwimming; import net.minecraft.entity.ai.EntityAITempt; import net.minecraft.entity.ai.EntityAIWander; import net.minecraft.entity.ai.EntityAIWatchClosest; import net.minecraft.entity.ai.attributes.IAttribute; import net.minecraft.entity.ai.attributes.IAttributeInstance; import net.minecraft.entity.ai.attributes.RangedAttribute; import net.minecraft.entity.monster.EntitySkeleton; import net.minecraft.entity.passive.EntityAnimal; import net.minecraft.entity.passive.EntityHorse; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.inventory.AnimalChest; import net.minecraft.inventory.IInvBasic; import net.minecraft.inventory.InventoryBasic; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.pathfinding.PathNavigateGround; import net.minecraft.potion.Potion; import net.minecraft.server.management.PreYggdrasilConverter; import net.minecraft.util.BlockPos; import net.minecraft.util.DamageSource; import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.MathHelper; import net.minecraft.util.StatCollector; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class EntityWitherHorse extends EntityHorse implements IInvBasic { private static final Predicate horseBreedingSelector = new Predicate() { public boolean func_179873_a(Entity entity) { return entity instanceof EntityWitherHorse && ((EntityWitherHorse)entity).func_110205_ce(); } public boolean apply(Object object) { return this.func_179873_a((Entity)object); } }; private static final IAttribute horseJumpStrength = (new RangedAttribute((IAttribute)null, "horse.jumpStrength", 0.7D, 0.0D, 2.0D)).setDescription("Jump Strength").setShouldWatch(true); private static final String[] horseArmorTextures = new String[] {null, "textures/entity/horse/armor/horse_armor_iron.png", "textures/entity/horse/armor/horse_armor_gold.png", "textures/entity/horse/armor/horse_armor_diamond.png"}; private static final String[] field_110273_bx = new String[] {"", "meo", "goo", "dio"}; private static final int[] armorValues = new int[] {0, 5, 7, 11}; private static final String[] horseTextures = new String[] {"blaze:textures/entity/mobs/horse_skeleton_wither"}; private static final String[] field_110269_bA = new String[] {"hwh", "hcr", "hch", "hbr", "hbl", "hgr", "hdb"}; private static final String[] horseMarkingTextures = new String[] {null, "textures/entity/horse/horse_markings_white.png", "textures/entity/horse/horse_markings_whitefield.png", "textures/entity/horse/horse_markings_whitedots.png", "textures/entity/horse/horse_markings_blackdots.png"}; private static final String[] field_110292_bC = new String[] {"", "wo_", "wmo", "wdo", "bdo"}; private int eatingHaystackCounter; private int openMouthCounter; private int jumpRearingCounter; public int field_110278_bp; public int field_110279_bq; protected boolean horseJumping; private AnimalChest horseChest; private boolean hasReproduced; /** "The higher this value, the more likely the horse is to be tamed next time a player rides it." */ protected int temper; protected float jumpPower; private boolean field_110294_bI; private float headLean; private float prevHeadLean; private float rearingAmount; private float prevRearingAmount; private float mouthOpenness; private float prevMouthOpenness; /** Used to determine the sound that the horse should make when it steps */ private int gallopTime; private String texturePrefix; private String[] field_110280_bR = new String[3]; private boolean field_175508_bO = false; public boolean isMounted = true; public EntityWitherHorse(World worldIn) { super(worldIn); this.setSize(1.4F, 1.6F); this.isImmuneToFire = true; this.setChested(false); ((PathNavigateGround)this.getNavigator()).func_179690_a(true); this.tasks.addTask(0, new EntityAISwimming(this)); this.tasks.addTask(1, new EntityAIPanic(this, 1.2D)); this.tasks.addTask(1, new EntityAIRunAroundLikeCrazy(this, 1.2D)); this.tasks.addTask(2, new EntityAIMate(this, 1.0D)); this.tasks.addTask(4, new EntityAIFollowParent(this, 1.0D)); this.tasks.addTask(6, new EntityAIWander(this, 0.7D)); this.tasks.addTask(7, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F)); this.tasks.addTask(8, new EntityAILookIdle(this)); this.tasks.addTask(4, new EntityWitherSkeletonAITempt(this, 1.2D, false)); this.func_110226_cD(); } protected void entityInit() { super.entityInit(); } public void setHorseType(int type) { this.dataWatcher.updateObject(19, Byte.valueOf((byte)type)); this.resetTexturePrefix(); } /** * Returns the horse type. 0 = Normal, 1 = Donkey, 2 = Mule, 3 = Undead Horse, 4 = Skeleton Horse */ public int getHorseType() { return this.dataWatcher.getWatchableObjectByte(19); } public void setHorseVariant(int variant) { this.dataWatcher.updateObject(20, Integer.valueOf(variant)); this.resetTexturePrefix(); } public int getHorseVariant() { return this.dataWatcher.getWatchableObjectInt(20); } /** * Gets the name of this command sender (usually username, but possibly "Rcon") */ public String getName() { if (this.hasCustomName()) { return this.getCustomNameTag(); } else { return StatCollector.translateToLocal("entity.witherskeletonhorse.name"); } } private boolean getHorseWatchableBoolean(int par1) { return (this.dataWatcher.getWatchableObjectInt(16) & par1) != 0; } private void setHorseWatchableBoolean(int par1, boolean par2) { int j = this.dataWatcher.getWatchableObjectInt(16); if (par2) { this.dataWatcher.updateObject(16, Integer.valueOf(j | par1)); } else { this.dataWatcher.updateObject(16, Integer.valueOf(j & ~par1)); } } public boolean isAdultHorse() { return !this.isChild(); } public boolean isTame() { return this.getHorseWatchableBoolean(2); } public boolean func_110253_bW() { return this.isAdultHorse(); } public String func_152119_ch() { return this.dataWatcher.getWatchableObjectString(21); } public void func_152120_b(String par1) { this.dataWatcher.updateObject(21, par1); } public float getHorseSize() { int i = this.getGrowingAge(); return i >= 0 ? 1.0F : 0.5F + (float)(-24000 - i) / -24000.0F * 0.5F; } /** * "Sets the scale for an ageable entity according to the boolean parameter, which says if it's a child." */ public void setScaleForAge(boolean par1) { if (par1) { this.setScale(this.getHorseSize()); } else { this.setScale(1.0F); } } public boolean isHorseJumping() { return this.horseJumping; } public void setHorseTamed(boolean par1) { this.setHorseWatchableBoolean(2, par1); } public void setHorseJumping(boolean par1) { this.horseJumping = par1; } public boolean allowLeashing() { return !this.isUndead() && super.allowLeashing(); } protected void func_142017_o(float par1) { if (par1 > 6.0F && this.isEatingHaystack()) { this.setEatingHaystack(false); } } public boolean isChested() { return this.getHorseWatchableBoolean(; } public int func_110241_cb() { return this.dataWatcher.getWatchableObjectInt(22); } /** * 0 = iron, 1 = gold, 2 = diamond */ private int getHorseArmorIndex(ItemStack itemstack) { if (itemstack == null) { return 0; } else { Item item = itemstack.getItem(); return item == Items.iron_horse_armor ? 1 : (item == Items.golden_horse_armor ? 2 : (item == Items.diamond_horse_armor ? 3 : 0)); } } public boolean isEatingHaystack() { return this.getHorseWatchableBoolean(32); } public boolean isRearing() { return this.getHorseWatchableBoolean(64); } public boolean func_110205_ce() { return this.getHorseWatchableBoolean(16); } public boolean getHasReproduced() { return this.hasReproduced; } /** * Set horse armor stack (for example: new ItemStack(Items.iron_horse_armor)) */ public void setHorseArmorStack(ItemStack itemstack) { this.dataWatcher.updateObject(22, Integer.valueOf(this.getHorseArmorIndex(itemstack))); this.resetTexturePrefix(); } public void func_110242_l(boolean par1) { this.setHorseWatchableBoolean(16, par1); } public void setChested(boolean par1) { this.setHorseWatchableBoolean(8, par1); } public void setHasReproduced(boolean par1) { this.hasReproduced = par1; } public void setHorseSaddled(boolean par1) { this.setHorseWatchableBoolean(4, par1); } public int getTemper() { return this.temper; } public void setTemper(int par1) { this.temper = par1; } public int increaseTemper(int par1) { int j = MathHelper.clamp_int(this.getTemper() + par1, 0, this.getMaxTemper()); this.setTemper(j); return j; } /** * Called when the entity is attacked. */ public boolean attackEntityFrom(DamageSource source, float amount) { Entity entity = source.getEntity(); return this.riddenByEntity != null && this.riddenByEntity.equals(entity) ? false : super.attackEntityFrom(source, amount); } /** * Returns the current armor value as determined by a call to InventoryPlayer.getTotalArmorValue */ public int getTotalArmorValue() { return armorValues[this.func_110241_cb()]; } /** * Returns true if this entity should push and be pushed by other entities when colliding. */ public boolean canBePushed() { return this.riddenByEntity == null; } public boolean prepareChunkForSpawn() { int i = MathHelper.floor_double(this.posX); int j = MathHelper.floor_double(this.posZ); this.worldObj.getBiomeGenForCoords(new BlockPos(i, 0, j)); return true; } public void dropChests() { if (!this.worldObj.isRemote && this.isChested()) { this.dropItem(Item.getItemFromBlock(Blocks.chest), 1); this.setChested(false); } } private void func_110266_cB() { this.openHorseMouth(); if (!this.isSilent()) { this.worldObj.playSoundAtEntity(this, "eating", 1.0F, 1.0F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F); } } public void fall(float distance, float damageMultiplier) { if (distance > 1.0F) { this.playSound("mob.horse.land", 0.4F, 1.0F); } int i = MathHelper.ceiling_float_int((distance * 0.5F - 3.0F) * damageMultiplier); if (i > 0) { this.attackEntityFrom(DamageSource.fall, (float)i); if (this.riddenByEntity != null) { this.riddenByEntity.attackEntityFrom(DamageSource.fall, (float)i); } Block block = this.worldObj.getBlockState(new BlockPos(this.posX, this.posY - 0.2D - (double)this.prevRotationYaw, this.posZ)).getBlock(); if (block.getMaterial() != Material.air && !this.isSilent()) { Block.SoundType soundtype = block.stepSound; this.worldObj.playSoundAtEntity(this, soundtype.getStepSound(), soundtype.getVolume() * 0.5F, soundtype.getFrequency() * 0.75F); } } } private int func_110225_cC() { int i = this.getHorseType(); return this.isChested() && (i == 1 || i == 2) ? 17 : 2; } private void func_110226_cD() { AnimalChest animalchest = this.horseChest; this.horseChest = new AnimalChest("HorseChest", this.func_110225_cC()); this.horseChest.setCustomName(this.getName()); if (animalchest != null) { animalchest.func_110132_b(this); int i = Math.min(animalchest.getSizeInventory(), this.horseChest.getSizeInventory()); for (int j = 0; j < i; ++j) { ItemStack itemstack = animalchest.getStackInSlot(j); if (itemstack != null) { this.horseChest.setInventorySlotContents(j, itemstack.copy()); } } } this.horseChest.func_110134_a(this); this.func_110232_cE(); } private void func_110232_cE() { if (!this.worldObj.isRemote) { this.setHorseSaddled(this.horseChest.getStackInSlot(0) != null); if (this.canWearArmor()) { this.setHorseArmorStack(this.horseChest.getStackInSlot(1)); } } } /** * Called by InventoryBasic.onInventoryChanged() on a array that is never filled. */ public void onInventoryChanged(InventoryBasic invbasic) { int i = this.func_110241_cb(); boolean flag = this.isHorseSaddled(); this.func_110232_cE(); if (this.ticksExisted > 20) { if (i == 0 && i != this.func_110241_cb()) { this.playSound("mob.horse.armor", 0.5F, 1.0F); } else if (i != this.func_110241_cb()) { this.playSound("mob.horse.armor", 0.5F, 1.0F); } if (!flag && this.isHorseSaddled()) { this.playSound("mob.horse.leather", 0.5F, 1.0F); } } } /** * Checks if the entity's current position is a valid location to spawn this entity. */ public boolean getCanSpawnHere() { this.prepareChunkForSpawn(); return super.getCanSpawnHere(); } protected EntityWitherHorse getClosestHorse(Entity entity, double par2) { double d1 = Double.MAX_VALUE; Entity entity1 = null; List list = this.worldObj.func_175674_a(entity, entity.getEntityBoundingBox().addCoord(par2, par2, par2), horseBreedingSelector); Iterator iterator = list.iterator(); while (iterator.hasNext()) { Entity entity2 = (Entity)iterator.next(); double d2 = entity2.getDistanceSq(entity.posX, entity.posY, entity.posZ); if (d2 < d1) { entity1 = entity2; d1 = d2; } } return (EntityWitherHorse)entity1; } public double getHorseJumpStrength() { return this.getEntityAttribute(horseJumpStrength).getAttributeValue(); } /** * Returns the sound this mob makes on death. */ protected String getDeathSound() { this.openHorseMouth(); return "mob.horse.skeleton.death"; } protected Item getDropItem() { boolean flag = this.rand.nextInt(4) == 0; return flag ? Items.coal : Items.bone; } /** * Returns the sound this mob makes when it is hurt. */ protected String getHurtSound() { this.openHorseMouth(); if (this.rand.nextInt(3) == 0) { this.makeHorseRear(); } return "mob.horse.skeleton.hit"; } public boolean isHorseSaddled() { return this.getHorseWatchableBoolean(4); } /** * Returns the sound this mob makes while it's alive. */ protected String getLivingSound() { this.openHorseMouth(); if (this.rand.nextInt(10) == 0 && !this.isMovementBlocked()) { this.makeHorseRear(); } return "mob.horse.skeleton.idle"; } protected String getAngrySoundName() { this.openHorseMouth(); this.makeHorseRear(); return "mob.horse.angry"; } protected void playStepSound(BlockPos pos, Block block) { Block.SoundType soundtype = block.stepSound; if (this.worldObj.getBlockState(pos.up()).getBlock() == Blocks.snow_layer) { soundtype = Blocks.snow_layer.stepSound; } if (!block.getMaterial().isLiquid()) { int i = this.getHorseType(); if (this.riddenByEntity != null && i != 1 && i != 2) { ++this.gallopTime; if (this.gallopTime > 5 && this.gallopTime % 3 == 0) { this.playSound("mob.horse.gallop", soundtype.getVolume() * 0.15F, soundtype.getFrequency()); if (i == 0 && this.rand.nextInt(10) == 0) { this.playSound("mob.horse.breathe", soundtype.getVolume() * 0.6F, soundtype.getFrequency()); } } else if (this.gallopTime <= 5) { this.playSound("mob.horse.wood", soundtype.getVolume() * 0.15F, soundtype.getFrequency()); } } else if (soundtype == Block.soundTypeWood) { this.playSound("mob.horse.wood", soundtype.getVolume() * 0.15F, soundtype.getFrequency()); } else { this.playSound("mob.horse.soft", soundtype.getVolume() * 0.15F, soundtype.getFrequency()); } } } protected void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(15.0D); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.22499999403953552D); } /** * Will return how many at most can spawn in a chunk at once. */ public int getMaxSpawnedInChunk() { return 6; } public int getMaxTemper() { return 100; } /** * Returns the volume for the sounds this mob makes. */ protected float getSoundVolume() { return 0.8F; } /** * Get number of ticks, at least during which the living entity will be silent. */ public int getTalkInterval() { return 400; } @SideOnly(Side.CLIENT) public boolean func_110239_cn() { return this.getHorseType() == 0 || this.func_110241_cb() > 0; } private void resetTexturePrefix() { this.texturePrefix = null; } @SideOnly(Side.CLIENT) public boolean func_175507_cI() { return this.field_175508_bO; } @SideOnly(Side.CLIENT) private void setHorseTexturePaths() { this.texturePrefix = "horse/"; this.field_110280_bR[0] = null; this.field_110280_bR[1] = null; this.field_110280_bR[2] = null; int i = this.getHorseType(); int j = this.getHorseVariant(); int k; if (i == 0) { k = j & 255; int l = (j & 65280) >> 8; if (k >= horseTextures.length) { this.field_175508_bO = false; return; } this.field_110280_bR[0] = horseTextures[k]; this.texturePrefix = this.texturePrefix + field_110269_bA[k]; if (l >= horseMarkingTextures.length) { this.field_175508_bO = false; return; } this.field_110280_bR[1] = horseMarkingTextures[l]; this.texturePrefix = this.texturePrefix + field_110292_bC[l]; } else { this.field_110280_bR[0] = ""; this.texturePrefix = this.texturePrefix + "_" + i + "_"; } k = this.func_110241_cb(); if (k >= horseArmorTextures.length) { this.field_175508_bO = false; } else { this.field_110280_bR[2] = horseArmorTextures[k]; this.texturePrefix = this.texturePrefix + field_110273_bx[k]; this.field_175508_bO = true; } } @SideOnly(Side.CLIENT) public String getHorseTexture() { if (this.texturePrefix == null) { this.setHorseTexturePaths(); } return this.texturePrefix; } @SideOnly(Side.CLIENT) public String[] getVariantTexturePaths() { if (this.texturePrefix == null) { this.setHorseTexturePaths(); } return this.field_110280_bR; } public void openGUI(EntityPlayer playerEntity) { if (!this.worldObj.isRemote && (this.riddenByEntity == null || this.riddenByEntity == playerEntity) && this.isTame()) { this.horseChest.setCustomName(this.getName()); playerEntity.displayGUIHorse(this, this.horseChest); } } /** * Called when a player interacts with a mob. e.g. gets milk from a cow, gets into the saddle on a pig. */ public boolean interact(EntityPlayer player) { ItemStack itemstack = player.inventory.getCurrentItem(); if (itemstack != null && itemstack.getItem() == Items.spawn_egg) { return super.interact(player); } else if (!this.isTame() /*&& this.isUndead()*/) { return false; } else if (this.isTame() && this.isAdultHorse() && player.isSneaking()) { this.openGUI(player); return true; } else if (this.func_110253_bW() && this.riddenByEntity != null) { return super.interact(player); } else { if (itemstack != null) { boolean flag = false; if (this.canWearArmor()) { byte b0 = -1; if (itemstack.getItem() == Items.iron_horse_armor) { b0 = 1; } else if (itemstack.getItem() == Items.golden_horse_armor) { b0 = 2; } else if (itemstack.getItem() == Items.diamond_horse_armor) { b0 = 3; } if (b0 >= 0) { if (!this.isTame()) { this.makeHorseRearWithSound(); return true; } this.openGUI(player); return true; } } if (!flag /*&& !this.isUndead()*/) { float f = 0.0F; short short1 = 0; byte b1 = 0; if (itemstack.getItem() == Items.wheat) { f = 2.0F; short1 = 20; b1 = 3; } else if (itemstack.getItem() == Items.sugar) { f = 1.0F; short1 = 30; b1 = 3; } else if (Block.getBlockFromItem(itemstack.getItem()) == Blocks.hay_block) { f = 20.0F; short1 = 180; } else if (itemstack.getItem() == Items.apple) { f = 3.0F; short1 = 60; b1 = 3; } else if (itemstack.getItem() == Items.golden_carrot) { f = 4.0F; short1 = 60; b1 = 5; if (this.isTame() && this.getGrowingAge() == 0) { flag = true; this.setInLove(player); } } else if (itemstack.getItem() == Items.golden_apple) { f = 10.0F; short1 = 240; b1 = 10; if (this.isTame() && this.getGrowingAge() == 0) { flag = true; this.setInLove(player); } } if (this.getHealth() < this.getMaxHealth() && f > 0.0F) { this.heal(f); flag = true; } if (!this.isAdultHorse() && short1 > 0) { this.addGrowth(short1); flag = true; } if (b1 > 0 && (flag || !this.isTame()) && b1 < this.getMaxTemper()) { flag = true; this.increaseTemper(b1); } if (flag) { this.func_110266_cB(); } } if (!this.isTame() && !flag) { if (itemstack != null && itemstack.interactWithEntity(player, this)) { return true; } this.makeHorseRearWithSound(); return true; } if (!flag && this.canCarryChest() && !this.isChested() && itemstack.getItem() == Item.getItemFromBlock(Blocks.chest)) { this.setChested(true); this.playSound("mob.chickenplop", 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); flag = true; this.func_110226_cD(); } if (!flag && this.func_110253_bW() && !this.isHorseSaddled() && itemstack.getItem() == Items.saddle) { this.openGUI(player); return true; } if (flag) { if (!player.capabilities.isCreativeMode && --itemstack.stackSize == 0) { player.inventory.setInventorySlotContents(player.inventory.currentItem, (ItemStack)null); } return true; } } if (this.func_110253_bW() && this.riddenByEntity == null) { if (itemstack != null && itemstack.interactWithEntity(player, this)) { return true; } else { this.func_110237_h(player); return true; } } else { return super.interact(player); } } } private void func_110237_h(EntityPlayer player) { player.rotationYaw = this.rotationYaw; player.rotationPitch = this.rotationPitch; this.setEatingHaystack(false); this.setRearing(false); if (!this.worldObj.isRemote) { player.mountEntity(this); } } /** * Return true if the horse entity can wear an armor */ public boolean canWearArmor() { return true; } /** * Return true if the horse entity can carry a chest. */ public boolean canCarryChest() { int i = this.getHorseType(); return i == 2 || i == 1; } /** * Dead and sleeping entities cannot move */ protected boolean isMovementBlocked() { return this.riddenByEntity != null && this.isHorseSaddled() ? true : false; } /** * Used to know if the horse can be leashed, if he can mate, or if we can interact with him */ public boolean isUndead() { int i = this.getHorseType(); return i == 3 || i == 4; } /** * Return true if the horse entity is sterile (Undead || Mule) */ public boolean isSterile() { return this.isUndead() || this.getHorseType() == 2; } /** * Checks if the parameter is an item which this animal can be fed to breed it (wheat, carrots or seeds depending on * the animal type) */ public boolean isBreedingItem(ItemStack stack) { return false; } private void func_110210_cH() { this.field_110278_bp = 1; } /** * Called when the mob's health reaches 0. */ public void onDeath(DamageSource cause) { super.onDeath(cause); if (!this.worldObj.isRemote) { this.dropChestItems(); } } /** * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons * use this to react to sunlight and start to burn. */ public void onLivingUpdate() { if (this.rand.nextInt(200) == 0) { this.func_110210_cH(); } super.onLivingUpdate(); float f = (float)this.getEntityBoundingBox().minY; float f1 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width * 0.5F; float f2 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width * 0.5F; if(this.rand.nextInt(5) == 0) { this.worldObj.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, this.posX + (double)f1, (double)(f + 0.8F), this.posZ + (double)f2, this.motionX, this.motionY, this.motionZ, new int[0]); } this.worldObj.spawnParticle(EnumParticleTypes.SPELL_MOB, this.posX + (double)f1, (double)(f + 0.8F), this.posZ + (double)f2, this.motionX, this.motionY, this.motionZ, new int[0]); if (!this.worldObj.isRemote) { if (this.rand.nextInt(900) == 0 && this.deathTime == 0) { this.heal(1.0F); } if (!this.isEatingHaystack() && this.riddenByEntity == null && this.rand.nextInt(300) == 0 && this.worldObj.getBlockState(new BlockPos(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY) - 1, MathHelper.floor_double(this.posZ))).getBlock() == Blocks.grass) { this.setEatingHaystack(true); } if (this.isEatingHaystack() && ++this.eatingHaystackCounter > 50) { this.eatingHaystackCounter = 0; this.setEatingHaystack(false); } if(this.riddenByEntity instanceof EntityWitherSkeleton) { this.isMounted = true; } else this.isMounted = false; if (this.func_110205_ce() && !this.isAdultHorse() && !this.isEatingHaystack()) { EntityWitherHorse entityhorse = this.getClosestHorse(this, 16.0D); if (entityhorse != null && this.getDistanceSqToEntity(entityhorse) > 4.0D) { this.navigator.getPathToEntityLiving(entityhorse); } } } } /** * returns true if all the conditions for steering the entity are met. For pigs, this is true if it is being ridden * by a player and the player is holding a carrot-on-a-stick */ public boolean canBeSteered() { return this.isMounted; } /** * Called to update the entity's position/logic. */ public void onUpdate() { super.onUpdate(); if (this.worldObj.isRemote && this.dataWatcher.hasObjectChanged()) { this.dataWatcher.func_111144_e(); this.resetTexturePrefix(); } if (this.openMouthCounter > 0 && ++this.openMouthCounter > 30) { this.openMouthCounter = 0; this.setHorseWatchableBoolean(128, false); } if (!this.worldObj.isRemote && this.jumpRearingCounter > 0 && ++this.jumpRearingCounter > 20) { this.jumpRearingCounter = 0; this.setRearing(false); } if (this.field_110278_bp > 0 && ++this.field_110278_bp > { this.field_110278_bp = 0; } if (this.field_110279_bq > 0) { ++this.field_110279_bq; if (this.field_110279_bq > 300) { this.field_110279_bq = 0; } } this.prevHeadLean = this.headLean; if (this.isEatingHaystack()) { this.headLean += (1.0F - this.headLean) * 0.4F + 0.05F; if (this.headLean > 1.0F) { this.headLean = 1.0F; } } else { this.headLean += (0.0F - this.headLean) * 0.4F - 0.05F; if (this.headLean < 0.0F) { this.headLean = 0.0F; } } this.prevRearingAmount = this.rearingAmount; if (this.isRearing()) { this.prevHeadLean = this.headLean = 0.0F; this.rearingAmount += (1.0F - this.rearingAmount) * 0.4F + 0.05F; if (this.rearingAmount > 1.0F) { this.rearingAmount = 1.0F; } } else { this.field_110294_bI = false; this.rearingAmount += (0.8F * this.rearingAmount * this.rearingAmount * this.rearingAmount - this.rearingAmount) * 0.6F - 0.05F; if (this.rearingAmount < 0.0F) { this.rearingAmount = 0.0F; } } this.prevMouthOpenness = this.mouthOpenness; if (this.getHorseWatchableBoolean(128)) { this.mouthOpenness += (1.0F - this.mouthOpenness) * 0.7F + 0.05F; if (this.mouthOpenness > 1.0F) { this.mouthOpenness = 1.0F; } } else { this.mouthOpenness += (0.0F - this.mouthOpenness) * 0.7F - 0.05F; if (this.mouthOpenness < 0.0F) { this.mouthOpenness = 0.0F; } } } private void openHorseMouth() { if (!this.worldObj.isRemote) { this.openMouthCounter = 1; this.setHorseWatchableBoolean(128, true); } } /** * Return true if the horse entity ready to mate. (no rider, not riding, tame, adult, not steril...) */ private boolean canMate() { return this.riddenByEntity == null && this.ridingEntity == null && this.isTame() && this.isAdultHorse() && !this.isSterile() && this.getHealth() >= this.getMaxHealth() && this.isInLove(); } public void setEating(boolean eating) { this.setHorseWatchableBoolean(32, eating); } public void setEatingHaystack(boolean par1) { this.setEating(par1); } public void setRearing(boolean par1) { if (par1) { this.setEatingHaystack(false); } this.setHorseWatchableBoolean(64, par1); } private void makeHorseRear() { if (!this.worldObj.isRemote) { this.jumpRearingCounter = 1; this.setRearing(true); } } public void makeHorseRearWithSound() { this.makeHorseRear(); String s = this.getAngrySoundName(); if (s != null) { this.playSound(s, this.getSoundVolume(), this.getSoundPitch()); } } public void dropChestItems() { this.dropItemsInChest(this, this.horseChest); this.dropChests(); } private void dropItemsInChest(Entity entity, AnimalChest chest) { if (chest != null && !this.worldObj.isRemote) { for (int i = 0; i < chest.getSizeInventory(); ++i) { ItemStack itemstack = chest.getStackInSlot(i); if (itemstack != null) { this.entityDropItem(itemstack, 0.0F); } } } } public boolean setTamedBy(EntityPlayer player) { this.func_152120_b(player.getUniqueID().toString()); this.setHorseTamed(true); return true; } /** * Moves the entity based on the specified heading. Args: strafe, forward */ public void moveEntityWithHeading(float strafe, float forward) { if (this.riddenByEntity != null && this.riddenByEntity instanceof EntityLivingBase && this.isHorseSaddled()) { this.prevRotationYaw = this.rotationYaw = this.riddenByEntity.rotationYaw; this.rotationPitch = this.riddenByEntity.rotationPitch * 0.5F; this.setRotation(this.rotationYaw, this.rotationPitch); this.rotationYawHead = this.renderYawOffset = this.rotationYaw; strafe = ((EntityLivingBase)this.riddenByEntity).moveStrafing * 0.5F; forward = ((EntityLivingBase)this.riddenByEntity).moveForward; if (forward <= 0.0F) { forward *= 0.25F; this.gallopTime = 0; } if (this.onGround && this.jumpPower == 0.0F && this.isRearing() && !this.field_110294_bI) { strafe = 0.0F; forward = 0.0F; } if (this.jumpPower > 0.0F && !this.isHorseJumping() && this.onGround) { this.motionY = this.getHorseJumpStrength() * (double)this.jumpPower; if (this.isPotionActive(Potion.jump)) { this.motionY += (double)((float)(this.getActivePotionEffect(Potion.jump).getAmplifier() + 1) * 0.1F); } this.setHorseJumping(true); this.isAirBorne = true; if (forward > 0.0F) { float f2 = MathHelper.sin(this.rotationYaw * (float)Math.PI / 180.0F); float f3 = MathHelper.cos(this.rotationYaw * (float)Math.PI / 180.0F); this.motionX += (double)(-0.4F * f2 * this.jumpPower); this.motionZ += (double)(0.4F * f3 * this.jumpPower); this.playSound("mob.horse.jump", 0.4F, 1.0F); } this.jumpPower = 0.0F; net.minecraftforge.common.ForgeHooks.onLivingJump(this); } this.stepHeight = 1.0F; this.jumpMovementFactor = this.getAIMoveSpeed() * 0.1F; if (!this.worldObj.isRemote) { this.setAIMoveSpeed((float)this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getAttributeValue()); super.moveEntityWithHeading(strafe, forward); } if (this.onGround) { this.jumpPower = 0.0F; this.setHorseJumping(false); } this.prevLimbSwingAmount = this.limbSwingAmount; double d1 = this.posX - this.prevPosX; double d0 = this.posZ - this.prevPosZ; float f4 = MathHelper.sqrt_double(d1 * d1 + d0 * d0) * 4.0F; if (f4 > 1.0F) { f4 = 1.0F; } this.limbSwingAmount += (f4 - this.limbSwingAmount) * 0.4F; this.limbSwing += this.limbSwingAmount; } else { this.stepHeight = 0.5F; this.jumpMovementFactor = 0.02F; super.moveEntityWithHeading(strafe, forward); } } /** * (abstract) Protected helper method to write subclass entity data to NBT. */ public void writeEntityToNBT(NBTTagCompound tagCompound) { super.writeEntityToNBT(tagCompound); tagCompound.setBoolean("EatingHaystack", this.isEatingHaystack()); tagCompound.setBoolean("ChestedHorse", this.isChested()); tagCompound.setBoolean("HasReproduced", this.getHasReproduced()); tagCompound.setBoolean("Bred", this.func_110205_ce()); tagCompound.setInteger("Type", this.getHorseType()); tagCompound.setInteger("Variant", this.getHorseVariant()); tagCompound.setInteger("Temper", this.getTemper()); tagCompound.setBoolean("Tame", this.isTame()); tagCompound.setString("OwnerUUID", this.func_152119_ch()); if (this.isChested()) { NBTTagList nbttaglist = new NBTTagList(); for (int i = 2; i < this.horseChest.getSizeInventory(); ++i) { ItemStack itemstack = this.horseChest.getStackInSlot(i); if (itemstack != null) { NBTTagCompound nbttagcompound1 = new NBTTagCompound(); nbttagcompound1.setByte("Slot", (byte)i); itemstack.writeToNBT(nbttagcompound1); nbttaglist.appendTag(nbttagcompound1); } } tagCompound.setTag("Items", nbttaglist); } if (this.horseChest.getStackInSlot(1) != null) { tagCompound.setTag("ArmorItem", this.horseChest.getStackInSlot(1).writeToNBT(new NBTTagCompound())); } if (this.horseChest.getStackInSlot(0) != null) { tagCompound.setTag("SaddleItem", this.horseChest.getStackInSlot(0).writeToNBT(new NBTTagCompound())); } } /** * (abstract) Protected helper method to read subclass entity data from NBT. */ public void readEntityFromNBT(NBTTagCompound tagCompund) { super.readEntityFromNBT(tagCompund); this.setEatingHaystack(tagCompund.getBoolean("EatingHaystack")); this.func_110242_l(tagCompund.getBoolean("Bred")); this.setChested(tagCompund.getBoolean("ChestedHorse")); this.setHasReproduced(tagCompund.getBoolean("HasReproduced")); this.setHorseType(tagCompund.getInteger("Type")); this.setHorseVariant(tagCompund.getInteger("Variant")); this.setTemper(tagCompund.getInteger("Temper")); this.setHorseTamed(tagCompund.getBoolean("Tame")); String s = ""; if (tagCompund.hasKey("OwnerUUID", ) { s = tagCompund.getString("OwnerUUID"); } else { String s1 = tagCompund.getString("Owner"); s = PreYggdrasilConverter.func_152719_a(s1); } if (s.length() > 0) { this.func_152120_b(s); } IAttributeInstance iattributeinstance = this.getAttributeMap().getAttributeInstanceByName("Speed"); if (iattributeinstance != null) { this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(iattributeinstance.getBaseValue() * 0.25D); } if (this.isChested()) { NBTTagList nbttaglist = tagCompund.getTagList("Items", 10); this.func_110226_cD(); for (int i = 0; i < nbttaglist.tagCount(); ++i) { NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); int j = nbttagcompound1.getByte("Slot") & 255; if (j >= 2 && j < this.horseChest.getSizeInventory()) { this.horseChest.setInventorySlotContents(j, ItemStack.loadItemStackFromNBT(nbttagcompound1)); } } } ItemStack itemstack; if (tagCompund.hasKey("ArmorItem", 10)) { itemstack = ItemStack.loadItemStackFromNBT(tagCompund.getCompoundTag("ArmorItem")); if (itemstack != null && func_146085_a(itemstack.getItem())) { this.horseChest.setInventorySlotContents(1, itemstack); } } if (tagCompund.hasKey("SaddleItem", 10)) { itemstack = ItemStack.loadItemStackFromNBT(tagCompund.getCompoundTag("SaddleItem")); if (itemstack != null && itemstack.getItem() == Items.saddle) { this.horseChest.setInventorySlotContents(0, itemstack); } } else if (tagCompund.getBoolean("Saddle")) { this.horseChest.setInventorySlotContents(0, new ItemStack(Items.saddle)); } this.func_110232_cE(); } /** * Returns true if the mob is currently able to mate with the specified mob. */ public boolean canMateWith(EntityAnimal otherAnimal) { if (otherAnimal == this) { return false; } else if (otherAnimal.getClass() != this.getClass()) { return false; } else { EntityWitherHorse entityhorse = (EntityWitherHorse)otherAnimal; if (this.canMate() && entityhorse.canMate()) { int i = this.getHorseType(); int j = entityhorse.getHorseType(); return i == j || i == 0 && j == 1 || i == 1 && j == 0; } else { return false; } } } public EntityAgeable createChild(EntityAgeable ageable) { EntityWitherHorse entityhorse = (EntityWitherHorse)ageable; EntityWitherHorse entityhorse1 = new EntityWitherHorse(this.worldObj); int i = this.getHorseType(); int j = entityhorse.getHorseType(); int k = 0; if (i == j) { k = i; } else if (i == 0 && j == 1 || i == 1 && j == 0) { k = 2; } if (k == 0) { int i1 = this.rand.nextInt(9); int l; if (i1 < 4) { l = this.getHorseVariant() & 255; } else if (i1 < { l = entityhorse.getHorseVariant() & 255; } else { l = this.rand.nextInt(7); } int j1 = this.rand.nextInt(5); if (j1 < 2) { l |= this.getHorseVariant() & 65280; } else if (j1 < 4) { l |= entityhorse.getHorseVariant() & 65280; } else { l |= this.rand.nextInt(5) << 8 & 65280; } entityhorse1.setHorseVariant(l); } entityhorse1.setHorseType(k); double d1 = this.getEntityAttribute(SharedMonsterAttributes.maxHealth).getBaseValue() + ageable.getEntityAttribute(SharedMonsterAttributes.maxHealth).getBaseValue() + (double)this.func_110267_cL(); entityhorse1.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(d1 / 3.0D); double d2 = this.getEntityAttribute(horseJumpStrength).getBaseValue() + ageable.getEntityAttribute(horseJumpStrength).getBaseValue() + this.func_110245_cM(); entityhorse1.getEntityAttribute(horseJumpStrength).setBaseValue(d2 / 3.0D); double d0 = this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getBaseValue() + ageable.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getBaseValue() + this.func_110203_cN(); entityhorse1.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(d0 / 3.0D); return entityhorse1; } public IEntityLivingData func_180482_a(DifficultyInstance difficulty, IEntityLivingData entity) { Object p_180482_2_1 = super.func_180482_a(difficulty, entity); boolean flag = false; int i = 0; int l; EntityWitherSkeleton entityskeleton = new EntityWitherSkeleton(this.worldObj); entityskeleton.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, 0.0F); entityskeleton.func_180482_a(difficulty, (IEntityLivingData)null); this.worldObj.spawnEntityInWorld(entityskeleton); entityskeleton.mountEntity(this); this.isMounted = true; //this.setHorseSaddled(true); //this.replaceItemInInventory(0, new ItemStack(Items.saddle)); this.horseChest.setInventorySlotContents(0, new ItemStack(Items.saddle)); this.setHorseTamed(true); if (p_180482_2_1 instanceof EntityWitherHorse.GroupData) { l = ((EntityWitherHorse.GroupData)p_180482_2_1).field_111107_a; i = ((EntityWitherHorse.GroupData)p_180482_2_1).field_111106_b & 255 | this.rand.nextInt(5) << 8; } else { if (this.rand.nextInt(10) == 0) { l = 1; } else { int j = this.rand.nextInt(7); int k = this.rand.nextInt(5); l = 0; i = j | k << 8; } p_180482_2_1 = new EntityWitherHorse.GroupData(l, i); } this.setHorseType(l); this.setHorseVariant(i); if (this.rand.nextInt(5) == 0) { this.setGrowingAge(-24000); } if (l != 4 && l != 3) { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue((double)this.func_110267_cL()); if (l == 0) { this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(this.func_110203_cN()); } else { this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.17499999701976776D); } } else { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(15.0D); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.20000000298023224D); } if (l != 2 && l != 1) { this.getEntityAttribute(horseJumpStrength).setBaseValue(this.func_110245_cM()); } else { this.getEntityAttribute(horseJumpStrength).setBaseValue(0.5D); } this.setHealth(this.getMaxHealth()); return (IEntityLivingData)p_180482_2_1; } @SideOnly(Side.CLIENT) public float getGrassEatingAmount(float par1) { return this.prevHeadLean + (this.headLean - this.prevHeadLean) * par1; } @SideOnly(Side.CLIENT) public float getRearingAmount(float par1) { return this.prevRearingAmount + (this.rearingAmount - this.prevRearingAmount) * par1; } @SideOnly(Side.CLIENT) public float func_110201_q(float par1) { return this.prevMouthOpenness + (this.mouthOpenness - this.prevMouthOpenness) * par1; } public void setJumpPower(int par1) { if (this.isHorseSaddled()) { if (par1 < 0) { par1 = 0; } else { this.field_110294_bI = true; this.makeHorseRear(); } if (par1 >= 90) { this.jumpPower = 1.0F; } else { this.jumpPower = 0.4F + 0.4F * (float)par1 / 90.0F; } } } /** * "Spawns particles for the horse entity. par1 tells whether to spawn hearts. If it is false, it spawns smoke." */ @SideOnly(Side.CLIENT) protected void spawnHorseParticles(boolean par1) { EnumParticleTypes enumparticletypes = par1 ? EnumParticleTypes.HEART : EnumParticleTypes.SMOKE_NORMAL; 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; this.worldObj.spawnParticle(enumparticletypes, this.posX + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, this.posY + 0.5D + (double)(this.rand.nextFloat() * this.height), this.posZ + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, d0, d1, d2, new int[0]); } } @SideOnly(Side.CLIENT) public void handleHealthUpdate(byte par1) { if (par1 == 7) { this.spawnHorseParticles(true); } else if (par1 == 6) { this.spawnHorseParticles(false); } else { super.handleHealthUpdate(par1); } } public void updateRiderPosition() { super.updateRiderPosition(); if (this.prevRearingAmount > 0.0F) { float f = MathHelper.sin(this.renderYawOffset * (float)Math.PI / 180.0F); float f1 = MathHelper.cos(this.renderYawOffset * (float)Math.PI / 180.0F); float f2 = 0.7F * this.prevRearingAmount; float f3 = 0.15F * this.prevRearingAmount; this.riddenByEntity.setPosition(this.posX + (double)(f2 * f), this.posY + this.getMountedYOffset() + this.riddenByEntity.getYOffset() + (double)f3, this.posZ - (double)(f2 * f1)); if (this.riddenByEntity instanceof EntityLivingBase) { ((EntityLivingBase)this.riddenByEntity).renderYawOffset = this.renderYawOffset; } } } private float func_110267_cL() { return 15.0F + (float)this.rand.nextInt( + (float)this.rand.nextInt(9); } private double func_110245_cM() { return 0.4000000059604645D + this.rand.nextDouble() * 0.2D + this.rand.nextDouble() * 0.2D + this.rand.nextDouble() * 0.2D; } private double func_110203_cN() { return (0.44999998807907104D + this.rand.nextDouble() * 0.3D + this.rand.nextDouble() * 0.3D + this.rand.nextDouble() * 0.3D) * 0.25D; } public static boolean func_146085_a(Item item) { return item == Items.iron_horse_armor || item == Items.golden_horse_armor || item == Items.diamond_horse_armor; } /** * returns true if this entity is by a ladder, false otherwise */ public boolean isOnLadder() { return false; } public float getEyeHeight() { return this.height; } public boolean replaceItemInInventory(int par1, ItemStack itemstack) { if (par1 == 499 && this.canCarryChest()) { if (itemstack == null && this.isChested()) { this.setChested(false); this.func_110226_cD(); return true; } if (itemstack != null && itemstack.getItem() == Item.getItemFromBlock(Blocks.chest) && !this.isChested()) { this.setChested(true); this.func_110226_cD(); return true; } } int j = par1 - 400; if (j >= 0 && j < 2 && j < this.horseChest.getSizeInventory()) { if (j == 0 && itemstack != null && itemstack.getItem() != Items.saddle) { return false; } else if (j == 1 && (itemstack != null && !func_146085_a(itemstack.getItem()) || !this.canWearArmor())) { return false; } else { this.horseChest.setInventorySlotContents(j, itemstack); this.func_110232_cE(); return true; } } else { int k = par1 - 500 + 2; if (k >= 2 && k < this.horseChest.getSizeInventory()) { this.horseChest.setInventorySlotContents(k, itemstack); return true; } else { return false; } } } public static class GroupData implements IEntityLivingData { public int field_111107_a; public int field_111106_b; public GroupData(int par1, int par2) { this.field_111107_a = par1; this.field_111106_b = par2; } } } Also when i place an armor in his inventory is not rendering The final problem is that i want to make it controlled by an entity approaching the player (so the horse will move to the player if an entity is mounting him). I've tried doing something similar to the "Carrot on a stick pig logic" but it doesn't worked How can i do this?
-
[1.8] How to generate mushrooms in the world?
JimiIT92 replied to JimiIT92's topic in Modder Support
Since my class is extending BlockMushroom i get this ClassCastError when using WorldGenFlowers java.lang.ClassCastException: hl.blocks.BlockMushroomGlow cannot be cast to net.minecraft.block.BlockFlower -
As by title, how can i generate my custom mushroom in the world the same way vanilla mushroom does? I have this code in my WorldGenMinable class for(int i = 0; i < 1; i++) { int randPosX = x + random.nextInt(16) + 8; int randPosY = random.nextInt(55); int randPosZ = z + random.nextInt(16) + 8; new WorldGenBlockBlob(HLFlowers.mushroomGlow, 0).generate(world, random, new BlockPos(randPosX, randPosY, randPosZ)); } But the mushrooms are generated as ores (also not spawning only underground, they can spawn in overworld or underwater) What should i change?
-
And infact doing this package blaze.world.village; import net.minecraft.world.gen.structure.MapGenVillage; import net.minecraftforge.fml.relauncher.ReflectionHelper; public class MapGenVillageEventHandler extends MapGenNetherVillage { public MapGenVillageEventHandler() { ReflectionHelper.setPrivateValue(MapGenVillage.class, this, Integer.valueOf(16), new String[] { "field_82665_g" }); ReflectionHelper.setPrivateValue(MapGenVillage.class, this, Integer.valueOf(4), new String[] { "field_82666_h" }); } } package blaze.world.village; import java.util.Random; import net.minecraft.world.ChunkCoordIntPair; import net.minecraft.world.chunk.ChunkPrimer; import net.minecraft.world.gen.structure.MapGenVillage; import net.minecraftforge.event.terraingen.InitMapGenEvent.EventType; import net.minecraftforge.event.terraingen.PopulateChunkEvent; import net.minecraftforge.event.terraingen.TerrainGen; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class NetherVillageHandler extends MapGenVillageEventHandler { private MapGenNetherVillage villageGenerator; @SubscribeEvent public void genNetherVillages(PopulateChunkEvent.Pre event) { this.villageGenerator = new MapGenNetherVillage(); villageGenerator = (MapGenNetherVillage) TerrainGen.getModdedMapGen(villageGenerator, EventType.VILLAGE); villageGenerator.func_175792_a(event.chunkProvider, event.world, event.chunkX, event.chunkZ, new ChunkPrimer()); villageGenerator.func_175794_a(event.world, new Random(), new ChunkCoordIntPair(event.chunkX, event.chunkZ)); } } gives this java.lang.ArithmeticException: / by zero at blaze.world.village.MapGenNetherVillage.canSpawnStructureAtCoords(MapGenNetherVillage.java:72) at net.minecraft.world.gen.structure.MapGenStructure.func_180701_a(MapGenStructure.java:43) at net.minecraft.world.gen.MapGenBase.func_175792_a(MapGenBase.java:33) at net.minecraft.world.gen.ChunkProviderGenerate.provideChunk(ChunkProviderGenerate.java:252) at net.minecraft.world.gen.ChunkProviderServer.originalLoadChunk(ChunkProviderServer.java:178) at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:138) at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:108) at net.minecraft.world.gen.ChunkProviderServer.provideChunk(ChunkProviderServer.java:209) at net.minecraft.world.World.getChunkFromChunkCoords(World.java:360) at net.minecraft.world.World.getChunkFromBlockCoords(World.java:349) at net.minecraft.world.World.getBlockState(World.java:901) at net.minecraft.world.World.isAirBlock(World.java:271) at net.minecraft.world.World.getGroundAboveSeaLevel(World.java:247) at net.minecraft.world.WorldProvider.canCoordinateBeSpawn(WorldProvider.java:87) at net.minecraft.world.WorldServer.createSpawnPosition(WorldServer.java:910) at net.minecraft.world.WorldServer.initialize(WorldServer.java:829) at net.minecraft.server.integrated.IntegratedServer.loadAllWorlds(IntegratedServer.java:92) at net.minecraft.server.integrated.IntegratedServer.startServer(IntegratedServer.java:130) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:500) at java.lang.Thread.run(Unknown Source) Called by this this.field_82665_g = MathHelper.parseIntWithDefaultAndMax((String)entry.getValue(), this.field_82665_g, this.field_82666_h + 1); .... int i1 = x / this.field_82665_g; so field_82665_g is equal to 0
-
Ok, so i've tried copy-paste the vanilla village gen code, and now it gives me this error when generating a new world java.lang.ClassCastException: blaze.world.village.MapGenVillageEventHandler cannot be cast to blaze.world.village.MapGenNetherVillage at blaze.world.village.NetherVillageHandler.genNetherVillages(NetherVillageHandler.java:22) at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_9_NetherVillageHandler_genNetherVillages_Pre.invoke(.dynamic) at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:55) at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:138) at net.minecraft.world.gen.ChunkProviderGenerate.populate(ChunkProviderGenerate.java:426) at net.minecraft.world.gen.ChunkProviderServer.populate(ChunkProviderServer.java:292) at net.minecraft.world.chunk.Chunk.populateChunk(Chunk.java:1206) at net.minecraft.world.gen.ChunkProviderServer.originalLoadChunk(ChunkProviderServer.java:196) at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:138) at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:108) at net.minecraft.server.MinecraftServer.initialWorldChunkLoad(MinecraftServer.java:343) at net.minecraft.server.integrated.IntegratedServer.loadAllWorlds(IntegratedServer.java:113) at net.minecraft.server.integrated.IntegratedServer.startServer(IntegratedServer.java:130) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:500) at java.lang.Thread.run(Unknown Source) This error is called from here package blaze.world.village; import java.util.Random; import net.minecraft.world.ChunkCoordIntPair; import net.minecraft.world.chunk.ChunkPrimer; import net.minecraft.world.gen.structure.MapGenVillage; import net.minecraftforge.event.terraingen.InitMapGenEvent.EventType; import net.minecraftforge.event.terraingen.PopulateChunkEvent; import net.minecraftforge.event.terraingen.TerrainGen; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class NetherVillageHandler { private MapGenNetherVillage villageGenerator; @SubscribeEvent public void genNetherVillages(PopulateChunkEvent.Pre event) { this.villageGenerator = new MapGenNetherVillage(); villageGenerator = (MapGenNetherVillage) TerrainGen.getModdedMapGen(villageGenerator, EventType.VILLAGE); //THIS LINE THROW THE ERROR! villageGenerator.func_175792_a(event.chunkProvider, event.world, event.chunkX, event.chunkZ, new ChunkPrimer()); villageGenerator.func_175794_a(event.world, new Random(), new ChunkCoordIntPair(event.chunkX, event.chunkZ)); } } What i've done is creating this class package blaze.world.village; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Random; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.gen.structure.MapGenVillage; import net.minecraft.world.gen.structure.StructureComponent; import net.minecraft.world.gen.structure.StructureStart; public class MapGenNetherVillage extends MapGenVillage { /** A list of all the biomes villages can spawn in. */ public static List villageSpawnBiomes = Arrays.asList(new BiomeGenBase[] {BiomeGenBase.hell}); /** World terrain type, 0 for normal, 1 for flat map */ private int terrainType; private int field_82665_g; private int field_82666_h; public MapGenNetherVillage() { super(); } public MapGenNetherVillage(Map map) { this(); Iterator iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Entry entry = (Entry)iterator.next(); if (((String)entry.getKey()).equals("size")) { this.terrainType = MathHelper.parseIntWithDefaultAndMax((String)entry.getValue(), this.terrainType, 0); } else if (((String)entry.getKey()).equals("distance")) { this.field_82665_g = MathHelper.parseIntWithDefaultAndMax((String)entry.getValue(), this.field_82665_g, this.field_82666_h + 1); } } } public String getStructureName() { return "NetherVillage"; } protected boolean canSpawnStructureAtCoords(int x, int z) { int k = x; int l = z; if (x < 0) { x -= this.field_82665_g - 1; } if (z < 0) { z -= this.field_82665_g - 1; } int i1 = x / this.field_82665_g; int j1 = z / this.field_82665_g; Random random = this.worldObj.setRandomSeed(i1, j1, 10387312); i1 *= this.field_82665_g; j1 *= this.field_82665_g; i1 += random.nextInt(this.field_82665_g - this.field_82666_h); j1 += random.nextInt(this.field_82665_g - this.field_82666_h); if (k == i1 && l == j1) { boolean flag = this.worldObj.getWorldChunkManager().areBiomesViable(k * 16 + 8, l * 16 + 8, 0, villageSpawnBiomes); if (flag) { return true; } } return false; } protected StructureStart getStructureStart(int x, int z) { return new MapGenNetherVillage.Start(this.worldObj, this.rand, x, z, this.terrainType); } public static class Start extends StructureStart { /** well ... thats what it does */ private boolean hasMoreThanTwoComponents; public Start() {} public Start(World worldIn, Random random, int par3, int par4, int par5) { super(par3, par4); List list = StructureNetherVillagePieces.getStructureVillageWeightedPieceList(random, par5); StructureNetherVillagePieces.Start start = new StructureNetherVillagePieces.Start(worldIn.getWorldChunkManager(), 0, random, (par3 << 4) + 2, (par4 << 4) + 2, list, par5); this.components.add(start); start.buildComponent(start, this.components, random); List list1 = start.field_74930_j; List list2 = start.field_74932_i; int l; while (!list1.isEmpty() || !list2.isEmpty()) { StructureComponent structurecomponent; if (list1.isEmpty()) { l = random.nextInt(list2.size()); structurecomponent = (StructureComponent)list2.remove(l); structurecomponent.buildComponent(start, this.components, random); } else { l = random.nextInt(list1.size()); structurecomponent = (StructureComponent)list1.remove(l); structurecomponent.buildComponent(start, this.components, random); } } this.updateBoundingBox(); l = 0; Iterator iterator = this.components.iterator(); while (iterator.hasNext()) { StructureComponent structurecomponent1 = (StructureComponent)iterator.next(); if (!(structurecomponent1 instanceof StructureNetherVillagePieces.Road)) { ++l; } } this.hasMoreThanTwoComponents = l > 2; } /** * currently only defined for Villages, returns true if Village has more than 2 non-road components */ public boolean isSizeableStructure() { return this.hasMoreThanTwoComponents; } public void func_143022_a(NBTTagCompound nbtt) { super.func_143022_a(nbtt); nbtt.setBoolean("Valid", this.hasMoreThanTwoComponents); } public void func_143017_b(NBTTagCompound nbtt) { super.func_143017_b(nbtt); this.hasMoreThanTwoComponents = nbtt.getBoolean("Valid"); } } } and this class package blaze.world.village; import static net.minecraftforge.common.ChestGenHooks.VILLAGE_BLACKSMITH; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Random; import com.google.common.collect.Lists; import net.minecraft.block.Block; import net.minecraft.block.BlockSandStone; import net.minecraft.block.BlockStairs; import net.minecraft.block.BlockTorch; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.IEntityLivingData; import net.minecraft.entity.passive.EntityVillager; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.EnumDyeColor; import net.minecraft.item.Item; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.MathHelper; import net.minecraft.util.WeightedRandomChestContent; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.biome.WorldChunkManager; import net.minecraft.world.gen.structure.MapGenStructureIO; import net.minecraft.world.gen.structure.MapGenVillage; import net.minecraft.world.gen.structure.StructureBoundingBox; import net.minecraft.world.gen.structure.StructureComponent; import net.minecraft.world.gen.structure.StructureVillagePieces; import net.minecraftforge.common.ChestGenHooks; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.terraingen.BiomeEvent; import net.minecraftforge.fml.common.eventhandler.Event.Result; public class StructureNetherVillagePieces extends StructureVillagePieces { public static void registerVillagePieces() { MapGenStructureIO.registerStructureComponent(StructureNetherVillagePieces.House1.class, "ViBH"); MapGenStructureIO.registerStructureComponent(StructureNetherVillagePieces.Field1.class, "ViDF"); MapGenStructureIO.registerStructureComponent(StructureNetherVillagePieces.Field2.class, "ViF"); MapGenStructureIO.registerStructureComponent(StructureNetherVillagePieces.Torch.class, "ViL"); MapGenStructureIO.registerStructureComponent(StructureNetherVillagePieces.Hall.class, "ViPH"); MapGenStructureIO.registerStructureComponent(StructureNetherVillagePieces.House4Garden.class, "ViSH"); MapGenStructureIO.registerStructureComponent(StructureNetherVillagePieces.WoodHut.class, "ViSmH"); MapGenStructureIO.registerStructureComponent(StructureNetherVillagePieces.Church.class, "ViST"); MapGenStructureIO.registerStructureComponent(StructureNetherVillagePieces.House2.class, "ViS"); MapGenStructureIO.registerStructureComponent(StructureNetherVillagePieces.Start.class, "ViStart"); MapGenStructureIO.registerStructureComponent(StructureNetherVillagePieces.Path.class, "ViSR"); MapGenStructureIO.registerStructureComponent(StructureNetherVillagePieces.House3.class, "ViTRH"); MapGenStructureIO.registerStructureComponent(StructureNetherVillagePieces.Well.class, "ViW"); } public static List getStructureVillageWeightedPieceList(Random random, int par2) { ArrayList arraylist = Lists.newArrayList(); arraylist.add(new StructureNetherVillagePieces.PieceWeight(StructureNetherVillagePieces.House4Garden.class, 4, MathHelper.getRandomIntegerInRange(random, 2 + par2, 4 + par2 * 2))); arraylist.add(new StructureNetherVillagePieces.PieceWeight(StructureNetherVillagePieces.Church.class, 20, MathHelper.getRandomIntegerInRange(random, 0 + par2, 1 + par2))); arraylist.add(new StructureNetherVillagePieces.PieceWeight(StructureNetherVillagePieces.House1.class, 20, MathHelper.getRandomIntegerInRange(random, 0 + par2, 2 + par2))); arraylist.add(new StructureNetherVillagePieces.PieceWeight(StructureNetherVillagePieces.WoodHut.class, 3, MathHelper.getRandomIntegerInRange(random, 2 + par2, 5 + par2 * 3))); arraylist.add(new StructureNetherVillagePieces.PieceWeight(StructureNetherVillagePieces.Hall.class, 15, MathHelper.getRandomIntegerInRange(random, 0 + par2, 2 + par2))); arraylist.add(new StructureNetherVillagePieces.PieceWeight(StructureNetherVillagePieces.Field1.class, 3, MathHelper.getRandomIntegerInRange(random, 1 + par2, 4 + par2))); arraylist.add(new StructureNetherVillagePieces.PieceWeight(StructureNetherVillagePieces.Field2.class, 3, MathHelper.getRandomIntegerInRange(random, 2 + par2, 4 + par2 * 2))); arraylist.add(new StructureNetherVillagePieces.PieceWeight(StructureNetherVillagePieces.House2.class, 15, MathHelper.getRandomIntegerInRange(random, 0, 1 + par2))); arraylist.add(new StructureNetherVillagePieces.PieceWeight(StructureNetherVillagePieces.House3.class, 8, MathHelper.getRandomIntegerInRange(random, 0 + par2, 3 + par2 * 2))); net.minecraftforge.fml.common.registry.VillagerRegistry.addExtraVillageComponents(arraylist, random, par2); Iterator iterator = arraylist.iterator(); while (iterator.hasNext()) { if (((StructureNetherVillagePieces.PieceWeight)iterator.next()).villagePiecesLimit == 0) { iterator.remove(); } } return arraylist; } private static int func_75079_a(List list) { boolean flag = false; int i = 0; StructureNetherVillagePieces.PieceWeight pieceweight; for (Iterator iterator = list.iterator(); iterator.hasNext(); i += pieceweight.villagePieceWeight) { pieceweight = (StructureNetherVillagePieces.PieceWeight)iterator.next(); if (pieceweight.villagePiecesLimit > 0 && pieceweight.villagePiecesSpawned < pieceweight.villagePiecesLimit) { flag = true; } } return flag ? i : -1; } private static StructureNetherVillagePieces.Village func_176065_a(StructureNetherVillagePieces.Start start, StructureNetherVillagePieces.PieceWeight weight, List list, Random random, int par4, int par5, int par6, EnumFacing side, int par8) { Class oclass = weight.villagePieceClass; Object object = null; if (oclass == StructureNetherVillagePieces.House4Garden.class) { object = StructureNetherVillagePieces.House4Garden.func_175858_a(start, list, random, par4, par5, par6, side, par8); } else if (oclass == StructureNetherVillagePieces.Church.class) { object = StructureNetherVillagePieces.Church.func_175854_a(start, list, random, par4, par5, par6, side, par8); } else if (oclass == StructureNetherVillagePieces.House1.class) { object = StructureNetherVillagePieces.House1.func_175850_a(start, list, random, par4, par5, par6, side, par8); } else if (oclass == StructureNetherVillagePieces.WoodHut.class) { object = StructureNetherVillagePieces.WoodHut.func_175853_a(start, list, random, par4, par5, par6, side, par8); } else if (oclass == StructureNetherVillagePieces.Hall.class) { object = StructureNetherVillagePieces.Hall.func_175857_a(start, list, random, par4, par5, par6, side, par8); } else if (oclass == StructureNetherVillagePieces.Field1.class) { object = StructureNetherVillagePieces.Field1.func_175851_a(start, list, random, par4, par5, par6, side, par8); } else if (oclass == StructureNetherVillagePieces.Field2.class) { object = StructureNetherVillagePieces.Field2.func_175852_a(start, list, random, par4, par5, par6, side, par8); } else if (oclass == StructureNetherVillagePieces.House2.class) { object = StructureNetherVillagePieces.House2.func_175855_a(start, list, random, par4, par5, par6, side, par8); } else if (oclass == StructureNetherVillagePieces.House3.class) { object = StructureNetherVillagePieces.House3.func_175849_a(start, list, random, par4, par5, par6, side, par8); } /*else { object = net.minecraftforge.fml.common.registry.VillagerRegistry.getVillageComponent((StructureVillagePieces.PieceWeight)p_176065_1_, p_176065_0_ , p_176065_2_, p_176065_3_, p_176065_4_, p_176065_5_, p_176065_6_, p_176065_7_, p_176065_8_); }*/ //THIS RETURNS ME AN ERROR return (StructureNetherVillagePieces.Village)object; } private static StructureNetherVillagePieces.Village func_176067_c(StructureNetherVillagePieces.Start start, List list, Random random, int par3, int par4, int par5, EnumFacing side, int par7) { int i1 = func_75079_a(start.structureVillageWeightedPieceList); if (i1 <= 0) { return null; } else { int j1 = 0; while (j1 < 5) { ++j1; int k1 = random.nextInt(i1); Iterator iterator = start.structureVillageWeightedPieceList.iterator(); while (iterator.hasNext()) { StructureNetherVillagePieces.PieceWeight pieceweight = (StructureNetherVillagePieces.PieceWeight)iterator.next(); k1 -= pieceweight.villagePieceWeight; if (k1 < 0) { if (!pieceweight.canSpawnMoreVillagePiecesOfType(par7) || pieceweight == start.structVillagePieceWeight && start.structureVillageWeightedPieceList.size() > 1) { break; } StructureNetherVillagePieces.Village village = func_176065_a(start, pieceweight, list, random, par3, par4, par5, side, par7); if (village != null) { ++pieceweight.villagePiecesSpawned; start.structVillagePieceWeight = pieceweight; if (!pieceweight.canSpawnMoreVillagePieces()) { start.structureVillageWeightedPieceList.remove(pieceweight); } return village; } } } } StructureBoundingBox structureboundingbox = StructureNetherVillagePieces.Torch.func_175856_a(start, list, random, par3, par4, par5, side); if (structureboundingbox != null) { return new StructureNetherVillagePieces.Torch(start, par7, random, structureboundingbox, side); } else { return null; } } } private static StructureComponent func_176066_d(StructureNetherVillagePieces.Start start, List list, Random random, int par3, int par4, int par5, EnumFacing side, int par7) { if (par7 > 50) { return null; } else if (Math.abs(par3 - start.getBoundingBox().minX) <= 112 && Math.abs(par5 - start.getBoundingBox().minZ) <= 112) { StructureNetherVillagePieces.Village village = func_176067_c(start, list, random, par3, par4, par5, side, par7 + 1); if (village != null) { int i1 = (village.getBoundingBox().minX + village.getBoundingBox().maxX) / 2; int j1 = (village.getBoundingBox().minZ + village.getBoundingBox().maxZ) / 2; int k1 = village.getBoundingBox().maxX - village.getBoundingBox().minX; int l1 = village.getBoundingBox().maxZ - village.getBoundingBox().minZ; int i2 = k1 > l1 ? k1 : l1; if (start.getWorldChunkManager().areBiomesViable(i1, j1, i2 / 2 + 4, MapGenVillage.villageSpawnBiomes)) { list.add(village); start.field_74932_i.add(village); return village; } } return null; } else { return null; } } private static StructureComponent func_176069_e(StructureNetherVillagePieces.Start start, List list, Random random, int par3, int par4, int par5, EnumFacing side, int par7) { if (par7 > 3 + start.terrainType) { return null; } else if (Math.abs(par3 - start.getBoundingBox().minX) <= 112 && Math.abs(par5 - start.getBoundingBox().minZ) <= 112) { StructureBoundingBox structureboundingbox = StructureNetherVillagePieces.Path.func_175848_a(start, list, random, par3, par4, par5, side); if (structureboundingbox != null && structureboundingbox.minY > 10) { StructureNetherVillagePieces.Path path = new StructureNetherVillagePieces.Path(start, par7, random, structureboundingbox, side); int i1 = (path.getBoundingBox().minX + path.getBoundingBox().maxX) / 2; int j1 = (path.getBoundingBox().minZ + path.getBoundingBox().maxZ) / 2; int k1 = path.getBoundingBox().maxX - path.getBoundingBox().minX; int l1 = path.getBoundingBox().maxZ - path.getBoundingBox().minZ; int i2 = k1 > l1 ? k1 : l1; if (start.getWorldChunkManager().areBiomesViable(i1, j1, i2 / 2 + 4, MapGenVillage.villageSpawnBiomes)) { list.add(path); start.field_74930_j.add(path); return path; } } return null; } else { return null; } } public static class Church extends StructureNetherVillagePieces.Village { public Church() {} public Church(StructureNetherVillagePieces.Start start, int par2, Random random, StructureBoundingBox box, EnumFacing side) { super(start, par2); this.coordBaseMode = side; this.boundingBox = box; } public static StructureNetherVillagePieces.Church func_175854_a(StructureNetherVillagePieces.Start p_175854_0_, List p_175854_1_, Random p_175854_2_, int p_175854_3_, int p_175854_4_, int p_175854_5_, EnumFacing p_175854_6_, int p_175854_7_) { StructureBoundingBox structureboundingbox = StructureBoundingBox.func_175897_a(p_175854_3_, p_175854_4_, p_175854_5_, 0, 0, 0, 5, 12, 9, p_175854_6_); return canVillageGoDeeper(structureboundingbox) && StructureComponent.findIntersecting(p_175854_1_, structureboundingbox) == null ? new StructureNetherVillagePieces.Church(p_175854_0_, p_175854_7_, p_175854_2_, structureboundingbox, p_175854_6_) : null; } /** * second Part of Structure generating, this for example places Spiderwebs, Mob Spawners, it closes * Mineshafts at the end, it adds Fences... */ public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox box) { if (this.field_143015_k < 0) { this.field_143015_k = this.getAverageGroundLevel(worldIn, box); System.out.println("GROUND: " +this.field_143015_k); //TEST PRINT TO SEE WHAT GROUND LEVEL CALCULATES if (this.field_143015_k < 0) { return true; } this.boundingBox.offset(0, this.field_143015_k - this.boundingBox.maxY + 12 - 1, 0); } this.func_175804_a(worldIn, box, 1, 1, 1, 3, 3, 7, Blocks.air.getDefaultState(), Blocks.air.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 5, 1, 3, 9, 3, Blocks.air.getDefaultState(), Blocks.air.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 0, 0, 3, 0, 8, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 1, 0, 3, 10, 0, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 1, 1, 0, 10, 3, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 4, 1, 1, 4, 10, 3, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 0, 4, 0, 4, 7, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 4, 0, 4, 4, 4, 7, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 1, 8, 3, 4, 8, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 5, 4, 3, 10, 4, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 5, 5, 3, 5, 7, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 9, 0, 4, 9, 4, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 4, 0, 4, 4, 4, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 0, 11, 2, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 4, 11, 2, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 2, 11, 0, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 2, 11, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 1, 1, 6, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 1, 1, 7, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 2, 1, 7, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 3, 1, 6, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 3, 1, 7, box); this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.nether_brick_stairs, 3)), 1, 1, 5, box); this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.nether_brick_stairs, 3)), 2, 1, 6, box); this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.nether_brick_stairs, 3)), 3, 1, 5, box); this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.nether_brick_stairs, 1)), 1, 2, 7, box); this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.nether_brick_stairs, 0)), 3, 2, 7, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 0, 2, 2, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 0, 3, 2, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 4, 2, 2, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 4, 3, 2, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 0, 6, 2, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 0, 7, 2, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 4, 6, 2, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 4, 7, 2, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 2, 6, 0, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 2, 7, 0, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 2, 6, 4, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 2, 7, 4, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 0, 3, 6, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 4, 3, 6, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 2, 3, 8, box); this.func_175811_a(worldIn, Blocks.torch.getDefaultState().withProperty(BlockTorch.FACING, this.coordBaseMode.getOpposite()), 2, 4, 7, box); this.func_175811_a(worldIn, Blocks.torch.getDefaultState().withProperty(BlockTorch.FACING, this.coordBaseMode.rotateY()), 1, 4, 6, box); this.func_175811_a(worldIn, Blocks.torch.getDefaultState().withProperty(BlockTorch.FACING, this.coordBaseMode.rotateYCCW()), 3, 4, 6, box); this.func_175811_a(worldIn, Blocks.torch.getDefaultState().withProperty(BlockTorch.FACING, this.coordBaseMode), 2, 4, 5, box); int i = this.getMetadataWithOffset(Blocks.ladder, 4); int j; for (j = 1; j <= 9; ++j) { this.func_175811_a(worldIn, Blocks.ladder.getStateFromMeta(i), 3, j, 3, box); } this.func_175811_a(worldIn, Blocks.air.getDefaultState(), 2, 1, 0, box); this.func_175811_a(worldIn, Blocks.air.getDefaultState(), 2, 2, 0, box); this.func_175810_a(worldIn, box, random, 2, 1, 0, EnumFacing.getHorizontal(this.getMetadataWithOffset(Blocks.oak_door, 1))); if (this.func_175807_a(worldIn, 2, 0, -1, box).getBlock().getMaterial() == Material.air && this.func_175807_a(worldIn, 2, -1, -1, box).getBlock().getMaterial() != Material.air) { this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.nether_brick_stairs, 3)), 2, 0, -1, box); } for (j = 0; j < 9; ++j) { for (int k = 0; k < 5; ++k) { this.clearCurrentPositionBlocksUpwards(worldIn, k, 12, j, box); this.func_175808_b(worldIn, Blocks.nether_brick.getDefaultState(), k, -1, j, box); } } this.spawnVillagers(worldIn, box, 2, 1, 2, 1); return true; } protected int func_180779_c(int par1, int par2) { return 2; } } public static class Field1 extends StructureNetherVillagePieces.Village { /** First crop type for this field. */ private Block cropTypeA; /** Second crop type for this field. */ private Block cropTypeB; /** Third crop type for this field. */ private Block cropTypeC; /** Fourth crop type for this field. */ private Block cropTypeD; public Field1() {} public Field1(StructureNetherVillagePieces.Start start, int par2, Random random, StructureBoundingBox box, EnumFacing side) { super(start, par2); this.coordBaseMode = side; this.boundingBox = box; this.cropTypeA = this.func_151559_a(random); this.cropTypeB = this.func_151559_a(random); this.cropTypeC = this.func_151559_a(random); this.cropTypeD = this.func_151559_a(random); } /** * (abstract) Helper method to write subclass data to NBT */ protected void writeStructureToNBT(NBTTagCompound nbtt) { super.writeStructureToNBT(nbtt); nbtt.setInteger("CA", Block.blockRegistry.getIDForObject(this.cropTypeA)); nbtt.setInteger("CB", Block.blockRegistry.getIDForObject(this.cropTypeB)); nbtt.setInteger("CC", Block.blockRegistry.getIDForObject(this.cropTypeC)); nbtt.setInteger("CD", Block.blockRegistry.getIDForObject(this.cropTypeD)); } /** * (abstract) Helper method to read subclass data from NBT */ protected void readStructureFromNBT(NBTTagCompound nbtt) { super.readStructureFromNBT(nbtt); this.cropTypeA = Block.getBlockById(nbtt.getInteger("CA")); this.cropTypeB = Block.getBlockById(nbtt.getInteger("CB")); this.cropTypeC = Block.getBlockById(nbtt.getInteger("CC")); this.cropTypeD = Block.getBlockById(nbtt.getInteger("CD")); } private Block func_151559_a(Random random) { switch (random.nextInt(5)) { case 0: return Blocks.nether_wart; case 1: return Blocks.nether_wart; default: return Blocks.nether_wart; } } public static StructureNetherVillagePieces.Field1 func_175851_a(StructureNetherVillagePieces.Start start, List list, Random random, int par3, int par4, int par5, EnumFacing side, int par7) { StructureBoundingBox structureboundingbox = StructureBoundingBox.func_175897_a(par3, par4, par5, 0, 0, 0, 13, 4, 9, side); return canVillageGoDeeper(structureboundingbox) && StructureComponent.findIntersecting(list, structureboundingbox) == null ? new StructureNetherVillagePieces.Field1(start, par7, random, structureboundingbox, side) : null; } /** * second Part of Structure generating, this for example places Spiderwebs, Mob Spawners, it closes * Mineshafts at the end, it adds Fences... */ public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox box) { if (this.field_143015_k < 0) { this.field_143015_k = this.getAverageGroundLevel(worldIn, box); if (this.field_143015_k < 0) { return true; } this.boundingBox.offset(0, this.field_143015_k - this.boundingBox.maxY + 4 - 1, 0); } this.func_175804_a(worldIn, box, 0, 1, 0, 12, 4, 8, Blocks.air.getDefaultState(), Blocks.air.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 0, 1, 2, 0, 7, Blocks.soul_sand.getDefaultState(), Blocks.soul_sand.getDefaultState(), false); this.func_175804_a(worldIn, box, 4, 0, 1, 5, 0, 7, Blocks.soul_sand.getDefaultState(), Blocks.soul_sand.getDefaultState(), false); this.func_175804_a(worldIn, box, 7, 0, 1, 8, 0, 7, Blocks.soul_sand.getDefaultState(), Blocks.soul_sand.getDefaultState(), false); this.func_175804_a(worldIn, box, 10, 0, 1, 11, 0, 7, Blocks.soul_sand.getDefaultState(), Blocks.soul_sand.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 0, 0, 0, 0, 8, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); this.func_175804_a(worldIn, box, 6, 0, 0, 6, 0, 8, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); this.func_175804_a(worldIn, box, 12, 0, 0, 12, 0, 8, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 0, 0, 11, 0, 0, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 0, 8, 11, 0, 8, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); this.func_175804_a(worldIn, box, 3, 0, 1, 3, 0, 7, Blocks.lava.getDefaultState(), Blocks.lava.getDefaultState(), false); this.func_175804_a(worldIn, box, 9, 0, 1, 9, 0, 7, Blocks.lava.getDefaultState(), Blocks.lava.getDefaultState(), false); int i; for (i = 1; i <= 7; ++i) { this.func_175811_a(worldIn, this.cropTypeA.getStateFromMeta(MathHelper.getRandomIntegerInRange(random, 2, 7)), 1, 1, i, box); this.func_175811_a(worldIn, this.cropTypeA.getStateFromMeta(MathHelper.getRandomIntegerInRange(random, 2, 7)), 2, 1, i, box); this.func_175811_a(worldIn, this.cropTypeB.getStateFromMeta(MathHelper.getRandomIntegerInRange(random, 2, 7)), 4, 1, i, box); this.func_175811_a(worldIn, this.cropTypeB.getStateFromMeta(MathHelper.getRandomIntegerInRange(random, 2, 7)), 5, 1, i, box); this.func_175811_a(worldIn, this.cropTypeC.getStateFromMeta(MathHelper.getRandomIntegerInRange(random, 2, 7)), 7, 1, i, box); this.func_175811_a(worldIn, this.cropTypeC.getStateFromMeta(MathHelper.getRandomIntegerInRange(random, 2, 7)), 8, 1, i, box); this.func_175811_a(worldIn, this.cropTypeD.getStateFromMeta(MathHelper.getRandomIntegerInRange(random, 2, 7)), 10, 1, i, box); this.func_175811_a(worldIn, this.cropTypeD.getStateFromMeta(MathHelper.getRandomIntegerInRange(random, 2, 7)), 11, 1, i, box); } for (i = 0; i < 9; ++i) { for (int j = 0; j < 13; ++j) { this.clearCurrentPositionBlocksUpwards(worldIn, j, 4, i, box); this.func_175808_b(worldIn, Blocks.netherrack.getDefaultState(), j, -1, i, box); } } return true; } } public static class Field2 extends StructureNetherVillagePieces.Village { /** First crop type for this field. */ private Block cropTypeA; /** Second crop type for this field. */ private Block cropTypeB; public Field2() {} public Field2(StructureNetherVillagePieces.Start start, int par2, Random random, StructureBoundingBox box, EnumFacing side) { super(start, par2); this.coordBaseMode = side; this.boundingBox = box; this.cropTypeA = this.func_151560_a(random); this.cropTypeB = this.func_151560_a(random); } /** * (abstract) Helper method to write subclass data to NBT */ protected void writeStructureToNBT(NBTTagCompound nbtt) { super.writeStructureToNBT(nbtt); nbtt.setInteger("CA", Block.blockRegistry.getIDForObject(this.cropTypeA)); nbtt.setInteger("CB", Block.blockRegistry.getIDForObject(this.cropTypeB)); } /** * (abstract) Helper method to read subclass data from NBT */ protected void readStructureFromNBT(NBTTagCompound nbtt) { super.readStructureFromNBT(nbtt); this.cropTypeA = Block.getBlockById(nbtt.getInteger("CA")); this.cropTypeB = Block.getBlockById(nbtt.getInteger("CB")); } private Block func_151560_a(Random random) { switch (random.nextInt(5)) { case 0: return Blocks.nether_wart; case 1: return Blocks.nether_wart; default: return Blocks.nether_wart; } } public static StructureNetherVillagePieces.Field2 func_175852_a(StructureNetherVillagePieces.Start start, List list, Random random, int par3, int par4, int par5, EnumFacing side, int par7) { StructureBoundingBox structureboundingbox = StructureBoundingBox.func_175897_a(par3, par4, par5, 0, 0, 0, 7, 4, 9, side); return canVillageGoDeeper(structureboundingbox) && StructureComponent.findIntersecting(list, structureboundingbox) == null ? new StructureNetherVillagePieces.Field2(start, par7, random, structureboundingbox, side) : null; } /** * second Part of Structure generating, this for example places Spiderwebs, Mob Spawners, it closes * Mineshafts at the end, it adds Fences... */ public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox box) { if (this.field_143015_k < 0) { this.field_143015_k = this.getAverageGroundLevel(worldIn, box); if (this.field_143015_k < 0) { return true; } this.boundingBox.offset(0, this.field_143015_k - this.boundingBox.maxY + 4 - 1, 0); } this.func_175804_a(worldIn, box, 0, 1, 0, 6, 4, 8, Blocks.air.getDefaultState(), Blocks.air.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 0, 1, 2, 0, 7, Blocks.soul_sand.getDefaultState(), Blocks.soul_sand.getDefaultState(), false); this.func_175804_a(worldIn, box, 4, 0, 1, 5, 0, 7, Blocks.soul_sand.getDefaultState(), Blocks.soul_sand.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 0, 0, 0, 0, 8, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); this.func_175804_a(worldIn, box, 6, 0, 0, 6, 0, 8, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 0, 0, 5, 0, 0, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 0, 8, 5, 0, 8, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); this.func_175804_a(worldIn, box, 3, 0, 1, 3, 0, 7, Blocks.lava.getDefaultState(), Blocks.lava.getDefaultState(), false); int i; for (i = 1; i <= 7; ++i) { this.func_175811_a(worldIn, this.cropTypeA.getStateFromMeta(MathHelper.getRandomIntegerInRange(random, 2, 7)), 1, 1, i, box); this.func_175811_a(worldIn, this.cropTypeA.getStateFromMeta(MathHelper.getRandomIntegerInRange(random, 2, 7)), 2, 1, i, box); this.func_175811_a(worldIn, this.cropTypeB.getStateFromMeta(MathHelper.getRandomIntegerInRange(random, 2, 7)), 4, 1, i, box); this.func_175811_a(worldIn, this.cropTypeB.getStateFromMeta(MathHelper.getRandomIntegerInRange(random, 2, 7)), 5, 1, i, box); } for (i = 0; i < 9; ++i) { for (int j = 0; j < 7; ++j) { this.clearCurrentPositionBlocksUpwards(worldIn, j, 4, i, box); this.func_175808_b(worldIn, Blocks.netherrack.getDefaultState(), j, -1, i, box); } } return true; } } public static class Hall extends StructureNetherVillagePieces.Village { public Hall() {} public Hall(StructureNetherVillagePieces.Start start, int par2, Random random, StructureBoundingBox box, EnumFacing side) { super(start, par2); this.coordBaseMode = side; this.boundingBox = box; } public static StructureNetherVillagePieces.Hall func_175857_a(StructureNetherVillagePieces.Start p_175857_0_, List p_175857_1_, Random p_175857_2_, int p_175857_3_, int p_175857_4_, int p_175857_5_, EnumFacing p_175857_6_, int p_175857_7_) { StructureBoundingBox structureboundingbox = StructureBoundingBox.func_175897_a(p_175857_3_, p_175857_4_, p_175857_5_, 0, 0, 0, 9, 7, 11, p_175857_6_); return canVillageGoDeeper(structureboundingbox) && StructureComponent.findIntersecting(p_175857_1_, structureboundingbox) == null ? new StructureNetherVillagePieces.Hall(p_175857_0_, p_175857_7_, p_175857_2_, structureboundingbox, p_175857_6_) : null; } /** * second Part of Structure generating, this for example places Spiderwebs, Mob Spawners, it closes * Mineshafts at the end, it adds Fences... */ public boolean addComponentParts(World worldIn, Random par2, StructureBoundingBox box) { if (this.field_143015_k < 0) { this.field_143015_k = this.getAverageGroundLevel(worldIn, box); if (this.field_143015_k < 0) { return true; } this.boundingBox.offset(0, this.field_143015_k - this.boundingBox.maxY + 7 - 1, 0); } this.func_175804_a(worldIn, box, 1, 1, 1, 7, 4, 4, Blocks.air.getDefaultState(), Blocks.air.getDefaultState(), false); this.func_175804_a(worldIn, box, 2, 1, 6, 8, 4, 10, Blocks.air.getDefaultState(), Blocks.air.getDefaultState(), false); this.func_175804_a(worldIn, box, 2, 0, 6, 8, 0, 10, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 6, 0, 6, box); this.func_175804_a(worldIn, box, 2, 1, 6, 2, 1, 10, Blocks.nether_brick_fence.getDefaultState(), Blocks.nether_brick_fence.getDefaultState(), false); this.func_175804_a(worldIn, box, 8, 1, 6, 8, 1, 10, Blocks.nether_brick_fence.getDefaultState(), Blocks.nether_brick_fence.getDefaultState(), false); this.func_175804_a(worldIn, box, 3, 1, 10, 7, 1, 10, Blocks.nether_brick_fence.getDefaultState(), Blocks.nether_brick_fence.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 0, 1, 7, 0, 4, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 0, 0, 0, 3, 5, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 8, 0, 0, 8, 3, 5, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 0, 0, 7, 1, 0, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 0, 5, 7, 1, 5, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 2, 0, 7, 3, 0, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 2, 5, 7, 3, 5, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 4, 1, 8, 4, 1, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 4, 4, 8, 4, 4, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 5, 2, 8, 5, 3, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 0, 4, 2, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 0, 4, 3, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 8, 4, 2, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 8, 4, 3, box); int i = this.getMetadataWithOffset(Blocks.nether_brick_stairs, 3); int j = this.getMetadataWithOffset(Blocks.nether_brick_stairs, 2); int k; int l; for (k = -1; k <= 2; ++k) { for (l = 0; l <= 8; ++l) { this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(i), l, 4 + k, k, box); this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(j), l, 4 + k, 5 - k, box); } } this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 0, 2, 1, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 0, 2, 4, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 8, 2, 1, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 8, 2, 4, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 0, 2, 2, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 0, 2, 3, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 8, 2, 2, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 8, 2, 3, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 2, 2, 5, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 3, 2, 5, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 5, 2, 0, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 6, 2, 5, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 2, 1, 3, box); this.func_175811_a(worldIn, Blocks.stone_pressure_plate.getDefaultState(), 2, 2, 3, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 1, 1, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.nether_brick_stairs, 3)), 2, 1, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.nether_brick_stairs, 1)), 1, 1, 3, box); this.func_175804_a(worldIn, box, 5, 0, 1, 7, 0, 3, Blocks.double_stone_slab.getDefaultState(), Blocks.double_stone_slab.getDefaultState(), false); this.func_175811_a(worldIn, Blocks.double_stone_slab.getDefaultState(), 6, 1, 1, box); this.func_175811_a(worldIn, Blocks.double_stone_slab.getDefaultState(), 6, 1, 2, box); this.func_175811_a(worldIn, Blocks.air.getDefaultState(), 2, 1, 0, box); this.func_175811_a(worldIn, Blocks.air.getDefaultState(), 2, 2, 0, box); this.func_175811_a(worldIn, Blocks.torch.getDefaultState().withProperty(BlockTorch.FACING, this.coordBaseMode), 2, 3, 1, box); this.func_175810_a(worldIn, box, par2, 2, 1, 0, EnumFacing.getHorizontal(this.getMetadataWithOffset(Blocks.oak_door, 1))); if (this.func_175807_a(worldIn, 2, 0, -1, box).getBlock().getMaterial() == Material.air && this.func_175807_a(worldIn, 2, -1, -1, box).getBlock().getMaterial() != Material.air) { this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.nether_brick_stairs, 3)), 2, 0, -1, box); } this.func_175811_a(worldIn, Blocks.air.getDefaultState(), 6, 1, 5, box); this.func_175811_a(worldIn, Blocks.air.getDefaultState(), 6, 2, 5, box); this.func_175811_a(worldIn, Blocks.torch.getDefaultState().withProperty(BlockTorch.FACING, this.coordBaseMode.getOpposite()), 6, 3, 4, box); this.func_175810_a(worldIn, box, par2, 6, 1, 5, EnumFacing.getHorizontal(this.getMetadataWithOffset(Blocks.oak_door, 1))); for (k = 0; k < 5; ++k) { for (l = 0; l < 9; ++l) { this.clearCurrentPositionBlocksUpwards(worldIn, l, 7, k, box); this.func_175808_b(worldIn, Blocks.nether_brick.getDefaultState(), l, -1, k, box); } } this.spawnVillagers(worldIn, box, 4, 1, 2, 2); return true; } protected int func_180779_c(int par1, int par2) { return par1 == 0 ? 4 : super.func_180779_c(par1, par2); } } public static class House1 extends StructureNetherVillagePieces.Village { public House1() {} public House1(StructureNetherVillagePieces.Start start, int par1, Random random, StructureBoundingBox box, EnumFacing side) { super(start, par1); this.coordBaseMode = side; this.boundingBox = box; } public static StructureNetherVillagePieces.House1 func_175850_a(StructureNetherVillagePieces.Start start, List list, Random random, int par3, int par4, int par5, EnumFacing side, int par7) { StructureBoundingBox structureboundingbox = StructureBoundingBox.func_175897_a(par3, par4, par5, 0, 0, 0, 9, 9, 6, side); return canVillageGoDeeper(structureboundingbox) && StructureComponent.findIntersecting(list, structureboundingbox) == null ? new StructureNetherVillagePieces.House1(start, par7, random, structureboundingbox, side) : null; } /** * second Part of Structure generating, this for example places Spiderwebs, Mob Spawners, it closes * Mineshafts at the end, it adds Fences... */ public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox box) { if (this.field_143015_k < 0) { this.field_143015_k = this.getAverageGroundLevel(worldIn, box); if (this.field_143015_k < 0) { return true; } this.boundingBox.offset(0, this.field_143015_k - this.boundingBox.maxY + 9 - 1, 0); } this.func_175804_a(worldIn, box, 1, 1, 1, 7, 5, 4, Blocks.air.getDefaultState(), Blocks.air.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 0, 0, 8, 0, 5, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 5, 0, 8, 5, 5, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 6, 1, 8, 6, 4, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 7, 2, 8, 7, 3, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); int i = this.getMetadataWithOffset(Blocks.nether_brick_stairs, 3); int j = this.getMetadataWithOffset(Blocks.nether_brick_stairs, 2); int k; int l; for (k = -1; k <= 2; ++k) { for (l = 0; l <= 8; ++l) { this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(i), l, 6 + k, k, box); this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(j), l, 6 + k, 5 - k, box); } } this.func_175804_a(worldIn, box, 0, 1, 0, 0, 1, 5, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 1, 5, 8, 1, 5, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 8, 1, 0, 8, 1, 4, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 2, 1, 0, 7, 1, 0, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 2, 0, 0, 4, 0, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 2, 5, 0, 4, 5, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 8, 2, 5, 8, 4, 5, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 8, 2, 0, 8, 4, 0, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 2, 1, 0, 4, 4, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 2, 5, 7, 4, 5, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 8, 2, 1, 8, 4, 4, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 2, 0, 7, 4, 0, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 4, 2, 0, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 5, 2, 0, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 6, 2, 0, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 4, 3, 0, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 5, 3, 0, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 6, 3, 0, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 0, 2, 2, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 0, 2, 3, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 0, 3, 2, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 0, 3, 3, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 8, 2, 2, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 8, 2, 3, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 8, 3, 2, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 8, 3, 3, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 2, 2, 5, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 3, 2, 5, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 5, 2, 5, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 6, 2, 5, box); this.func_175804_a(worldIn, box, 1, 4, 1, 7, 4, 1, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 4, 4, 7, 4, 4, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 3, 4, 7, 3, 4, Blocks.bookshelf.getDefaultState(), Blocks.bookshelf.getDefaultState(), false); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 7, 1, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.nether_brick_stairs, 0)), 7, 1, 3, box); k = this.getMetadataWithOffset(Blocks.nether_brick_stairs, 3); this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(k), 6, 1, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(k), 5, 1, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(k), 4, 1, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(k), 3, 1, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 6, 1, 3, box); this.func_175811_a(worldIn, Blocks.stone_pressure_plate.getDefaultState(), 6, 2, 3, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 4, 1, 3, box); this.func_175811_a(worldIn, Blocks.stone_pressure_plate.getDefaultState(), 4, 2, 3, box); this.func_175811_a(worldIn, Blocks.crafting_table.getDefaultState(), 7, 1, 1, box); this.func_175811_a(worldIn, Blocks.air.getDefaultState(), 1, 1, 0, box); this.func_175811_a(worldIn, Blocks.air.getDefaultState(), 1, 2, 0, box); this.func_175810_a(worldIn, box, random, 1, 1, 0, EnumFacing.getHorizontal(this.getMetadataWithOffset(Blocks.oak_door, 1))); if (this.func_175807_a(worldIn, 1, 0, -1, box).getBlock().getMaterial() == Material.air && this.func_175807_a(worldIn, 1, -1, -1, box).getBlock().getMaterial() != Material.air) { this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.nether_brick_stairs, 3)), 1, 0, -1, box); } for (l = 0; l < 6; ++l) { for (int i1 = 0; i1 < 9; ++i1) { this.clearCurrentPositionBlocksUpwards(worldIn, i1, 9, l, box); this.func_175808_b(worldIn, Blocks.nether_brick.getDefaultState(), i1, -1, l, box); } } this.spawnVillagers(worldIn, box, 2, 1, 2, 1); return true; } protected int func_180779_c(int p_180779_1_, int p_180779_2_) { return 1; } } public static class House2 extends StructureNetherVillagePieces.Village { /** List of items that Village's Blacksmith chest can contain. */ private static final List villageBlacksmithChestContents = Lists.newArrayList(new WeightedRandomChestContent[] {new WeightedRandomChestContent(Items.diamond, 0, 1, 3, 3), new WeightedRandomChestContent(Items.iron_ingot, 0, 1, 5, 10), new WeightedRandomChestContent(Items.gold_ingot, 0, 1, 3, 5), new WeightedRandomChestContent(Items.bread, 0, 1, 3, 15), new WeightedRandomChestContent(Items.apple, 0, 1, 3, 15), new WeightedRandomChestContent(Items.iron_pickaxe, 0, 1, 1, 5), new WeightedRandomChestContent(Items.iron_sword, 0, 1, 1, 5), new WeightedRandomChestContent(Items.iron_chestplate, 0, 1, 1, 5), new WeightedRandomChestContent(Items.iron_helmet, 0, 1, 1, 5), new WeightedRandomChestContent(Items.iron_leggings, 0, 1, 1, 5), new WeightedRandomChestContent(Items.iron_boots, 0, 1, 1, 5), new WeightedRandomChestContent(Item.getItemFromBlock(Blocks.obsidian), 0, 3, 7, 5), new WeightedRandomChestContent(Item.getItemFromBlock(Blocks.sapling), 0, 3, 7, 5), new WeightedRandomChestContent(Items.saddle, 0, 1, 1, 3), new WeightedRandomChestContent(Items.iron_horse_armor, 0, 1, 1, 1), new WeightedRandomChestContent(Items.golden_horse_armor, 0, 1, 1, 1), new WeightedRandomChestContent(Items.diamond_horse_armor, 0, 1, 1, 1)}); private boolean hasMadeChest; public House2() {} static { ChestGenHooks.init(VILLAGE_BLACKSMITH, villageBlacksmithChestContents, 3, ; } public House2(StructureNetherVillagePieces.Start start, int par2, Random random, StructureBoundingBox box, EnumFacing side) { super(start, par2); this.coordBaseMode = side; this.boundingBox = box; } public static StructureNetherVillagePieces.House2 func_175855_a(StructureNetherVillagePieces.Start start, List list, Random random, int par3, int par4, int par5, EnumFacing side, int par7) { StructureBoundingBox structureboundingbox = StructureBoundingBox.func_175897_a(par3, par4, par5, 0, 0, 0, 10, 6, 7, side); return canVillageGoDeeper(structureboundingbox) && StructureComponent.findIntersecting(list, structureboundingbox) == null ? new StructureNetherVillagePieces.House2(start, par7, random, structureboundingbox, side) : null; } /** * (abstract) Helper method to write subclass data to NBT */ protected void writeStructureToNBT(NBTTagCompound nbtt) { super.writeStructureToNBT(nbtt); nbtt.setBoolean("Chest", this.hasMadeChest); } /** * (abstract) Helper method to read subclass data from NBT */ protected void readStructureFromNBT(NBTTagCompound nbtt) { super.readStructureFromNBT(nbtt); this.hasMadeChest = nbtt.getBoolean("Chest"); } /** * second Part of Structure generating, this for example places Spiderwebs, Mob Spawners, it closes * Mineshafts at the end, it adds Fences... */ public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox box) { if (this.field_143015_k < 0) { this.field_143015_k = this.getAverageGroundLevel(worldIn, box); if (this.field_143015_k < 0) { return true; } this.boundingBox.offset(0, this.field_143015_k - this.boundingBox.maxY + 6 - 1, 0); } this.func_175804_a(worldIn, box, 0, 1, 0, 9, 4, 6, Blocks.air.getDefaultState(), Blocks.air.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 0, 0, 9, 0, 6, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 4, 0, 9, 4, 6, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 5, 0, 9, 5, 6, Blocks.stone_slab.getDefaultState(), Blocks.stone_slab.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 5, 1, 8, 5, 5, Blocks.air.getDefaultState(), Blocks.air.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 1, 0, 2, 3, 0, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 1, 0, 0, 4, 0, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); this.func_175804_a(worldIn, box, 3, 1, 0, 3, 4, 0, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 1, 6, 0, 4, 6, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 3, 3, 1, box); this.func_175804_a(worldIn, box, 3, 1, 2, 3, 3, 2, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 4, 1, 3, 5, 3, 3, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 1, 1, 0, 3, 5, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 1, 6, 5, 3, 6, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 5, 1, 0, 5, 3, 0, Blocks.nether_brick_fence.getDefaultState(), Blocks.nether_brick_fence.getDefaultState(), false); this.func_175804_a(worldIn, box, 9, 1, 0, 9, 3, 0, Blocks.nether_brick_fence.getDefaultState(), Blocks.nether_brick_fence.getDefaultState(), false); this.func_175804_a(worldIn, box, 6, 1, 4, 9, 4, 6, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175811_a(worldIn, Blocks.flowing_lava.getDefaultState(), 7, 1, 5, box); this.func_175811_a(worldIn, Blocks.flowing_lava.getDefaultState(), 8, 1, 5, box); this.func_175811_a(worldIn, Blocks.iron_bars.getDefaultState(), 9, 2, 5, box); this.func_175811_a(worldIn, Blocks.iron_bars.getDefaultState(), 9, 2, 4, box); this.func_175804_a(worldIn, box, 7, 2, 4, 8, 2, 5, Blocks.air.getDefaultState(), Blocks.air.getDefaultState(), false); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 6, 1, 3, box); this.func_175811_a(worldIn, Blocks.furnace.getDefaultState(), 6, 2, 3, box); this.func_175811_a(worldIn, Blocks.furnace.getDefaultState(), 6, 3, 3, box); this.func_175811_a(worldIn, Blocks.double_stone_slab.getDefaultState(), 8, 1, 1, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 0, 2, 2, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 0, 2, 4, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 2, 2, 6, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 4, 2, 6, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 2, 1, 4, box); this.func_175811_a(worldIn, Blocks.stone_pressure_plate.getDefaultState(), 2, 2, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 1, 1, 5, box); this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.nether_brick_stairs, 3)), 2, 1, 5, box); this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.nether_brick_stairs, 1)), 1, 1, 4, box); if (!this.hasMadeChest && box.func_175898_b(new BlockPos(this.getXWithOffset(5, 5), this.getYWithOffset(1), this.getZWithOffset(5, 5)))) { this.hasMadeChest = true; this.func_180778_a(worldIn, box, random, 5, 1, 5, ChestGenHooks.getItems(VILLAGE_BLACKSMITH, random), ChestGenHooks.getCount(VILLAGE_BLACKSMITH, random)); } int i; for (i = 6; i <= 8; ++i) { if (this.func_175807_a(worldIn, i, 0, -1, box).getBlock().getMaterial() == Material.air && this.func_175807_a(worldIn, i, -1, -1, box).getBlock().getMaterial() != Material.air) { this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.nether_brick_stairs, 3)), i, 0, -1, box); } } for (i = 0; i < 7; ++i) { for (int j = 0; j < 10; ++j) { this.clearCurrentPositionBlocksUpwards(worldIn, j, 6, i, box); this.func_175808_b(worldIn, Blocks.nether_brick.getDefaultState(), j, -1, i, box); } } this.spawnVillagers(worldIn, box, 7, 1, 1, 1); return true; } protected int func_180779_c(int par1, int par2) { return 3; } } public static class House3 extends StructureNetherVillagePieces.Village { public House3() {} public House3(StructureNetherVillagePieces.Start start, int par2, Random random, StructureBoundingBox box, EnumFacing side) { super(start, par2); this.coordBaseMode = side; this.boundingBox = box; } public static StructureNetherVillagePieces.House3 func_175849_a(StructureNetherVillagePieces.Start start, List list, Random random, int par3, int par4, int par5, EnumFacing side, int par7) { StructureBoundingBox structureboundingbox = StructureBoundingBox.func_175897_a(par3, par4, par5, 0, 0, 0, 9, 7, 12, side); return canVillageGoDeeper(structureboundingbox) && StructureComponent.findIntersecting(list, structureboundingbox) == null ? new StructureNetherVillagePieces.House3(start, par7, random, structureboundingbox, side) : null; } /** * second Part of Structure generating, this for example places Spiderwebs, Mob Spawners, it closes * Mineshafts at the end, it adds Fences... */ public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox box) { if (this.field_143015_k < 0) { this.field_143015_k = this.getAverageGroundLevel(worldIn, box); if (this.field_143015_k < 0) { return true; } this.boundingBox.offset(0, this.field_143015_k - this.boundingBox.maxY + 7 - 1, 0); } this.func_175804_a(worldIn, box, 1, 1, 1, 7, 4, 4, Blocks.air.getDefaultState(), Blocks.air.getDefaultState(), false); this.func_175804_a(worldIn, box, 2, 1, 6, 8, 4, 10, Blocks.air.getDefaultState(), Blocks.air.getDefaultState(), false); this.func_175804_a(worldIn, box, 2, 0, 5, 8, 0, 10, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 0, 1, 7, 0, 4, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 0, 0, 0, 3, 5, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 8, 0, 0, 8, 3, 10, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 0, 0, 7, 2, 0, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 0, 5, 2, 1, 5, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 2, 0, 6, 2, 3, 10, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 3, 0, 10, 7, 3, 10, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 2, 0, 7, 3, 0, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 2, 5, 2, 3, 5, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 4, 1, 8, 4, 1, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 4, 4, 3, 4, 4, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 5, 2, 8, 5, 3, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 0, 4, 2, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 0, 4, 3, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 8, 4, 2, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 8, 4, 3, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 8, 4, 4, box); int i = this.getMetadataWithOffset(Blocks.nether_brick_stairs, 3); int j = this.getMetadataWithOffset(Blocks.nether_brick_stairs, 2); int k; int l; for (k = -1; k <= 2; ++k) { for (l = 0; l <= 8; ++l) { this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(i), l, 4 + k, k, box); if ((k > -1 || l <= 1) && (k > 0 || l <= 3) && (k > 1 || l <= 4 || l >= 6)) { this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(j), l, 4 + k, 5 - k, box); } } } this.func_175804_a(worldIn, box, 3, 4, 5, 3, 4, 10, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 7, 4, 2, 7, 4, 10, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 4, 5, 4, 4, 5, 10, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 6, 5, 4, 6, 5, 10, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 5, 6, 3, 5, 6, 10, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); k = this.getMetadataWithOffset(Blocks.nether_brick_stairs, 0); int i1; for (l = 4; l >= 1; --l) { this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), l, 2 + l, 7 - l, box); for (i1 = 8 - l; i1 <= 10; ++i1) { this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(k), l, 2 + l, i1, box); } } l = this.getMetadataWithOffset(Blocks.nether_brick_stairs, 1); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 6, 6, 3, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 7, 5, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(l), 6, 6, 4, box); int j1; for (i1 = 6; i1 <= 8; ++i1) { for (j1 = 5; j1 <= 10; ++j1) { this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(l), i1, 12 - i1, j1, box); } } this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 0, 2, 1, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 0, 2, 4, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 0, 2, 2, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 0, 2, 3, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 4, 2, 0, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 5, 2, 0, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 6, 2, 0, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 8, 2, 1, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 8, 2, 2, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 8, 2, 3, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 8, 2, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 8, 2, 5, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 8, 2, 6, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 8, 2, 7, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 8, 2, 8, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 8, 2, 9, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 2, 2, 6, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 2, 2, 7, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 2, 2, 8, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 2, 2, 9, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 4, 4, 10, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 5, 4, 10, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 6, 4, 10, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 5, 5, 10, box); this.func_175811_a(worldIn, Blocks.air.getDefaultState(), 2, 1, 0, box); this.func_175811_a(worldIn, Blocks.air.getDefaultState(), 2, 2, 0, box); this.func_175811_a(worldIn, Blocks.torch.getDefaultState().withProperty(BlockTorch.FACING, this.coordBaseMode), 2, 3, 1, box); this.func_175810_a(worldIn, box, random, 2, 1, 0, EnumFacing.getHorizontal(this.getMetadataWithOffset(Blocks.oak_door, 1))); this.func_175804_a(worldIn, box, 1, 0, -1, 3, 2, -1, Blocks.air.getDefaultState(), Blocks.air.getDefaultState(), false); if (this.func_175807_a(worldIn, 2, 0, -1, box).getBlock().getMaterial() == Material.air && this.func_175807_a(worldIn, 2, -1, -1, box).getBlock().getMaterial() != Material.air) { this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.nether_brick_stairs, 3)), 2, 0, -1, box); } for (i1 = 0; i1 < 5; ++i1) { for (j1 = 0; j1 < 9; ++j1) { this.clearCurrentPositionBlocksUpwards(worldIn, j1, 7, i1, box); this.func_175808_b(worldIn, Blocks.nether_brick.getDefaultState(), j1, -1, i1, box); } } for (i1 = 5; i1 < 11; ++i1) { for (j1 = 2; j1 < 9; ++j1) { this.clearCurrentPositionBlocksUpwards(worldIn, j1, 7, i1, box); this.func_175808_b(worldIn, Blocks.nether_brick.getDefaultState(), j1, -1, i1, box); } } this.spawnVillagers(worldIn, box, 4, 1, 2, 2); return true; } } public static class House4Garden extends StructureNetherVillagePieces.Village { private boolean isRoofAccessible; public House4Garden() {} public House4Garden(StructureNetherVillagePieces.Start start, int par2, Random random, StructureBoundingBox box, EnumFacing side) { super(start, par2); this.coordBaseMode = side; this.boundingBox = box; this.isRoofAccessible = random.nextBoolean(); } /** * (abstract) Helper method to write subclass data to NBT */ protected void writeStructureToNBT(NBTTagCompound nbtt) { super.writeStructureToNBT(nbtt); nbtt.setBoolean("Terrace", this.isRoofAccessible); } /** * (abstract) Helper method to read subclass data from NBT */ protected void readStructureFromNBT(NBTTagCompound nbtt) { super.readStructureFromNBT(nbtt); this.isRoofAccessible = nbtt.getBoolean("Terrace"); } public static StructureNetherVillagePieces.House4Garden func_175858_a(StructureNetherVillagePieces.Start start, List list, Random random, int par3, int par4, int par5, EnumFacing side, int par7) { StructureBoundingBox structureboundingbox = StructureBoundingBox.func_175897_a(par3, par4, par5, 0, 0, 0, 5, 6, 5, side); return StructureComponent.findIntersecting(list, structureboundingbox) != null ? null : new StructureNetherVillagePieces.House4Garden(start, par7, random, structureboundingbox, side); } /** * second Part of Structure generating, this for example places Spiderwebs, Mob Spawners, it closes * Mineshafts at the end, it adds Fences... */ public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox box) { if (this.field_143015_k < 0) { this.field_143015_k = this.getAverageGroundLevel(worldIn, box); if (this.field_143015_k < 0) { return true; } this.boundingBox.offset(0, this.field_143015_k - this.boundingBox.maxY + 6 - 1, 0); } this.func_175804_a(worldIn, box, 0, 0, 0, 4, 0, 4, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 4, 0, 4, 4, 4, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 4, 1, 3, 4, 3, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 0, 1, 0, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 0, 2, 0, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 0, 3, 0, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 4, 1, 0, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 4, 2, 0, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 4, 3, 0, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 0, 1, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 0, 2, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 0, 3, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 4, 1, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 4, 2, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 4, 3, 4, box); this.func_175804_a(worldIn, box, 0, 1, 1, 0, 3, 3, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 4, 1, 1, 4, 3, 3, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 1, 4, 3, 3, 4, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 0, 2, 2, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 2, 2, 4, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 4, 2, 2, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 1, 1, 0, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 1, 2, 0, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 1, 3, 0, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 2, 3, 0, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 3, 3, 0, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 3, 2, 0, box); this.func_175811_a(worldIn, Blocks.nether_brick.getDefaultState(), 3, 1, 0, box); if (this.func_175807_a(worldIn, 2, 0, -1, box).getBlock().getMaterial() == Material.air && this.func_175807_a(worldIn, 2, -1, -1, box).getBlock().getMaterial() != Material.air) { this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.nether_brick_stairs, 3)), 2, 0, -1, box); } this.func_175804_a(worldIn, box, 1, 1, 1, 3, 3, 3, Blocks.air.getDefaultState(), Blocks.air.getDefaultState(), false); if (this.isRoofAccessible) { this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 0, 5, 0, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 1, 5, 0, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 2, 5, 0, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 3, 5, 0, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 4, 5, 0, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 0, 5, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 1, 5, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 2, 5, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 3, 5, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 4, 5, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 4, 5, 1, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 4, 5, 2, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 4, 5, 3, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 0, 5, 1, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 0, 5, 2, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 0, 5, 3, box); } int i; if (this.isRoofAccessible) { i = this.getMetadataWithOffset(Blocks.ladder, 3); this.func_175811_a(worldIn, Blocks.ladder.getStateFromMeta(i), 3, 1, 3, box); this.func_175811_a(worldIn, Blocks.ladder.getStateFromMeta(i), 3, 2, 3, box); this.func_175811_a(worldIn, Blocks.ladder.getStateFromMeta(i), 3, 3, 3, box); this.func_175811_a(worldIn, Blocks.ladder.getStateFromMeta(i), 3, 4, 3, box); } this.func_175811_a(worldIn, Blocks.torch.getDefaultState().withProperty(BlockTorch.FACING, this.coordBaseMode), 2, 3, 1, box); for (i = 0; i < 5; ++i) { for (int j = 0; j < 5; ++j) { this.clearCurrentPositionBlocksUpwards(worldIn, j, 6, i, box); this.func_175808_b(worldIn, Blocks.nether_brick.getDefaultState(), j, -1, i, box); } } this.spawnVillagers(worldIn, box, 1, 1, 2, 1); return true; } } public static class Path extends StructureNetherVillagePieces.Road { private int averageGroundLevel; public Path() {} public Path(StructureNetherVillagePieces.Start start, int par2, Random random, StructureBoundingBox box, EnumFacing side) { super(start, par2); this.coordBaseMode = side; this.boundingBox = box; this.averageGroundLevel = Math.max(box.getXSize(), box.getZSize()); } /** * (abstract) Helper method to write subclass data to NBT */ protected void writeStructureToNBT(NBTTagCompound nbtt) { super.writeStructureToNBT(nbtt); nbtt.setInteger("Length", this.averageGroundLevel); } /** * (abstract) Helper method to read subclass data from NBT */ protected void readStructureFromNBT(NBTTagCompound nbtt) { super.readStructureFromNBT(nbtt); this.averageGroundLevel = nbtt.getInteger("Length"); } /** * Initiates construction of the Structure Component picked, at the current Location of StructGen */ public void buildComponent(StructureComponent component, List list, Random random) { boolean flag = false; int i; StructureComponent structurecomponent1; for (i = random.nextInt(5); i < this.averageGroundLevel - 8; i += 2 + random.nextInt(5)) { structurecomponent1 = this.getNextComponentNN((StructureNetherVillagePieces.Start)component, list, random, 0, i); if (structurecomponent1 != null) { i += Math.max(structurecomponent1.getBoundingBox().getXSize(), structurecomponent1.getBoundingBox().getZSize()); flag = true; } } for (i = random.nextInt(5); i < this.averageGroundLevel - 8; i += 2 + random.nextInt(5)) { structurecomponent1 = this.getNextComponentPP((StructureNetherVillagePieces.Start)component, list, random, 0, i); if (structurecomponent1 != null) { i += Math.max(structurecomponent1.getBoundingBox().getXSize(), structurecomponent1.getBoundingBox().getZSize()); flag = true; } } if (flag && random.nextInt(3) > 0 && this.coordBaseMode != null) { switch (StructureNetherVillagePieces.SwitchEnumFacing.field_176064_a[this.coordBaseMode.ordinal()]) { case 1: StructureNetherVillagePieces.func_176069_e((StructureNetherVillagePieces.Start)component, list, random, this.boundingBox.minX - 1, this.boundingBox.minY, this.boundingBox.minZ, EnumFacing.WEST, this.getComponentType()); break; case 2: StructureNetherVillagePieces.func_176069_e((StructureNetherVillagePieces.Start)component, list, random, this.boundingBox.minX - 1, this.boundingBox.minY, this.boundingBox.maxZ - 2, EnumFacing.WEST, this.getComponentType()); break; case 3: StructureNetherVillagePieces.func_176069_e((StructureNetherVillagePieces.Start)component, list, random, this.boundingBox.minX, this.boundingBox.minY, this.boundingBox.minZ - 1, EnumFacing.NORTH, this.getComponentType()); break; case 4: StructureNetherVillagePieces.func_176069_e((StructureNetherVillagePieces.Start)component, list, random, this.boundingBox.maxX - 2, this.boundingBox.minY, this.boundingBox.minZ - 1, EnumFacing.NORTH, this.getComponentType()); } } if (flag && random.nextInt(3) > 0 && this.coordBaseMode != null) { switch (StructureNetherVillagePieces.SwitchEnumFacing.field_176064_a[this.coordBaseMode.ordinal()]) { case 1: StructureNetherVillagePieces.func_176069_e((StructureNetherVillagePieces.Start)component, list, random, this.boundingBox.maxX + 1, this.boundingBox.minY, this.boundingBox.minZ, EnumFacing.EAST, this.getComponentType()); break; case 2: StructureNetherVillagePieces.func_176069_e((StructureNetherVillagePieces.Start)component, list, random, this.boundingBox.maxX + 1, this.boundingBox.minY, this.boundingBox.maxZ - 2, EnumFacing.EAST, this.getComponentType()); break; case 3: StructureNetherVillagePieces.func_176069_e((StructureNetherVillagePieces.Start)component, list, random, this.boundingBox.minX, this.boundingBox.minY, this.boundingBox.maxZ + 1, EnumFacing.SOUTH, this.getComponentType()); break; case 4: StructureNetherVillagePieces.func_176069_e((StructureNetherVillagePieces.Start)component, list, random, this.boundingBox.maxX - 2, this.boundingBox.minY, this.boundingBox.maxZ + 1, EnumFacing.SOUTH, this.getComponentType()); } } } public static StructureBoundingBox func_175848_a(StructureNetherVillagePieces.Start start, List list, Random random, int par3, int par4, int par5, EnumFacing side) { for (int l = 7 * MathHelper.getRandomIntegerInRange(random, 3, 5); l >= 7; l -= 7) { StructureBoundingBox structureboundingbox = StructureBoundingBox.func_175897_a(par3, par4, par5, 0, 0, 0, 3, 3, l, side); if (StructureComponent.findIntersecting(list, structureboundingbox) == null) { return structureboundingbox; } } return null; } /** * second Part of Structure generating, this for example places Spiderwebs, Mob Spawners, it closes * Mineshafts at the end, it adds Fences... */ public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox box) { IBlockState iblockstate = this.func_175847_a(Blocks.gravel.getDefaultState()); IBlockState iblockstate1 = this.func_175847_a(Blocks.nether_brick.getDefaultState()); for (int i = this.boundingBox.minX; i <= this.boundingBox.maxX; ++i) { for (int j = this.boundingBox.minZ; j <= this.boundingBox.maxZ; ++j) { BlockPos blockpos = new BlockPos(i, 64, j); if (box.func_175898_b(blockpos)) { blockpos = worldIn.getTopSolidOrLiquidBlock(blockpos).down(); worldIn.setBlockState(blockpos, iblockstate, 2); worldIn.setBlockState(blockpos.down(), iblockstate1, 2); } } } return true; } } public static class PieceWeight { /** The Class object for the represantation of this village piece. */ public Class villagePieceClass; public final int villagePieceWeight; public int villagePiecesSpawned; public int villagePiecesLimit; public PieceWeight(Class clazz, int par2, int par3) { this.villagePieceClass = clazz; this.villagePieceWeight = par2; this.villagePiecesLimit = par3; } public boolean canSpawnMoreVillagePiecesOfType(int par1) { return this.villagePiecesLimit == 0 || this.villagePiecesSpawned < this.villagePiecesLimit; } public boolean canSpawnMoreVillagePieces() { return this.villagePiecesLimit == 0 || this.villagePiecesSpawned < this.villagePiecesLimit; } } public abstract static class Road extends StructureNetherVillagePieces.Village { public Road() {} protected Road(StructureNetherVillagePieces.Start start, int par2) { super(start, par2); } } public static class Start extends StructureNetherVillagePieces.Well { public WorldChunkManager worldChunkMngr; /** Boolean that determines if the village is in a desert or not. */ public boolean inDesert; /** World terrain type, 0 for normal, 1 for flap map */ public int terrainType; public StructureNetherVillagePieces.PieceWeight structVillagePieceWeight; /** * Contains List of all spawnable Structure Piece Weights. If no more Pieces of a type can be spawned, they * are removed from this list */ public List structureVillageWeightedPieceList; public List field_74932_i = Lists.newArrayList(); public List field_74930_j = Lists.newArrayList(); public BiomeGenBase biome; public Start() {} public Start(WorldChunkManager chunkManager, int par2, Random random, int par4, int par5, List list, int par7) { super((StructureNetherVillagePieces.Start)null, 0, random, par4, par5); this.worldChunkMngr = chunkManager; this.structureVillageWeightedPieceList = list; this.terrainType = par7; BiomeGenBase biomegenbase = chunkManager.func_180300_a(new BlockPos(par4, 0, par5), BiomeGenBase.field_180279_ad); this.inDesert = biomegenbase == BiomeGenBase.desert || biomegenbase == BiomeGenBase.desertHills; this.biome = biomegenbase; this.func_175846_a(this.inDesert); } public WorldChunkManager getWorldChunkManager() { return this.worldChunkMngr; } } static final class SwitchEnumFacing { static final int[] field_176064_a = new int[EnumFacing.values().length]; static { try { field_176064_a[EnumFacing.NORTH.ordinal()] = 1; } catch (NoSuchFieldError var4) { ; } try { field_176064_a[EnumFacing.SOUTH.ordinal()] = 2; } catch (NoSuchFieldError var3) { ; } try { field_176064_a[EnumFacing.WEST.ordinal()] = 3; } catch (NoSuchFieldError var2) { ; } try { field_176064_a[EnumFacing.EAST.ordinal()] = 4; } catch (NoSuchFieldError var1) { ; } } } public static class Torch extends StructureNetherVillagePieces.Village { public Torch() {} public Torch(StructureNetherVillagePieces.Start start, int par2, Random random, StructureBoundingBox box, EnumFacing side) { super(start, par2); this.coordBaseMode = side; this.boundingBox = box; } public static StructureBoundingBox func_175856_a(StructureNetherVillagePieces.Start start, List list, Random random, int par3, int par4, int par5, EnumFacing side) { StructureBoundingBox structureboundingbox = StructureBoundingBox.func_175897_a(par3, par4, par5, 0, 0, 0, 3, 4, 2, side); return StructureComponent.findIntersecting(list, structureboundingbox) != null ? null : structureboundingbox; } /** * second Part of Structure generating, this for example places Spiderwebs, Mob Spawners, it closes * Mineshafts at the end, it adds Fences... */ public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox box) { if (this.field_143015_k < 0) { this.field_143015_k = this.getAverageGroundLevel(worldIn, box); if (this.field_143015_k < 0) { return true; } this.boundingBox.offset(0, this.field_143015_k - this.boundingBox.maxY + 4 - 1, 0); } this.func_175804_a(worldIn, box, 0, 0, 0, 2, 3, 1, Blocks.air.getDefaultState(), Blocks.air.getDefaultState(), false); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 1, 0, 0, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 1, 1, 0, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 1, 2, 0, box); this.func_175811_a(worldIn, Blocks.wool.getStateFromMeta(EnumDyeColor.WHITE.getDyeDamage()), 1, 3, 0, box); boolean flag = this.coordBaseMode == EnumFacing.EAST || this.coordBaseMode == EnumFacing.NORTH; this.func_175811_a(worldIn, Blocks.torch.getDefaultState().withProperty(BlockTorch.FACING, this.coordBaseMode.rotateY()), flag ? 2 : 0, 3, 0, box); this.func_175811_a(worldIn, Blocks.torch.getDefaultState().withProperty(BlockTorch.FACING, this.coordBaseMode), 1, 3, 1, box); this.func_175811_a(worldIn, Blocks.torch.getDefaultState().withProperty(BlockTorch.FACING, this.coordBaseMode.rotateYCCW()), flag ? 0 : 2, 3, 0, box); this.func_175811_a(worldIn, Blocks.torch.getDefaultState().withProperty(BlockTorch.FACING, this.coordBaseMode.getOpposite()), 1, 3, -1, box); return true; } } public abstract static class Village extends StructureComponent { protected int field_143015_k = -1; /** The number of villagers that have been spawned in this component. */ private int villagersSpawned; private boolean field_143014_b; private StructureNetherVillagePieces.Start startPiece; public Village() {} protected Village(StructureNetherVillagePieces.Start start, int par2) { super(par2); if (start != null) { this.field_143014_b = start.inDesert; startPiece = start; } } /** * (abstract) Helper method to write subclass data to NBT */ protected void writeStructureToNBT(NBTTagCompound nbtt) { nbtt.setInteger("HPos", this.field_143015_k); nbtt.setInteger("VCount", this.villagersSpawned); nbtt.setBoolean("Desert", this.field_143014_b); } /** * (abstract) Helper method to read subclass data from NBT */ protected void readStructureFromNBT(NBTTagCompound nbtt) { this.field_143015_k = nbtt.getInteger("HPos"); this.villagersSpawned = nbtt.getInteger("VCount"); this.field_143014_b = nbtt.getBoolean("Desert"); } /** * Gets the next village component, with the bounding box shifted -1 in the X and Z direction. */ protected StructureComponent getNextComponentNN(StructureNetherVillagePieces.Start start, List list, Random random, int x, int z) { if (this.coordBaseMode != null) { switch (StructureNetherVillagePieces.SwitchEnumFacing.field_176064_a[this.coordBaseMode.ordinal()]) { case 1: return StructureNetherVillagePieces.func_176066_d(start, list, random, this.boundingBox.minX - 1, this.boundingBox.minY + x, this.boundingBox.minZ + z, EnumFacing.WEST, this.getComponentType()); case 2: return StructureNetherVillagePieces.func_176066_d(start, list, random, this.boundingBox.minX - 1, this.boundingBox.minY + x, this.boundingBox.minZ + z, EnumFacing.WEST, this.getComponentType()); case 3: return StructureNetherVillagePieces.func_176066_d(start, list, random, this.boundingBox.minX + z, this.boundingBox.minY + x, this.boundingBox.minZ - 1, EnumFacing.NORTH, this.getComponentType()); case 4: return StructureNetherVillagePieces.func_176066_d(start, list, random, this.boundingBox.minX + z, this.boundingBox.minY + x, this.boundingBox.minZ - 1, EnumFacing.NORTH, this.getComponentType()); } } return null; } /** * Gets the next village component, with the bounding box shifted +1 in the X and Z direction. */ protected StructureComponent getNextComponentPP(StructureNetherVillagePieces.Start start, List list, Random random, int x, int z) { if (this.coordBaseMode != null) { switch (StructureNetherVillagePieces.SwitchEnumFacing.field_176064_a[this.coordBaseMode.ordinal()]) { case 1: return StructureNetherVillagePieces.func_176066_d(start, list, random, this.boundingBox.maxX + 1, this.boundingBox.minY + x, this.boundingBox.minZ + z, EnumFacing.EAST, this.getComponentType()); case 2: return StructureNetherVillagePieces.func_176066_d(start, list, random, this.boundingBox.maxX + 1, this.boundingBox.minY + x, this.boundingBox.minZ + z, EnumFacing.EAST, this.getComponentType()); case 3: return StructureNetherVillagePieces.func_176066_d(start, list, random, this.boundingBox.minX + z, this.boundingBox.minY + x, this.boundingBox.maxZ + 1, EnumFacing.SOUTH, this.getComponentType()); case 4: return StructureNetherVillagePieces.func_176066_d(start, list, random, this.boundingBox.minX + z, this.boundingBox.minY + x, this.boundingBox.maxZ + 1, EnumFacing.SOUTH, this.getComponentType()); } } return null; } /** * Discover the y coordinate that will serve as the ground level of the supplied BoundingBox. (A median of * all the levels in the BB's horizontal rectangle). */ protected int getAverageGroundLevel(World worldIn, StructureBoundingBox box) { int i = 0; int j = 0; for (int k = this.boundingBox.minZ; k <= this.boundingBox.maxZ; ++k) { for (int l = this.boundingBox.minX; l <= this.boundingBox.maxX; ++l) { BlockPos blockpos = new BlockPos(l, 64, k); if (box.func_175898_b(blockpos)) { i += Math.max(worldIn.getTopSolidOrLiquidBlock(blockpos).getY(), worldIn.provider.getAverageGroundLevel()); ++j; } } } if (j == 0) { return -1; } else { return i / j; } } protected static boolean canVillageGoDeeper(StructureBoundingBox box) { return box != null && box.minY > 10; } /** * Spawns a number of villagers in this component. Parameters: world, component bounding box, x offset, y * offset, z offset, number of villagers */ protected void spawnVillagers(World worldIn, StructureBoundingBox box, int x, int y, int z, int par6) { if (this.villagersSpawned < par6) { for (int i1 = this.villagersSpawned; i1 < par6; ++i1) { int j1 = this.getXWithOffset(x + i1, z); int k1 = this.getYWithOffset(y); int l1 = this.getZWithOffset(x + i1, z); if (!box.func_175898_b(new BlockPos(j1, k1, l1))) { break; } ++this.villagersSpawned; EntityVillager entityvillager = new EntityVillager(worldIn); entityvillager.setLocationAndAngles((double)j1 + 0.5D, (double)k1, (double)l1 + 0.5D, 0.0F, 0.0F); entityvillager.func_180482_a(worldIn.getDifficultyForLocation(new BlockPos(entityvillager)), (IEntityLivingData)null); entityvillager.setProfession(this.func_180779_c(i1, entityvillager.getProfession())); worldIn.spawnEntityInWorld(entityvillager); } } } protected int func_180779_c(int par1, int par2) { return par2; } protected IBlockState func_175847_a(IBlockState par1) { BiomeEvent.GetVillageBlockID event = new BiomeEvent.GetVillageBlockID(startPiece == null ? null : startPiece.biome, par1); MinecraftForge.TERRAIN_GEN_BUS.post(event); if (event.getResult() == Result.DENY) return event.replacement; /* if (this.field_143014_b) { if (p_175847_1_.getBlock() == Blocks.netherrack || p_175847_1_.getBlock() == Blocks.netherrack2) { return Blocks.sandstone.getDefaultState(); } if (p_175847_1_.getBlock() == Blocks.nether_brick) { return Blocks.sandstone.getStateFromMeta(BlockSandStone.EnumType.DEFAULT.getMetadata()); } if (p_175847_1_.getBlock() == Blocks.nether_brick) { return Blocks.sandstone.getStateFromMeta(BlockSandStone.EnumType.SMOOTH.getMetadata()); } if (p_175847_1_.getBlock() == Blocks.nether_brick_stairs) { return Blocks.nether_brick_stairs.getDefaultState().withProperty(BlockStairs.FACING, p_175847_1_.getValue(BlockStairs.FACING)); } if (p_175847_1_.getBlock() == Blocks.nether_brick_stairs) { return Blocks.nether_brick_stairs.getDefaultState().withProperty(BlockStairs.FACING, p_175847_1_.getValue(BlockStairs.FACING)); } if (p_175847_1_.getBlock() == Blocks.gravel) { return Blocks.sandstone.getDefaultState(); } }*/ return par1; } protected void func_175811_a(World worldIn, IBlockState state, int x, int y, int z, StructureBoundingBox box) { IBlockState iblockstate1 = this.func_175847_a(state); super.func_175811_a(worldIn, iblockstate1, x, y, z, box); } protected void func_175804_a(World worldIn, StructureBoundingBox box, int x, int y, int z, int par6, int par7, int par8, IBlockState state, IBlockState state2, boolean par11) { IBlockState iblockstate2 = this.func_175847_a(state); IBlockState iblockstate3 = this.func_175847_a(state2); super.func_175804_a(worldIn, box, x, y, z, par6, par7, par8, iblockstate2, iblockstate3, par11); } protected void func_175808_b(World worldIn, IBlockState state, int x, int y, int z, StructureBoundingBox box) { IBlockState iblockstate1 = this.func_175847_a(state); super.func_175808_b(worldIn, iblockstate1, x, y, z, box); } protected void func_175846_a(boolean par1) { this.field_143014_b = par1; } } public static class Well extends StructureNetherVillagePieces.Village { public Well() {} public Well(StructureNetherVillagePieces.Start start, int par2, Random random, int par4, int par5) { super(start, par2); this.coordBaseMode = EnumFacing.Plane.HORIZONTAL.random(random); switch (StructureNetherVillagePieces.SwitchEnumFacing.field_176064_a[this.coordBaseMode.ordinal()]) { case 1: case 2: this.boundingBox = new StructureBoundingBox(par4, 64, par5, par4 + 6 - 1, 78, par5 + 6 - 1); break; default: this.boundingBox = new StructureBoundingBox(par4, 64, par5, par4 + 6 - 1, 78, par5 + 6 - 1); } } /** * Initiates construction of the Structure Component picked, at the current Location of StructGen */ public void buildComponent(StructureComponent component, List list, Random random) { StructureNetherVillagePieces.func_176069_e((StructureNetherVillagePieces.Start)component, list, random, this.boundingBox.minX - 1, this.boundingBox.maxY - 4, this.boundingBox.minZ + 1, EnumFacing.WEST, this.getComponentType()); StructureNetherVillagePieces.func_176069_e((StructureNetherVillagePieces.Start)component, list, random, this.boundingBox.maxX + 1, this.boundingBox.maxY - 4, this.boundingBox.minZ + 1, EnumFacing.EAST, this.getComponentType()); StructureNetherVillagePieces.func_176069_e((StructureNetherVillagePieces.Start)component, list, random, this.boundingBox.minX + 1, this.boundingBox.maxY - 4, this.boundingBox.minZ - 1, EnumFacing.NORTH, this.getComponentType()); StructureNetherVillagePieces.func_176069_e((StructureNetherVillagePieces.Start)component, list, random, this.boundingBox.minX + 1, this.boundingBox.maxY - 4, this.boundingBox.maxZ + 1, EnumFacing.SOUTH, this.getComponentType()); } /** * second Part of Structure generating, this for example places Spiderwebs, Mob Spawners, it closes * Mineshafts at the end, it adds Fences... */ public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox box) { if (this.field_143015_k < 0) { this.field_143015_k = this.getAverageGroundLevel(worldIn, box); if (this.field_143015_k < 0) { return true; } this.boundingBox.offset(0, this.field_143015_k - this.boundingBox.maxY + 3, 0); } this.func_175804_a(worldIn, box, 1, 0, 1, 4, 12, 4, Blocks.nether_brick.getDefaultState(), Blocks.flowing_water.getDefaultState(), false); this.func_175811_a(worldIn, Blocks.air.getDefaultState(), 2, 12, 2, box); this.func_175811_a(worldIn, Blocks.air.getDefaultState(), 3, 12, 2, box); this.func_175811_a(worldIn, Blocks.air.getDefaultState(), 2, 12, 3, box); this.func_175811_a(worldIn, Blocks.air.getDefaultState(), 3, 12, 3, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 1, 13, 1, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 1, 14, 1, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 4, 13, 1, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 4, 14, 1, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 1, 13, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 1, 14, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 4, 13, 4, box); this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), 4, 14, 4, box); this.func_175804_a(worldIn, box, 1, 15, 1, 4, 15, 4, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); for (int i = 0; i <= 5; ++i) { for (int j = 0; j <= 5; ++j) { if (j == 0 || j == 5 || i == 0 || i == 5) { this.func_175811_a(worldIn, Blocks.gravel.getDefaultState(), j, 11, i, box); this.clearCurrentPositionBlocksUpwards(worldIn, j, 12, i, box); } } } return true; } } public static class WoodHut extends StructureNetherVillagePieces.Village { private boolean isTallHouse; private int tablePosition; public WoodHut() {} public WoodHut(StructureNetherVillagePieces.Start start, int par2, Random random, StructureBoundingBox box, EnumFacing side) { super(start, par2); this.coordBaseMode = side; this.boundingBox = box; this.isTallHouse = random.nextBoolean(); this.tablePosition = random.nextInt(3); } /** * (abstract) Helper method to write subclass data to NBT */ protected void writeStructureToNBT(NBTTagCompound nbtt) { super.writeStructureToNBT(nbtt); nbtt.setInteger("T", this.tablePosition); nbtt.setBoolean("C", this.isTallHouse); } /** * (abstract) Helper method to read subclass data from NBT */ protected void readStructureFromNBT(NBTTagCompound nbtt) { super.readStructureFromNBT(nbtt); this.tablePosition = nbtt.getInteger("T"); this.isTallHouse = nbtt.getBoolean("C"); } public static StructureNetherVillagePieces.WoodHut func_175853_a(StructureNetherVillagePieces.Start start, List list, Random random, int par3, int par4, int par5, EnumFacing side, int par7) { StructureBoundingBox structureboundingbox = StructureBoundingBox.func_175897_a(par3, par4, par5, 0, 0, 0, 4, 6, 5, side); return canVillageGoDeeper(structureboundingbox) && StructureComponent.findIntersecting(list, structureboundingbox) == null ? new StructureNetherVillagePieces.WoodHut(start, par7, random, structureboundingbox, side) : null; } /** * second Part of Structure generating, this for example places Spiderwebs, Mob Spawners, it closes * Mineshafts at the end, it adds Fences... */ public boolean addComponentParts(World worldIn, Random random, StructureBoundingBox box) { if (this.field_143015_k < 0) { this.field_143015_k = this.getAverageGroundLevel(worldIn, box); if (this.field_143015_k < 0) { return true; } this.boundingBox.offset(0, this.field_143015_k - this.boundingBox.maxY + 6 - 1, 0); } this.func_175804_a(worldIn, box, 1, 1, 1, 3, 5, 4, Blocks.air.getDefaultState(), Blocks.air.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 0, 0, 3, 0, 4, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 0, 1, 2, 0, 3, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); if (this.isTallHouse) { this.func_175804_a(worldIn, box, 1, 4, 1, 2, 4, 3, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); } else { this.func_175804_a(worldIn, box, 1, 5, 1, 2, 5, 3, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); } this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 1, 4, 0, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 2, 4, 0, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 1, 4, 4, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 2, 4, 4, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 0, 4, 1, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 0, 4, 2, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 0, 4, 3, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 3, 4, 1, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 3, 4, 2, box); this.func_175811_a(worldIn, Blocks.netherrack.getDefaultState(), 3, 4, 3, box); this.func_175804_a(worldIn, box, 0, 1, 0, 0, 3, 0, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); this.func_175804_a(worldIn, box, 3, 1, 0, 3, 3, 0, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 1, 4, 0, 3, 4, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); this.func_175804_a(worldIn, box, 3, 1, 4, 3, 3, 4, Blocks.netherrack.getDefaultState(), Blocks.netherrack.getDefaultState(), false); this.func_175804_a(worldIn, box, 0, 1, 1, 0, 3, 3, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 3, 1, 1, 3, 3, 3, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 1, 0, 2, 3, 0, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175804_a(worldIn, box, 1, 1, 4, 2, 3, 4, Blocks.nether_brick.getDefaultState(), Blocks.nether_brick.getDefaultState(), false); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 0, 2, 2, box); this.func_175811_a(worldIn, Blocks.glass_pane.getDefaultState(), 3, 2, 2, box); if (this.tablePosition > 0) { this.func_175811_a(worldIn, Blocks.nether_brick_fence.getDefaultState(), this.tablePosition, 1, 3, box); this.func_175811_a(worldIn, Blocks.stone_pressure_plate.getDefaultState(), this.tablePosition, 2, 3, box); } this.func_175811_a(worldIn, Blocks.air.getDefaultState(), 1, 1, 0, box); this.func_175811_a(worldIn, Blocks.air.getDefaultState(), 1, 2, 0, box); this.func_175810_a(worldIn, box, random, 1, 1, 0, EnumFacing.getHorizontal(this.getMetadataWithOffset(Blocks.oak_door, 1))); if (this.func_175807_a(worldIn, 1, 0, -1, box).getBlock().getMaterial() == Material.air && this.func_175807_a(worldIn, 1, -1, -1, box).getBlock().getMaterial() != Material.air) { this.func_175811_a(worldIn, Blocks.nether_brick_stairs.getStateFromMeta(this.getMetadataWithOffset(Blocks.nether_brick_stairs, 3)), 1, 0, -1, box); } for (int i = 0; i < 5; ++i) { for (int j = 0; j < 4; ++j) { this.clearCurrentPositionBlocksUpwards(worldIn, j, 6, i, box); this.func_175808_b(worldIn, Blocks.nether_brick.getDefaultState(), j, -1, i, box); } } this.spawnVillagers(worldIn, box, 1, 1, 2, 1); return true; } } } wich as i said before they are only copy-paste of vanilla classes (just for testing) Then i register this events here package blaze.core; import blaze.world.village.MapGenEventHandler; import blaze.world.village.NetherVillageHandler; import blaze.world.village.VillageMaterialEventHandler; import blaze.world.village.VillageMetadadaEventHandler; import net.minecraft.world.biome.BiomeGenBase; import net.minecraftforge.common.BiomeManager; import net.minecraftforge.common.MinecraftForge; public class BLVillage { public static void createVillager() { BiomeManager.addVillageBiome(BiomeGenBase.extremeHills, true); BiomeManager.addVillageBiome(BiomeGenBase.forest, true); BiomeManager.addVillageBiome(BiomeGenBase.forest.createMutation(), true); BiomeManager.addVillageBiome(BiomeGenBase.swampland, true); BiomeManager.addVillageBiome(BiomeGenBase.swampland.createMutation(), true); BiomeManager.addVillageBiome(BiomeGenBase.taiga, true); BiomeManager.addVillageBiome(BiomeGenBase.taiga.createMutation(), true); BiomeManager.addVillageBiome(BiomeGenBase.icePlains, true); BiomeManager.addVillageBiome(BiomeGenBase.icePlains.createMutation(), true); BiomeManager.addVillageBiome(BiomeGenBase.mushroomIsland, true); BiomeManager.addVillageBiome(BiomeGenBase.mushroomIslandShore, true); BiomeManager.addVillageBiome(BiomeGenBase.jungle, true); BiomeManager.addVillageBiome(BiomeGenBase.jungle.createMutation(), true); BiomeManager.addVillageBiome(BiomeGenBase.roofedForest, true); BiomeManager.addVillageBiome(BiomeGenBase.roofedForest.createMutation(), true); BiomeManager.addVillageBiome(BiomeGenBase.birchForest, true); BiomeManager.addVillageBiome(BiomeGenBase.birchForest.createMutation(), true); BiomeManager.addVillageBiome(BiomeGenBase.coldTaiga, true); BiomeManager.addVillageBiome(BiomeGenBase.coldTaiga.createMutation(), true); BiomeManager.addVillageBiome(BiomeGenBase.mesa, true); BiomeManager.addVillageBiome(BiomeGenBase.mesa.createMutation(), true); BiomeManager.addVillageBiome(BiomeGenBase.mesaPlateau, true); BiomeManager.addVillageBiome(BiomeGenBase.mesaPlateau.createMutation(), true); BiomeManager.addVillageBiome(BiomeGenBase.mesaPlateau_F, true); BiomeManager.addVillageBiome(BiomeGenBase.mesaPlateau_F.createMutation(), true); BiomeManager.addVillageBiome(BiomeGenBase.megaTaiga, true); BiomeManager.addVillageBiome(BiomeGenBase.megaTaiga.createMutation(), true); BiomeManager.addVillageBiome(BiomeGenBase.megaTaigaHills, true); BiomeManager.addVillageBiome(BiomeGenBase.megaTaigaHills.createMutation(), true); BiomeManager.addVillageBiome(BiomeGenBase.savanna, true); BiomeManager.addVillageBiome(BiomeGenBase.savannaPlateau, true); //BiomeManager.addVillageBiome(BiomeGenBase.hell, true); MinecraftForge.TERRAIN_GEN_BUS.register(new MapGenEventHandler()); MinecraftForge.TERRAIN_GEN_BUS.register(new VillageMaterialEventHandler()); MinecraftForge.TERRAIN_GEN_BUS.register(new VillageMetadadaEventHandler()); MinecraftForge.EVENT_BUS.register(new NetherVillageHandler()); } } wich is called from the preInit method. This is the other class involved (the class that says it cannot be cated to) package blaze.world.village; import net.minecraft.world.gen.structure.MapGenVillage; import net.minecraftforge.fml.relauncher.ReflectionHelper; public class MapGenVillageEventHandler extends MapGenVillage { public MapGenVillageEventHandler() { ReflectionHelper.setPrivateValue(MapGenVillage.class, this, Integer.valueOf(16), new String[] { "field_82665_g" }); ReflectionHelper.setPrivateValue(MapGenVillage.class, this, Integer.valueOf(4), new String[] { "field_82666_h" }); } } How can i figured out this? If any other class is need, please ask it
-
Of course I will release the final mod at Curse (well, actually there is yet the old version for 1.7.10)
-
Thanks for your reply For the materials i have already a class that should change the vanilla materials (wich it works in all other biomes), for the villager, well... i'm not responsible for their action And of course the water will be changed with lava I will do some more tests as soon as i can
-
That's exactly what i was trying to avoid
-
OK, so the village actually generate but it's generating over the bedrock The village generation code does a check to get the TopSolidOrLiquidBlock, and this seems to return the bedrock top Is there any way to change this (so make the villages generate under the bedrock) ?
-
When it calls the MapGenStructures class this value Iterator iterator = this.structureMap.values().iterator(); is null, since structureMap.values() it is. EDIT: doing this villageGenerator.func_175792_a(event.chunkProvider, event.world, event.chunkX, event.chunkZ, new ChunkPrimer()); villageGenerator.func_175794_a(event.world, new Random(), new ChunkCoordIntPair(event.chunkX, event.chunkZ)); populate that value. Still looking into the code to see what it prevents to spawn
-
Ok, i've added this this.villageGenerator = new MapGenVillage(); villageGenerator = (MapGenVillage)TerrainGen.getModdedMapGen(villageGenerator, EventType.VILLAGE); villageGenerator.func_175792_a(event.chunkProvider, event.world, event.chunkX, event.chunkZ, new ChunkPrimer()); but still no villages are spawning In ChunkProviderGenerate it does this this.villageGenerator.func_175792_a(this, this.worldObj, x, z, chunkprimer); or this this.villageGenerator.func_175794_a(this.worldObj, this.rand, chunkcoordintpair); but both of them doesn't spawn any village in the nether
-
Woops, changed the registration to this MinecraftForge.EVENT_BUS.register(new NetherVillageHandler()); Now the method is called, so now in there how to generate the village?
-
So i need to do this? MinecraftForge.TERRAIN_GEN_BUS.register(new NetherVillageHandler()); package blaze.world.village; import net.minecraftforge.event.terraingen.PopulateChunkEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class NetherVillageHandler { @SubscribeEvent public void genNetherVillages(PopulateChunkEvent.Pre event) { System.out.println("DOING NETHER STUFF"); } } I'm really sorry if all this could seem dumb but i've never worked with terrain gen events I think this is wrong since that string is never printed out
-
Trying to force the village generation in the nether (considering it like a normal structure) I really don't understand what to do
-
Ok, so i've tried doing this in my worldGenMinable class for (int i = 0; i < 200; i++) { int posX = x + random.nextInt(16); int posZ = z + random.nextInt(16); int posY = 64 + random.nextInt(140); village.func_175794_a(world, random, new ChunkCoordIntPair(x, z)); } Where village is this this.villageGenerator = new MapGenVillage(); villageGenerator = (MapGenVillage)TerrainGen.getModdedMapGen(villageGenerator, VILLAGE); genNetherVillages(villageGenerator, world, random, x, z); But still not working I've looked into ChunkProviderGenerate and that is the method from where it starts generate the village