use of net.minecraftforge.event.entity.minecart.MinecartUpdateEvent in project Railcraft by Railcraft.
the class MinecartHooks method onMinecartUpdate.
@SuppressWarnings("unused")
@SubscribeEvent
public void onMinecartUpdate(MinecartUpdateEvent event) {
EntityMinecart cart = event.getMinecart();
NBTTagCompound data = cart.getEntityData();
// Fix flip
float distance = MathTools.getDistanceBetweenAngles(cart.rotationYaw, cart.prevRotationYaw);
float cutoff = 120F;
if (distance < -cutoff || distance >= cutoff) {
cart.rotationYaw += 180.0F;
boolean reverse = ObfuscationReflectionHelper.getPrivateValue(EntityMinecart.class, cart, IS_REVERSED_VARIABLE_INDEX);
ObfuscationReflectionHelper.setPrivateValue(EntityMinecart.class, cart, !reverse, IS_REVERSED_VARIABLE_INDEX);
cart.rotationYaw = cart.rotationYaw % 360.0F;
}
// } else
if (data.getBoolean("ghost")) {
cart.setGlowing(false);
data.setBoolean("ghost", false);
}
// Code Added by Yopu to replace vanilla carts, deemed incomplete and unnecessary, pursuing other solutions
// if (classReplacements.containsKey(cart.getClass())) {
// cart.setDead();
// if (Game.isHost(cart.worldObj)) {
// EnumCart enumCart = classReplacements.get(cart.getClass());
// GameProfile cartOwner = CartTools.getCartOwner(cart);
// int x = MathHelper.floor_double(cart.posX);
// int y = MathHelper.floor_double(cart.posY);
// int z = MathHelper.floor_double(cart.posZ);
// CartUtils.placeCart(enumCart, cartOwner, enumCart.getCartItem(), cart.worldObj, x, y, z);
// }
// return;
// }
Block block = WorldPlugin.getBlock(cart.worldObj, event.getPos());
int launched = data.getInteger("Launched");
if (TrackTools.isRailBlock(block)) {
cart.fallDistance = 0;
if (cart.isBeingRidden())
cart.getPassengers().forEach(p -> p.fallDistance = 0);
if (launched > 1)
land(cart);
} else if (launched == 1) {
data.setInteger("Launched", 2);
cart.setCanUseRail(true);
} else if (launched > 1 && (cart.onGround || cart.isInsideOfMaterial(Material.CIRCUITS)))
land(cart);
int mountPrevention = data.getInteger("MountPrevention");
if (mountPrevention > 0) {
mountPrevention--;
data.setInteger("MountPrevention", mountPrevention);
}
byte elevator = data.getByte("elevator");
if (elevator < BlockTrackElevator.ELEVATOR_TIMER) {
cart.setNoGravity(false);
}
if (elevator > 0) {
elevator--;
data.setByte("elevator", elevator);
}
byte derail = data.getByte("derail");
if (derail > 0) {
derail--;
data.setByte("derail", derail);
}
if (data.getBoolean("explode")) {
cart.getEntityData().setBoolean("explode", false);
CartTools.explodeCart(cart);
}
if (data.getBoolean(CartTools.HIGH_SPEED_TAG))
if (CartTools.cartVelocityIsLessThan(cart, HighSpeedTools.SPEED_CUTOFF))
data.setBoolean(CartTools.HIGH_SPEED_TAG, false);
else if (data.getInteger("Launched") == 0)
HighSpeedTools.checkSafetyAndExplode(cart.worldObj, event.getPos(), cart);
cart.motionX = Math.copySign(Math.min(Math.abs(cart.motionX), 9.5), cart.motionX);
cart.motionY = Math.copySign(Math.min(Math.abs(cart.motionY), 9.5), cart.motionY);
cart.motionZ = Math.copySign(Math.min(Math.abs(cart.motionZ), 9.5), cart.motionZ);
// List entities = cart.worldObj.getEntitiesWithinAABB(EntityLiving.class, getMinecartCollisionBox(cart, COLLISION_EXPANSION));
//
// if (entities != null) {
// for (Entity entity : (List<Entity>) entities) {
// if (entity != cart.riddenByEntity && entity.canBePushed()) {
// cart.applyEntityCollision(entity);
// }
// }
// }
}
use of net.minecraftforge.event.entity.minecart.MinecartUpdateEvent in project NyaSamaRailway by NSDN.
the class LocoBase method update.
public void update() {
if (this.worldObj.isRemote) {
super.onUpdate();
return;
}
if (this.getRollingAmplitude() > 0) {
this.setRollingAmplitude(this.getRollingAmplitude() - 1);
}
if (this.getDamage() > 0.0F) {
this.setDamage(this.getDamage() - 1.0F);
}
if (this.posY < -64.0D) {
this.kill();
}
if (!this.worldObj.isRemote && this.worldObj instanceof WorldServer) {
this.worldObj.theProfiler.startSection("portal");
MinecraftServer minecraftserver = ((WorldServer) this.worldObj).func_73046_m();
int i = this.getMaxInPortalTime();
if (this.inPortal) {
if (minecraftserver.getAllowNether()) {
if (this.ridingEntity == null && this.portalCounter++ >= i) {
this.portalCounter = i;
this.timeUntilPortal = this.getPortalCooldown();
byte b0;
if (this.worldObj.provider.dimensionId == -1) {
b0 = 0;
} else {
b0 = -1;
}
this.travelToDimension(b0);
}
this.inPortal = false;
}
} else {
if (this.portalCounter > 0) {
this.portalCounter -= 4;
}
if (this.portalCounter < 0) {
this.portalCounter = 0;
}
}
if (this.timeUntilPortal > 0) {
--this.timeUntilPortal;
}
this.worldObj.theProfiler.endSection();
this.prevPosX = this.posX;
this.prevPosY = this.posY;
this.prevPosZ = this.posZ;
this.motionY -= 0.03999999910593033D;
int x = MathHelper.floor_double(this.posX);
int y = MathHelper.floor_double(this.posY);
int z = MathHelper.floor_double(this.posZ);
if (!BlockRailBase.func_150049_b_(this.worldObj, x, y, z) && BlockRailBase.func_150049_b_(this.worldObj, x, y - 1, z)) {
--y;
}
double d0 = 0.4D;
double d2 = 0.0078125D;
Block block = this.worldObj.getBlock(x, y, z);
if (canUseRail() && BlockRailBase.func_150051_a(block)) {
float railMaxSpeed = ((BlockRailBase) block).getRailMaxSpeed(worldObj, this, x, y, z);
double maxSpeed = Math.min(railMaxSpeed, getMaxCartSpeedOnRail());
this.func_145821_a(x, y, z, maxSpeed, getSlopeAdjustment(), block, ((BlockRailBase) block).getBasicRailMetadata(worldObj, this, x, y, z));
if (block == Blocks.activator_rail) {
this.onActivatorRailPass(x, y, z, (worldObj.getBlockMetadata(x, y, z) & 8) != 0);
}
} else {
this.func_94088_b(onGround ? d0 : getMaxSpeedAirLateral());
}
this.func_145775_I();
this.rotationPitch = 0.0F;
double d8 = this.prevPosX - this.posX;
double d4 = this.prevPosZ - this.posZ;
if (d8 * d8 + d4 * d4 > 0.001D) {
this.rotationYaw = (float) (Math.atan2(d4, d8) * 180.0D / Math.PI);
if (this.isInReverse) {
this.rotationYaw += 180.0F;
}
}
double detlaYaw = (double) MathHelper.wrapAngleTo180_float(this.rotationYaw - this.prevRotationYaw);
if (detlaYaw < -170.0D || detlaYaw >= 170.0D) {
this.rotationYaw += 180.0F;
this.isInReverse = !this.isInReverse;
}
this.setRotation(this.rotationYaw, this.rotationPitch);
AxisAlignedBB box = getBoundingBox();
if (box == null) {
box = AxisAlignedBB.getBoundingBox(chunkCoordX, chunkCoordY, chunkCoordZ, chunkCoordX + 1, chunkCoordY + 1, chunkCoordZ + 1);
}
List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, box);
if (list != null && !list.isEmpty()) {
for (int k = 0; k < list.size(); ++k) {
Entity entity = (Entity) list.get(k);
if (entity != this.riddenByEntity && entity.canBePushed() && entity instanceof EntityMinecart) {
entity.applyEntityCollision(this);
}
}
}
if (this.riddenByEntity != null && this.riddenByEntity.isDead) {
if (this.riddenByEntity.ridingEntity == this) {
this.riddenByEntity.ridingEntity = null;
}
this.riddenByEntity = null;
}
MinecraftForge.EVENT_BUS.post(new MinecartUpdateEvent(this, x, y, z));
}
}
use of net.minecraftforge.event.entity.minecart.MinecartUpdateEvent in project NyaSamaRailway by NSDN.
the class MinecartBase method onUpdate.
/**
****************************************************************************************************************
*/
@Override
public void onUpdate() {
if (this.worldObj.isRemote) {
super.onUpdate();
double detlaYaw = (double) MathHelper.wrapAngleTo180_float(this.rotationYaw - this.prevRotationYaw);
/* Driver Heading */
if (this.riddenByEntity != null && !this.riddenByEntity.isDead) {
if (this.riddenByEntity.ridingEntity == this) {
if (this.riddenByEntity instanceof EntityPlayer) {
if (canMakePlayerTurn())
((EntityPlayer) this.riddenByEntity).rotationYaw += detlaYaw;
}
}
}
return;
}
if (this.getRollingAmplitude() > 0) {
this.setRollingAmplitude(this.getRollingAmplitude() - 1);
}
if (this.getDamage() > 0.0F) {
this.setDamage(this.getDamage() - 1.0F);
}
if (this.posY < -64.0D) {
this.kill();
}
if (!this.worldObj.isRemote && this.worldObj instanceof WorldServer) {
this.worldObj.theProfiler.startSection("portal");
MinecraftServer minecraftserver = ((WorldServer) this.worldObj).func_73046_m();
int i = this.getMaxInPortalTime();
if (this.inPortal) {
if (minecraftserver.getAllowNether()) {
if (this.ridingEntity == null && this.portalCounter++ >= i) {
this.portalCounter = i;
this.timeUntilPortal = this.getPortalCooldown();
byte b0;
if (this.worldObj.provider.dimensionId == -1) {
b0 = 0;
} else {
b0 = -1;
}
this.travelToDimension(b0);
}
this.inPortal = false;
}
} else {
if (this.portalCounter > 0) {
this.portalCounter -= 4;
}
if (this.portalCounter < 0) {
this.portalCounter = 0;
}
}
if (this.timeUntilPortal > 0) {
--this.timeUntilPortal;
}
this.worldObj.theProfiler.endSection();
this.prevPosX = this.posX;
this.prevPosY = this.posY;
this.prevPosZ = this.posZ;
this.motionY -= 0.03999999910593033D;
int x = MathHelper.floor_double(this.posX);
int y = MathHelper.floor_double(this.posY);
int z = MathHelper.floor_double(this.posZ);
if (!BlockRailBase.func_150049_b_(this.worldObj, x, y, z) && BlockRailBase.func_150049_b_(this.worldObj, x, y - 1, z)) {
--y;
}
double d0 = 0.4D;
double d2 = 0.0078125D;
Block block = this.worldObj.getBlock(x, y, z);
if (canUseRail() && BlockRailBase.func_150051_a(block)) {
float railMaxSpeed = ((BlockRailBase) block).getRailMaxSpeed(worldObj, this, x, y, z);
double maxSpeed = Math.min(railMaxSpeed, getMaxCartSpeedOnRail());
this.func_145821_a(x, y, z, maxSpeed, getSlopeAdjustment(), block, ((BlockRailBase) block).getBasicRailMetadata(worldObj, this, x, y, z));
if (block == Blocks.activator_rail) {
this.onActivatorRailPass(x, y, z, (worldObj.getBlockMetadata(x, y, z) & 8) != 0);
}
} else {
this.func_94088_b(onGround ? d0 : getMaxSpeedAirLateral());
}
this.func_145775_I();
this.rotationPitch = 0.0F;
double d8 = this.prevPosX - this.posX;
double d4 = this.prevPosZ - this.posZ;
if (d8 * d8 + d4 * d4 > 0.001D) {
this.rotationYaw = (float) (Math.atan2(d4, d8) * 180.0D / Math.PI);
if (this.isInReverse) {
this.rotationYaw += 180.0F;
}
}
double detlaYaw = (double) MathHelper.wrapAngleTo180_float(this.rotationYaw - this.prevRotationYaw);
if (detlaYaw < -170.0D || detlaYaw >= 170.0D) {
this.rotationYaw += 180.0F;
this.isInReverse = !this.isInReverse;
}
this.setRotation(this.rotationYaw, this.rotationPitch);
AxisAlignedBB box = getBoundingBox();
if (box == null) {
box = AxisAlignedBB.getBoundingBox(chunkCoordX, chunkCoordY, chunkCoordZ, chunkCoordX + 1, chunkCoordY + 1, chunkCoordZ + 1);
}
List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, box);
if (list != null && !list.isEmpty()) {
for (int k = 0; k < list.size(); ++k) {
Entity entity = (Entity) list.get(k);
if (entity != this.riddenByEntity && entity.canBePushed() && entity instanceof EntityMinecart) {
entity.applyEntityCollision(this);
}
}
}
/* Driver Heading */
if (this.riddenByEntity != null && !this.riddenByEntity.isDead) {
if (this.riddenByEntity.ridingEntity == this) {
if (this.riddenByEntity instanceof EntityPlayer) {
if (canMakePlayerTurn())
((EntityPlayer) this.riddenByEntity).rotationYaw += detlaYaw;
}
}
}
if (this.riddenByEntity != null && this.riddenByEntity.isDead) {
if (this.riddenByEntity.ridingEntity == this) {
this.riddenByEntity.ridingEntity = null;
}
this.riddenByEntity = null;
}
MinecraftForge.EVENT_BUS.post(new MinecartUpdateEvent(this, x, y, z));
}
}
use of net.minecraftforge.event.entity.minecart.MinecartUpdateEvent in project NyaSamaRailway by NSDN.
the class TrainBase method onUpdate.
@Override
public void onUpdate() {
if (this.getRollingAmplitude() > 0) {
this.setRollingAmplitude(this.getRollingAmplitude() - 1);
}
if (this.getDamage() > 0.0F) {
this.setDamage(this.getDamage() - 1.0F);
}
if (this.posY < -64.0D) {
this.kill();
}
int Y;
if (!this.worldObj.isRemote && this.worldObj instanceof WorldServer) {
this.worldObj.theProfiler.startSection("portal");
MinecraftServer l = ((WorldServer) this.worldObj).func_73046_m();
Y = this.getMaxInPortalTime();
if (this.inPortal) {
if (l.getAllowNether()) {
if (this.ridingEntity == null && this.portalCounter++ >= Y) {
this.portalCounter = Y;
this.timeUntilPortal = this.getPortalCooldown();
byte i1;
if (this.worldObj.provider.dimensionId == -1) {
i1 = 0;
} else {
i1 = -1;
}
this.travelToDimension(i1);
}
this.inPortal = false;
}
} else {
if (this.portalCounter > 0) {
this.portalCounter -= 4;
}
if (this.portalCounter < 0) {
this.portalCounter = 0;
}
}
if (this.timeUntilPortal > 0) {
--this.timeUntilPortal;
}
this.worldObj.theProfiler.endSection();
}
// if(false) {
if (this.worldObj.isRemote) {
this.setPosition(this.posX, this.posY, this.posZ);
this.setRotation(this.rotationYaw, this.rotationPitch);
} else {
this.prevPosX = this.posX;
this.prevPosY = this.posY;
this.prevPosZ = this.posZ;
if (!bogies.isEmpty()) {
EntityMinecart bogieFront = (EntityMinecart) this.worldObj.getEntityByID(bogies.get(0));
EntityMinecart bogieBack = (EntityMinecart) this.worldObj.getEntityByID(bogies.get(1));
/*some code*/
double Ks = 500.0;
double Kd = 500.0;
double m = 1.0;
double length = 2.0;
double dt = 0.001;
double dist = calcDist(bogieFront, bogieBack);
double dv = Ks * (dist - length) / m * dt;
double DdvX = Kd * (bogieFront.motionX - bogieBack.motionX) / m * dt;
double DdvZ = Kd * (bogieFront.motionZ - bogieBack.motionZ) / m * dt;
bogieBack.motionX += dv * (bogieFront.posX - bogieBack.posX) / dist + DdvX;
bogieBack.motionZ += dv * (bogieFront.posZ - bogieBack.posZ) / dist + DdvZ;
bogieFront.motionX += -dv * (bogieFront.posX - bogieBack.posX) / dist - DdvX;
bogieFront.motionZ += -dv * (bogieFront.posZ - bogieBack.posZ) / dist - DdvZ;
this.posX = (bogieFront.posX + bogieBack.posX) / 2.0;
this.posY = (bogieFront.posY + bogieBack.posY) / 2.0;
this.posZ = (bogieFront.posZ + bogieBack.posZ) / 2.0;
this.motionX = this.posX - this.prevPosX;
this.motionY = this.posY - this.prevPosY;
this.motionZ = this.posZ - this.prevPosZ;
this.rotationYaw = 180.0F - (float) Math.acos((bogieFront.posX - bogieBack.posX) / calcDist(bogieFront.posX - bogieBack.posX, bogieFront.posZ - bogieBack.posZ));
this.rotationPitch = (float) Math.atan((bogieFront.posY - bogieBack.posY) / calcDist(bogieFront.posX - bogieBack.posX, bogieFront.posZ - bogieBack.posZ));
this.moveEntity(this.motionX, this.motionY, this.motionZ);
}
if (this.riddenByEntity != null && this.riddenByEntity.isDead) {
if (this.riddenByEntity.ridingEntity == this) {
this.riddenByEntity.ridingEntity = null;
}
this.riddenByEntity = null;
}
int X = MathHelper.floor_double(this.posX);
Y = MathHelper.floor_double(this.posY);
int Z = MathHelper.floor_double(this.posZ);
MinecraftForge.EVENT_BUS.post(new MinecartUpdateEvent(this, (float) X, (float) Y, (float) Z));
}
}
Aggregations