-
Posts
1061 -
Joined
-
Last visited
Everything posted by NovaViper
-
[1.8][SOLVED]Adding Mod Information to Title Screen
NovaViper replied to NovaViper's topic in Modder Support
Ah.. and yeah, that would be very annoying -
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
-
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")); } }
-
@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 } }
-
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; } }
-
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!")); } }
-
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?
-
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()); } }
-
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]
-
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?
-
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; } }
-
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).