• Recently Browsing

    No registered users viewing this page.

  • Posts

    • updated code: package com.new_swords.Entities; import net.minecraft.block.BlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.SharedMonsterAttributes; import net.minecraft.entity.passive.horse.AbstractChestedHorseEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; 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.DamageSource; import net.minecraft.util.SoundEvent; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class Car extends AbstractChestedHorseEntity { public boolean outofgas; private boolean particle_reducer; public static final DataParameter<Float> Fuel = EntityDataManager.createKey(Car.class, DataSerializers.FLOAT); public Car(EntityType<? extends Car> type, World worldIn) { super(type, worldIn); this.outofgas = false; this.particle_reducer = false; } //forgot to do super.registerAttributes() [Sorry] @Override protected void registerAttributes() { this.getAttributes().registerAttribute(SharedMonsterAttributes.MAX_HEALTH); this.getAttributes().registerAttribute(SharedMonsterAttributes.MOVEMENT_SPEED); this.getAttributes().registerAttribute(SharedMonsterAttributes.FOLLOW_RANGE); this.getAttributes().registerAttribute(SharedMonsterAttributes.KNOCKBACK_RESISTANCE); this.getAttributes().registerAttribute(SharedMonsterAttributes.ARMOR); this.getAttributes().registerAttribute(LivingEntity.SWIM_SPEED); this.getAttributes().registerAttribute(LivingEntity.ENTITY_GRAVITY); this.getAttributes().registerAttribute(SharedMonsterAttributes.ARMOR_TOUGHNESS); this.getAttribute(SharedMonsterAttributes.KNOCKBACK_RESISTANCE).setBaseValue(1.0F); this.getAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.4F); this.getAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(40.0F); this.getAttribute(SharedMonsterAttributes.FOLLOW_RANGE).setBaseValue(0.0F); this.getAttribute(SharedMonsterAttributes.ARMOR).setBaseValue(2.0F); this.getAttribute(SharedMonsterAttributes.ARMOR_TOUGHNESS).setBaseValue(2.0F); this.getAttribute(LivingEntity.SWIM_SPEED).setBaseValue(0.05F); } @Override protected void registerData() { super.registerData(); this.dataManager.register(Fuel, this.movedDistance); } @Override protected void registerGoals() { } @Override public boolean canBeLeashedTo(PlayerEntity player) { return false; } @Override public void readAdditional(@NotNull CompoundNBT compound) { super.readAdditional(compound); this.setFuelValue(compound.getFloat("movedDistance")); } @Override public void writeAdditional(@NotNull CompoundNBT compound) { super.writeAdditional(compound); compound.putFloat("movedDistance", this.movedDistance); } @Override public void tick() { super.tick(); outofgas = this.movedDistance > 2000; this.particle_reducer = !this.particle_reducer; World world = this.getEntityWorld(); Vec3d vec = new Vec3d(this.getPosX(),this.getPosY(), this.getPosZ()); Vec3d speedvec = new Vec3d(-0.3d, 0.2d, 0d); vec.add(this.getLookVec()); this.getDataManager().set(Fuel, this.movedDistance); if(!this.outofgas && this.particle_reducer) world.addParticle(ParticleTypes.SQUID_INK, vec.x, vec.y, vec.z, speedvec.x, speedvec.y, speedvec.z); // this.setHealth(this.getDataManager().get(Car.health)); } public void Refuel(){ this.distanceWalkedModified = 0; this.distanceWalkedOnStepModified = 0; this.prevDistanceWalkedModified = 0; this.prevMovedDistance = 0; this.movedDistance = 0; LOGGER.info("REFUELED"); } public void setFuelValue(float value){ this.distanceWalkedModified = value; this.distanceWalkedOnStepModified = value; this.prevDistanceWalkedModified = value; this.prevMovedDistance = value; this.movedDistance = value; } @Override protected boolean canMate() { return false; } @Override public boolean canBreed() { return false; } @Nullable @Override protected SoundEvent getDeathSound() { return null; } @Nullable @Override protected SoundEvent getAmbientSound() { return null; } @Nullable @Override protected SoundEvent getHurtSound(DamageSource damageSourceIn) { return null; } @Override protected void playStepSound(BlockPos pos, BlockState blockIn) { // this.playSound(ModSoundEvents.MOVING_CAR, 0.5F, 1.0F); } @Override public void setMoveStrafing(float amount) {} @Override public boolean hasChest() { return true; } @Override public boolean isTame() { return true; } @Override public boolean canEatGrass() { return false; } @Override public boolean isHorseSaddled() { return !this.outofgas; } @Override public boolean canBeSteered() { return !this.outofgas; } @Override public boolean isBreedingItem(@NotNull ItemStack stack) { return false; } @Override public boolean wearsArmor() { return false; } @Override public boolean canDespawn(double distanceToClosestPlayer) { return false; } @Override public boolean canJump() { return false; } @Override public boolean canBeRiddenInWater() { return false; } @Override public boolean canBePushed() { return false; } @Override public boolean canBeSaddled() { return false; } @Override protected int getInventorySize() { return 29; } @Override public int getInventoryColumns() { return 9; } }
    • This is completely broken and will crash servers.   You must only only set data manager values on the server, currently you are doing it on both logical sides.
    • I am syncing them in the tick function. It still is not working.
    • You now have a data duplication problem. You are storing the value both in the field (movedDistance) and in the data manager. This requires you to keep it in sync, which is a pain. Try to avoid storing duplicate data.
    • oh wait I just realized how dumb I was this is what it should be: this.dataManager.register(Fuel, this.movedDistance);  
  • Topics

  • Who's Online (See full list)