Posted April 8, 20205 yr I have a float Capabilty for players and I have it so that it increases by 0.05 when a certain item is used. But when I use the item it does not increase exactly. (For example, instead of going from 1.05 to 1.1, it goes to 1.0999999). How would I fix this? Relevant code: // SkillLevel.java public class SkillLevel implements ISkillLevel { private float level = 1F; @Override public void remove(float num) { this.level -= num; } @Override public void add(float num) { this.level += num; } @Override public void set(float num) { this.level = num; } @Override public float getLevel() { return this.level; } public static class SkillLevelProvider implements ICapabilitySerializable<FloatNBT> { @CapabilityInject(ISkillLevel.class) public static Capability<ISkillLevel> SKILL_CAP; private LazyOptional<ISkillLevel> instance = LazyOptional.of(SKILL_CAP::getDefaultInstance); @Nonnull @Override public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) { return SKILL_CAP.orEmpty(cap, instance); } @Override public FloatNBT serializeNBT() { return (FloatNBT) SKILL_CAP.getStorage().writeNBT(SKILL_CAP, instance.orElseThrow(() -> new IllegalArgumentException("LazyOptional cannot be empty!")), null); } @Override public void deserializeNBT(FloatNBT nbt) { SKILL_CAP.getStorage().readNBT(SKILL_CAP, instance.orElseThrow(() -> new IllegalArgumentException("LazyOptional cannot be empty!")), null, nbt); } } @Override public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) { ISkillLevel skill = playerIn.getCapability(SkillLevel.SkillLevelProvider.SKILL_CAP).orElse(null); skill.add(0.05f); System.out.println(skill.getLevel()); } Thanks!
April 8, 20205 yr 5 minutes ago, ScottBot10 said: How would I fix this? Make a computer that has infinite accuracy. Your problem lies with the precision of floating point notation. VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator.
April 8, 20205 yr https://floating-point-gui.de/ Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given.
April 8, 20205 yr Author 2 minutes ago, diesieben07 said: Another one: https://www.youtube.com/watch?v=PZRI1IfStY0 Either change your units so you don't need fractions (e.g. don't store $2.55, store 255 cents) or use BigDecimal. Thanks! Works now.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.