mirror of
https://github.com/ytsodacan/Faucet.git
synced 2026-08-20 04:28:45 +00:00
Update README.md
This commit is contained in:
parent
fe76832d96
commit
b65a3e5f04
167
README.md
167
README.md
|
|
@ -1,6 +1,167 @@
|
||||||
# Faucet
|
# Faucet
|
||||||
Minecraft LCE’s Best Modloader!
|
**A mod loader for Minecraft: Legacy Console Edition**
|
||||||
|
|
||||||
|
Faucet lets you load custom DLL mods into Minecraft Legacy Console Edition using a custom fork of the game. Mods are written in C++ using the FaucetSDK and placed in the game's `mods\` folder.
|
||||||
|
|
||||||
Hello people from minecraftlegacy.com! The source code will br in here in like 8 hours but here is a build and the docs for you to look at https://ytsodacan.github.io/FaucetDocs
|
---
|
||||||
https://github.com/ytsodacan/FaucetBuilds/releases/tag/build
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- [Faucet (custom LCE fork)](https://github.com/ytsodacan/Faucet) — the modified game executable required to run mods
|
||||||
|
- [FaucetSDK](https://github.com/ytsodacan/FaucetSDK/tree/main) — headers, lib, and example mod for building your own mods
|
||||||
|
- Visual Studio 2022 with the **Desktop development with C++** workload
|
||||||
|
- Windows x64
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
1. Download and set up the Faucet fork from the link above.
|
||||||
|
2. Place any mod `.dll` files into the `mods\` folder in your game directory.
|
||||||
|
3. Launch the game. Mods are loaded automatically at startup and logged to `mods\modloader.log`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Creating a Mod
|
||||||
|
|
||||||
|
### Project Setup
|
||||||
|
|
||||||
|
1. In Visual Studio 2022, create a new **Dynamic-Link Library (DLL)** project targeting **x64**.
|
||||||
|
2. Download the [FaucetSDK](https://github.com/ytsodacan/FaucetSDK/tree/main) and copy these files into your project folder:
|
||||||
|
- `IMod.h`
|
||||||
|
- `SDK.h`
|
||||||
|
- `ModExport.h`
|
||||||
|
- `Minecraft.Client.lib`
|
||||||
|
3. In your project properties:
|
||||||
|
- **C/C++ → Additional Include Directories**: add `$(ProjectDir)`
|
||||||
|
- **Linker → Input → Additional Dependencies**: add `Minecraft.Client.lib`
|
||||||
|
- **Linker → General → Additional Library Directories**: add `$(ProjectDir)`
|
||||||
|
4. Remove `dllmain.cpp` from the project (right-click → Remove in Solution Explorer).
|
||||||
|
|
||||||
|
### Mod Structure
|
||||||
|
|
||||||
|
Every mod must implement the `IMod` interface and export a `CreateMod()` function:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
#include "IMod.h"
|
||||||
|
#include "SDK.h"
|
||||||
|
|
||||||
|
class MyMod final : public IMod {
|
||||||
|
public:
|
||||||
|
const ModInfo* GetInfo() const override {
|
||||||
|
static const ModInfo info{
|
||||||
|
"com.yourname.mymod", // Unique mod ID
|
||||||
|
"My Mod", // Display name
|
||||||
|
"YourName", // Author
|
||||||
|
"Description here.", // Description
|
||||||
|
{ 1, 0, 0 } // Version
|
||||||
|
};
|
||||||
|
return &info;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OnLoad() override { SDK::Log(L"MyMod: loaded"); return true; }
|
||||||
|
bool OnInit() override { SDK::Log(L"MyMod: init"); return true; }
|
||||||
|
bool OnUpdate(float dt) override { return true; }
|
||||||
|
void OnShutdown() override { SDK::Log(L"MyMod: shutdown"); }
|
||||||
|
};
|
||||||
|
|
||||||
|
extern "C" __declspec(dllexport) IMod* CreateMod() {
|
||||||
|
return new MyMod();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Build the project and copy the output `.dll` into your `mods\` folder.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## SDK Reference
|
||||||
|
|
||||||
|
Include `SDK.h` in your mod to access all game systems.
|
||||||
|
|
||||||
|
### Logging
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
SDK::Log(L"Hello from my mod!");
|
||||||
|
SDK::LogWarn(L"Something seems off.");
|
||||||
|
SDK::LogError(L"Something went wrong.");
|
||||||
|
```
|
||||||
|
|
||||||
|
All output is written to `mods\modloader.log`.
|
||||||
|
|
||||||
|
### Getting Game Objects
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
Minecraft* client = SDK::GetClient();
|
||||||
|
MinecraftServer* server = SDK::GetServer();
|
||||||
|
ServerLevel* level = SDK::GetServerLevel(0); // 0=Overworld, -1=Nether, 1=End
|
||||||
|
PlayerList* players = SDK::GetPlayerList();
|
||||||
|
MultiplayerLocalPlayer* localPlayer = SDK::GetLocalPlayer();
|
||||||
|
```
|
||||||
|
|
||||||
|
### Player
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
auto* player = SDK::GetLocalPlayer();
|
||||||
|
if (player) {
|
||||||
|
float hp = player->getHealth(); // 0.0–20.0
|
||||||
|
player->setHealth(20.0f); // Full heal
|
||||||
|
player->setFlying(true);
|
||||||
|
wstring name = player->getName();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Server Players
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
PlayerList* list = SDK::GetPlayerList();
|
||||||
|
if (list) {
|
||||||
|
for (auto& sp : list->players)
|
||||||
|
sp->sendMessage(L"Hello!");
|
||||||
|
|
||||||
|
auto steve = list->getPlayer(L"Steve");
|
||||||
|
if (steve) steve->disconnect();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Messaging
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
SDK::BroadcastMessage(L"Server restarting soon!");
|
||||||
|
SDK::SendMessageToPlayer(L"Steve", L"You've been warned.");
|
||||||
|
```
|
||||||
|
|
||||||
|
### Server Control
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
SDK::ExecuteCommand(L"time set day");
|
||||||
|
SDK::SetTimeOfDay(6000); // 0=dawn, 6000=noon, 12000=dusk, 18000=midnight
|
||||||
|
SDK::SaveAll();
|
||||||
|
SDK::SetPvpAllowed(false);
|
||||||
|
SDK::SetFlightAllowed(true);
|
||||||
|
```
|
||||||
|
|
||||||
|
### World / Level
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
ServerLevel* level = SDK::GetServerLevel(0);
|
||||||
|
if (level) {
|
||||||
|
level->explode(nullptr, 0, 64, 0, 4.0f, false, true);
|
||||||
|
level->sendParticles(L"flame", x, y, z, 10);
|
||||||
|
level->save(true, nullptr);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- The mod loader calls `OnShutdown` each time a world unloads, not only on game exit. Design your mod accordingly if you need persistent state across world loads.
|
||||||
|
- Logs are written to `mods\modloader.log` — check here first if your mod isn't behaving as expected.
|
||||||
|
- `SDK::GetLocalPlayer()` returns `nullptr` when no world is loaded. Always null-check before use.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Links
|
||||||
|
|
||||||
|
- **Faucet (game fork)**: https://github.com/ytsodacan/Faucet
|
||||||
|
- **FaucetSDK (mod tools)**: https://github.com/ytsodacan/FaucetSDK/tree/main
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue