Posted August 14, 201510 yr I have a problem. I coded a custom Entity, but the interactFirst method does not work. I tried everything and lookad at vanilla entities, but nothing Here is my code: package itsamysterious.mods.reallifemod.core.vehicles; import org.lwjgl.input.Keyboard; import org.lwjgl.util.vector.Vector3f; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.DamageSource; import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class EntityVehicle extends Entity { private VehicleFile file; public double backWheelRotation; public double wheelRotL; public double steeringangle; private boolean isEmpty; private boolean canDoStuff; private EntitySeat[] seats; private double vehicleX; private double vehicleY; private double vehicleZ; private float vehicleYaw; private float vehiclePitch; private double velocityY; private double velocityX; private double velocityZ; public double speed; public EntityVehicle(World world) { super(world); this.setSize(1, 2); this.canDoStuff = false; this.isEmpty = true; this.preventEntitySpawning = true; } public EntityVehicle(World world, VehicleFile file, double x, double y, double z) { this(world); this.setFile(file); this.seats = new EntitySeat[file.numDrivers]; this.createSeats(world); this.setPosition(x, y, z); this.canDoStuff = true; } private void createSeats(World w) { for (int i = 0; i < this.seats.length; i++) { System.out.println(seats.length); this.seats = new EntitySeat(w); w.spawnEntityInWorld(seats); } this.canDoStuff = true; } @Override @SideOnly(Side.CLIENT) public void setVelocity(double p_70016_1_, double p_70016_3_, double p_70016_5_) { this.velocityX = (float) (this.motionX = p_70016_1_); this.velocityY = (float) (this.motionY = p_70016_3_); this.velocityZ = (float) (this.motionZ = p_70016_5_); } @Override public boolean attackEntityFrom(DamageSource p_70097_1_, float p_70097_2_) { return false; } @Override public void entityInit() { this.dataWatcher.addObject(17, new Integer(0)); this.dataWatcher.addObject(18, new Integer(1)); this.dataWatcher.addObject(19, new Float(0.0F)); } @Override public void onUpdate() { super.onUpdate(); this.prevPosX = this.posX; this.prevPosY = this.posY; this.prevPosZ = this.posZ; if (this.canDoStuff) { for (int i = 0; i < seats.length; i++) { Vector3f f = this.file.ridersPositions; this.seats.setPosition(this.posX + f.x, this.posY + f.y + 0.5, this.posZ + f.z); } } // ------------------------------------------------------------------------------------------ if (Keyboard.isKeyDown(Keyboard.KEY_RETURN)) { if (this.worldObj.getClosestPlayer(posX, posY, posZ, 5.0F) != null) { EntityPlayer entity = this.worldObj.getClosestPlayer(posX, posY, posZ, 5.0F); this.interactFirst(entity); } } // ------------------------------------------------------------------------------------------ wheelRotL+=speed; backWheelRotation+=speed; this.move(); } public void move() { if(this.riddenByEntity!=null){ if (Keyboard.isKeyDown(Keyboard.KEY_A)) { if(steeringangle < 30){ steeringangle += 5; } } else if (Keyboard.isKeyDown(Keyboard.KEY_D) ) { if(steeringangle > -30){ steeringangle -= 5; } } else { if (steeringangle > 0) { steeringangle -= 2.5; if (steeringangle > 0) { steeringangle -= 2.5; } } if (steeringangle < 0) { steeringangle += 2.5; if (steeringangle < 0) { steeringangle += 2.5; } } } if(Keyboard.isKeyDown(Keyboard.KEY_W)){ riddenByEntity.playSound("reallifemod:lambo_runs", 1.0f, 1.0f); if(speed<file.maxSpeed){ speed+=file.acceleration*20; } } if(Keyboard.isKeyDown(Keyboard.KEY_S)){ if(speed>-file.maxReverseSpeed){ speed-=file.acceleration*20; } } if(Keyboard.isKeyDown(Keyboard.KEY_SPACE)){ if(speed<-5){ speed+=5; }else if(speed<0){ speed=0; } if(speed>5){ speed-=5; }else{ speed=0; } } double k=0; double R=0; if(steeringangle!=0){ R=file.dimensions.z/steeringangle; k=1/R; } rotationYaw-=((speed*1000)/60/60/20)*k; motionX=-Math.sin(Math.toRadians(rotationYaw))*((speed*1000)/60/60/20); motionZ=Math.cos(Math.toRadians(rotationYaw))*((speed*1000)/60/60/20); moveEntity(motionX, motionY, motionZ); speed*=0.988888881; } } @Override public void readEntityFromNBT(NBTTagCompound tagCompund) { } @Override public void writeEntityToNBT(NBTTagCompound tagCompound) { } @Override public boolean interactFirst(EntityPlayer player) { if (this.riddenByEntity == null) { player.mountEntity(this); } return true; } @Override public void updateRiderPosition() { if (riddenByEntity != null) { double rad = Math.toRadians(rotationYaw); double newX = this.posX; double newY = this.posY; double newZ = this.posZ; this.riddenByEntity.setPosition(newX, newY, newZ); } }; public VehicleFile getFile() { return this.file; } public void setFile(VehicleFile file) { this.file = file; } public void setDamageTaken(float p_70266_1_) { this.dataWatcher.updateObject(19, Float.valueOf(p_70266_1_)); } public float getDamageTaken() { return this.dataWatcher.getWatchableObjectFloat(19); } public void setTimeSinceHit(int p_70265_1_) { this.dataWatcher.updateObject(17, Integer.valueOf(p_70265_1_)); } public int getTimeSinceHit() { return this.dataWatcher.getWatchableObjectInt(17); } public void setForwardDirection(int p_70269_1_) { this.dataWatcher.updateObject(18, Integer.valueOf(p_70269_1_)); } public int getForwardDirection() { return this.dataWatcher.getWatchableObjectInt(18); } @Override protected boolean canTriggerWalking() { return false; } @Override public AxisAlignedBB getCollisionBox(Entity entityIn) { return entityIn.getEntityBoundingBox(); } @Override public AxisAlignedBB getBoundingBox() { return this.getEntityBoundingBox(); } public boolean canRiderInteract() { return true; } public boolean shouldDismountInWater(Entity rider) { return true; } }
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.