From 887534255762134f9006376e410ae8526dde1e68 Mon Sep 17 00:00:00 2001 From: InviseDivine Date: Wed, 11 Mar 2026 19:04:54 +0200 Subject: [PATCH] Join by ip screen --- CMakeLists.txt | 210 +++++++++++++++++- project/dedicated_server/CMakeLists.txt | 9 +- .../raknet/jni/RaknetSources/RakPeer.cpp | 2 +- src/client/Minecraft.cpp | 31 ++- src/client/Minecraft.h | 1 + src/client/gui/screens/JoinByIPScreen.cpp | 140 ++++++++++++ src/client/gui/screens/JoinByIPScreen.h | 30 +++ src/client/gui/screens/ScreenChooser.cpp | 28 +-- src/client/gui/screens/ScreenChooser.h | 3 +- .../gui/screens/touch/TouchJoinGameScreen.cpp | 5 + 10 files changed, 433 insertions(+), 26 deletions(-) create mode 100644 src/client/gui/screens/JoinByIPScreen.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 3fb3032..fe56393 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,11 +5,11 @@ include(cmake/CPM.cmake) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED TRUE) - +set(CMAKE_POLICY_VERSION_MINIMUM 3.10) if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") set(CMAKE_CXX_FLAGS "-Wno-c++11-narrowing -Wno-narrowing -Wno-invalid-source-encoding -Wno-reserved-user-defined-literal") endif() - +find_package(Threads REQUIRED) CPMAddPackage("gh:madler/zlib@1.3.2") CPMAddPackage( NAME "libpng" @@ -44,8 +44,189 @@ CPMAddPackage( "GLFW_BUILD_DOCS OFF" "BUILD_SHARED_LIBS ON" ) +# TODO: Clear this paths with * +file(GLOB SERVER_SOURCES + "src/NinecraftApp.cpp" + "src/Performance.cpp" + "src/SharedConstants.cpp" -file(GLOB SOURCES + "src/client/IConfigListener.cpp" + "src/client/Minecraft.cpp" + "src/client/OptionStrings.cpp" + "src/client/Options.cpp" + "src/client/OptionsFile.cpp" + + "src/client/gamemode/CreativeMode.cpp" + "src/client/gamemode/GameMode.cpp" + "src/client/gamemode/SurvivalMode.cpp" + + "src/client/player/LocalPlayer.cpp" + "src/client/player/RemotePlayer.cpp" + "src/client/player/input/KeyboardInput.cpp" + + "src/locale/I18n.cpp" + + "src/main.cpp" + "src/main_dedicated.cpp" + + "src/nbt/Tag.cpp" + + "src/network/ClientSideNetworkHandler.cpp" + "src/network/NetEventCallback.cpp" + "src/network/Packet.cpp" + "src/network/RakNetInstance.cpp" + "src/network/ServerSideNetworkHandler.cpp" + "src/network/command/CommandServer.cpp" + + "src/platform/CThread.cpp" + "src/platform/time.cpp" + + "src/platform/input/Controller.cpp" + "src/platform/input/Keyboard.cpp" + "src/platform/input/Mouse.cpp" + "src/platform/input/Multitouch.cpp" + + "src/server/ArgumentsSettings.cpp" + "src/server/ServerLevel.cpp" + "src/server/ServerPlayer.cpp" + + "src/util/DataIO.cpp" + "src/util/Mth.cpp" + "src/util/PerfTimer.cpp" + "src/util/StringUtils.cpp" + + "src/world/Direction.cpp" + + "src/world/entity/AgableMob.cpp" + "src/world/entity/Entity.cpp" + "src/world/entity/EntityFactory.cpp" + "src/world/entity/FlyingMob.cpp" + "src/world/entity/HangingEntity.cpp" + "src/world/entity/Mob.cpp" + "src/world/entity/MobCategory.cpp" + "src/world/entity/Motive.cpp" + "src/world/entity/Painting.cpp" + "src/world/entity/PathfinderMob.cpp" + "src/world/entity/SynchedEntityData.cpp" + + "src/world/entity/ai/control/MoveControl.cpp" + + "src/world/entity/animal/Animal.cpp" + "src/world/entity/animal/Chicken.cpp" + "src/world/entity/animal/Cow.cpp" + "src/world/entity/animal/Pig.cpp" + "src/world/entity/animal/Sheep.cpp" + "src/world/entity/animal/WaterAnimal.cpp" + + "src/world/entity/item/FallingTile.cpp" + "src/world/entity/item/ItemEntity.cpp" + "src/world/entity/item/PrimedTnt.cpp" + "src/world/entity/item/TripodCamera.cpp" + + "src/world/entity/monster/Creeper.cpp" + "src/world/entity/monster/Monster.cpp" + "src/world/entity/monster/PigZombie.cpp" + "src/world/entity/monster/Skeleton.cpp" + "src/world/entity/monster/Spider.cpp" + "src/world/entity/monster/Zombie.cpp" + + "src/world/entity/player/Inventory.cpp" + "src/world/entity/player/Player.cpp" + + "src/world/entity/projectile/Arrow.cpp" + "src/world/entity/projectile/Throwable.cpp" + + "src/world/food/SimpleFoodData.cpp" + + "src/world/inventory/BaseContainerMenu.cpp" + "src/world/inventory/ContainerMenu.cpp" + "src/world/inventory/FillingContainer.cpp" + "src/world/inventory/FurnaceMenu.cpp" + + "src/world/item/ArmorItem.cpp" + "src/world/item/BedItem.cpp" + "src/world/item/DyePowderItem.cpp" + "src/world/item/HangingEntityItem.cpp" + "src/world/item/HatchetItem.cpp" + "src/world/item/HoeItem.cpp" + "src/world/item/Item.cpp" + "src/world/item/ItemInstance.cpp" + "src/world/item/PickaxeItem.cpp" + "src/world/item/ShovelItem.cpp" + + "src/world/item/crafting/ArmorRecipes.cpp" + "src/world/item/crafting/FurnaceRecipes.cpp" + "src/world/item/crafting/OreRecipes.cpp" + "src/world/item/crafting/Recipe.cpp" + "src/world/item/crafting/Recipes.cpp" + "src/world/item/crafting/StructureRecipes.cpp" + "src/world/item/crafting/ToolRecipes.cpp" + "src/world/item/crafting/WeaponRecipes.cpp" + + "src/world/level/Explosion.cpp" + "src/world/level/Level.cpp" + "src/world/level/LightLayer.cpp" + "src/world/level/LightUpdate.cpp" + "src/world/level/MobSpawner.cpp" + "src/world/level/Region.cpp" + "src/world/level/TickNextTickData.cpp" + + "src/world/level/biome/Biome.cpp" + "src/world/level/biome/BiomeSource.cpp" + + "src/world/level/chunk/LevelChunk.cpp" + + "src/world/level/dimension/Dimension.cpp" + + "src/world/level/levelgen/CanyonFeature.cpp" + "src/world/level/levelgen/DungeonFeature.cpp" + "src/world/level/levelgen/LargeCaveFeature.cpp" + "src/world/level/levelgen/LargeFeature.cpp" + "src/world/level/levelgen/RandomLevelSource.cpp" + "src/world/level/levelgen/feature/Feature.cpp" + "src/world/level/levelgen/synth/ImprovedNoise.cpp" + "src/world/level/levelgen/synth/PerlinNoise.cpp" + "src/world/level/levelgen/synth/Synth.cpp" + + "src/world/level/material/Material.cpp" + + "src/world/level/pathfinder/Path.cpp" + + "src/world/level/storage/ExternalFileLevelStorage.cpp" + "src/world/level/storage/ExternalFileLevelStorageSource.cpp" + "src/world/level/storage/FolderMethods.cpp" + "src/world/level/storage/LevelData.cpp" + "src/world/level/storage/LevelStorageSource.cpp" + "src/world/level/storage/RegionFile.cpp" + + "src/world/level/tile/BedTile.cpp" + "src/world/level/tile/ChestTile.cpp" + "src/world/level/tile/CropTile.cpp" + "src/world/level/tile/DoorTile.cpp" + "src/world/level/tile/EntityTile.cpp" + "src/world/level/tile/FurnaceTile.cpp" + "src/world/level/tile/GrassTile.cpp" + "src/world/level/tile/HeavyTile.cpp" + "src/world/level/tile/LightGemTile.cpp" + "src/world/level/tile/MelonTile.cpp" + "src/world/level/tile/Mushroom.cpp" + "src/world/level/tile/NetherReactor.cpp" + "src/world/level/tile/NetherReactorPattern.cpp" + "src/world/level/tile/StairTile.cpp" + "src/world/level/tile/StemTile.cpp" + "src/world/level/tile/StoneSlabTile.cpp" + "src/world/level/tile/TallGrass.cpp" + "src/world/level/tile/Tile.cpp" + "src/world/level/tile/TrapDoorTile.cpp" + "src/world/level/tile/entity/ChestTileEntity.cpp" + "src/world/level/tile/entity/FurnaceTileEntity.cpp" + "src/world/level/tile/entity/NetherReactorTileEntity.cpp" + "src/world/level/tile/entity/SignTileEntity.cpp" + "src/world/level/tile/entity/TileEntity.cpp" + + "src/world/phys/HitResult.cpp" +) +file(GLOB CLIENT_SOURCES "src/client/*.cpp" "src/client/gamemode/*.cpp" @@ -129,25 +310,29 @@ endif() if(PLATFORM STREQUAL "PLATFORM_WIN32") - list(APPEND SOURCES "src/AppPlatform_win32.cpp") + list(APPEND CLIENT_SOURCES "src/AppPlatform_win32.cpp") endif() if(PLATFORM STREQUAL "PLATFORM_GLFW") - list(APPEND SOURCES "src/AppPlatform_glfw.cpp") + list(APPEND CLIENT_SOURCES "src/AppPlatform_glfw.cpp") endif() # Explicitly list files added after the initial glob so they are always included -list(APPEND SOURCES +list(APPEND CLIENT_SOURCES "src/client/gui/screens/ConsoleScreen.cpp" "src/client/gui/screens/UsernameScreen.cpp" "src/client/gui/screens/CreditsScreen.cpp" ) add_executable(${PROJECT_NAME} - ${SOURCES} + ${CLIENT_SOURCES} "glad/src/glad.c" ) +#add_executable("${PROJECT_NAME}-server" +# ${SERVER_SOURCES} +#) + if(WIN32) set(EXTRA_LIBS "ws2_32") target_compile_definitions(${PROJECT_NAME} PUBLIC "_CRT_SECURE_NO_WARNINGS") @@ -157,6 +342,7 @@ if(PLATFORM STREQUAL "PLATFORM_WIN32" OR PLATFORM STREQUAL "PLATFORM_GLFW") target_compile_definitions(${PROJECT_NAME} PUBLIC "PLATFORM_DESKTOP") endif() + target_include_directories(${PROJECT_NAME} PUBLIC "${CMAKE_SOURCE_DIR}/glad/include/" "${CMAKE_SOURCE_DIR}/src" @@ -165,6 +351,16 @@ target_include_directories(${PROJECT_NAME} PUBLIC "lib/include" ) +# Server +#target_link_libraries("${PROJECT_NAME}-server" PRIVATE +# raknet ${CMAKE_THREAD_LIBS_INIT}) +#target_compile_definitions("${PROJECT_NAME}-server" PUBLIC "STANDALONE_SERVER") + +#target_include_directories("${PROJECT_NAME}-server" PUBLIC +# "${CMAKE_SOURCE_DIR}/src/" +#) + +# Client target_compile_definitions(${PROJECT_NAME} PUBLIC "OPENGL_ES" "NO_EGL" ${PLATFORM}) target_link_libraries(${PROJECT_NAME} zlib png_shared alsoft.common OpenAL::OpenAL glfw ${EXTRA_LIBS}) diff --git a/project/dedicated_server/CMakeLists.txt b/project/dedicated_server/CMakeLists.txt index fd4c363..f7c2e11 100755 --- a/project/dedicated_server/CMakeLists.txt +++ b/project/dedicated_server/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8.7) +cmake_minimum_required(VERSION 3.5.0) find_package (Threads) include_directories("${PROJECT_SOURCE_DIR}/../lib_projects/raknet/jni/RaknetSources") add_subdirectory("${PROJECT_SOURCE_DIR}/../lib_projects/raknet/jni" "${CMAKE_CURRENT_BINARY_DIR}/raknet") @@ -151,6 +151,9 @@ set(CompileFiles ../../src/main.cpp ../../src/world/level/tile/entity/TileEntity.cpp ../../src/world/level/tile/entity/FurnaceTileEntity.cpp ../../src/world/phys/HitResult.cpp) -message(${CMAKE_LIBRARY_ARCHITECTURE}) + add_executable(mcpe_server ${CompileFiles}) -target_link_libraries(mcpe_server raknet ${CMAKE_THREAD_LIBS_INIT}) \ No newline at end of file +target_link_libraries(mcpe_server raknet ${CMAKE_THREAD_LIBS_INIT}) +target_include_directories(mcpe_server PUBLIC + "/home/invisedivine/Документы/minecraft-pe-0.6.1/src/" +) diff --git a/project/lib_projects/raknet/jni/RaknetSources/RakPeer.cpp b/project/lib_projects/raknet/jni/RaknetSources/RakPeer.cpp index 698374e..a24a2b5 100755 --- a/project/lib_projects/raknet/jni/RaknetSources/RakPeer.cpp +++ b/project/lib_projects/raknet/jni/RaknetSources/RakPeer.cpp @@ -124,7 +124,7 @@ static const unsigned int MAX_OFFLINE_DATA_LENGTH=400; // I set this because I l #pragma warning(disable:4309) // 'initializing' : truncation of constant value #endif // Make sure highest bit is 0, so isValid in DatagramHeaderFormat is false -static const char OFFLINE_MESSAGE_DATA_ID[16]={0x00,0xFF,0xFF,0x00,0xFE,0xFE,0xFE,0xFE,0xFD,0xFD,0xFD,0xFD,0x12,0x34,0x56,0x78}; +static const unsigned char OFFLINE_MESSAGE_DATA_ID[16]={0x00,0xFF,0xFF,0x00,0xFE,0xFE,0xFE,0xFE,0xFD,0xFD,0xFD,0xFD,0x12,0x34,0x56,0x78}; struct PacketFollowedByData { diff --git a/src/client/Minecraft.cpp b/src/client/Minecraft.cpp index dde030e..59f5292 100755 --- a/src/client/Minecraft.cpp +++ b/src/client/Minecraft.cpp @@ -55,7 +55,6 @@ #include "player/input/XperiaPlayInput.h" #endif - #include "player/input/MouseTurnInput.h" #include "../world/entity/MobFactory.h" #include "../world/level/MobSpawner.h" @@ -1288,6 +1287,30 @@ bool Minecraft::joinMultiplayer( const PingedCompatibleServer& server ) return false; } +bool Minecraft::joinMultiplayerFromString( const std::string& server ) +{ + std::string ip = ""; + std::string port = "19132"; + + size_t pos = server.find(":"); + + if (pos != std::string::npos) { + ip = server.substr(0, pos); + port = server.substr(pos + 1); + } else { + ip = server; + } + + printf("%s \n", port.c_str()); + + if (isLookingForMultiplayer && netCallback) { + isLookingForMultiplayer = false; + printf("test"); + return raknetInstance->connect(ip.c_str(), std::stoi(port)); + } + return false; +} + void Minecraft::hostMultiplayer(int port) { // Tear down last instance raknetInstance->disconnect(); @@ -1455,6 +1478,12 @@ LevelStorageSource* Minecraft::getLevelSource() return storageSource; } +// int Minecraft::getLicenseId() { +// if (!LicenseCodes::isReady(_licenseId)) +// _licenseId = platform()->checkLicense(); +// return _licenseId; +// } + void Minecraft::audioEngineOn() { #ifndef STANDALONE_SERVER soundEngine->enable(true); diff --git a/src/client/Minecraft.h b/src/client/Minecraft.h index e333bab..ef2831c 100755 --- a/src/client/Minecraft.h +++ b/src/client/Minecraft.h @@ -80,6 +80,7 @@ public: void locateMultiplayer(); void cancelLocateMultiplayer(); bool joinMultiplayer(const PingedCompatibleServer& server); + bool joinMultiplayerFromString(const std::string& server); void hostMultiplayer(int port=19132); Player* respawnPlayer(int playerId); void respawnPlayer(); diff --git a/src/client/gui/screens/JoinByIPScreen.cpp b/src/client/gui/screens/JoinByIPScreen.cpp new file mode 100644 index 0000000..7044d77 --- /dev/null +++ b/src/client/gui/screens/JoinByIPScreen.cpp @@ -0,0 +1,140 @@ +#include "JoinByIPScreen.h" + +#include "JoinGameScreen.h" +#include "StartMenuScreen.h" +#include "ProgressScreen.h" +#include "../Font.h" +#include "../../../network/RakNetInstance.h" +#include "client/gui/components/TextBox.h" +#include "network/ClientSideNetworkHandler.h" + +JoinByIPScreen::JoinByIPScreen() : + tIP(0, "Server IP"), + bHeader(1, "Join on server"), + bJoin( 2, "Join Game"), + bBack( 3, "") +{ + bJoin.active = false; + //gamesList->yInertia = 0.5f; +} + +JoinByIPScreen::~JoinByIPScreen() +{ +} + +void JoinByIPScreen::buttonClicked(Button* button) +{ + if (button->id == bJoin.id) + { + minecraft->isLookingForMultiplayer = true; + minecraft->netCallback = new ClientSideNetworkHandler(minecraft, minecraft->raknetInstance); + + minecraft->joinMultiplayerFromString(tIP.text); + { + + bJoin.active = false; + bBack.active = false; + minecraft->setScreen(new ProgressScreen()); + } + } + if (button->id == bBack.id) + { + minecraft->cancelLocateMultiplayer(); + minecraft->screenChooser.setScreen(SCREEN_STARTMENU); + } +} + +bool JoinByIPScreen::handleBackEvent(bool isDown) +{ + if (!isDown) + { + minecraft->screenChooser.setScreen(SCREEN_STARTMENU); + } + return true; +} + +void JoinByIPScreen::tick() +{ + bJoin.active = !tIP.text.empty(); +} + +void JoinByIPScreen::init() +{ + ImageDef def; + def.name = "gui/touchgui.png"; + def.width = 34; + def.height = 26; + + def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height)); + bBack.setImageDef(def, true); + + buttons.push_back(&bJoin); + buttons.push_back(&bBack); + buttons.push_back(&bHeader); + + textBoxes.push_back(&tIP); +#ifdef ANDROID + tabButtons.push_back(&bJoin); + tabButtons.push_back(&bBack); + tabButtons.push_back(&bHeader); +#endif +} + +void JoinByIPScreen::setupPositions() { + int tIpDiff = 40; + + bJoin.y = height * 2 / 3; + bBack.y = 0; + bHeader.y = 0; + + // Center buttons + //bJoin.x = width / 2 - 4 - bJoin.w; + bBack.x = width - bBack.width;//width / 2 + 4; + + bJoin.x = (width - bJoin.width) / 2; + + bHeader.x = 0; + bHeader.width = width - bBack.width; + + tIP.width = bJoin.width + tIpDiff; + tIP.height = 16; + tIP.x = bJoin.x - tIpDiff / 2; + tIP.y = ((height - bJoin.height) / 2) - tIP.height - 4; +} + +void JoinByIPScreen::mouseClicked(int x, int y, int buttonNum) { + int lvlTop = tIP.y - (Font::DefaultLineHeight + 4); + int lvlBottom = tIP.y + tIP.height; + int lvlLeft = tIP.x; + int lvlRight = tIP.x + tIP.width; + bool clickedIP = x >= lvlLeft && x < lvlRight && y >= lvlTop && y < lvlBottom; + + if (clickedIP) { + tIP.setFocus(minecraft); + } else { + tIP.loseFocus(minecraft); + } + + Screen::mouseClicked(x, y, buttonNum); +} +void JoinByIPScreen::render( int xm, int ym, float a ) +{ + renderBackground(); + Screen::render(xm, ym, a); +} + +void JoinByIPScreen::keyPressed(int eventKey) +{ + if (eventKey == Keyboard::KEY_ESCAPE) { + minecraft->screenChooser.setScreen(SCREEN_STARTMENU); + return; + } + // let base class handle navigation and text box keys + Screen::keyPressed(eventKey); +} + +void JoinByIPScreen::keyboardNewChar(char inputChar) +{ + // forward character input to focused textbox(s) + for (auto* tb : textBoxes) tb->handleChar(inputChar); +} \ No newline at end of file diff --git a/src/client/gui/screens/JoinByIPScreen.h b/src/client/gui/screens/JoinByIPScreen.h index e69de29..288ada9 100644 --- a/src/client/gui/screens/JoinByIPScreen.h +++ b/src/client/gui/screens/JoinByIPScreen.h @@ -0,0 +1,30 @@ + +#include "../Screen.h" +#include "../components/Button.h" +#include "../../Minecraft.h" +#include "client/gui/components/ImageButton.h" +#include "client/gui/components/TextBox.h" + +class JoinByIPScreen: public Screen +{ +public: + JoinByIPScreen(); + virtual ~JoinByIPScreen(); + + void init(); + void setupPositions(); + + virtual void tick(); + void render(int xm, int ym, float a); + + virtual void keyPressed(int eventKey); + virtual void keyboardNewChar(char inputChar); + void buttonClicked(Button* button); + virtual void mouseClicked(int x, int y, int buttonNum); + virtual bool handleBackEvent(bool isDown); +private: + TextBox tIP; + Touch::THeader bHeader; + Touch::TButton bJoin; + ImageButton bBack; +}; \ No newline at end of file diff --git a/src/client/gui/screens/ScreenChooser.cpp b/src/client/gui/screens/ScreenChooser.cpp index 63d0da1..b306b9c 100755 --- a/src/client/gui/screens/ScreenChooser.cpp +++ b/src/client/gui/screens/ScreenChooser.cpp @@ -5,6 +5,7 @@ #include "PauseScreen.h" #include "RenameMPLevelScreen.h" #include "IngameBlockSelectionScreen.h" +#include "JoinByIPScreen.h" #include "touch/TouchStartMenuScreen.h" #include "touch/TouchSelectWorldScreen.h" #include "touch/TouchJoinGameScreen.h" @@ -18,13 +19,13 @@ Screen* ScreenChooser::createScreen( ScreenId id ) if (_mc->useTouchscreen()) { switch (id) { - case SCREEN_STARTMENU: screen = new Touch::StartMenuScreen(); break; - case SCREEN_SELECTWORLD:screen = new Touch::SelectWorldScreen();break; - case SCREEN_JOINGAME: screen = new Touch::JoinGameScreen(); break; - case SCREEN_PAUSE: screen = new PauseScreen(false); break; - case SCREEN_PAUSEPREV: screen = new PauseScreen(true); break; - case SCREEN_BLOCKSELECTION: screen = new Touch::IngameBlockSelectionScreen(); break; - + case SCREEN_STARTMENU: screen = new Touch::StartMenuScreen(); break; + case SCREEN_SELECTWORLD: screen = new Touch::SelectWorldScreen();break; + case SCREEN_JOINGAME: screen = new Touch::JoinGameScreen(); break; + case SCREEN_PAUSE: screen = new PauseScreen(false); break; + case SCREEN_PAUSEPREV: screen = new PauseScreen(true); break; + case SCREEN_BLOCKSELECTION: screen = new Touch::IngameBlockSelectionScreen(); break; + case SCREEN_JOINBYIP: screen = new JoinByIPScreen(); break; case SCREEN_NONE: default: // Do nothing @@ -32,12 +33,13 @@ Screen* ScreenChooser::createScreen( ScreenId id ) } } else { switch (id) { - case SCREEN_STARTMENU: screen = new StartMenuScreen(); break; - case SCREEN_SELECTWORLD:screen = new SelectWorldScreen();break; - case SCREEN_JOINGAME: screen = new JoinGameScreen(); break; - case SCREEN_PAUSE: screen = new PauseScreen(false); break; - case SCREEN_PAUSEPREV: screen = new PauseScreen(true); break; - case SCREEN_BLOCKSELECTION: screen = new IngameBlockSelectionScreen(); break; + case SCREEN_STARTMENU: screen = new StartMenuScreen(); break; + case SCREEN_SELECTWORLD: screen = new SelectWorldScreen();break; + case SCREEN_JOINGAME: screen = new JoinGameScreen(); break; + case SCREEN_PAUSE: screen = new PauseScreen(false); break; + case SCREEN_PAUSEPREV: screen = new PauseScreen(true); break; + case SCREEN_BLOCKSELECTION: screen = new IngameBlockSelectionScreen(); break; + case SCREEN_JOINBYIP: screen = new JoinByIPScreen(); break; case SCREEN_NONE: default: diff --git a/src/client/gui/screens/ScreenChooser.h b/src/client/gui/screens/ScreenChooser.h index 0979ade..e63fe99 100755 --- a/src/client/gui/screens/ScreenChooser.h +++ b/src/client/gui/screens/ScreenChooser.h @@ -8,7 +8,8 @@ enum ScreenId { SCREEN_PAUSE, SCREEN_PAUSEPREV, SCREEN_SELECTWORLD, - SCREEN_BLOCKSELECTION + SCREEN_BLOCKSELECTION, + SCREEN_JOINBYIP }; class Screen; diff --git a/src/client/gui/screens/touch/TouchJoinGameScreen.cpp b/src/client/gui/screens/touch/TouchJoinGameScreen.cpp index 181343d..f8ad00a 100755 --- a/src/client/gui/screens/touch/TouchJoinGameScreen.cpp +++ b/src/client/gui/screens/touch/TouchJoinGameScreen.cpp @@ -129,6 +129,11 @@ void JoinGameScreen::buttonClicked(Button* button) //minecraft->locateMultiplayer(); //minecraft->setScreen(new JoinGameScreen()); } + if(button->id == bJoinByIp.id) { + minecraft->cancelLocateMultiplayer(); + minecraft->screenChooser.setScreen(SCREEN_JOINBYIP); + } + if (button->id == bBack.id) { minecraft->cancelLocateMultiplayer();