- 1,976
- 68
- 220
Да он просто висит на месте, даже если насильно задать ему движение! Что за чёрт?!
Кхм... Извините, вырвалось
Сперва, здравствуйте =)
Как понятно из текста выше, мой энтити (extends Entity) вообще не хочет двигаться - this.motionY -= 0.5D; в онапдейте просто игнорирует. Я видел, что в энтитях есть датавотчер, но я вообще не представляю, как с ним работать. Проблема в его отсутствии или..?
Кхм... Извините, вырвалось
Сперва, здравствуйте =)
Как понятно из текста выше, мой энтити (extends Entity) вообще не хочет двигаться - this.motionY -= 0.5D; в онапдейте просто игнорирует. Я видел, что в энтитях есть датавотчер, но я вообще не представляю, как с ним работать. Проблема в его отсутствии или..?
Код:
package alexsocol.osm.entity;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
import net.minecraft.world.WorldServer;
// Да-да-да, это "очередной" танк, но не простой, а стреляющий ионизированной плазмой (ну как в UT2004 :D)
public class IonPlasmaTankEntity extends Entity {
public EntityPlayer ridder;
public IonPlasmaTankEntity(World world) {
super(world);
this.setSize(5.0F, 3.0F);
}
public IonPlasmaTankEntity(World world, double X, double Y, double Z) {
super(world);
this.setSize(5.0F, 3.0F);
this.setLocationAndAngles(X, Y, Z, 0.0F, 0.0F);
}
@Override
public boolean interactFirst(EntityPlayer player) {
if (!this.worldObj.isRemote) {
if (this.riddenByEntity == null) {
player.mountEntity(this);
this.riddenByEntity = this.ridder = player;
}
}
return true;
}
@Override
public AxisAlignedBB getBoundingBox() {
return this.boundingBox;
}
@Override
public boolean canBeCollidedWith() {
return true;
}
@Override
public boolean canBePushed() {
return false;
}
@Override
public void updateRiderPosition() {
if (this.riddenByEntity != null) {
this.riddenByEntity.setPosition(this.posX, this.posY + this.getMountedYOffset() + this.riddenByEntity.getYOffset(), this.posZ);
}
}
@Override
public void onUpdate() {
if (this.posY <= -64.0D) {
this.kill();
}
this.motionY -= 0.5D;
if (this.riddenByEntity != null && ridder != null) {
this.setRotation(ridder.cameraYaw, 0.0F);
/** Ridder Invulnerability */
if (!ridder.capabilities.isCreativeMode) {
if (this.riddenByEntity == ridder) {
ridder.capabilities.disableDamage = true;
} else {
ridder.capabilities.disableDamage = false;
}
}
} else if (ridder != null && !ridder.capabilities.isCreativeMode) {
ridder.capabilities.disableDamage = false;
ridder = null;
}
this.motionY -= 0.5D;
}
@Override
public void entityInit() { }
@Override
public void readEntityFromNBT(NBTTagCompound nbt) { }
@Override
public void writeEntityToNBT(NBTTagCompound nbt) { }
@Override
public double getMountedYOffset() {
return (double)this.height * 0.0D + 2.5D;
}
@SideOnly(Side.CLIENT)
public float getShadowSize() {
return 5.0F;
}
}