diff --git a/src/client/gamemode/GameMode.cpp b/src/client/gamemode/GameMode.cpp index de6df50..6877d7c 100755 --- a/src/client/gamemode/GameMode.cpp +++ b/src/client/gamemode/GameMode.cpp @@ -90,8 +90,10 @@ bool GameMode::useItemOn(Player* player, Level* level, ItemInstance* item, int x float clickY = hit.y - y; float clickZ = hit.z - z; if (level->isClientSide) { + LOGI("%f %f %f \n", player->x, player->y, player->z); + item = player->inventory->getSelected(); - UseItemPacket packet(x, y, z, face, item, player->entityId, clickX, clickY, clickZ); + UseItemPacket packet(x, y, z, face, item, player->entityId, clickX, clickY, clickZ, player->x, player->y, player->z); minecraft->raknetInstance->send(packet); } int t = level->getTile(x, y, z); @@ -100,7 +102,7 @@ bool GameMode::useItemOn(Player* player, Level* level, ItemInstance* item, int x return true; if (item == NULL) return false; - if(isCreativeType()) { + if (isCreativeType()) { int aux = item->getAuxValue(); int count = item->count; bool success = item->useOn(player, level, x, y, z, face, clickX, clickY, clickZ); @@ -117,7 +119,7 @@ bool GameMode::useItem( Player* player, Level* level, ItemInstance* item ) { ItemInstance* itemInstance = item->use(level, player); if(level->isClientSide) { - UseItemPacket packet(item, player->entityId, player->aimDirection); + UseItemPacket packet(item, player->entityId, player->aimDirection, player->x, player->y, player->z); minecraft->raknetInstance->send(packet); } if (itemInstance != item || (itemInstance != NULL && itemInstance->count != oldCount)) { diff --git a/src/network/ClientSideNetworkHandler.cpp b/src/network/ClientSideNetworkHandler.cpp index 807dd1a..ee61184 100755 --- a/src/network/ClientSideNetworkHandler.cpp +++ b/src/network/ClientSideNetworkHandler.cpp @@ -820,7 +820,7 @@ void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, SetEntit if (!level) return; - LOGI("SetEntityDataPacket\n"); + // LOGI("SetEntityDataPacket\n"); Entity* e = level->getEntity(packet->id); if (e) { diff --git a/src/network/ServerSideNetworkHandler.cpp b/src/network/ServerSideNetworkHandler.cpp index cc49754..1c4a1ac 100755 --- a/src/network/ServerSideNetworkHandler.cpp +++ b/src/network/ServerSideNetworkHandler.cpp @@ -433,7 +433,7 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, MovePlay { if (!level) return; - LOGI("MovePlayerPacket\n"); + // LOGI("MovePlayerPacket\n"); if (Entity* entity = level->getEntity(packet->entityId)) { ServerPlayer* player = (ServerPlayer*) getPlayer(source); @@ -713,7 +713,10 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, UseItemP LOGI("UseItemPacket: id %i data %i\n", packet->itemId, packet->itemData); Entity* entity = level->getEntity(packet->entityId); + if (entity && entity->isPlayer()) { + LOGI("%f %f %f \n", entity->x, entity->y, entity->z); + Player* player = (Player*) entity; int x = packet->x, y = packet->y, z = packet->z; Tile* t = Tile::tiles[level->getTile(x, y, z)]; @@ -747,6 +750,12 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, UseItemP ItemInstance* item = player->inventory->getItem(slot); + player->x = packet->playerX; + player->y = packet->playerY; + player->z = packet->playerZ; + LOGI("upd: %f %f %f \n", packet->playerX, packet->playerY, packet->playerZ); + LOGI("plr new: %f %f %f \n", player->x, player->y, player->z); + if(packet->face == 255) { // Special case: x,y,z means direction-of-action player->aimDirection.set(packet->x / 32768.0f, packet->y / 32768.0f, packet->z / 32768.0f); diff --git a/src/network/packet/UseItemPacket.h b/src/network/packet/UseItemPacket.h index e1583de..bfef1f2 100755 --- a/src/network/packet/UseItemPacket.h +++ b/src/network/packet/UseItemPacket.h @@ -16,10 +16,12 @@ public: short itemId; unsigned char itemData; ItemInstance item; + float playerX, playerY, playerZ; UseItemPacket() {} - UseItemPacket(int x, int y, int z, int face, const ItemInstance* item, int entityId, float clickX, float clickY, float clickZ) + UseItemPacket(int x, int y, int z, int face, const ItemInstance* item, int entityId, float clickX, float clickY, float clickZ, + float plrX, float plrY, float plrZ) : x(x), y(y), z(z), @@ -29,17 +31,23 @@ public: entityId(entityId), clickX(clickX), clickY(clickY), - clickZ(clickZ) + clickZ(clickZ), + playerX(plrX), + playerY(plrY), + playerZ(plrZ) {} - UseItemPacket(const ItemInstance* item, int entityId, const Vec3& aim) + UseItemPacket(const ItemInstance* item, int entityId, const Vec3& aim, float plrX, float plrY, float plrZ) : face(255), itemId(item? item->id : 0), itemData(item? item->getAuxValue() : 0), entityId(entityId), x((int)(aim.x * 32768.0f)), y((int)(aim.y * 32768.0f)), - z((int)(aim.z * 32768.0f)) + z((int)(aim.z * 32768.0f)), + playerX(plrX), + playerY(plrY), + playerZ(plrZ) { } @@ -57,6 +65,9 @@ public: bitStream->Write(clickX); bitStream->Write(clickY); bitStream->Write(clickZ); + bitStream->Write(playerX); + bitStream->Write(playerY); + bitStream->Write(playerZ); } void read(RakNet::BitStream* bitStream) @@ -74,7 +85,9 @@ public: item.id = itemId; item.setAuxValue(itemData); item.count = (itemId == 0 && itemData == 0)? 0 : 1; - + bitStream->Read(playerX); + bitStream->Read(playerY); + bitStream->Read(playerZ); } void handle(const RakNet::RakNetGUID& source, NetEventCallback* callback) diff --git a/src/world/item/TileItem.h b/src/world/item/TileItem.h index c75084e..08bd1d0 100755 --- a/src/world/item/TileItem.h +++ b/src/world/item/TileItem.h @@ -61,7 +61,7 @@ public: if (level->setTileAndData(x, y, z, tileId, data)) { Tile::tiles[tileId]->setPlacedBy(level, x, y, z, player); level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, tile->soundType->getStepSound(), (tile->soundType->getVolume() + 1) / 2, tile->soundType->getPitch() * 0.8f); - + printf("%f %f %f \n", player->x, player->y, player->z); /* PlaceBlockPacket packet(player->entityId, x, y, z, face, tileId, instance->getAuxValue()); //LOGI("Place block at @ %d, %d, %d\n", x, y, z); diff --git a/src/world/level/Level.cpp b/src/world/level/Level.cpp index cb6d688..2c7fffd 100755 --- a/src/world/level/Level.cpp +++ b/src/world/level/Level.cpp @@ -1962,7 +1962,7 @@ void Level::prepare() { ; } -bool Level::mayPlace(int tileId, int x, int y, int z, bool ignoreEntities,unsigned char face) { +bool Level::mayPlace(int tileId, int x, int y, int z, bool ignoreEntities,unsigned char face) { int targetType = getTile(x, y, z); const Tile* targetTile = Tile::tiles[targetType]; Tile* tile = Tile::tiles[tileId];