diff --git a/Minecraft.World/MinecartFurnace.cpp b/Minecraft.World/MinecartFurnace.cpp index fa005eca..5843c935 100644 --- a/Minecraft.World/MinecartFurnace.cpp +++ b/Minecraft.World/MinecartFurnace.cpp @@ -9,171 +9,177 @@ MinecartFurnace::MinecartFurnace(Level *level) : Minecart(level) { - defineSynchedData(); + defineSynchedData(); - fuel = 0; - xPush = zPush = 0.0f; + fuel = 0; + xPush = zPush = 0.0f; } MinecartFurnace::MinecartFurnace(Level *level, double x, double y, double z) : Minecart(level, x, y, z) { - defineSynchedData(); + defineSynchedData(); - fuel = 0; - xPush = zPush = 0.0f; + fuel = 0; + xPush = zPush = 0.0f; } // 4J Added int MinecartFurnace::getContainerType() { - return ContainerOpenPacket::MINECART_HOPPER; + return ContainerOpenPacket::MINECART_HOPPER; } int MinecartFurnace::getType() { - return TYPE_FURNACE; + return TYPE_FURNACE; } void MinecartFurnace::defineSynchedData() { - Minecart::defineSynchedData(); - entityData->define(DATA_ID_FUEL, static_cast(0)); + Minecart::defineSynchedData(); + entityData->define(DATA_ID_FUEL, static_cast(0)); } void MinecartFurnace::tick() { - Minecart::tick(); + Minecart::tick(); - if (fuel > 0) - { - fuel--; - } - if (fuel <= 0) - { - xPush = zPush = 0; - } - setHasFuel(fuel > 0); + if (fuel > 0) + { + fuel--; + } + if (fuel <= 0) + { + xPush = zPush = 0; + } + setHasFuel(fuel > 0); - if (hasFuel() && random->nextInt(4) == 0) - { - level->addParticle(eParticleType_largesmoke, x, y + 0.8, z, 0, 0, 0); - } + if (hasFuel() && random->nextInt(4) == 0) + { + level->addParticle(eParticleType_largesmoke, x, y + 0.8, z, 0, 0, 0); + } } void MinecartFurnace::destroy(DamageSource *source) { - Minecart::destroy(source); + Minecart::destroy(source); - if (!source->isExplosion()) - { - spawnAtLocation(std::make_shared(Tile::furnace, 1), 0); - } + if (!source->isExplosion()) + { + spawnAtLocation(std::make_shared(Tile::furnace, 1), 0); + } } void MinecartFurnace::moveAlongTrack(int xt, int yt, int zt, double maxSpeed, double slideSpeed, int tile, int data) { - Minecart::moveAlongTrack(xt, yt, zt, maxSpeed, slideSpeed, tile, data); + //2 times max speed to get 8blocks + double lceMaxSpeed = maxSpeed * 2.0; - double sd = xPush * xPush + zPush * zPush; - if (sd > 0.01 * 0.01 && xd * xd + zd * zd > 0.001) - { - sd = Mth::sqrt(sd); - xPush /= sd; - zPush /= sd; + Minecart::moveAlongTrack(xt, yt, zt, lceMaxSpeed, slideSpeed, tile, data); - if (xPush * xd + zPush * zd < 0) - { - xPush = 0; - zPush = 0; - } - else - { - xPush = xd; - zPush = zd; - } - } + double sd = xPush * xPush + zPush * zPush; + if (sd > 0.01 * 0.01 && xd * xd + zd * zd > 0.001) + { + sd = Mth::sqrt(sd); + xPush /= sd; + zPush /= sd; + + if (xPush * xd + zPush * zd < 0) + { + xPush = 0; + zPush = 0; + } + else + { + xPush = xd; + zPush = zd; + } + } } void MinecartFurnace::applyNaturalSlowdown() { - double sd = xPush * xPush + zPush * zPush; + double sd = xPush * xPush + zPush * zPush; - if (sd > 0.01 * 0.01) - { - sd = Mth::sqrt(sd); - xPush /= sd; - zPush /= sd; - double speed = 0.05; - xd *= 0.8f; - yd *= 0; - zd *= 0.8f; - xd += xPush * speed; - zd += zPush * speed; - } - else - { - xd *= 0.98f; - yd *= 0; - zd *= 0.98f; - } + if (sd > 0.01 * 0.01) + { + sd = Mth::sqrt(sd); + xPush /= sd; + zPush /= sd; + + //from 0.05 to 0.1 + double speed = 0.1; + + xd *= 0.8f; + yd *= 0; + zd *= 0.8f; + xd += xPush * speed; + zd += zPush * speed; + } + else + { + xd *= 0.98f; + yd *= 0; + zd *= 0.98f; + } - Minecart::applyNaturalSlowdown(); + Minecart::applyNaturalSlowdown(); } bool MinecartFurnace::interact(shared_ptr player) { - shared_ptr selected = player->inventory->getSelected(); - if (selected != nullptr && selected->id == Item::coal_Id) - { - if (!player->abilities.instabuild && --selected->count == 0) player->inventory->setItem(player->inventory->selected, nullptr); - fuel += SharedConstants::TICKS_PER_SECOND * 180; + shared_ptr selected = player->inventory->getSelected(); + if (selected != nullptr && selected->id == Item::coal_Id) + { + if (!player->abilities.instabuild && --selected->count == 0) player->inventory->setItem(player->inventory->selected, nullptr); + fuel += SharedConstants::TICKS_PER_SECOND * 180; - } - xPush = x - player->x; - zPush = z - player->z; + } + xPush = x - player->x; + zPush = z - player->z; - return true; + return true; } void MinecartFurnace::addAdditonalSaveData(CompoundTag *base) { - Minecart::addAdditonalSaveData(base); - base->putDouble(L"PushX", xPush); - base->putDouble(L"PushZ", zPush); - base->putShort(L"Fuel", static_cast(fuel)); + Minecart::addAdditonalSaveData(base); + base->putDouble(L"PushX", xPush); + base->putDouble(L"PushZ", zPush); + base->putShort(L"Fuel", static_cast(fuel)); } void MinecartFurnace::readAdditionalSaveData(CompoundTag *base) { - Minecart::readAdditionalSaveData(base); - xPush = base->getDouble(L"PushX"); - zPush = base->getDouble(L"PushZ"); - fuel = base->getShort(L"Fuel"); + Minecart::readAdditionalSaveData(base); + xPush = base->getDouble(L"PushX"); + zPush = base->getDouble(L"PushZ"); + fuel = base->getShort(L"Fuel"); } bool MinecartFurnace::hasFuel() { - return (entityData->getByte(DATA_ID_FUEL) & 1) != 0; + return (entityData->getByte(DATA_ID_FUEL) & 1) != 0; } void MinecartFurnace::setHasFuel(bool fuel) { - if (fuel) - { - entityData->set(DATA_ID_FUEL, static_cast(entityData->getByte(DATA_ID_FUEL) | 1)); - } - else - { - entityData->set(DATA_ID_FUEL, static_cast(entityData->getByte(DATA_ID_FUEL) & ~1)); - } + if (fuel) + { + entityData->set(DATA_ID_FUEL, static_cast(entityData->getByte(DATA_ID_FUEL) | 1)); + } + else + { + entityData->set(DATA_ID_FUEL, static_cast(entityData->getByte(DATA_ID_FUEL) & ~1)); + } } Tile *MinecartFurnace::getDefaultDisplayTile() { - return Tile::furnace_lit; + return Tile::furnace_lit; } int MinecartFurnace::getDefaultDisplayData() { - return 2; + return 2; } \ No newline at end of file