Jump to content

NovaViper

Forge Modder
  • Posts

    1061
  • Joined

  • Last visited

Everything posted by NovaViper

  1. Ah.. and yeah, that would be very annoying
  2. Hey, is it possible for me to add update and version information on the title screen? Here are some images of mods that have implemented these features. http://i1319.photobucket.com/albums/t661/Nova_Leary/Title%20Screen%20with%20OptifineampForgeInformation_zpspyozjaae.png[/img] Optifine has it's mod information loaded up on here and Forge also has an updater that loads up on here http://i1319.photobucket.com/albums/t661/Nova_Leary/Update%20Screen_zpsqrcaaidh.png[/img] Xaero's Minimap has a update screen that comes up when you load Minecraft whenever a new update is available
  3. What about this? protected boolean isGenderSet; public EntityCustomTameable(World p_i1604_1_) { super(p_i1604_1_); } @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(DataValues.breed, new Byte((byte) 0)); this.dataWatcher.addObject(DataValues.gender, new Byte((byte) 0)); // Gender if (isGenderSet == false) { if (rand.nextInt(2) == 0) { this.setGender(true); } else { this.setGender(false); } isGenderSet = true; } } @Override public void writeEntityToNBT(NBTTagCompound tagCompound) { super.writeEntityToNBT(tagCompound); tagCompound.setBoolean("gender", this.getGender()); } @Override public void readEntityFromNBT(NBTTagCompound tagCompound) { super.readEntityFromNBT(tagCompound); if (tagCompound.hasKey("gender", 1)) { this.setGender(tagCompound.getBoolean("gender")); } }
  4. @Override protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(DataValues.breed, new Byte((byte) 0)); this.dataWatcher.addObject(DataValues.gender, new Byte((byte) 0)); // Gender boolean isGenderSet = false; if (isGenderSet == false) { if (rand.nextInt(2) == 0) { this.setGender(true); } else { this.setGender(false); } isGenderSet = true; } } @Override public void writeEntityToNBT(NBTTagCompound tagCompound) { super.writeEntityToNBT(tagCompound); tagCompound.setBoolean("gender", this.getGender()); } @Override public void readEntityFromNBT(NBTTagCompound tagCompound) { super.readEntityFromNBT(tagCompound); if (tagCompound.hasKey("gender", ) { this.setGender(tagCompound.getBoolean("gender")); } } /* =======================UNIVERSAL======================= */ /** true = male, false = female */ public boolean getGender() // TODO { return (this.dataWatcher.getWatchableObjectByte(DataValues.gender) & 1) != 0; } /** true = male, false = female */ public void setGender(boolean gender) { if (gender) { this.dataWatcher.updateObject(DataValues.gender, Byte.valueOf((byte) 1)); // Male } else { this.dataWatcher.updateObject(DataValues.gender, Byte.valueOf((byte) 0)); // Female } }
  5. I already did and I did show you the code
  6. I'm a girl and the collarColor has nothing to do with the gender, I copied that to use for my entity's collar color, which is what Minecraft uses for the wolf's collar collar
  7. I'm doing this and it still keeps switching genders, how do I fix that? protected void entityInit() { super.entityInit(); this.dataWatcher.addObject(DataValues.breed, new Byte((byte) 0)); this.dataWatcher.addObject(DataValues.gender, new Byte((byte) 0)); // Gender boolean isGenderSet = false; if (isGenderSet == false) { if (rand.nextInt(2) == 0) { this.setGender(true); } else { this.setGender(false); } isGenderSet = true; } }
  8. Here package common.zeroquest.entity.zertum; import java.util.HashMap; import java.util.Map; import net.minecraft.block.*; import net.minecraft.block.material.*; import net.minecraft.entity.*; import net.minecraft.entity.ai.EntityAIAttackOnCollide; import net.minecraft.entity.ai.EntityAIHurtByTarget; import net.minecraft.entity.ai.EntityAILeapAtTarget; import net.minecraft.entity.ai.EntityAILookIdle; import net.minecraft.entity.ai.EntityAIMate; import net.minecraft.entity.ai.EntityAISwimming; import net.minecraft.entity.ai.EntityAIWander; import net.minecraft.entity.ai.EntityAIWatchClosest; import net.minecraft.entity.monster.*; import net.minecraft.entity.passive.*; import net.minecraft.entity.player.*; import net.minecraft.entity.projectile.*; import net.minecraft.init.*; import net.minecraft.item.*; import net.minecraft.nbt.*; import net.minecraft.pathfinding.*; import net.minecraft.potion.*; import net.minecraft.server.management.PreYggdrasilConverter; import net.minecraft.util.*; import net.minecraft.world.*; import net.minecraftforge.fml.relauncher.*; import common.zeroquest.*; import common.zeroquest.core.helper.ChatHelper; import common.zeroquest.entity.EntityCustomTameable; import common.zeroquest.entity.ai.*; import common.zeroquest.entity.util.*; import common.zeroquest.entity.util.ModeUtil.EnumMode; import common.zeroquest.inventory.*; import common.zeroquest.lib.*; public abstract class EntityZertumEntity extends EntityCustomTameable { protected EntityAILeapAtTarget aiLeap = new EntityAILeapAtTarget(this, 0.4F); public EntityAIWatchClosest aiStareAtPlayer = new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F); public EntityAIWatchClosest aiGlareAtCreeper = new EntityAIWatchClosest(this, EntityCreeper.class, this.talents.getLevel("creeperspotter") * 6); public EntityAIFetchBone aiFetchBone; private float timeDogBegging; private float prevTimeDogBegging; public float headRotationCourse; public float headRotationCourseOld; public boolean isWet; public boolean isShaking; public float timeWolfIsShaking; public float prevTimeWolfIsShaking; private int hungerTick; private int prevHungerTick; private int healingTick; private int prevHealingTick; private int regenerationTick; private int prevRegenerationTick; public TalentUtil talents; public LevelUtil levels; public ModeUtil mode; public CoordUtil coords; public Map<String, Object> objects; private boolean hasToy; private float timeWolfIsHappy; private float prevTimeWolfIsHappy; private boolean isWolfHappy; public boolean hiyaMaster; private float mouthOpenness; private float prevMouthOpenness; private int openMouthCounter; //@formatter:off EntityPlayer owner; // Which will be direct reference to owner on both server and client. String ownerUUID; // Which is used when link between owner and tamed entity can't be found - e.g owner is offline (there is no EntityPlayer owner). String ownerName; // This exists for client display purposes. //@formatter:on public EntityZertumEntity(World worldIn) { super(worldIn); this.objects = new HashMap<String, Object>(); this.setSize(0.6F, 1.5F); ((PathNavigateGround) this.getNavigator()).func_179690_a(true); this.tasks.addTask(1, new EntityAISwimming(this)); this.tasks.addTask(2, this.aiSit); this.tasks.addTask(3, this.aiLeap); this.tasks.addTask(4, new EntityAIAttackOnCollide(this, 1.0D, true)); this.tasks.addTask(5, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F)); this.tasks.addTask(6, this.aiFetchBone = new EntityAIFetchBone(this, 1.0D, 0.5F, 20.0F)); this.tasks.addTask(7, new EntityAIMate(this, 1.0D)); this.tasks.addTask(8, new EntityAIWander(this, 1.0D)); this.tasks.addTask(9, new EntityCustomAIBeg(this, 8.0F)); this.tasks.addTask(10, aiStareAtPlayer); this.tasks.addTask(10, new EntityAILookIdle(this)); this.targetTasks.addTask(1, new EntityAIOwnerHurtByTarget(this)); this.targetTasks.addTask(2, new EntityAIOwnerHurtTarget(this)); this.targetTasks.addTask(3, new EntityAIModeAttackTarget(this)); this.targetTasks.addTask(4, new EntityAIHurtByTarget(this, true)); this.setTamed(false); this.setEvolved(false); this.inventory = new InventoryPack(this); this.targetTasks.addTask(6, new EntityAIRoundUp(this, EntityAnimal.class, 0, false)); TalentHelper.onClassCreation(this); } @Override public void applyEntityAttributes() { super.applyEntityAttributes(); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.30000001192092896); this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(this.wildHealth()); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(this.wildDamage()); this.updateEntityAttributes(); } public void updateEntityAttributes() { if (this.isTamed()) { if (!this.isChild() && !this.hasEvolved()) { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(this.tamedHealth() + this.effectiveLevel()); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(this.tamedDamage()); } else if (!this.isChild() && this.hasEvolved()) { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(this.evoHealth() + this.effectiveLevel()); } else { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(this.babyHealth()); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(this.babyDamage()); } } else { if (this.isChild()) { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(this.babyHealth()); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(this.babyDamage()); } } } @Override public void setTamed(boolean p_70903_1_) { super.setTamed(p_70903_1_); if (p_70903_1_) { if (!this.isChild() && !this.hasEvolved()) { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(this.tamedHealth() + this.effectiveLevel()); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(this.tamedDamage()); } else if (!this.isChild() && this.hasEvolved()) { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(this.evoHealth()); } else { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(this.babyHealth()); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(this.babyDamage()); } } else { if (this.isChild()) { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(this.babyHealth()); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(this.babyDamage()); } } } public double tamedHealth() { // TODO if (this instanceof EntityZertum || this instanceof EntityRedZertum) { return 35; } else if (this instanceof EntityMetalZertum || this instanceof EntityIceZertum || this instanceof EntityForisZertum || this instanceof EntityDestroZertum || this instanceof EntityDarkZertum) { return 40; } return 0; } public double tamedDamage() { if (this instanceof EntityZertum || this instanceof EntityRedZertum || this instanceof EntityMetalZertum || this instanceof EntityIceZertum || this instanceof EntityForisZertum) { return 8; } else if (this instanceof EntityDestroZertum) { return 10; } else if (this instanceof EntityDarkZertum) { return 12; } return 0; } public double evoHealth() { if (this instanceof EntityZertum || this instanceof EntityRedZertum || this instanceof EntityIceZertum) { return 45; } else if (this instanceof EntityMetalZertum || this instanceof EntityForisZertum || this instanceof EntityDestroZertum) { return 50; } else if (this instanceof EntityDarkZertum) { return 60; } return 0; } public double wildHealth() { if (this instanceof EntityZertum || this instanceof EntityRedZertum || this instanceof EntityForisZertum) { return 25; } else if (this instanceof EntityMetalZertum || this instanceof EntityDestroZertum || this instanceof EntityDarkZertum) { return 30; } else if (this instanceof EntityIceZertum) { return 35; } return 0; } public double wildDamage() { if (this instanceof EntityZertum || this instanceof EntityRedZertum || this instanceof EntityMetalZertum || this instanceof EntityIceZertum || this instanceof EntityForisZertum) { return 6; } else if (this instanceof EntityDestroZertum) { return 8; } else if (this instanceof EntityDarkZertum) { return 10; } return 0; } public double babyHealth() { return 11; } public double babyDamage() { if (this instanceof EntityZertum || this instanceof EntityRedZertum || this instanceof EntityMetalZertum) { return 2; } else if (this instanceof EntityIceZertum || this instanceof EntityForisZertum || this instanceof EntityDarkZertum) { return 4; } else if (this instanceof EntityDestroZertum) { return 3; } return 0; } /** * Sets the active target the Task system uses for tracking */ @Override public void setAttackTarget(EntityLivingBase p_70624_1_) { super.setAttackTarget(p_70624_1_); if (p_70624_1_ == null) { this.setAngry(false); } else if (!this.isTamed()) { this.setAngry(true); } } @Override public String getName() { String name = this.getPetName(); if (name != "" && this.isTamed()) { return name; } else { return super.getName(); } } @Override @SideOnly(Side.CLIENT) public boolean getAlwaysRenderNameTagForRender() { return true; } //@formatter:off @Override protected void entityInit() { // TODO super.entityInit(); this.talents = new TalentUtil(this); this.levels = new LevelUtil(this); this.mode = new ModeUtil(this); this.coords = new CoordUtil(this); this.dataWatcher.addObject(DataValues.ownerName, new String("")); //Owner Name this.dataWatcher.addObject(DataValues.ownerID, new String("")); //Owner Id this.dataWatcher.addObject(DataValues.collarCollar, new Byte((byte) EnumDyeColor.RED.getMetadata())); //Collar this.dataWatcher.addObject(DataValues.saddle, Byte.valueOf((byte) 0)); //Saddle this.dataWatcher.addObject(DataValues.dogName, new String("")); //Dog Name this.dataWatcher.addObject(DataValues.talentData, new String("")); //Talent Data this.dataWatcher.addObject(DataValues.hungerTicks, new Integer(Constants.hungerTicks)); //Dog Hunger this.dataWatcher.addObject(DataValues.levelData, new String("0:0")); //Level Data this.dataWatcher.addObject(DataValues.evolve, Byte.valueOf((byte) 0)); //Evolution this.dataWatcher.addObject(DataValues.obeyOthers, new Integer(0)); //Obey Others this.dataWatcher.addObject(DataValues.dogMode, new Integer(0)); //Dog Mode this.dataWatcher.addObject(DataValues.dogCoordination, "-1:-1:-1:-1:-1:-1"); //Dog Coordination this.dataWatcher.addObject(DataValues.mouth, Integer.valueOf(0)); //Mouth this.dataWatcher.addObject(DataValues.beg, new Byte((byte) 0)); //Begging this.dataWatcher.addObject(DataValues.gender, new Byte((byte) 0)); //Gender if(rand.nextInt(2) == 0){ this.setGender(true); }else{ this.setGender(false); } } //@formatter:on @Override public void writeEntityToNBT(NBTTagCompound tagCompound) { super.writeEntityToNBT(tagCompound); tagCompound.setString("ownerId", this.getOwnerID()); tagCompound.setString("ownerName", this.getOwnerName()); tagCompound.setBoolean("Angry", this.isAngry()); tagCompound.setByte("CollarColor", (byte) this.getCollarColor().getDyeDamage()); tagCompound.setBoolean("Saddle", this.isSaddled()); tagCompound.setBoolean("Evolve", this.hasEvolved()); tagCompound.setString("version", Constants.version); tagCompound.setString("dogName", this.getPetName()); tagCompound.setInteger("dogHunger", this.getDogHunger()); tagCompound.setBoolean("willObey", this.willObeyOthers()); tagCompound.setBoolean("dogBeg", this.isBegging()); tagCompound.setBoolean("gender", this.getGender()); this.talents.writeTalentsToNBT(tagCompound); this.levels.writeTalentsToNBT(tagCompound); this.mode.writeToNBT(tagCompound); this.coords.writeToNBT(tagCompound); TalentHelper.writeToNBT(this, tagCompound); } @Override public void readEntityFromNBT(NBTTagCompound tagCompound) { super.readEntityFromNBT(tagCompound); this.saveOwnerName(tagCompound.getString("ownerName")); this.saveOwnerID(tagCompound.getString("ownerId")); this.setAngry(tagCompound.getBoolean("Angry")); this.setSaddled(tagCompound.getBoolean("Saddle")); this.setEvolved(tagCompound.getBoolean("Evolve")); if (tagCompound.hasKey("CollarColor", 99)) { this.setCollarColor(EnumDyeColor.byDyeDamage(tagCompound.getByte("CollarColor"))); } String lastVersion = tagCompound.getString("version"); this.setZertumName(tagCompound.getString("dogName")); this.setDogHunger(tagCompound.getInteger("dogHunger")); this.setWillObeyOthers(tagCompound.getBoolean("willObey")); this.setBegging(tagCompound.getBoolean("dogBeg")); if (tagCompound.hasKey("gender", ) { this.setGender(tagCompound.getBoolean("gender")); } this.talents.readTalentsFromNBT(tagCompound); this.levels.readTalentsFromNBT(tagCompound); this.mode.readFromNBT(tagCompound); this.coords.readFromNBT(tagCompound); TalentHelper.readFromNBT(this, tagCompound); } @Override protected void playStepSound(BlockPos p_180429_1_, Block p_180429_2_) { this.playSound("mob.wolf.step", 0.15F, 1.0F); } /** * Returns the sound this mob makes while it's alive. */ @Override protected String getLivingSound() { this.openMouth(); String sound = TalentHelper.getLivingSound(this); if (!"".equals(sound)) { return sound; } return this.isAngry() ? "mob.wolf.growl" : this.wantToHowl ? Sound.ZertumHowl : (this.rand.nextInt(3) == 0 ? (this.isTamed() && this.getHealth() <= 10.0F ? "mob.wolf.whine" : "mob.wolf.panting") : "mob.wolf.bark"); } /** * Returns the sound this mob makes when it is hurt. */ @Override protected String getHurtSound() { this.openMouth(); return "mob.wolf.hurt"; } /** * Returns the sound this mob makes on death. */ @Override protected String getDeathSound() { this.openMouth(); return "mob.wolf.death"; } /** * Returns the volume for the sounds this mob makes. */ @Override public float getSoundVolume() { return 1F; } /** * Get number of ticks, at least during which the living entity will be * silent. */ @Override public int getTalkInterval() { if ((Boolean) this.objects.get("canseecreeper") == true) { return 40; } else if (this.wantToHowl) { return 150; } else if (this.getHealth() <= 10) { return 20; } else { return 200; } } /** * Returns the item ID for the item the mob drops on death. */ @Override protected void dropFewItems(boolean par1, int par2) { rare = rand.nextInt(20); { if (this.isBurning()) { this.dropItem(ModItems.zertumMeatCooked, 1); } else if (rare <= 12) { this.dropItem(ModItems.zertumMeatRaw, 1); } if (rare <= 6 && !this.isTamed() && !(this instanceof EntityDarkZertum)) { this.dropItem(ModItems.nileGrain, 1); } if (rare <= 6 && !this.isTamed() && (this instanceof EntityDarkZertum)) { this.dropItem(ModItems.darkGrain, 1); } if (this.isSaddled()) { this.dropItem(Items.saddle, 1); } else { } } } /** * 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() // TODO { super.onLivingUpdate(); if (isServer() && this.isWet && !this.isShaking && !this.hasPath() && this.onGround) { this.isShaking = true; this.timeWolfIsShaking = 0.0F; this.prevTimeWolfIsShaking = 0.0F; this.worldObj.setEntityState(this, (byte) ; } if (Constants.IS_HUNGER_ON) { this.prevHungerTick = this.hungerTick; if (this.riddenByEntity == null && !this.isSitting()) { this.hungerTick += 1; } this.hungerTick += TalentHelper.onHungerTick(this, this.hungerTick - this.prevHungerTick); if (this.hungerTick > 400) { this.setDogHunger(this.getDogHunger() - 1); this.hungerTick -= 400; } } if (Constants.DEF_HEALING == true && !this.isChild() && this.getHealth() <= 10 && this.isTamed()) { this.addPotionEffect(new PotionEffect(Potion.regeneration.id, 200)); } if (this.getHealth() != 1) { this.prevHealingTick = this.healingTick; this.healingTick += this.nourishment(); if (this.healingTick >= 6000) { if (this.getHealth() < this.getMaxHealth()) { this.setHealth(this.getHealth() + 1); } this.healingTick = 0; } } if (this.getDogHunger() == 0 && this.worldObj.getWorldInfo().getWorldTime() % 100L == 0L && this.getHealth() > 1) { this.attackEntityFrom(DamageSource.generic, 1); } if (isServer() && this.getAttackTarget() == null && this.isAngry()) { this.setAngry(false); } if (Constants.DEF_HOWL == true) { if (this.isServer()) { if (this.worldObj.isDaytime() && this.isChild()) // TODO { wantToHowl = false; } else if (!this.isChild()) { wantToHowl = true; } } } TalentHelper.onLivingUpdate(this); } /** * Called to update the entity's position/logic. */ @Override public void onUpdate() { super.onUpdate(); this.prevTimeDogBegging = this.timeDogBegging; if (this.isBegging()) { this.timeDogBegging += (1.0F - this.timeDogBegging) * 0.4F; } else { this.timeDogBegging += (0.0F - this.timeDogBegging) * 0.4F; } if (this.openMouthCounter > 0 && ++this.openMouthCounter > 30) { this.openMouthCounter = 0; this.setHorseWatchableBoolean(128, false); } 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; } } this.headRotationCourseOld = this.headRotationCourse; if (this.func_70922_bv()) { this.headRotationCourse += (1.0F - this.headRotationCourse) * 0.4F; } else { this.headRotationCourse += (0.0F - this.headRotationCourse) * 0.4F; } if (this.isWet()) { this.isWet = true; this.isShaking = false; this.timeWolfIsShaking = 0.0F; this.prevTimeWolfIsShaking = 0.0F; } else if ((this.isWet || this.isShaking) && this.isShaking) { if (this.timeWolfIsShaking == 0.0F) { this.playSound("mob.wolf.shake", this.getSoundVolume(), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); } this.prevTimeWolfIsShaking = this.timeWolfIsShaking; this.timeWolfIsShaking += 0.05F; if (this.prevTimeWolfIsShaking >= 2.0F) { if (this.rand.nextInt(15) < this.talents.getLevel("fishing") * 2) { if (this.rand.nextInt(15) < this.talents.getLevel("flamingelemental") * 2 && this instanceof EntityRedZertum) { if (isServer()) { dropItem(Items.cooked_fish, 1); } } else { if (isServer()) { dropItem(Items.fish, 1); } } } this.isWet = false; this.isShaking = false; this.prevTimeWolfIsShaking = 0.0F; this.timeWolfIsShaking = 0.0F; } if (this.timeWolfIsShaking > 0.4F) { float f = (float) this.getEntityBoundingBox().minY; int i = (int) (MathHelper.sin((this.timeWolfIsShaking - 0.4F) * (float) Math.PI) * 7.0F); for (int j = 0; j < i; ++j) { 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; this.worldObj.spawnParticle(EnumParticleTypes.WATER_SPLASH, this.posX + f1, f + 0.8F, this.posZ + f2, this.motionX, this.motionY, this.motionZ, new int[0]); } } } if (this.rand.nextInt(200) == 0 && this.hasEvolved()) { this.hiyaMaster = true; } if (((this.isBegging()) || (this.hiyaMaster)) && (!this.isWolfHappy) && this.hasEvolved()) { this.isWolfHappy = true; this.timeWolfIsHappy = 0.0F; this.prevTimeWolfIsHappy = 0.0F; } else { hiyaMaster = false; } if (this.isWolfHappy) { if (this.timeWolfIsHappy % 1.0F == 0.0F) { if (!(this instanceof EntityMetalZertum)) { this.openMouth(); this.worldObj.playSoundAtEntity(this, "mob.wolf.panting", this.getSoundVolume(), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); } else if (this instanceof EntityMetalZertum) { this.openMouth(); this.worldObj.playSoundAtEntity(this, Sound.MetalZertumPant, this.getSoundVolume(), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); } } this.prevTimeWolfIsHappy = this.timeWolfIsHappy; this.timeWolfIsHappy += 0.05F; if (this.prevTimeWolfIsHappy >= 8.0F) { this.isWolfHappy = false; this.prevTimeWolfIsHappy = 0.0F; this.timeWolfIsHappy = 0.0F; } } if (this.isTamed()) { EntityPlayer player = (EntityPlayer) this.getOwner(); if (player != null) { float distanceToOwner = player.getDistanceToEntity(this); if (distanceToOwner <= 2F && this.hasToy()) { if (isServer()) { this.entityDropItem(new ItemStack(ModItems.toy, 1, 1), 0.0F); } this.setHasToy(false); } } } TalentHelper.onUpdate(this); } public float getWagAngle(float f, float f1) { float f2 = (this.prevTimeWolfIsHappy + (this.timeWolfIsHappy - this.prevTimeWolfIsHappy) * f + f1) / 2.0F; if (f2 < 0.0F) { f2 = 0.0F; } else if (f2 > 2.0F) { f2 %= 2.0F; } return MathHelper.sin(f2 * (float) Math.PI * 11.0F) * 0.3F * (float) Math.PI; } @Override public void moveEntityWithHeading(float strafe, float forward) { if (this.riddenByEntity instanceof EntityPlayer) { 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 = ((EntityPlayer) this.riddenByEntity).moveStrafing * 0.5F; forward = ((EntityPlayer) this.riddenByEntity).moveForward; if (forward <= 0.0F) { forward *= 0.25F; } if (this.onGround) { 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 += -0.4F * f2 * 0.15F; // May change this.motionZ += 0.4F * f3 * 0.15F; } } this.stepHeight = 1.0F; this.jumpMovementFactor = this.getAIMoveSpeed() * 0.2F; if (isServer()) { this.setAIMoveSpeed((float) this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getAttributeValue() / 4); super.moveEntityWithHeading(strafe, forward); } if (this.onGround) { // this.jumpPower = 0.0F; // this.setHorseJumping(false); } this.prevLimbSwingAmount = this.limbSwingAmount; double d0 = this.posX - this.prevPosX; double d1 = this.posZ - this.prevPosZ; float f4 = MathHelper.sqrt_double(d0 * d0 + d1 * d1) * 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); } } @Override public float getAIMoveSpeed() { // TODO double speed = this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getAttributeValue(); speed += TalentHelper.addToMoveSpeed(this); if ((!(this.getAttackTarget() instanceof EntityZertumEntity) && !(this.getAttackTarget() instanceof EntityPlayer)) || this.riddenByEntity instanceof EntityPlayer) { if (this.levels.getLevel() == Constants.maxLevel && this.hasEvolved()) { speed += 0.3D; } else if (this.hasEvolved() && this.levels.getLevel() != Constants.maxLevel) { speed += 0.3D; } } if (this.riddenByEntity instanceof EntityPlayer) { speed /= 4; } return (float) speed; } public float getAIAttackDamage() { double damage = this.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue(); damage += TalentHelper.addToAttackDamage(this); if ((!(this.getAttackTarget() instanceof EntityZertumEntity) && !(this.getAttackTarget() instanceof EntityPlayer))) { if (this.levels.getLevel() == Constants.maxLevel && this.hasEvolved()) { damage += 1.0D; } else if (this.hasEvolved() && this.levels.getLevel() != Constants.maxLevel) { damage += 1.0D; } } return (float) damage; } @Override public void fall(float distance, float damageMultiplier) { if (distance > 1.0F) { this.playSound("game.neutral.hurt.fall.small", 0.4F, 1.0F); } int i = MathHelper.ceiling_float_int(((distance * 0.5F - 3.0F) - TalentHelper.fallProtection(this)) * damageMultiplier); if (i > 0 && !TalentHelper.isImmuneToFalls(this)) { this.attackEntityFrom(DamageSource.fall, i); if (this.riddenByEntity != null) { this.riddenByEntity.attackEntityFrom(DamageSource.fall, i); } Block block = this.worldObj.getBlockState(new BlockPos(this.posX, this.posY - 0.2D - 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); } } } @SideOnly(Side.CLIENT) public boolean isWolfWet() { return this.isWet; } @SideOnly(Side.CLIENT) public float getShadingWhileWet(float p_70915_1_) { return 0.75F + (this.prevTimeWolfIsShaking + (this.timeWolfIsShaking - this.prevTimeWolfIsShaking) * p_70915_1_) / 2.0F * 0.25F; } @SideOnly(Side.CLIENT) public float getShakeAngle(float p_70923_1_, float p_70923_2_) { float f2 = (this.prevTimeWolfIsShaking + (this.timeWolfIsShaking - this.prevTimeWolfIsShaking) * p_70923_1_ + p_70923_2_) / 1.8F; if (f2 < 0.0F) { f2 = 0.0F; } else if (f2 > 1.0F) { f2 = 1.0F; } return MathHelper.sin(f2 * (float) Math.PI) * MathHelper.sin(f2 * (float) Math.PI * 11.0F) * 0.15F * (float) Math.PI; } @SideOnly(Side.CLIENT) public float getInterestedAngle(float partialTickTime) { return (this.prevTimeDogBegging + (this.timeDogBegging - this.prevTimeDogBegging) * partialTickTime) * 0.15F * (float) Math.PI; } @Override public float getEyeHeight() { return this.height * 0.8F; } @Override public int getVerticalFaceSpeed() { return this.isSitting() ? 20 : super.getVerticalFaceSpeed(); } @Override public boolean attackEntityFrom(DamageSource damageSource, float damage) { if (this.isEntityInvulnerable(damageSource)) { return false; } else { if (!TalentHelper.attackEntityFrom(this, damageSource, damage)) { return false; } Entity entity = damageSource.getEntity(); this.aiSit.setSitting(false); if (entity != null && !(entity instanceof EntityPlayer) && !(entity instanceof EntityArrow)) { damage = (damage + 1.0F) / 2.0F; } return super.attackEntityFrom(damageSource, damage); } } @Override public boolean attackEntityAsMob(Entity entity) { // TODO if (!TalentHelper.shouldDamageMob(this, entity)) { return false; } int damage = (int) (4 + (this.getEntityAttribute(SharedMonsterAttributes.attackDamage).getBaseValue()) / 2); damage = TalentHelper.attackEntityAsMob(this, entity, damage); if (entity instanceof EntityZombie) { ((EntityZombie) entity).setAttackTarget(this); } return entity.attackEntityFrom(DamageSource.causeMobDamage(this), damage); } /** * Called when the mob's health reaches 0. */ @Override public void onDeath(DamageSource par1DamageSource) { super.onDeath(par1DamageSource); if (par1DamageSource.getEntity() instanceof EntityPlayer) { EntityPlayer entityplayer = (EntityPlayer) par1DamageSource.getEntity(); { entityplayer.triggerAchievement(ModAchievements.ZertKill); this.dropChestItems(); } } } @Override protected boolean isMovementBlocked() { return this.isPlayerSleeping() || this.ridingEntity != null || this.riddenByEntity instanceof EntityPlayer || super.isMovementBlocked(); } @Override public double getYOffset() { return this.ridingEntity instanceof EntityPlayer ? 0.5D : 0.0D; } @Override public boolean isPotionApplicable(PotionEffect potionEffect) { if (this.getHealth() <= 1) { return false; } if (!TalentHelper.isPostionApplicable(this, potionEffect)) { return false; } return true; } @Override public void setFire(int amount) { if (TalentHelper.setFire(this, amount)) { super.setFire(amount); } } public int foodValue(ItemStack stack) { if (stack == null || stack.getItem() == null) { return 0; } int foodValue = 0; Item item = stack.getItem(); if (stack.getItem() != Items.rotten_flesh && item instanceof ItemFood) { ItemFood itemfood = (ItemFood) item; if (itemfood.isWolfsFavoriteMeat()) { foodValue = 40; } } foodValue = TalentHelper.changeFoodValue(this, stack, foodValue); return foodValue; } public int masterOrder() { // TODO int order = 0; EntityPlayer player = (EntityPlayer) this.getOwner(); if (player != null) { float distanceAway = player.getDistanceToEntity(this); ItemStack itemstack = player.inventory.getCurrentItem(); if (itemstack != null && (itemstack.getItem() instanceof ItemTool) && distanceAway <= 20F) { order = 1; } if (itemstack != null && ((itemstack.getItem() instanceof ItemSword) || (itemstack.getItem() instanceof ItemBow))) { order = 2; } if (itemstack != null && itemstack.getItem() == Items.wheat) { order = 3; } if (itemstack != null && itemstack.getItem() == Items.bone) { order = 4; } } return order; } @Override public boolean canBreatheUnderwater() { return TalentHelper.canBreatheUnderwater(this); } @Override public boolean canInteract(EntityPlayer player) { return this.isOwner(player) || this.willObeyOthers(); } public int nourishment() { int amount = 0; if (this.getDogHunger() > 0) { amount = 40 + 4 * (this.effectiveLevel() + 1); if (isSitting() && this.talents.getLevel("rapidregen") == 5) { amount += 20 + 2 * (this.effectiveLevel() + 1); } if (!this.isSitting()) { amount *= 5 + this.talents.getLevel("rapidregen"); amount /= 10; } } return amount; } public int effectiveLevel() { // TODO return (this.levels.getLevel()) / 10; } public String getPetName() { return this.dataWatcher.getWatchableObjectString(DataValues.dogName); } public void setZertumName(String var1) { this.dataWatcher.updateObject(DataValues.dogName, var1); } public void setWillObeyOthers(boolean flag) { this.dataWatcher.updateObject(DataValues.obeyOthers, flag ? 1 : 0); } public boolean willObeyOthers() { return this.dataWatcher.getWatchableObjectInt(DataValues.obeyOthers) != 0; } public int points() { return this.levels.getLevel() + (this.getGrowingAge() < 0 ? 0 : Constants.startingPoints); } public int spendablePoints() { return this.points() - this.usedPoints(); } public int usedPoints() { return TalentHelper.getUsedPoints(this); } public int deductive(int level) { byte byte0 = 0; switch (level) { case 1: return 1; case 2: return 3; case 3: return 5; case 4: return 7; case 5: return 9; default: return 0; } } public int getDogHunger() { return this.dataWatcher.getWatchableObjectInt(DataValues.hungerTicks); } public void setDogHunger(int par1) { this.dataWatcher.updateObject(DataValues.hungerTicks, MathHelper.clamp_int(par1, 0, Constants.hungerTicks)); } @Override public boolean func_142018_a(EntityLivingBase entityToAttack, EntityLivingBase owner) { if (TalentHelper.canAttackEntity(this, entityToAttack)) { return true; } if (!(entityToAttack instanceof EntityCreeper) && !(entityToAttack instanceof EntityGhast)) { if (entityToAttack instanceof EntityZertumEntity) { EntityZertumEntity entityZertum = (EntityZertumEntity) entityToAttack; if (entityZertum.isTamed() && entityZertum.getOwner() == owner) { return false; } } return entityToAttack instanceof EntityPlayer && owner instanceof EntityPlayer && !((EntityPlayer) owner).canAttackPlayer((EntityPlayer) entityToAttack) ? false : !(entityToAttack instanceof EntityHorse) || !((EntityHorse) entityToAttack).isTame(); } else { return false; } } @Override public boolean canAttackClass(Class p_70686_1_) { if (TalentHelper.canAttackClass(this, p_70686_1_)) { return true; } return super.canAttackClass(p_70686_1_); } public void setHasToy(boolean hasBone) { this.hasToy = hasBone; } public boolean hasToy() { return this.hasToy; } /** * Gets the pitch of living sounds in living entities. */ @Override public float getPitch() { if (!this.isChild()) { return super.getSoundPitch(); } else { return super.getSoundPitch() * 1; } } @Override @SideOnly(Side.CLIENT) public void handleHealthUpdate(byte p_70103_1_) { if (p_70103_1_ == { this.isShaking = true; this.timeWolfIsShaking = 0.0F; this.prevTimeWolfIsShaking = 0.0F; } else { super.handleHealthUpdate(p_70103_1_); } } /** * 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) */ @Override public boolean isBreedingItem(ItemStack itemstack) { return itemstack == null ? false : itemstack.getItem() == ModItems.dogTreat; } @Override public int getMaxSpawnedInChunk() { return 8; } public boolean isAngry() { return (this.dataWatcher.getWatchableObjectByte(DataValues.tame) & 2) != 0; } public void setAngry(boolean p_70916_1_) { byte b0 = this.dataWatcher.getWatchableObjectByte(DataValues.tame); if (p_70916_1_) { this.dataWatcher.updateObject(DataValues.tame, Byte.valueOf((byte) (b0 | 2))); } else { this.dataWatcher.updateObject(DataValues.tame, Byte.valueOf((byte) (b0 & -3))); } } public EnumDyeColor getCollarColor() { return EnumDyeColor.byDyeDamage(this.dataWatcher.getWatchableObjectByte(DataValues.collarCollar) & 15); } public void setCollarColor(EnumDyeColor collarcolor) { this.dataWatcher.updateObject(DataValues.collarCollar, Byte.valueOf((byte) (collarcolor.getDyeDamage() & 15))); } public boolean isSaddled() { return (this.dataWatcher.getWatchableObjectByte(DataValues.saddle) & 1) != 0; } public void setSaddled(boolean p_70900_1_) { if (p_70900_1_) { this.dataWatcher.updateObject(DataValues.saddle, Byte.valueOf((byte) 1)); } else { this.dataWatcher.updateObject(DataValues.saddle, Byte.valueOf((byte) 0)); } } private boolean getHorseWatchableBoolean(int p_110233_1_) { return (this.dataWatcher.getWatchableObjectInt(DataValues.mouth) & p_110233_1_) != 0; } private void setHorseWatchableBoolean(int p_110208_1_, boolean p_110208_2_) { int j = this.dataWatcher.getWatchableObjectInt(DataValues.mouth); if (p_110208_2_) { this.dataWatcher.updateObject(DataValues.mouth, Integer.valueOf(j | p_110208_1_)); } else { this.dataWatcher.updateObject(DataValues.mouth, Integer.valueOf(j & ~p_110208_1_)); } } @SideOnly(Side.CLIENT) public float func_110201_q(float p_110201_1_) { return this.prevMouthOpenness + (this.mouthOpenness - this.prevMouthOpenness) * p_110201_1_; } public void openMouth() { if (isServer()) { this.openMouthCounter = 1; this.setHorseWatchableBoolean(128, true); } } /** * Determines if an entity can be despawned, used on idle far away entities */ @Override protected boolean canDespawn() { return !this.isTamed() && this.ticksExisted > 2400; } @Override public boolean allowLeashing() { return !this.isAngry() && super.allowLeashing(); } public void setBegging(boolean flag) { this.dataWatcher.updateObject(DataValues.beg, Byte.valueOf((byte) (flag ? 1 : 0))); } public boolean isBegging() { return this.dataWatcher.getWatchableObjectByte(DataValues.beg) == 1; } public boolean hasEvolved() // TODO { return (this.dataWatcher.getWatchableObjectByte(DataValues.evolve) & 1) != 0; } public void evolveBoolean(boolean p_70900_1_) { if (p_70900_1_) { this.dataWatcher.updateObject(DataValues.evolve, Byte.valueOf((byte) 1)); } else { this.dataWatcher.updateObject(DataValues.evolve, Byte.valueOf((byte) 0)); } } public void setEvolved(boolean p_70900_1_) { this.evolveBoolean(p_70900_1_); if (p_70900_1_) { if (!this.isChild() && !this.hasEvolved()) { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(this.tamedHealth() + this.effectiveLevel()); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(this.tamedDamage()); } else if (!this.isChild() && this.hasEvolved()) { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(this.evoHealth()); } else { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(this.babyHealth()); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(this.babyDamage()); } } else { if (this.isChild()) { this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(this.babyHealth()); this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(this.babyDamage()); } } } public String getOwnerName() { return this.dataWatcher.getWatchableObjectString(DataValues.ownerName); } public void saveOwnerName(String name) { this.dataWatcher.updateObject(DataValues.ownerName, name); } public String getOwnerID() { return this.dataWatcher.getWatchableObjectString(DataValues.ownerID); } public void saveOwnerID(String id) { this.dataWatcher.updateObject(DataValues.ownerID, id); } /** true = male, false = female */ public boolean getGender() // TODO { return (this.dataWatcher.getWatchableObjectByte(DataValues.gender) & 1) != 0; } /** true = male, false = female */ public void setGender(boolean gender) { if (gender) { this.dataWatcher.updateObject(DataValues.gender, Byte.valueOf((byte) 1)); } else { this.dataWatcher.updateObject(DataValues.gender, Byte.valueOf((byte) 0)); } } /** Custom Zertum Taming Code */ @Override public void tamedFor(EntityPlayer player, boolean successful) { // TODO if (successful) { this.setTamed(true); this.navigator.clearPathEntity(); this.setAttackTarget((EntityLivingBase) null); this.aiSit.setSitting(false); this.setOwnerId(player.getUniqueID().toString()); this.playTameEffect(true); this.worldObj.setEntityState(this, (byte) 7); this.saveOwnerName(player.getDisplayNameString()); this.saveOwnerID(player.getUniqueID().toString()); player.triggerAchievement(ModAchievements.ZertTame); //@formatter:off //System.out.println("ID: " + zertum.getOwnerID() + ", Name: " + zertum.getOwnerName()); //@formatter:on } else { this.playTameEffect(false); this.worldObj.setEntityState(this, (byte) 6); } } public void unTame() { this.setTamed(false); this.setEvolved(false); this.navigator.clearPathEntity(); this.setSitting(false); this.talents.resetTalents(); this.setOwnerId(""); this.saveOwnerName(""); this.setZertumName(""); this.setWillObeyOthers(false); this.mode.setMode(EnumMode.DOCILE); } public void evolveOnClient(EntityPlayer player) { this.setEvolved(true); this.worldObj.playBroadcastSound(1013, new BlockPos(this), 0); player.addChatMessage(ChatHelper.getChatComponent(EnumChatFormatting.GREEN + this.getPetName() + " has been evolved!")); } public void evolveOnServer(EntityZertumEntity entity, EntityPlayer player) { entity.setEvolved(true); entity.worldObj.playBroadcastSound(1013, new BlockPos(entity), 0); player.addChatMessage(ChatHelper.getChatComponent(EnumChatFormatting.GREEN + entity.getPetName() + " has been evolved!")); } }
  9. No? Well, for some reason when the world loads up, the randomizer starts up again and switches the genders
  10. Whoooooa wait, I noticed something whenever I leave and came back to the same world OR close the client and come back, the genders of the entity change to opposite ones
  11. Oh and now my question, how do I have the mating methods check for the genders?
  12. Thanks, that works perfectly and the icons switch exactly
  13. But would it go on forever in entityInt and make the methods I have useless since it comes before the NBT write and read?
  14. I changed it because it was harder to use the bits like the tame methods did. What I want the entity to do is start a randomizer to select either female or male ONLY once, once i start it though it never stops.
  15. I changed the gender tasks to these DataValue @Override protected void entityInit() { // TODO super.entityInit(); this.dataWatcher.addObject(DataValues.gender, new String("")); //Gender } NBT @Override public void writeEntityToNBT(NBTTagCompound tagCompound) { super.writeEntityToNBT(tagCompound); tagCompound.setString("gender", this.getGender()); } @Override public void readEntityFromNBT(NBTTagCompound tagCompound) { super.readEntityFromNBT(tagCompound); this.setGender(tagCompound.getString("gender")); } Methods public void setGender(String gender) { this.dataWatcher.updateObject(DataValues.gender, gender); } public String getGender() { return this.dataWatcher.getWatchableObjectString(DataValues.gender); } Update Event for Gender if (this.isEntityAlive()) { if (this.rand.nextInt(2) == 0) { this.setGender("male"); } else { this.setGender("female"); } } I want it where the entity randomly selects a gender when it spawns, but I have this event so far in onUpdate() in the entity. How do I make it randomly select the gender ONLY one every time it spawns?
  16. I started this.. but with no success DataValues and NBT @Override protected void entityInit() { // TODO super.entityInit(); this.dataWatcher.addObject(DataValues.gender, Byte.valueOf((byte)0)); //Gender } //@formatter:on @Override public void writeEntityToNBT(NBTTagCompound tagCompound) { super.writeEntityToNBT(tagCompound); tagCompound.setBoolean("gender", this.isMale()); } @Override public void readEntityFromNBT(NBTTagCompound tagCompound) { super.readEntityFromNBT(tagCompound); this.setMale(tagCompound.getBoolean("gender")); } Methods public boolean isMale() { return (this.dataWatcher.getWatchableObjectByte(DataValues.gender) & 2) != 0; } public void setMale(boolean isMale) { byte b0 = this.dataWatcher.getWatchableObjectByte(DataValues.gender); if (isMale) { this.dataWatcher.updateObject(DataValues.gender, Byte.valueOf((byte) (b0 | 2))); } else { this.dataWatcher.updateObject(DataValues.gender, Byte.valueOf((byte) (b0 & -3))); } } public boolean isFemale() { return (this.dataWatcher.getWatchableObjectByte(DataValues.gender) & 4) != 0; } public void setFemale(boolean isFemale) { byte b0 = this.dataWatcher.getWatchableObjectByte(DataValues.gender); if (isFemale) { this.dataWatcher.updateObject(DataValues.gender, Byte.valueOf((byte) (b0 | 4))); } else { this.dataWatcher.updateObject(DataValues.gender, Byte.valueOf((byte) (b0 & -5))); } } Event @SubscribeEvent public void genderSet(LivingSpawnEvent event) { if (event.entity instanceof EntityZertumEntity) { EntityZertumEntity dog = (EntityZertumEntity) event.entity; if (dog.getRNG().nextInt(3) == 0) { dog.setMale(true); } else { dog.setFemale(true); } System.out.println("Is Male?: " + dog.isMale() + " Is Female? " + dog.isFemale()); } }
  17. Nvm, I fixed it and also, how do I make it randomly set a gender when the entity spawns?
  18. Ok, I started on something like this but I don't see the texture public static final ResourceLocation male = new ResourceLocation(Constants.modid + ":" + "textures/gui/maleFemaleButtons.png"); ... mc.renderEngine.bindTexture(male); // TODO this.drawTexturedModalRect(topX + 20, topY + 20, 0, 0, 2, 2); Here is the textures I want to be able to see: http://i1319.photobucket.com/albums/t661/Nova_Leary/maleFemaleButtons_zpsg0poboz5.png[/img]
  19. Oh wait, I found something else this.drawTexturedModalRect(x, y, textureSprite, p_175175_4_, p_175175_5_); But with this, I need something that is a TextureAtlasSprite.. I tried making something you would with the ResourecLocation class but it's not visible. And also for the other method, where would I get these states from?
  20. Yes. drawModalRect Hey, I got this: this.drawModalRectWithCustomSizedTexture(x, y, u, v, xMouse, yMouse, textureWidth, textureHeight); So what do I put in these parameters? Here is my GUI code: package common.zeroquest.client.gui; import java.io.IOException; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; import org.apache.commons.lang3.StringUtils; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; import common.zeroquest.api.interfaces.ITalent; import common.zeroquest.api.registry.TalentRegistry; import common.zeroquest.entity.util.ModeUtil.EnumMode; import common.zeroquest.entity.zertum.EntityZertumEntity; import common.zeroquest.lib.Constants; import common.zeroquest.network.PacketHandler; import common.zeroquest.network.imessage.ZertumMode; import common.zeroquest.network.imessage.ZertumName; import common.zeroquest.network.imessage.ZertumObey; import common.zeroquest.network.imessage.ZertumTalents; /** * @author ProPercivalalb */ public class GuiDogInfo extends GuiScreen { public EntityZertumEntity dog; public EntityPlayer player; private ScaledResolution resolution; private final List<GuiTextField> textfieldList = new ArrayList<GuiTextField>(); private GuiTextField nameTextField; private int currentPage = 0; private int maxPages = 1; public int btnPerPages = 0; private final DecimalFormat dfShort = new DecimalFormat("0.00"); public GuiDogInfo(EntityZertumEntity dog, EntityPlayer player) { this.dog = dog; this.player = player; } @Override public void initGui() { super.initGui(); this.buttonList.clear(); this.labelList.clear(); this.textfieldList.clear(); this.resolution = new ScaledResolution(this.mc, this.mc.displayWidth, this.mc.displayHeight); Keyboard.enableRepeatEvents(true); int topX = this.width / 2; int topY = this.height / 2; GuiTextField nameTextField = new GuiTextField(0, this.fontRendererObj, topX - 100, topY + 50, 200, 20) { @Override public boolean textboxKeyTyped(char character, int keyId) { boolean typed = super.textboxKeyTyped(character, keyId); if (typed) { PacketHandler.sendToServer(new ZertumName(dog.getEntityId(), this.getText())); } return typed; } }; nameTextField.setFocused(false); nameTextField.setMaxStringLength(32); nameTextField.setText(this.dog.getPetName()); this.nameTextField = nameTextField; this.textfieldList.add(nameTextField); int size = TalentRegistry.getTalents().size(); int temp = 0; while ((temp + 2) * 21 + 10 < this.resolution.getScaledHeight()) { temp += 1; } this.btnPerPages = temp; if (temp < size) { this.buttonList.add(new GuiButton(-1, 25, temp * 21 + 10, 20, 20, "<")); this.buttonList.add(new GuiButton(-2, 48, temp * 21 + 10, 20, 20, ">")); } if (this.btnPerPages < 1) { this.btnPerPages = 1; } this.maxPages = (int) Math.ceil((double) TalentRegistry.getTalents().size() / (double) this.btnPerPages); if (this.currentPage >= this.maxPages) { this.currentPage = 0; } for (int i = 0; i < this.btnPerPages; ++i) { if ((this.currentPage * this.btnPerPages + i) >= TalentRegistry.getTalents().size()) { continue; } this.buttonList.add(new GuiButton(1 + this.currentPage * this.btnPerPages + i, 25, 10 + i * 21, 20, 20, "+")); } if (this.dog.isOwner(this.player)) { this.buttonList.add(new GuiButton(-5, this.width - 64, topY + 65, 42, 20, String.valueOf(this.dog.willObeyOthers()))); } this.buttonList.add(new GuiButton(-6, topX + 40, topY + 25, 60, 20, this.dog.mode.getMode().modeName())); } @Override public void drawScreen(int xMouse, int yMouse, float partialTickTime) { this.drawDefaultBackground(); // Background int topX = this.width / 2; int topY = this.height / 2; String health = dfShort.format(this.dog.getHealth()); String healthMax = dfShort.format(this.dog.getMaxHealth()); String healthRel = dfShort.format(this.dog.getHealthRelative() * 100); String healthState = health + "/" + healthMax + "(" + healthRel + "%)"; String damageValue = dfShort.format(this.dog.getAIAttackDamage()); String damageState = damageValue; String speedValue = dfShort.format(this.dog.getAIMoveSpeed()); String speedState = speedValue; String tamedString = null; if (this.dog.isTamed()) { if (this.dog.getOwnerName().equals(this.player.getDisplayNameString())) { tamedString = "Yes (You)"; } else { tamedString = "Yes (" + StringUtils.abbreviate(this.dog.getOwnerName(), 22) + ")"; } } String evoString = null; if (!this.dog.hasEvolved() && !this.dog.isChild() && this.dog.levels.getLevel() < Constants.maxLevel) { evoString = "Not at Alpha Level!"; } else if (!this.dog.hasEvolved() && this.dog.isChild() && this.dog.levels.getLevel() < Constants.maxLevel) { evoString = "Too Young!"; } else if (!this.dog.hasEvolved() && !this.dog.isChild() && this.dog.levels.getLevel() >= Constants.maxLevel) { evoString = "Ready!"; } else if (this.dog.hasEvolved() && !this.dog.isChild()) { evoString = "Already Evolved!"; } this.fontRendererObj.drawString("New name:", topX - 100, topY + 38, 4210752); this.fontRendererObj.drawString("Level: " + this.dog.levels.getLevel(), topX - 75, topY + 75, 0xFF10F9); this.fontRendererObj.drawString("Points Left: " + this.dog.spendablePoints(), topX, topY + 75, 0xFFFFFF); this.fontRendererObj.drawString("Health: " + healthState, topX + 190, topY - 170, 0xFFFFFF); this.fontRendererObj.drawString("Damage: " + damageState, topX + 190, topY - 160, 0xFFFFFF); this.fontRendererObj.drawString("Speed: " + speedState, topX + 190, topY - 150, 0xFFFFFF); this.fontRendererObj.drawString("Tamed: " + tamedString, topX + 190, topY - 140, 0xFFFFFF); this.fontRendererObj.drawString("State: " + evoString, topX + 190, topY - 130, 0xFFFFFF); if (this.dog.isOwner(this.player)) { this.fontRendererObj.drawString("Obey Others?", this.width - 76, topY + 55, 0xFFFFFF); } this.drawModalRectWithCustomSizedTexture(x, y, u, v, xMouse, yMouse, textureWidth, textureHeight); for (int i = 0; i < this.btnPerPages; ++i) { if ((this.currentPage * this.btnPerPages + i) >= TalentRegistry.getTalents().size()) { continue; } this.fontRendererObj.drawString(TalentRegistry.getTalent(this.currentPage * this.btnPerPages + i).getLocalisedName(), 50, 17 + i * 21, 0xFFFFFF); } for (GuiTextField field : this.textfieldList) { field.drawTextBox(); } GL11.glDisable(GL12.GL_RESCALE_NORMAL); RenderHelper.disableStandardItemLighting(); GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_DEPTH_TEST); super.drawScreen(xMouse, yMouse, partialTickTime); RenderHelper.enableGUIStandardItemLighting(); // Foreground GL11.glPushMatrix(); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); for (int k = 0; k < this.buttonList.size(); ++k) { GuiButton button = (GuiButton) this.buttonList.get(k); if (button.mousePressed(this.mc, xMouse, yMouse)) { List list = new ArrayList(); if (button.id >= 1 && button.id <= TalentRegistry.getTalents().size()) { ITalent talent = TalentRegistry.getTalent(button.id - 1); list.add(EnumChatFormatting.GREEN + talent.getLocalisedName()); list.add("Level: " + this.dog.talents.getLevel(talent)); list.add(EnumChatFormatting.GRAY + "--------------------------------"); list.addAll(this.splitInto(talent.getLocalisedInfo(), 200, this.mc.fontRendererObj)); } else if (button.id == -1) { list.add(EnumChatFormatting.ITALIC + "Previous Page"); } else if (button.id == -2) { list.add(EnumChatFormatting.ITALIC + "Next Page"); } else if (button.id == -6) { String str = StatCollector.translateToLocal("modeinfo." + button.displayString.toLowerCase()); list.addAll(splitInto(str, 150, this.mc.fontRendererObj)); } this.drawHoveringText(list, xMouse, yMouse, this.mc.fontRendererObj); } } GL11.glPopMatrix(); } @Override protected void actionPerformed(GuiButton button) { if (button.id >= 1 && button.id <= TalentRegistry.getTalents().size()) { ITalent talent = TalentRegistry.getTalent(button.id - 1); int level = this.dog.talents.getLevel(talent); if (level < talent.getHighestLevel(this.dog) && this.dog.spendablePoints() >= talent.getCost(this.dog, level + 1)) { PacketHandler.sendToServer(new ZertumTalents(this.dog.getEntityId(), TalentRegistry.getTalent(button.id - 1).getKey())); } } else if (button.id == -1) { if (this.currentPage > 0) { this.currentPage -= 1; this.initGui(); } } else if (button.id == -2) { if (this.currentPage + 1 < this.maxPages) { this.currentPage += 1; this.initGui(); } } if (button.id == -5) { if (!this.dog.willObeyOthers()) { button.displayString = "true"; PacketHandler.sendToServer(new ZertumObey(this.dog.getEntityId(), true)); } else { button.displayString = "false"; PacketHandler.sendToServer(new ZertumObey(this.dog.getEntityId(), false)); } } if (button.id == -6) { int newMode = (dog.mode.getMode().ordinal() + 1) % EnumMode.values().length; EnumMode mode = EnumMode.values()[newMode]; button.displayString = mode.modeName(); PacketHandler.sendToServer(new ZertumMode(this.dog.getEntityId(), newMode)); } } @Override public void updateScreen() { for (GuiTextField field : this.textfieldList) { field.updateCursorCounter(); } } @Override public void mouseClicked(int xMouse, int yMouse, int mouseButton) throws IOException { super.mouseClicked(xMouse, yMouse, mouseButton); for (GuiTextField field : this.textfieldList) { field.mouseClicked(xMouse, yMouse, mouseButton); } } @Override public void keyTyped(char character, int keyId) { for (GuiTextField field : this.textfieldList) { field.textboxKeyTyped(character, keyId); } if (keyId == Keyboard.KEY_ESCAPE) { this.mc.thePlayer.closeScreen(); } } @Override public void onGuiClosed() { Keyboard.enableRepeatEvents(false); } @Override public boolean doesGuiPauseGame() { return false; } public List splitInto(String text, int maxLength, FontRenderer font) { List list = new ArrayList(); String temp = ""; String[] split = text.split(" "); for (int i = 0; i < split.length; ++i) { String str = split[i]; int length = font.getStringWidth(temp + str); if (length > maxLength) { list.add(temp); temp = ""; } temp += str + " "; if (i == split.length - 1) { list.add(temp); } } return list; } }
  21. Hey, I got a question. Is it possible to add icons (not clickable buttons) to a gui screen that switches to a different one when a condition is met? By the way, the gui screen is opened from an entity and the condition is whether the entity is a female or a male (something I'm trying out to make breeding more realistic and to make it easier to address the entity since it is a tameable entity).
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.