• Recently Browsing

    No registered users viewing this page.

  • Posts

    • Hello everyone , I'm back witn new problem. I made simple tameable water mob. But for some reason it drowning when it become to water. If someone know fixing of this problem - please answer.   Mob's AI: package com.orca.fish; import net.minecraft.block.BlockState; import net.minecraft.entity.AgeableEntity; import net.minecraft.entity.Entity; import net.minecraft.entity.EntitySize; import net.minecraft.entity.EntityType; import net.minecraft.entity.IAngerable; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.MobEntity; import net.minecraft.entity.Pose; import net.minecraft.entity.ai.attributes.AttributeModifierMap; import net.minecraft.entity.ai.attributes.Attributes; import net.minecraft.entity.ai.goal.BreedGoal; import net.minecraft.entity.ai.goal.FindWaterGoal; import net.minecraft.entity.ai.goal.FollowOwnerGoal; import net.minecraft.entity.ai.goal.LeapAtTargetGoal; import net.minecraft.entity.ai.goal.LookAtGoal; import net.minecraft.entity.ai.goal.LookRandomlyGoal; import net.minecraft.entity.ai.goal.MeleeAttackGoal; import net.minecraft.entity.ai.goal.NearestAttackableTargetGoal; import net.minecraft.entity.ai.goal.OwnerHurtByTargetGoal; import net.minecraft.entity.ai.goal.OwnerHurtTargetGoal; import net.minecraft.entity.ai.goal.PanicGoal; import net.minecraft.entity.ai.goal.RandomSwimmingGoal; import net.minecraft.entity.ai.goal.RandomWalkingGoal; import net.minecraft.entity.ai.goal.SitGoal; import net.minecraft.entity.ai.goal.TemptGoal; import net.minecraft.entity.monster.CreeperEntity; import net.minecraft.entity.monster.GhastEntity; import net.minecraft.entity.passive.AnimalEntity; import net.minecraft.entity.passive.FoxEntity; import net.minecraft.entity.passive.TameableEntity; import net.minecraft.entity.passive.WolfEntity; import net.minecraft.entity.passive.horse.AbstractHorseEntity; import net.minecraft.entity.passive.horse.LlamaEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.projectile.AbstractArrowEntity; import net.minecraft.item.DyeColor; import net.minecraft.item.DyeItem; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.item.crafting.Ingredient; import net.minecraft.nbt.CompoundNBT; import net.minecraft.network.datasync.DataParameter; import net.minecraft.network.datasync.DataSerializers; import net.minecraft.network.datasync.EntityDataManager; import net.minecraft.particles.ParticleTypes; import net.minecraft.util.ActionResultType; import net.minecraft.util.DamageSource; import net.minecraft.util.Hand; import net.minecraft.util.RangedInteger; import net.minecraft.util.SoundEvent; import net.minecraft.util.SoundEvents; import net.minecraft.util.TickRangeConverter; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import javax.annotation.Nullable; import java.util.UUID; public class GoldFishEntity extends TameableEntity implements IAngerable { private static final DataParameter<Boolean> BEGGING = EntityDataManager.createKey(WolfEntity.class, DataSerializers.BOOLEAN); private static final DataParameter<Integer> COLLAR_COLOR = EntityDataManager.createKey(WolfEntity.class, DataSerializers.VARINT); private static final Ingredient TEMPTATION_ITEMS = Ingredient.fromItems(Items.DANDELION); private static final DataParameter<Integer> field_234232_bz_ = EntityDataManager.createKey(WolfEntity.class, DataSerializers.VARINT); private float headRotationCourse; private float headRotationCourseOld; private boolean isWet; private boolean isShaking; private float timeWolfIsShaking; private float prevTimeWolfIsShaking; private static final RangedInteger field_234230_bG_ = TickRangeConverter.func_233037_a_(20, 39); private UUID field_234231_bH_; public GoldFishEntity(EntityType<? extends GoldFishEntity> type, World worldIn) { super(type, worldIn); this.setTamed(false); } protected void registerGoals() { this.goalSelector.addGoal(1, new FindWaterGoal(this)); this.goalSelector.addGoal(1, new PanicGoal(this, 0.15D)); this.goalSelector.addGoal(2, new SitGoal(this)); this.goalSelector.addGoal(3, new AvoidEntityGoal(this, PlayerEntity.class, 24.0F, 1.5D, 1.5D)); this.goalSelector.addGoal(4, new LeapAtTargetGoal(this, 0.4F)); this.goalSelector.addGoal(5, new MeleeAttackGoal(this, 1.0D, true)); this.goalSelector.addGoal(6, new FollowOwnerGoal(this, 2.0D, 10.0F, 2.0F, false)); this.goalSelector.addGoal(7, new RandomWalkingGoal(this, 1.0D)); this.goalSelector.addGoal(7, new RandomSwimmingGoal(this, 1.0D, 10)); this.goalSelector.addGoal(7, new BreedGoal(this, 1.0D)); this.goalSelector.addGoal(9, new TemptGoal(this, 0.2D, false, TEMPTATION_ITEMS)); this.goalSelector.addGoal(10, new LookAtGoal(this, PlayerEntity.class, 8.0F)); this.goalSelector.addGoal(10, new LookRandomlyGoal(this)); this.targetSelector.addGoal(1, new OwnerHurtByTargetGoal(this)); this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this)); this.targetSelector.addGoal(4, new NearestAttackableTargetGoal<>(this, FoxEntity.class, 10, true, false, this::func_233680_b_)); } public static AttributeModifierMap.MutableAttribute func_234233_eS_() { return MobEntity.func_233666_p_().func_233815_a_(Attributes.field_233821_d_, (double) 0.3F).func_233815_a_(Attributes.field_233818_a_, 3.0D).func_233815_a_(Attributes.field_233823_f_, 1.0D); } protected void registerData() { super.registerData(); this.dataManager.register(BEGGING, false); this.dataManager.register(COLLAR_COLOR, DyeColor.RED.getId()); this.dataManager.register(field_234232_bz_, 0); } protected void playStepSound(BlockPos pos, BlockState blockIn) { this.playSound(SoundEvents.ENTITY_PUFFER_FISH_FLOP, 0.15F, 1.0F); } public void writeAdditional(CompoundNBT compound) { super.writeAdditional(compound); compound.putByte("CollarColor", (byte) this.getCollarColor().getId()); this.func_233682_c_(compound); } /** * (abstract) Protected helper method to read subclass entity data from NBT. */ public void readAdditional(CompoundNBT compound) { super.readAdditional(compound); if (compound.contains("CollarColor", 99)) { this.setCollarColor(DyeColor.byId(compound.getInt("CollarColor"))); } this.func_241358_a_((ServerWorld) this.world, compound); } protected SoundEvent getAmbientSound() { if (this.func_233678_J__()) { return null; } else if (this.rand.nextInt(3) == 0) { return this.isTamed() && this.getHealth() < 10.0F ? SoundEvents.ENTITY_FISH_SWIM : SoundEvents.ENTITY_FISH_SWIM; } else { return SoundEvents.ENTITY_FISH_SWIM; } } protected SoundEvent getHurtSound(DamageSource damageSourceIn) { return SoundEvents.ENTITY_TROPICAL_FISH_HURT; } protected SoundEvent getDeathSound() { return SoundEvents.ENTITY_TROPICAL_FISH_DEATH; } /** * Returns the volume for the sounds this mob makes. */ protected float getSoundVolume() { return 0.4F; } /** * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons * use this to react to sunlight and start to burn. */ public void livingTick() { super.livingTick(); if (!this.world.isRemote && this.isWet && !this.isShaking && !this.hasPath() && this.onGround) { this.isShaking = true; this.timeWolfIsShaking = 0.0F; this.prevTimeWolfIsShaking = 0.0F; this.world.setEntityState(this, (byte) 8); } if (!this.world.isRemote) { this.func_241359_a_((ServerWorld) this.world, true); } } /** * Called to update the entity's position/logic. */ public void tick() { super.tick(); if (this.isAlive()) { this.headRotationCourseOld = this.headRotationCourse; if (this.isBegging()) { this.headRotationCourse += (0.0F - this.headRotationCourse) * 0.0F; } else { this.headRotationCourse += (0.0F - this.headRotationCourse) * 0.0F; } if (this.isInWaterRainOrBubbleColumn()) { this.isWet = true; if (this.isShaking && !this.world.isRemote) { this.world.setEntityState(this, (byte) 56); this.func_242326_eZ(); } } else if ((this.isWet || this.isShaking) && this.isShaking) { if (this.timeWolfIsShaking == 0.0F) { this.playSound(SoundEvents.ENTITY_RABBIT_AMBIENT, this.getSoundVolume(), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.0F + 0.0F); } this.prevTimeWolfIsShaking = this.timeWolfIsShaking; this.timeWolfIsShaking += 0.0F; if (this.prevTimeWolfIsShaking >= 0.0F) { this.isWet = false; this.isShaking = false; this.prevTimeWolfIsShaking = 0.0F; this.timeWolfIsShaking = 0.0F; } if (this.timeWolfIsShaking > 0.0F) { float f = (float) this.getPosY(); int i = (int) (MathHelper.sin((this.timeWolfIsShaking - 0.0F) * (float) Math.PI) * 0.0F); Vector3d vector3d = this.getMotion(); for (int j = 0; j < i; ++j) { float f1 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.getWidth() * 0.5F; float f2 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.getWidth() * 0.5F; this.world.addParticle(ParticleTypes.SPLASH, this.getPosX() + (double) f1, (double) (f + 0.8F), this.getPosZ() + (double) f2, vector3d.x, vector3d.y, vector3d.z); } } } } } private void func_242326_eZ() { this.isShaking = false; this.timeWolfIsShaking = 0.0F; this.prevTimeWolfIsShaking = 0.0F; } /** * Called when the mob's health reaches 0. */ public void onDeath(DamageSource cause) { this.isWet = false; this.isShaking = false; this.prevTimeWolfIsShaking = 0.0F; this.timeWolfIsShaking = 0.0F; super.onDeath(cause); } /** * True if the wolf is wet */ @OnlyIn(Dist.CLIENT) public boolean isWolfWet() { return this.isWet; } /** * Used when calculating the amount of shading to apply while the wolf is wet. */ @OnlyIn(Dist.CLIENT) public float getShadingWhileWet(float p_70915_1_) { return Math.min(0.5F + MathHelper.lerp(p_70915_1_, this.prevTimeWolfIsShaking, this.timeWolfIsShaking) / 0.0F * 0.0F, 0.0F); } @OnlyIn(Dist.CLIENT) public float getShakeAngle(float p_70923_1_, float p_70923_2_) { float f = (MathHelper.lerp(p_70923_1_, this.prevTimeWolfIsShaking, this.timeWolfIsShaking) + p_70923_2_) / 0.0F; if (f < 0.0F) { f = 0.0F; } else if (f > 0.0F) { f = 0.0F; } return MathHelper.sin(f * (float) Math.PI) * MathHelper.sin(f * (float) Math.PI * 0.0F) * 0.0F * (float) Math.PI; } @OnlyIn(Dist.CLIENT) public float getInterestedAngle(float p_70917_1_) { return MathHelper.lerp(p_70917_1_, this.headRotationCourseOld, this.headRotationCourse) * 0.0F * (float) Math.PI; } protected float getStandingEyeHeight(Pose poseIn, EntitySize sizeIn) { return sizeIn.height * 0.8F; } /** * The speed it takes to move the entityliving's rotationPitch through the faceEntity method. This is only currently * use in wolves. */ public int getVerticalFaceSpeed() { return this.func_233684_eK_() ? 20 : super.getVerticalFaceSpeed(); } /** * Called when the entity is attacked. */ public boolean attackEntityFrom(DamageSource source, float amount) { if (this.isInvulnerableTo(source)) { return false; } else { Entity entity = source.getTrueSource(); this.func_233687_w_(false); if (entity != null && !(entity instanceof PlayerEntity) && !(entity instanceof AbstractArrowEntity)) { amount = (amount + 1.0F) / 2.0F; } return super.attackEntityFrom(source, amount); } } public boolean attackEntityAsMob(Entity entityIn) { boolean flag = entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), (float) ((int) this.func_233637_b_(Attributes.field_233823_f_))); if (flag) { this.applyEnchantments(this, entityIn); } return flag; } public void setTamed(boolean tamed) { super.setTamed(tamed); if (tamed) { this.getAttribute(Attributes.field_233818_a_).setBaseValue(15.0D); this.setHealth(30.0F); } else { this.getAttribute(Attributes.field_233818_a_).setBaseValue(3.0D); } this.getAttribute(Attributes.field_233823_f_).setBaseValue(2.0D); } public ActionResultType func_230254_b_(PlayerEntity p_230254_1_, Hand p_230254_2_) { ItemStack itemstack = p_230254_1_.getHeldItem(p_230254_2_); Item item = itemstack.getItem(); if (this.world.isRemote) { boolean flag = this.isOwner(p_230254_1_) || this.isTamed() || item == Items.SEAGRASS && !this.isTamed() && !this.func_233678_J__(); return flag ? ActionResultType.CONSUME : ActionResultType.PASS; } else { if (this.isTamed()) { if (this.isBreedingItem(itemstack) && this.getHealth() < this.getMaxHealth()) { if (!p_230254_1_.abilities.isCreativeMode) { itemstack.shrink(1); } this.heal((float) item.getFood().getHealing()); return ActionResultType.SUCCESS; } if (!(item instanceof DyeItem)) { ActionResultType actionresulttype = super.func_230254_b_(p_230254_1_, p_230254_2_); if ((!actionresulttype.isSuccessOrConsume() || this.isChild()) && this.isOwner(p_230254_1_)) { this.func_233687_w_(!this.func_233685_eM_()); this.isJumping = false; this.navigator.clearPath(); this.setAttackTarget((LivingEntity) null); return ActionResultType.SUCCESS; } return actionresulttype; } DyeColor dyecolor = ((DyeItem) item).getDyeColor(); if (dyecolor != this.getCollarColor()) { this.setCollarColor(dyecolor); if (!p_230254_1_.abilities.isCreativeMode) { itemstack.shrink(1); } return ActionResultType.SUCCESS; } } else if (item == Items.SEAGRASS && !this.func_233678_J__()) { if (!p_230254_1_.abilities.isCreativeMode) { itemstack.shrink(1); } if (this.rand.nextInt(3) == 0 && !net.minecraftforge.event.ForgeEventFactory.onAnimalTame(this, p_230254_1_)) { this.setTamedBy(p_230254_1_); this.navigator.clearPath(); this.setAttackTarget((LivingEntity) null); this.func_233687_w_(true); this.world.setEntityState(this, (byte) 7); } else { this.world.setEntityState(this, (byte) 6); } return ActionResultType.SUCCESS; } return super.func_230254_b_(p_230254_1_, p_230254_2_); } } /** * Handler for {@link World#setEntityState} */ @OnlyIn(Dist.CLIENT) public void handleStatusUpdate(byte id) { if (id == 8) { this.isShaking = true; this.timeWolfIsShaking = 0.0F; this.prevTimeWolfIsShaking = 0.0F; } else if (id == 56) { this.func_242326_eZ(); } else { super.handleStatusUpdate(id); } } @OnlyIn(Dist.CLIENT) public float getTailRotation() { if (this.func_233678_J__()) { return 1.5393804F; } else { return this.isTamed() ? (0.0F - (this.getMaxHealth() - this.getHealth()) * 0.00F) * (float) Math.PI : ((float) Math.PI / 0F); } } /** * Checks if the parameter is an item which this animal can be fed to breed it (wheat, carrots or seeds depending on * the animal type) */ public boolean isBreedingItem(ItemStack stack) { return TEMPTATION_ITEMS.test(stack); } /** * Will return how many at most can spawn in a chunk at once. */ public int getMaxSpawnedInChunk() { return 8; } public int func_230256_F__() { return this.dataManager.get(field_234232_bz_); } public void func_230260_a__(int p_230260_1_) { this.dataManager.set(field_234232_bz_, p_230260_1_); } public void func_230258_H__() { this.func_230260_a__(field_234230_bG_.func_233018_a_(this.rand)); } @Nullable public UUID func_230257_G__() { return this.field_234231_bH_; } public void func_230259_a_(@Nullable UUID p_230259_1_) { this.field_234231_bH_ = p_230259_1_; } public DyeColor getCollarColor() { return DyeColor.byId(this.dataManager.get(COLLAR_COLOR)); } public void setCollarColor(DyeColor collarcolor) { this.dataManager.set(COLLAR_COLOR, collarcolor.getId()); } public GoldFishEntity func_241840_a(ServerWorld p_241840_1_, AgeableEntity p_241840_2_) { GoldFishEntity goldfishentity = FishInit.GOLDFISH.get().create(p_241840_1_); UUID uuid = this.getOwnerId(); if (uuid != null) { goldfishentity.setOwnerId(uuid); goldfishentity.setTamed(true); } return goldfishentity; } public void setBegging(boolean beg) { this.dataManager.set(BEGGING, beg); } /** * Returns true if the mob is currently able to mate with the specified mob. */ public boolean canMateWith(AnimalEntity otherAnimal) { if (otherAnimal == this) { return false; } else if (!this.isTamed()) { return false; } else if (!(otherAnimal instanceof GoldFishEntity)) { return false; } else { GoldFishEntity goldfishentity = (GoldFishEntity) otherAnimal; if (!goldfishentity.isTamed()) { return false; } else if (goldfishentity.func_233684_eK_()) { return false; } else { return this.isInLove() && goldfishentity.isInLove(); } } } public boolean isBegging() { return this.dataManager.get(BEGGING); } public boolean shouldAttackEntity(LivingEntity target, LivingEntity owner) { if (!(target instanceof CreeperEntity) && !(target instanceof GhastEntity)) { if (target instanceof GoldFishEntity) { GoldFishEntity goldfishentity = (GoldFishEntity) target; return !goldfishentity.isTamed() || goldfishentity.getOwner() != owner; } else if (target instanceof PlayerEntity && owner instanceof PlayerEntity && !((PlayerEntity) owner).canAttackPlayer((PlayerEntity) target)) { return false; } else if (target instanceof AbstractHorseEntity && ((AbstractHorseEntity) target).isTame()) { return false; } else { return !(target instanceof TameableEntity) || !((TameableEntity) target).isTamed(); } } else { return false; } } public boolean canBeLeashedTo(PlayerEntity player) { return !this.func_233678_J__() && super.canBeLeashedTo(player); } @OnlyIn(Dist.CLIENT) public Vector3d func_241205_ce_() { return new Vector3d(0.0D, (double) (0.6F * this.getEyeHeight()), (double) (this.getWidth() * 0.4F)); } class AvoidEntityGoal<T extends LivingEntity> extends net.minecraft.entity.ai.goal.AvoidEntityGoal<T> { private final GoldFishEntity fish; public AvoidEntityGoal(GoldFishEntity fishIn, Class<T> entityClassToAvoidIn, float avoidDistanceIn, double farSpeedIn, double nearSpeedIn) { super(fishIn, entityClassToAvoidIn, avoidDistanceIn, farSpeedIn, nearSpeedIn); this.fish = fishIn; } /** * Returns whether execution should begin. You can also read and cache any state necessary for execution in this * method as well. */ public boolean shouldExecute() { if (super.shouldExecute() && this.avoidTarget instanceof LlamaEntity) { return !this.fish.isTamed() && this.avoidLlama((LlamaEntity) this.avoidTarget); } else { return false; } } private boolean avoidLlama(LlamaEntity llamaIn) { return llamaIn.getStrength() >= GoldFishEntity.this.rand.nextInt(5); } /** * Execute a one shot task or start executing a continuous task */ public void startExecuting() { GoldFishEntity.this.setAttackTarget((LivingEntity) null); super.startExecuting(); } /** * Keep ticking a continuous task that has already been started */ public void tick() { GoldFishEntity.this.setAttackTarget((LivingEntity) null); super.tick(); } } }
    • Gosh, if only Vanilla had some differentiation in how much hunger vanilla food restored you could go look at those food stats...  
    • What method would you want to use? I pointed you toward that class for code reference, not to actually use one of its methods...just wanted you to take a look at how the vanilla horizontal Hotbar is renderer and figure out how to create a vertical one. Anyway if you really need to use a private method, you can use access transformers and change the method visibility to public
    • Food.Builder().hunger(hunger_bars_restored_number) This is a thing ^^^, and also all the other operations you mentioned are already possibile. What are you exactly trying to do?
    • I've been trying to open a GUI when an item is right clicked. I'm having trouble getting it to open.  I need to also figure out how to create a tile entity for this, if possible?   Thanks.
  • Topics

  • Who's Online (See full list)