13 Commits
Author SHA1 Message Date
str1k3r 415dcdf7b7 Begin Hay Bale Removal 2026-05-13 18:47:17 -04:00
str1k3r 790d257725 Remove Hardened Clay (Terracotta) 2026-05-13 09:57:06 -04:00
str1k3r 02f1e14855 Remove Critical Hit Sound to Be Accurate to TU19/24 2026-05-13 06:36:55 -04:00
str1k3r d6232544ca Remove Stained Glass, Sword of Debug & Updated PORTING.md
Remove stained glass as its not accurate to TU19 up to TU24, Update PORTING.md to include versions we are trying to achieve & Remove the sword of debug as it was a debug item thats not needed.
2026-05-13 05:49:50 -04:00
str1k3randGitHub fb83868d25 Update server release tags link in README 2026-05-13 02:35:52 -04:00
str1k3r e3056038b9 Add Banner to Readme 2026-05-13 02:31:27 -04:00
str1k3r 80bc1e74d8 Update COMPILE.md & CONTRIBUTING.md 2026-05-13 02:24:43 -04:00
str1k3r 0fc8b1ef44 fix README.md 2026-05-13 02:20:21 -04:00
str1k3r 5f79f00dd2 Add all .md files needed 2026-05-13 02:16:10 -04:00
str1k3randGitHub 568e5a5a7f Change trigger branch from 'main' to 'TU19' 2026-05-13 01:17:01 -04:00
str1k3r 590556ae49 Move all settings to Windows64/Settings & Ensure the folder exists 2026-05-13 01:11:43 -04:00
str1k3randGitHub e0c09e7afb Update TU31.yml 2026-05-12 22:59:48 -04:00
str1k3randGitHub 84a59834a7 Add nightly release workflow for TU31 2026-05-12 22:58:49 -04:00
44 changed files with 516 additions and 691 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

+107
View File
@@ -0,0 +1,107 @@
name: TU31 Release
on:
workflow_dispatch:
push:
branches:
- 'TU31'
paths:
- '**'
- '!.gitignore'
- '!*.md'
- '!.github/**'
- '.github/workflows/nightly.yml'
permissions:
contents: write
concurrency:
group: TU31
cancel-in-progress: true
jobs:
build:
runs-on: windows-latest
strategy:
matrix:
platform: [Windows64]
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: recursive
- name: Set platform lowercase
run: echo "MATRIX_PLATFORM=$('${{ matrix.platform }}'.ToLower())" >> $env:GITHUB_ENV
- name: Setup MSVC
uses: ilammy/msvc-dev-cmd@v1
- name: Setup CMake
uses: lukka/get-cmake@latest
- name: Run CMake
uses: lukka/run-cmake@v10
env:
VCPKG_ROOT: "" # Disable vcpkg for CI builds
with:
configurePreset: ${{ env.MATRIX_PLATFORM }}
buildPreset: ${{ env.MATRIX_PLATFORM }}-release
buildPresetAdditionalArgs: "['--target', 'Minecraft.Client']"
- name: Zip Build
run: 7z a -r LCE${{ matrix.platform }}.zip ./build/${{ env.MATRIX_PLATFORM }}/Minecraft.Client/Release/* "-x!*.ipdb" "-x!*.iobj"
- name: Stage artifacts
run: |
New-Item -ItemType Directory -Force -Path staging
Copy-Item LCE${{ matrix.platform }}.zip staging/
- name: Stage exe and pdb
if: matrix.platform == 'Windows64'
run: |
Copy-Item ./build/${{ env.MATRIX_PLATFORM }}/Minecraft.Client/Release/Minecraft.Client.exe staging/
- name: Upload artifacts
uses: actions/upload-artifact@v6
with:
name: build-${{ matrix.platform }}
path: staging/*
release:
needs: build
runs-on: ubuntu-latest
steps:
- name: Download all artifacts
uses: actions/download-artifact@v7
with:
path: artifacts
merge-multiple: true
- name: Update release
uses: andelf/nightly-release@main
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: TU31
name: Nightly Client Release
body: |
Requires at least Windows 7 and DirectX 11 compatible GPU to run.
# 🚨 First time here? 🚨
If you've never downloaded the game before, you need to download `LCEWindows64.zip` and extract it to the folder where you'd like to keep the game. The other files are included in this `.zip` file!
files: |
artifacts/*
cleanup:
needs: [build, release]
if: always()
runs-on: ubuntu-latest
steps:
- name: Cleanup artifacts
uses: geekyeggo/delete-artifact@v5
with:
name: build-*
+1 -1
View File
@@ -4,7 +4,7 @@ on:
workflow_dispatch:
push:
branches:
- 'main'
- 'TU19'
paths:
- '**'
- '!.gitignore'
+3 -65
View File
@@ -3,26 +3,12 @@
## Visual Studio
1. Clone the repo, including submodules.
- If you don't, the build will fail. `git clone --recurse-submodules https://github.com/MCLCE/MinecraftConsoles.git`
- If you don't, the build will fail. `git clone --recurse-submodules https://github.com/mclemp/MCLEClient.git`
2. Open the repo folder in Visual Studio 2022+.
3. Wait for cmake to configure the project and load all assets (this may take a few minutes on the first run).
4. Right click a folder in the solution explorer and switch to the 'CMake Targets View'
5. Select platform and configuration from the dropdown. EG: `Windows64 - Debug` or `Windows64 - Release`
6. Pick the startup project `Minecraft.Client.exe` or `Minecraft.Server.exe` using the debug targets dropdown
7. Build and run the project:
- `Build > Build Solution` (or `Ctrl+Shift+B`)
- Start debugging with `F5`.
### Dedicated server debug arguments
- Default debugger arguments for `Minecraft.Server`:
- `-port 25565 -bind 0.0.0.0 -name DedicatedServer`
- You can override arguments in:
- `Project Properties > Debugging > Command Arguments`
- `Minecraft.Server` post-build copies only the dedicated-server asset set:
- `Common/Media/MediaWindows64.arc`
- `Common/res`
- `Windows64/GameHDD`
5. Select platform and configuration from the dropdown. EG: `Windows64 - Release`
6. Pick the startup project `Minecraft.Client.exe`
## CMake (Windows x64)
@@ -34,30 +20,12 @@ Open `Developer PowerShell for VS` and run:
cmake --preset windows64
```
Build Debug:
```powershell
cmake --build --preset windows64-debug --target Minecraft.Client
```
Build Release:
```powershell
cmake --build --preset windows64-release --target Minecraft.Client
```
Build Dedicated Server (Debug):
```powershell
cmake --build --preset windows64-debug --target Minecraft.Server
```
Build Dedicated Server (Release):
```powershell
cmake --build --preset windows64-release --target Minecraft.Server
```
Run executable:
```powershell
@@ -65,13 +33,6 @@ cd .\build\windows64\Minecraft.Client\Debug
.\Minecraft.Client.exe
```
Run dedicated server:
```powershell
cd .\build\windows64\Minecraft.Server\Debug
.\Minecraft.Server.exe -port 25565 -bind 0.0.0.0 -name DedicatedServer
```
Notes:
- Post-build asset copy is automatic for `Minecraft.Client` in CMake (Debug and Release variants).
- The game relies on relative paths (for example `Common\Media\...`), so launching from the output directory is required.
@@ -151,7 +112,6 @@ Build specific target:
```bash
cmake --build build/windows64-clang --config Release --target Minecraft.Client
cmake --build build/windows64-clang --config Release --target Minecraft.Server
```
### Run with Wine
@@ -163,28 +123,6 @@ cd build/windows64-clang/Minecraft.Client
wine ./Minecraft.Client.exe
```
Run dedicated server:
```bash
cd build/windows64-clang/Minecraft.Server
wine ./Minecraft.Server.exe -port 25565 -bind 0.0.0.0 -name DedicatedServer
```
### NixOS / Nix
For NixOS or systems with Nix installed, use the provided flake:
```bash
nix build .#client
nix build .#server
```
Or enter the development shell with all dependencies:
```bash
nix develop
```
Notes:
- Requires LLVM 15+ with clang-cl, lld-link, llvm-rc, and llvm-mt.
- The xwin tool downloads ~1GB of SDK files on first run.
+53
View File
@@ -0,0 +1,53 @@
# Scope of Project
At the moment, this project's scope is generally limited outside of adding new content to the game (blocks, mobs, items). We are currently prioritizing stability, and platform support over these things.
## Backporting
If you're backporting a feature or downporting, please read [PORTING.md](./PORTING.md)
## Parity
We are attempting to keep our version of LCE as close to visual and experience parity with the original console experience of LCE as possible. This means that we will not be accepting changes that...
- Backport things from Java Edition that did not ever exist in LCE
- Swap out LCE visuals for Java Edition or Bedrock Edition style visuals
- Change LCE defaults in favor of different defaults if it changes the experience
- For example, increasing mob spawn limits without increasing the area mobs can spawn within, aka increasing mob density past what was the original console experience
- Redesign UI components different than LCE
- Break controller support, or otherwise do not support play with a controller
- Add custom texture packs or DLC that never existed in LCE
- Add any gameplay content (block, item, mob) that has no existing point of reference in any official LCE build
However, we would accept changes that...
- Fix legitimately buggy or inconsistent behavior in LCE that causes unexpected outcomes
- For example, mobs clipping outside of walls, clipping through the world, broken mechanics
- Add features to better support multi-platform use of LCE, such as video and control settings
- These menus need to respect the visual style of LCE, though.
- Replace existing UI systems with SWF-free rendering techniques that are as visually and functionally identical as possible
- Improve the quality of assets (such as sounds) while preserving their contents
- For example, upgrading the quality of all music in-game while preserving any unique cuts / versions, or faithfully remaking those unique cuts / versions with higher quality assets
- Backport things like modern skin rendering
- Change the code from using non-stitched textures to individually named texture PNGs and stitching at runtime
- Adding menus to better support custom dedicated servers with their own fixed IPs
- Add support for things like Steamworks Networking and other P2P networking and auth strategies
- Improve Keyboard and Mouse control support
- Add minimal, non-invasive Quality of Life features that don't otherwise compromise the LCE experience
- For example, adjusting certain crafting recipes or change item behaviors like non-stackable doors
## Current Goals
- Having proper controller support across all types, brands on Desktop or Desktop-like platforms (Steam Deck)
- Improving stability as much as possible
- Fixing as many bugs as possible
- Refining rendering settings, renderer options, as well as reaching rendering parity with true LCE
- Having workable multi-platform compilation for ARM, Consoles, Linux
# Scope of PRs
All Pull Requests should fully document the changes they include in their file changes. They should also be limited to one general topic and not touch all over the codebase unless its justifiable.
For example, we would not accept a PR that reworks UI, multiplayer code, and furnace ticking even if its a "fixup" PR as its too difficult to review a ton of code changes that are all irrelevant from each other. However, a PR focused on adding a bunch of commands or fixes several crashes that are otherwise irrelevant to each other would be accepted.
If your PR includes any undocumented changes it will be closed.
# Use of AI and LLMs
We currently do not accept any new code into the project that was written largely, entirely, or even noticably by an LLM. All contributions should be made by humans that understand the codebase.
# Pull Request Template
We request that all PRs made for this repo use our PR template to the fullest extent possible. Completely wiping it out to write minimal information will likely get your PR closed.
+1
View File
@@ -85,4 +85,5 @@ add_copyredist_target(Minecraft.Client)
# Make sure GameHDD exists on Windows
if(PLATFORM_NAME STREQUAL "Windows64")
add_gamehdd_target(Minecraft.Client)
add_settings_target(Minecraft.Client)
endif()
@@ -223,8 +223,6 @@ const WCHAR *ConsoleSoundEngine::wchSoundNames[eSoundType_MAX]=
// 4J-PB - Some sounds were updated, but we can't do that for the 360 or we have to do a new sound bank
// instead, we'll add the sounds as new ones and change the code to reference them
L"fire.new_ignite",
L"damage.critical", //eSoundType_DAMAGE_CRITICAL,
};
+1 -1
View File
@@ -788,7 +788,7 @@ static void Win64_GetSettingsPath(char *outPath, DWORD size)
GetModuleFileNameA(nullptr, outPath, size);
char *lastSlash = strrchr(outPath, '\\');
if (lastSlash) *(lastSlash + 1) = '\0';
strncat_s(outPath, size, "settings.dat", _TRUNCATE);
strncat_s(outPath, size, "Windows64/Settings/settings.dat", _TRUNCATE);
}
static void Win64_SaveSettings(GAME_SETTINGS *gs)
{
@@ -332,7 +332,6 @@ void Tutorial::staticCtor()
s_completableTasks.push_back( e_Tutorial_Hint_Hopper );
s_completableTasks.push_back( e_Tutorial_Hint_Comparator );
s_completableTasks.push_back( e_Tutorial_Hint_ChestTrap );
s_completableTasks.push_back( e_Tutorial_Hint_HayBlock );
s_completableTasks.push_back( e_Tutorial_Hint_ClayHardened );
s_completableTasks.push_back( e_Tutorial_Hint_ClayHardenedColored );
s_completableTasks.push_back( e_Tutorial_Hint_CoalBlock );
@@ -785,15 +784,6 @@ Tutorial::Tutorial(int iPad, bool isFullTutorial /*= false*/) : m_iPad( iPad )
int trappedChestItems[] = {Tile::chest_trap_Id};
if(!isHintCompleted(e_Tutorial_Hint_ChestTrap)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_ChestTrap, this, trappedChestItems, 1 ) );
int hayBlockItems[] = {Tile::hayBlock_Id};
if(!isHintCompleted(e_Tutorial_Hint_HayBlock)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_HayBlock, this, hayBlockItems, 1 ) );
int clayHardenedItems[] = {Tile::clayHardened_Id};
if(!isHintCompleted(e_Tutorial_Hint_ClayHardened)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_ClayHardened, this, clayHardenedItems, 1 ) );
int clayHardenedColoredItems[] = {Tile::clayHardened_colored_Id};
if(!isHintCompleted(e_Tutorial_Hint_ClayHardenedColored)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_ClayHardenedColored, this, clayHardenedColoredItems, 1 ) );
int coalBlockItems[] = {Tile::coalBlock_Id};
if(!isHintCompleted(e_Tutorial_Hint_CoalBlock)) addHint(e_Tutorial_State_Gameplay, new LookAtTileHint(e_Tutorial_Hint_CoalBlock, this, coalBlockItems, 1 ) );
@@ -309,7 +309,6 @@ enum eTutorial_Hint
e_Tutorial_Hint_Hopper,
e_Tutorial_Hint_Comparator,
e_Tutorial_Hint_ChestTrap,
e_Tutorial_Hint_HayBlock,
e_Tutorial_Hint_ClayHardened,
e_Tutorial_Hint_ClayHardenedColored,
e_Tutorial_Hint_CoalBlock,
@@ -116,24 +116,6 @@ void IUIScene_CreativeMenu::staticCtor()
ITEM(Tile::stairs_sandstone_Id)
ITEM(Tile::stairs_quartz_Id)
ITEM(Tile::clayHardened_Id)
ITEM_AUX(Tile::clayHardened_colored_Id,14) // Red
ITEM_AUX(Tile::clayHardened_colored_Id,1) // Orange
ITEM_AUX(Tile::clayHardened_colored_Id,4) // Yellow
ITEM_AUX(Tile::clayHardened_colored_Id,5) // Lime
ITEM_AUX(Tile::clayHardened_colored_Id,3) // Light Blue
ITEM_AUX(Tile::clayHardened_colored_Id,9) // Cyan
ITEM_AUX(Tile::clayHardened_colored_Id,11) // Blue
ITEM_AUX(Tile::clayHardened_colored_Id,10) // Purple
ITEM_AUX(Tile::clayHardened_colored_Id,2) // Magenta
ITEM_AUX(Tile::clayHardened_colored_Id,6) // Pink
ITEM_AUX(Tile::clayHardened_colored_Id,0) // White
ITEM_AUX(Tile::clayHardened_colored_Id,8) // Light Gray
ITEM_AUX(Tile::clayHardened_colored_Id,7) // Gray
ITEM_AUX(Tile::clayHardened_colored_Id,15) // Black
ITEM_AUX(Tile::clayHardened_colored_Id,13) // Green
ITEM_AUX(Tile::clayHardened_colored_Id,12) // Brown
// Decoration
DEF(eCreativeInventory_Decoration)
ITEM_AUX(Item::skull_Id,SkullTileEntity::TYPE_SKELETON)
@@ -175,7 +157,6 @@ void IUIScene_CreativeMenu::staticCtor()
ITEM(Item::sign_Id)
ITEM(Tile::bookshelf_Id)
ITEM(Item::flowerPot_Id)
ITEM(Tile::hayBlock_Id)
ITEM_AUX(Tile::wool_Id,14) // Red
ITEM_AUX(Tile::wool_Id,1) // Orange
ITEM_AUX(Tile::wool_Id,4) // Yellow
@@ -210,40 +191,6 @@ void IUIScene_CreativeMenu::staticCtor()
ITEM_AUX(Tile::woolCarpet_Id,13) // Green
ITEM_AUX(Tile::woolCarpet_Id,12) // Brown
ITEM_AUX(Tile::stained_glass_Id,14) // Red
ITEM_AUX(Tile::stained_glass_Id,1) // Orange
ITEM_AUX(Tile::stained_glass_Id,4) // Yellow
ITEM_AUX(Tile::stained_glass_Id,5) // Lime
ITEM_AUX(Tile::stained_glass_Id,3) // Light Blue
ITEM_AUX(Tile::stained_glass_Id,9) // Cyan
ITEM_AUX(Tile::stained_glass_Id,11) // Blue
ITEM_AUX(Tile::stained_glass_Id,10) // Purple
ITEM_AUX(Tile::stained_glass_Id,2) // Magenta
ITEM_AUX(Tile::stained_glass_Id,6) // Pink
ITEM_AUX(Tile::stained_glass_Id,0) // White
ITEM_AUX(Tile::stained_glass_Id,8) // Light Gray
ITEM_AUX(Tile::stained_glass_Id,7) // Gray
ITEM_AUX(Tile::stained_glass_Id,15) // Black
ITEM_AUX(Tile::stained_glass_Id,13) // Green
ITEM_AUX(Tile::stained_glass_Id,12) // Brown
ITEM_AUX(Tile::stained_glass_pane_Id,14) // Red
ITEM_AUX(Tile::stained_glass_pane_Id,1) // Orange
ITEM_AUX(Tile::stained_glass_pane_Id,4) // Yellow
ITEM_AUX(Tile::stained_glass_pane_Id,5) // Lime
ITEM_AUX(Tile::stained_glass_pane_Id,3) // Light Blue
ITEM_AUX(Tile::stained_glass_pane_Id,9) // Cyan
ITEM_AUX(Tile::stained_glass_pane_Id,11) // Blue
ITEM_AUX(Tile::stained_glass_pane_Id,10) // Purple
ITEM_AUX(Tile::stained_glass_pane_Id,2) // Magenta
ITEM_AUX(Tile::stained_glass_pane_Id,6) // Pink
ITEM_AUX(Tile::stained_glass_pane_Id,0) // White
ITEM_AUX(Tile::stained_glass_pane_Id,8) // Light Gray
ITEM_AUX(Tile::stained_glass_pane_Id,7) // Gray
ITEM_AUX(Tile::stained_glass_pane_Id,15) // Black
ITEM_AUX(Tile::stained_glass_pane_Id,13) // Green
ITEM_AUX(Tile::stained_glass_pane_Id,12) // Brown
#ifndef _CONTENT_PACKAGE
DEF(eCreativeInventory_ArtToolsDecorations)
if(app.DebugSettingsOn())
@@ -492,16 +439,6 @@ void IUIScene_CreativeMenu::staticCtor()
list->push_back(Item::enchantedBook->createForEnchantment(new EnchantmentInstance(enchantment, enchantment->getMaxLevel())));
}
#ifndef _CONTENT_PACKAGE
if(app.DebugSettingsOn())
{
shared_ptr<ItemInstance> debugSword = std::make_shared<ItemInstance>(Item::sword_diamond_Id, 1, 0);
debugSword->enchant( Enchantment::damageBonus, 50 );
debugSword->setHoverName(L"Sword of Debug");
list->push_back(debugSword);
}
#endif
// Materials
DEF(eCreativeInventory_Materials)
ITEM(Item::coal_Id)
-1
View File
@@ -3404,7 +3404,6 @@ void Minecraft::tick(bool bFirst, bool bUpdateTextures)
case Item::wheat_Id:
case Item::sugar_Id:
case Item::bread_Id:
case Tile::hayBlock_Id:
case Item::apple_Id:
heldItemIsFood = true;
break;
File diff suppressed because one or more lines are too long
-2
View File
@@ -405,7 +405,6 @@
#define IDS_DESC_HALFSLAB 403
#define IDS_DESC_HARDENED_CLAY 404
#define IDS_DESC_HATCHET 405
#define IDS_DESC_HAY 406
#define IDS_DESC_HELL_ROCK 407
#define IDS_DESC_HELL_SAND 408
#define IDS_DESC_HELMET 409
@@ -1554,7 +1553,6 @@
#define IDS_TILE_GRASS 1552
#define IDS_TILE_GRAVEL 1553
#define IDS_TILE_HARDENED_CLAY 1554
#define IDS_TILE_HAY 1555
#define IDS_TILE_HELL_ROCK 1556
#define IDS_TILE_HELL_SAND 1557
#define IDS_TILE_HOPPER 1558
+5 -6
View File
@@ -3241,7 +3241,6 @@ bool TileRenderer::tesselateThinPaneInWorld(Tile *tt, int x, int y, int z)
Icon *tex;
Icon *edgeTex;
bool stained = dynamic_cast<StainedGlassPaneBlock *>(tt) != nullptr;
if (hasFixedTexture())
{
tex = fixedTexture;
@@ -3251,7 +3250,7 @@ bool TileRenderer::tesselateThinPaneInWorld(Tile *tt, int x, int y, int z)
{
int data = level->getData(x, y, z);
tex = getTexture(tt, 0, data);
edgeTex = (stained) ? static_cast<StainedGlassPaneBlock *>(tt)->getEdgeTexture(data) : static_cast<ThinFenceTile *>(tt)->getEdgeTexture();
edgeTex = static_cast<ThinFenceTile *>(tt)->getEdgeTexture();
}
double u0 = tex->getU0();
@@ -3277,10 +3276,10 @@ bool TileRenderer::tesselateThinPaneInWorld(Tile *tt, int x, int y, int z)
double iz0 = z + .5 - 1.0 / 16.0;
double iz1 = z + .5 + 1.0 / 16.0;
bool n = (stained) ? static_cast<StainedGlassPaneBlock *>(tt)->attachsTo(level->getTile(x, y, z - 1)) : static_cast<ThinFenceTile *>(tt)->attachsTo(level->getTile(x, y, z - 1));
bool s = (stained) ? static_cast<StainedGlassPaneBlock *>(tt)->attachsTo(level->getTile(x, y, z + 1)) : static_cast<ThinFenceTile *>(tt)->attachsTo(level->getTile(x, y, z + 1));
bool w = (stained) ? static_cast<StainedGlassPaneBlock *>(tt)->attachsTo(level->getTile(x - 1, y, z)) : static_cast<ThinFenceTile *>(tt)->attachsTo(level->getTile(x - 1, y, z));
bool e = (stained) ? static_cast<StainedGlassPaneBlock *>(tt)->attachsTo(level->getTile(x + 1, y, z)) : static_cast<ThinFenceTile *>(tt)->attachsTo(level->getTile(x + 1, y, z));
bool n = static_cast<ThinFenceTile *>(tt)->attachsTo(level->getTile(x, y, z - 1));
bool s = static_cast<ThinFenceTile *>(tt)->attachsTo(level->getTile(x, y, z + 1));
bool w = static_cast<ThinFenceTile *>(tt)->attachsTo(level->getTile(x - 1, y, z));
bool e = static_cast<ThinFenceTile *>(tt)->attachsTo(level->getTile(x + 1, y, z));
double noZFightingOffset = 0.001;
double yt = 1.0 - noZFightingOffset;
@@ -463,7 +463,6 @@
#define IDS_DESC_ACTIVATOR_RAIL 457
#define IDS_DESC_DROPPER 458
#define IDS_DESC_STAINED_CLAY 459
#define IDS_DESC_HAY 460
#define IDS_DESC_HARDENED_CLAY 461
#define IDS_DESC_STAINED_GLASS 462
#define IDS_DESC_STAINED_GLASS_PANE 463
@@ -954,7 +953,6 @@
#define IDS_TILE_ACTIVATOR_RAIL 948
#define IDS_TILE_DROPPER 949
#define IDS_TILE_STAINED_CLAY 950
#define IDS_TILE_HAY 951
#define IDS_TILE_HARDENED_CLAY 952
#define IDS_TILE_COAL 953
#define IDS_TILE_STAINED_CLAY_BLACK 954
-29
View File
@@ -7,35 +7,6 @@
void ClothDyeRecipes::addRecipes(Recipes *r)
{
// recipes for converting cloth to colored cloth using dye
for (int i = 0; i < 16; i++)
{
r->addShapelessRecipy(new ItemInstance(Tile::wool, 1, ColoredTile::getItemAuxValueForTileData(i)), //
L"zzg",
new ItemInstance(Item::dye_powder, 1, i), new ItemInstance(Item::items[Tile::wool_Id], 1, 0),L'D');
r->addShapedRecipy(new ItemInstance(Tile::clayHardened_colored, 8, ColoredTile::getItemAuxValueForTileData(i)), //
L"sssczczg",
L"###",
L"#X#",
L"###",
L'#', new ItemInstance(Tile::clayHardened),
L'X', new ItemInstance(Item::dye_powder, 1, i),L'D');
//#if 0
// r->addShapedRecipy(new ItemInstance(Tile::stained_glass, 8, ColoredTile::getItemAuxValueForTileData(i)), //
// L"sssczczg",
// L"###",
// L"#X#",
// L"###",
// L'#', new ItemInstance(Tile::glass),
// L'X', new ItemInstance(Item::dye_powder, 1, i), L'D');
// r->addShapedRecipy(new ItemInstance(Tile::stained_glass_pane, 16, i), //
// L"ssczg",
// L"###",
// L"###",
// L'#', new ItemInstance(Tile::stained_glass, 1, i), L'D');
//#endif
}
// some dye recipes
r->addShapelessRecipy(new ItemInstance(Item::dye_powder, 2, DyePowderItem::YELLOW),
+1 -10
View File
@@ -124,7 +124,6 @@ DamageSource::DamageSource(ChatPacket::EChatPacketMessage msgId, ChatPacket::ECh
_isProjectile = false;
_isMagic = false;
_isExplosion = false;
_isCritical = false;
//this->msgId = msgId;
m_msgId = msgId;
@@ -154,15 +153,7 @@ DamageSource *DamageSource::bypassInvul()
_bypassInvul = true;
return this;
}
bool DamageSource::isCritical()
{
return _isCritical;
}
DamageSource *DamageSource::setIsCritical()
{
_isCritical = true;
return this;
}
DamageSource *DamageSource::setIsFire()
{
isFireSource = true;
-2
View File
@@ -50,8 +50,6 @@ private:
bool _isCritical;
public:
bool isCritical();
DamageSource *setIsCritical();
bool isProjectile();
DamageSource *setProjectile();
bool isExplosion();
+1 -3
View File
@@ -5,9 +5,7 @@ class EntityEvent
public:
static const BYTE JUMP = 1;
static const BYTE HURT = 2;
//New
static const BYTE HURT_CRITICAL = 19;
static const BYTE DEATH_CRITICAL = 20;
static const BYTE DEATH = 3;
static const BYTE START_ATTACKING = 4;
static const BYTE STOP_ATTACKING = 5;
-5
View File
@@ -897,11 +897,6 @@ bool EntityHorse::mobInteract(shared_ptr<Player> player)
_ageUp = 180;
temper = 3;
}
else if (itemstack->id == Tile::hayBlock_Id)
{
_heal = 20;
_ageUp = 180;
}
else if (itemstack->id == Item::apple_Id)
{
_heal = 3;
-1
View File
@@ -53,7 +53,6 @@ void FireTile::init()
setFlammable(Tile::wool_Id, FLAME_EASY, BURN_EASY);
setFlammable(Tile::vine_Id, FLAME_MEDIUM, BURN_INSTANT);
setFlammable(Tile::coalBlock_Id, FLAME_HARD, BURN_HARD);
setFlammable(Tile::hayBlock_Id, FLAME_INSTANT, BURN_MEDIUM);
}
void FireTile::setFlammable(int id, int flame, int burn)
-1
View File
@@ -27,7 +27,6 @@ FurnaceRecipes::FurnaceRecipes()
addFurnaceRecipy(Item::fish_raw_Id, new ItemInstance(Item::fish_cooked), .35f);
addFurnaceRecipy(Tile::cobblestone_Id, new ItemInstance(Tile::stone), .1f);
addFurnaceRecipy(Item::clay_Id, new ItemInstance(Item::brick), .3f);
addFurnaceRecipy(Tile::clay_Id, new ItemInstance(Tile::clayHardened), .35f);
addFurnaceRecipy(Tile::cactus_Id, new ItemInstance(Item::dye_powder, 1, DyePowderItem::GREEN), .2f);
addFurnaceRecipy(Tile::treeTrunk_Id, new ItemInstance(Item::coal, 1, CoalItem::CHAR_COAL), .15f);
addFurnaceRecipy(Tile::emeraldOre_Id, new ItemInstance(Item::emerald), 1);
-23
View File
@@ -1,23 +0,0 @@
#include "stdafx.h"
#include "net.minecraft.world.h"
#include "HayBlockTile.h"
HayBlockTile::HayBlockTile(int id) : RotatedPillarTile(id, Material::grass)
{
}
int HayBlockTile::getRenderShape()
{
return SHAPE_TREE;
}
Icon *HayBlockTile::getTypeTexture(int type)
{
return icon;
}
void HayBlockTile::registerIcons(IconRegister *iconRegister)
{
iconTop = iconRegister->registerIcon(getIconName() + L"_top");
icon = iconRegister->registerIcon(getIconName() + L"_side");
}
-18
View File
@@ -1,18 +0,0 @@
#pragma once
#include "RotatedPillarTile.h"
class HayBlockTile : public RotatedPillarTile
{
friend class ChunkRebuildData;
public:
HayBlockTile(int id);
int getRenderShape();
protected:
Icon *getTypeTexture(int type);
public:
void registerIcons(IconRegister *iconRegister);
};
File diff suppressed because it is too large Load Diff
-1
View File
@@ -187,7 +187,6 @@ public:
virtual void knockback(shared_ptr<Entity> source, float dmg, double xd, double zd);
protected:
virtual int getCriticalSound();
virtual int getHurtSound();
virtual int getDeathSound();
-1
View File
@@ -29,7 +29,6 @@ void OreRecipies::_init()
ADD_OBJECT(map[6],Tile::coalBlock);
ADD_OBJECT(map[6],new ItemInstance(Item::coal, 9, CoalItem::STONE_COAL));
ADD_OBJECT(map[7],Tile::hayBlock);
ADD_OBJECT(map[7],new ItemInstance(Item::wheat, 9));
}
void OreRecipies::addRecipes(Recipes *r)
-3
View File
@@ -1632,9 +1632,6 @@ void Player::attack(shared_ptr<Entity> entity)
DamageSource *damageSource = DamageSource::playerAttack(dynamic_pointer_cast<Player>(shared_from_this()));
if (bCrit) {
damageSource->setIsCritical();
}
bool wasHurt = entity->hurt(damageSource, dmg);
delete damageSource;
if (wasHurt)
-2
View File
@@ -213,8 +213,6 @@ enum eSOUND_TYPE
eSoundType_FIRE_NEWIGNITE,
eSoundType_DAMAGE_CRITICAL,
eSoundType_MAX
};
-54
View File
@@ -1,54 +0,0 @@
#include "stdafx.h"
#include "net.minecraft.world.item.h"
#include "net.minecraft.world.h"
#include "StainedGlassBlock.h"
Icon *StainedGlassBlock::ICONS[StainedGlassBlock::ICONS_LENGTH];
StainedGlassBlock::StainedGlassBlock(int id, Material *material) : HalfTransparentTile(id, L"glass", material, false)
{
}
Icon *StainedGlassBlock::getTexture(int face, int data)
{
return ICONS[data % ICONS_LENGTH];
}
int StainedGlassBlock::getSpawnResourcesAuxValue(int data)
{
return data;
}
int StainedGlassBlock::getItemAuxValueForBlockData(int data)
{
return (~data & 0xf);
}
int StainedGlassBlock::getRenderLayer()
{
return 1;
}
void StainedGlassBlock::registerIcons(IconRegister *iconRegister)
{
for (int i = 0; i < ICONS_LENGTH; i++)
{
ICONS[i] = iconRegister->registerIcon(getIconName() + L"_" + DyePowderItem::COLOR_TEXTURES[getItemAuxValueForBlockData(i)]);
}
}
int StainedGlassBlock::getResourceCount(Random *random)
{
return 0;
}
bool StainedGlassBlock::isSilkTouchable()
{
return true;
}
bool StainedGlassBlock::isCubeShaped()
{
return false;
}
-27
View File
@@ -1,27 +0,0 @@
#pragma once
#include "HalfTransparentTile.h"
class StainedGlassBlock : public HalfTransparentTile
{
friend class ChunkRebuildData;
private:
static const int ICONS_LENGTH = 16;
static Icon *ICONS[ICONS_LENGTH];
public:
StainedGlassBlock(int id, Material *material);
Icon *getTexture(int face, int data);
int getSpawnResourcesAuxValue(int data);
static int getItemAuxValueForBlockData(int data);
int getRenderLayer();
void registerIcons(IconRegister *iconRegister);
int getResourceCount(Random *random);
protected:
bool isSilkTouchable();
public:
bool isCubeShaped();
};
-52
View File
@@ -1,52 +0,0 @@
#include "stdafx.h"
#include "net.minecraft.world.h"
#include "net.minecraft.world.item.h"
#include "StainedGlassPaneBlock.h"
Icon *StainedGlassPaneBlock::ICONS[StainedGlassPaneBlock::ICONS_COUNT];
Icon *StainedGlassPaneBlock::EDGE_ICONS[StainedGlassPaneBlock::ICONS_COUNT];
StainedGlassPaneBlock::StainedGlassPaneBlock(int id) : ThinFenceTile(id, L"glass", L"glass_pane_top", Material::glass, false)
{
}
Icon *StainedGlassPaneBlock::getIconTexture(int face, int data)
{
return ICONS[data % ICONS_COUNT];
}
Icon *StainedGlassPaneBlock::getEdgeTexture(int data)
{
return EDGE_ICONS[~data & 0xF];
}
Icon *StainedGlassPaneBlock::getTexture(int face, int data)
{
return getIconTexture(face, ~data & 0xf);
}
int StainedGlassPaneBlock::getSpawnResourcesAuxValue(int data)
{
return data;
}
int StainedGlassPaneBlock::getItemAuxValueForBlockData(int data)
{
return (data & 0xf);
}
int StainedGlassPaneBlock::getRenderLayer()
{
return 1;
}
void StainedGlassPaneBlock::registerIcons(IconRegister *iconRegister)
{
ThinFenceTile::registerIcons(iconRegister);
for (int i = 0; i < ICONS_COUNT; i++)
{
ICONS[i] = iconRegister->registerIcon(getIconName() + L"_" + DyePowderItem::COLOR_TEXTURES[getItemAuxValueForBlockData(i)]);
EDGE_ICONS[i] = iconRegister->registerIcon(getIconName() + L"_pane_top_" + DyePowderItem::COLOR_TEXTURES[getItemAuxValueForBlockData(i)]);
}
}
-23
View File
@@ -1,23 +0,0 @@
#pragma once
#include "ThinFenceTile.h"
class StainedGlassPaneBlock : public ThinFenceTile
{
friend class ChunkRebuildData;
private:
static const int ICONS_COUNT = 16;
static Icon *ICONS[ICONS_COUNT];
static Icon *EDGE_ICONS[ICONS_COUNT];
public:
StainedGlassPaneBlock(int id);
Icon *getIconTexture(int face, int data);
Icon *getEdgeTexture(int data);
Icon *getTexture(int face, int data);
int getSpawnResourcesAuxValue(int data);
static int getItemAuxValueForBlockData(int data);
int getRenderLayer();
void registerIcons(IconRegister *iconRegister);
};
-22
View File
@@ -115,28 +115,6 @@ void StructureRecipies::addRecipes(Recipes *r)
L'#', Tile::glass,
L'D');
// Stained Glass block + pane per color
for (int i = 0; i < 16; i++)
{
r->addShapedRecipy(new ItemInstance(Tile::stained_glass, 8, ColoredTile::getItemAuxValueForTileData(i)),
L"sssczczg",
L"###",
L"#X#",
L"###",
L'#', new ItemInstance(Tile::glass),
L'X', new ItemInstance(Item::dye_powder, 1, i),
L'D');
r->addShapedRecipy(new ItemInstance(Tile::stained_glass_pane, 16, ColoredTile::getItemAuxValueForTileData(i)),
L"ssczg",
L"###",
L"###",
L'#', new ItemInstance(Tile::stained_glass, 1, ColoredTile::getItemAuxValueForTileData(i)),
L'D');
}
r->addShapedRecipy(new ItemInstance(Tile::netherBrick, 1), //
L"sscig",
+4 -13
View File
@@ -138,7 +138,6 @@ Tile *Tile::litPumpkin = nullptr;
Tile *Tile::cake = nullptr;
RepeaterTile *Tile::diode_off = nullptr;
RepeaterTile *Tile::diode_on = nullptr;
Tile *Tile::stained_glass = nullptr;
Tile *Tile::trapdoor = nullptr;
Tile *Tile::monsterStoneEgg = nullptr;
@@ -212,12 +211,8 @@ Tile *Tile::quartzBlock = nullptr;
Tile *Tile::stairs_quartz = nullptr;
Tile *Tile::activatorRail = nullptr;
Tile *Tile::dropper = nullptr;
Tile *Tile::clayHardened_colored = nullptr;
Tile *Tile::stained_glass_pane = nullptr;
Tile *Tile::hayBlock = nullptr;
Tile *Tile::woolCarpet = nullptr;
Tile *Tile::clayHardened = nullptr;
Tile *Tile::coalBlock = nullptr;
DWORD Tile::tlsIdxShape = TlsAlloc();
@@ -362,7 +357,6 @@ void Tile::staticCtor()
Tile::cake = (new CakeTile(92)) ->setDestroyTime(0.5f)->setSoundType(Tile::SOUND_CLOTH)->setIconName(L"cake")->setDescriptionId(IDS_TILE_CAKE)->setNotCollectStatistics()->sendTileData()->setUseDescriptionId(IDS_DESC_CAKE);
Tile::diode_off = static_cast<RepeaterTile *>((new RepeaterTile(93, false))->setDestroyTime(0.0f)->setSoundType(Tile::SOUND_WOOD)->setIconName(L"repeater_off")->setDescriptionId(IDS_ITEM_DIODE)->setNotCollectStatistics()->sendTileData()->setUseDescriptionId(IDS_DESC_REDSTONEREPEATER)->disableMipmap());
Tile::diode_on = static_cast<RepeaterTile *>((new RepeaterTile(94, true))->setDestroyTime(0.0f)->setLightEmission(10 / 16.0f)->setSoundType(Tile::SOUND_WOOD)->setIconName(L"repeater_on")->setDescriptionId(IDS_ITEM_DIODE)->setNotCollectStatistics()->sendTileData()->setUseDescriptionId(IDS_DESC_REDSTONEREPEATER)->disableMipmap());
Tile::stained_glass = (new StainedGlassBlock(95, Material::glass))->setBaseItemTypeAndMaterial(Item::eBaseItemType_glass, Item::eMaterial_glass)->setDestroyTime(0.3f)->setSoundType(SOUND_GLASS)->setIconName(L"glass")->setDescriptionId(IDS_TILE_STAINED_GLASS)->setUseDescriptionId(IDS_DESC_STAINED_GLASS);
Tile::trapdoor = (new TrapDoorTile(96, Material::wood)) ->setBaseItemTypeAndMaterial(Item::eBaseItemType_door, Item::eMaterial_trap)->setDestroyTime(3.0f)->setSoundType(Tile::SOUND_WOOD)->setIconName(L"trapdoor")->setDescriptionId(IDS_TILE_TRAPDOOR)->setNotCollectStatistics()->sendTileData()->setUseDescriptionId(IDS_DESC_TRAPDOOR);
Tile::monsterStoneEgg = (new StoneMonsterTile(97)) ->setDestroyTime(0.75f)->setIconName(L"monsterStoneEgg")->setDescriptionId(IDS_TILE_STONE_SILVERFISH)->setUseDescriptionId(IDS_DESC_STONE_SILVERFISH);
Tile::stoneBrick = (new SmoothStoneBrickTile(98)) ->setBaseItemTypeAndMaterial(Item::eBaseItemType_structblock, Item::eMaterial_stoneSmooth)->setDestroyTime(1.5f)->setExplodeable(10)->setSoundType(SOUND_STONE)->setIconName(L"stonebrick")->setDescriptionId(IDS_TILE_STONE_BRICK_SMOOTH)->setUseDescriptionId(IDS_DESC_STONE_BRICK_SMOOTH);
@@ -439,20 +433,14 @@ void Tile::staticCtor()
Tile::stairs_quartz = (new StairTile(156, Tile::quartzBlock, QuartzBlockTile::TYPE_DEFAULT)) ->setBaseItemTypeAndMaterial(Item::eBaseItemType_stairs, Item::eMaterial_quartz)->setIconName(L"stairsQuartz")->setDescriptionId(IDS_TILE_STAIRS_QUARTZ)->setUseDescriptionId(IDS_DESC_STAIRS);
Tile::activatorRail = (new PoweredRailTile(157)) ->setDestroyTime(0.7f)->setSoundType(SOUND_METAL)->setIconName(L"rail_activator")->setDescriptionId(IDS_TILE_ACTIVATOR_RAIL)->setUseDescriptionId(IDS_DESC_ACTIVATOR_RAIL);
Tile::dropper = (new DropperTile(158)) ->setBaseItemTypeAndMaterial(Item::eBaseItemType_redstoneContainer, Item::eMaterial_undefined)->setDestroyTime(3.5f)->setSoundType(SOUND_STONE)->setIconName(L"dropper")->setDescriptionId(IDS_TILE_DROPPER)->setUseDescriptionId(IDS_DESC_DROPPER);
Tile::clayHardened_colored = (new ColoredTile(159, Material::stone)) ->setBaseItemTypeAndMaterial(Item::eBaseItemType_clay, Item::eMaterial_clay)->setDestroyTime(1.25f)->setExplodeable(7)->setSoundType(SOUND_STONE)->setIconName(L"hardened_clay_stained")->setDescriptionId(IDS_TILE_STAINED_CLAY)->setUseDescriptionId(IDS_DESC_STAINED_CLAY);
Tile::stained_glass_pane = (new StainedGlassPaneBlock(160)) ->setBaseItemTypeAndMaterial(Item::eBaseItemType_glass, Item::eMaterial_glass)->setDestroyTime(0.3f)->setSoundType(SOUND_GLASS)->setIconName(L"glass")->setDescriptionId(IDS_TILE_STAINED_GLASS_PANE)->setUseDescriptionId(IDS_DESC_STAINED_GLASS_PANE);
Tile::hayBlock = (new HayBlockTile(170)) ->setBaseItemTypeAndMaterial(Item::eBaseItemType_block, Item::eMaterial_wheat)->setDestroyTime(0.5f)->setSoundType(SOUND_GRASS)->setIconName(L"hay_block")->setDescriptionId(IDS_TILE_HAY)->setUseDescriptionId(IDS_DESC_HAY);
(new Tile(170, Material::stone))->setDestroyTime(0.0f)->setNotCollectStatistics();
Tile::woolCarpet = (new WoolCarpetTile(171)) ->setBaseItemTypeAndMaterial(Item::eBaseItemType_carpet, Item::eMaterial_cloth)->setDestroyTime(0.1f)->setSoundType(SOUND_CLOTH)->setIconName(L"woolCarpet")->setLightBlock(0)->setDescriptionId(IDS_TILE_CARPET)->setUseDescriptionId(IDS_DESC_CARPET);
Tile::clayHardened = (new Tile(172, Material::stone)) ->setBaseItemTypeAndMaterial(Item::eBaseItemType_clay, Item::eMaterial_clay)->setDestroyTime(1.25f)->setExplodeable(7)->setSoundType(SOUND_STONE)->setIconName(L"hardened_clay")->setDescriptionId(IDS_TILE_HARDENED_CLAY)->setUseDescriptionId(IDS_DESC_HARDENED_CLAY);
Tile::coalBlock = (new Tile(173, Material::stone)) ->setBaseItemTypeAndMaterial(Item::eBaseItemType_block, Item::eMaterial_coal)->setDestroyTime(5.0f)->setExplodeable(10)->setSoundType(SOUND_STONE)->setIconName(L"coal_block")->setDescriptionId(IDS_TILE_COAL)->setUseDescriptionId(IDS_DESC_COAL_BLOCK);
// Special cases for certain items since they can have different icons
Item::items[wool_Id] = ( new WoolTileItem(Tile::wool_Id- 256) )->setIconName(L"cloth")->setDescriptionId(IDS_TILE_CLOTH)->setUseDescriptionId(IDS_DESC_WOOL);
Item::items[clayHardened_colored_Id]= ( new WoolTileItem(Tile::clayHardened_colored_Id - 256))->setIconName(L"clayHardenedStained")->setDescriptionId(IDS_TILE_STAINED_CLAY)->setUseDescriptionId(IDS_DESC_STAINED_CLAY);
Item::items[stained_glass_Id] = ( new WoolTileItem(Tile::stained_glass_Id - 256))->setIconName(L"stainedGlass")->setDescriptionId(IDS_TILE_STAINED_GLASS)->setUseDescriptionId(IDS_DESC_STAINED_GLASS);
Item::items[stained_glass_pane_Id] = ( new WoolTileItem(Tile::stained_glass_pane_Id - 256))->setIconName(L"stainedGlassPane")->setDescriptionId(IDS_TILE_STAINED_GLASS_PANE)->setUseDescriptionId(IDS_DESC_STAINED_GLASS_PANE);
Item::items[woolCarpet_Id] = ( new WoolTileItem(Tile::woolCarpet_Id - 256))->setIconName(L"woolCarpet")->setDescriptionId(IDS_TILE_CARPET)->setUseDescriptionId(IDS_DESC_CARPET);
Item::items[treeTrunk_Id] = ( new MultiTextureTileItem(Tile::treeTrunk_Id - 256, treeTrunk, (int *)TreeTile::TREE_NAMES, 4) )->setIconName(L"log")->setDescriptionId(IDS_TILE_LOG)->setUseDescriptionId(IDS_DESC_LOG);
Item::items[wood_Id] = ( new MultiTextureTileItem(Tile::wood_Id - 256, Tile::wood, (int *)WoodTile::WOOD_NAMES, 4, IDS_TILE_PLANKS))->setIconName(L"wood")->setDescriptionId(IDS_TILE_OAKWOOD_PLANKS)->setUseDescriptionId(IDS_DESC_LOG); // <- TODO
@@ -1518,6 +1506,9 @@ Tile::SoundType::SoundType(eMATERIALSOUND_TYPE eMaterialSound, float volume, flo
case eMaterialSoundType_LADDER:
this->iStepSound=eSoundType_STEP_LADDER;
break;
case eMaterialSoundType_ANVIL:
this->iStepSound = eSoundType_STEP_STONE;
break;
default:
app.DebugPrintf("NO STEP SOUND!\n");
-6
View File
@@ -357,12 +357,9 @@ public:
static const int stairs_quartz_Id = 156;
static const int activatorRail_Id = 157;
static const int dropper_Id = 158;
static const int clayHardened_colored_Id = 159;
static const int stained_glass_pane_Id = 160;
static const int hayBlock_Id = 170;
static const int woolCarpet_Id = 171;
static const int clayHardened_Id = 172;
static const int coalBlock_Id = 173;
@@ -533,12 +530,9 @@ public:
static Tile *stairs_quartz;
static Tile *activatorRail;
static Tile *dropper;
static Tile *clayHardened_colored;
static Tile *stained_glass_pane;
static Tile *hayBlock;
static Tile *woolCarpet;
static Tile *clayHardened;
static Tile *coalBlock;
static void staticCtor();
-2
View File
@@ -143,8 +143,6 @@ unsigned int WoolTileItem::getDescriptionId(shared_ptr<ItemInstance> instance)
return GLASS_COLOR_DESCS[ColoredTile::getTileDataForItemAuxValue(instance->getAuxValue())];
case Tile::stained_glass_pane_Id:
return GLASS_PANE_COLOR_DESCS[ColoredTile::getTileDataForItemAuxValue(instance->getAuxValue())];
case Tile::clayHardened_colored_Id:
return CLAY_COLOR_DESCS[ColoredTile::getTileDataForItemAuxValue(instance->getAuxValue())];
case Tile::woolCarpet_Id:
return CARPET_COLOR_DESCS[ColoredTile::getTileDataForItemAuxValue(instance->getAuxValue())];
case Tile::wool_Id:
@@ -1803,8 +1803,6 @@ set(_MINECRAFT_WORLD_COMMON_NET_MINECRAFT_WORLD_LEVEL_TILE
"${CMAKE_CURRENT_SOURCE_DIR}/HalfSlabTile.h"
"${CMAKE_CURRENT_SOURCE_DIR}/HalfTransparentTile.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/HalfTransparentTile.h"
"${CMAKE_CURRENT_SOURCE_DIR}/HayBlockTile.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/HayBlockTile.h"
"${CMAKE_CURRENT_SOURCE_DIR}/HeavyTile.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/HeavyTile.h"
"${CMAKE_CURRENT_SOURCE_DIR}/HopperTile.cpp"
@@ -1896,10 +1894,6 @@ set(_MINECRAFT_WORLD_COMMON_NET_MINECRAFT_WORLD_LEVEL_TILE
"${CMAKE_CURRENT_SOURCE_DIR}/SoulSandTile.h"
"${CMAKE_CURRENT_SOURCE_DIR}/Sponge.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/Sponge.h"
"${CMAKE_CURRENT_SOURCE_DIR}/StainedGlassBlock.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/StainedGlassBlock.h"
"${CMAKE_CURRENT_SOURCE_DIR}/StainedGlassPaneBlock.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/StainedGlassPaneBlock.h"
"${CMAKE_CURRENT_SOURCE_DIR}/StairTile.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/StairTile.h"
"${CMAKE_CURRENT_SOURCE_DIR}/StemTile.cpp"
@@ -49,7 +49,6 @@
#include "GravelTile.h"
#include "HalfSlabTile.h"
#include "HalfTransparentTile.h"
#include "HayBlockTile.h"
#include "HeavyTile.h"
#include "HopperTile.h"
#include "HugeMushroomTile.h"
@@ -98,8 +97,6 @@
#include "SnowTile.h"
#include "SoulSandTile.h"
#include "Sponge.h"
#include "StainedGlassBlock.h"
#include "StainedGlassPaneBlock.h"
#include "StairTile.h"
#include "StemTile.h"
#include "StoneButtonTile.h"
+33
View File
@@ -0,0 +1,33 @@
# Approach to Backported Features
All backported features incorperated into MCLEMP should be, when merged, functionally identical to their state in the version of the game we're currently targeting. This should be in reference to a known 4J build of LCE. Verification can either be done by doing a decompilation based match of the implementation or, alternatively, all functionality and limitations of the given feature should be compared against the version of LCE we're targeting.
# Approach to Downported Features
All downported features incorporated into MCLEMP should be, when merged, functionally identical to their state in the version of the game they originated from. This should be in reference to a known 4J build of LCE. erification can either be done by doing a decompilation based match of the implementation against the source build or, alternatively, all functionality and limitations of the given feature should be compared against the newer LCE version it was taken from.
# Approach to Bugfixes
Anything that does not behave in an "expected" manner, especially if its behavior is not widely accepted as a gameplay mechanic, is valid for fixing in our repository. This includes bugfixes that were made in versions past the version we target, but excludes any visual changes that may not have been included at the build we're targeting.
If you provide a visual bugfix that fixes a distinctive quirk of the LCE renderer, it should be provided in an "off by default" state that can be toggled on in-game by the user. There is no guarantee that we will merge it.
If your visual bugfix is a fix added in a future version of LCE than the one we're targeting, it should also be put behind a toggle or equivalent system for keeping it off by default.
# Targeted Version
We are targeting to keep this on TU19 to TU24 with the exclusion of neoLegacy for Higher TU's, If there are any features for versions maintained by [neoLegacy](https://github.com/neoStudiosLCE/neoLegacy) that are missing make a PR to there repository and it will be brought to this, we also allow PR's that Downport to get older TU's.
# Versions we are trying to add
[TU2 (Jun 2012)](https://minecraft.wiki/w/Xbox_360_Edition_TU2)
[TU4 (Aug 2012)](https://minecraft.wiki/w/Xbox_360_Edition_TU4)
[TU6 (Nov 2012)](https://minecraft.wiki/w/Xbox_360_Edition_TU6)
[TU8 (Nov 2013)](https://minecraft.wiki/w/Xbox_360_Edition_TU8)
[TU11 (May 2013)](https://minecraft.wiki/w/Xbox_360_Edition_TU11)
[TU13 (Oct 2013)](https://minecraft.wiki/w/Xbox_360_Edition_TU13)
[TU18 (Oct 2014)](https://minecraft.wiki/w/Xbox_360_Edition_TU18)
[TU24 (Apr 2015)](https://minecraft.wiki/w/Xbox_360_Edition_TU24)
[TU30 (Oct 2015)](https://minecraft.wiki/w/Xbox_360_Edition_TU30)
[TU42 (Sep 2016)](https://minecraft.wiki/w/Xbox_360_Edition_TU42)
[TU45 (Oct 2016)](https://minecraft.wiki/w/Xbox_360_Edition_TU45)
[TU52 (Apr 2017)](https://minecraft.wiki/w/Xbox_360_Edition_TU62)
[TU53 (May 2017)](https://minecraft.wiki/w/Xbox_360_Edition_TU53)
[TU59 (Nov 2017)](https://minecraft.wiki/w/Xbox_360_Edition_TU59)
[TU68 (Aug 2018)](https://minecraft.wiki/w/Xbox_360_Edition_TU68)
[TU75 (Apr 2019)](https://minecraft.wiki/w/Xbox_360_Edition_TU75)
+102 -1
View File
@@ -1 +1,102 @@
# MCLEClient
![Legacy Edition Banner](.github/banner.png)
# MCLEClient (Minecraft Legacy Edition)
[![Discord](https://img.shields.io/badge/Discord-Join%20Server-5865F2?logo=discord&logoColor=white)](https://discord.gg/u9f67jaWyP)
This project is based on [MCLCE/MinecraftConsoles](https://github.com/MCLCE/MinecraftConsoles) With Modified Networking to allow Custom Authentication, Relayed servers & Relayed Player Worlds. And various Improvments & Changes.
## Download
### Client
Windows users can Look at our [Release Tags](https://github.com/mclemp/MCLEClient/tags) And choose what version to download.
### Server
If you're looking for Dedicated Server software, Look at its [Release Tags](https://github.com/mclemp/MCLEServer/tags) And choose what version to download.
## Platform Support
- **Windows**: Supported for building and running the project
- **macOS / Linux**: All Builds should work on Wine 8.0 Above & Crossover, This is tested by maintainers but not frequently.
- **Android**: VIA x86 EMULATORS (like GameNative) ONLY! Does run but has stability / frametime pacing issues.
- **iOS**: No current support
- **All Consoles**: Console support remains in the code, but maintainers are not currently verifying console functionality.
## Features
- Relayed Multiplayer & Discovery
- Support for keyboard and mouse input
- Fullscreen mode support (toggle using F11)
- Splitscreen Multiplayer support (connect to servers, etc)
- Added a high-resolution timer path on Windows for smoother high-FPS gameplay timing
- Device's screen resolution will be used as the game resolution instead of using a fixed resolution (1920x1080)
## Controls (Keyboard & Mouse)
- **Movement**: `W` `A` `S` `D`
- **Jump / Fly (Up)**: `Space`
- **Sneak / Fly (Down)**: `Shift` (Hold)
- **Sprint**: `Ctrl` (Hold) or Double-tap `W`
- **Inventory**: `E`
- **Chat**: `T`
- **Drop Item**: `Q`
- **Crafting**: `C` To open, `Q` and `E` to move through tabs (cycles Left/Right)
- **Change to 3rd, 2nd or 1st person**: `F5`
- **Fullscreen**: `F11`
- **Pause Menu**: `Esc`
- **Attack / Destroy**: `Left Click`
- **Use / Place**: `Right Click`
- **Select Item**: `Mouse Wheel` or keys `1` to `9`
- **Accept or Decline Tutorial hints**: `Enter` to accept and `B` to decline
- **Game Info (Player list and Host Options)**: `TAB`
- **Toggle HUD**: `F1`
- **Toggle F3 Menu**: `F3`
## Contributors
Would you like to contribute to this project? Please read our [Contributor's Guide](CONTRIBUTING.md) before doing so! This document includes our current goals, standards for inclusions, rules, and more.
## Client Launch Arguments
| Argument | Description |
|--------------------|-----------------------------------------------------------------------------------------------------|
| `-fullscreen` | Launches the game in Fullscreen mode |
Example:
```
Minecraft.Client.exe -fullscreen
```
## Multiplayer
Multiplayer is relayed to allow anyone to easily host!
- Hosting a multiplayer world automatically advertises it on the in-game Join Game menu to all players
- Other players on the same version can discover the session from the in-game Join Game menu
- Split-screen players can join in, even in Multiplayer!
## Credits
Special thanks to [neoLegacy](https://github.com/neoStudiosLCE/neoLegacy) for allowing us to use there version for Higher TU's.
Special thanks to [DrPerky](https://github.com/DrPerkyLegit) for making the backend used for authentication, leaderboards, and relaying, and for the original networking.
## Build & Run
1. Install [Visual Studio 2022](https://aka.ms/vs/17/release/vs_community.exe) or [newer](https://visualstudio.microsoft.com/downloads/).
2. Clone the repository with submodules. If you don't, you will get a build error!
- `git clone --recurse-submodules https://github.com/MCLCE/MinecraftConsoles.git`
3. Open the project folder from Visual Studio.
4. Set the build configuration to **Windows64 - Debug** (Release is also ok but missing some debug features), then build and run.
### CMake (Windows x64)
```powershell
cmake --preset windows64
cmake --build --preset windows64-debug --target Minecraft.Client
```
For more information, see [COMPILE.md](COMPILE.md).
## Star History
<a href="https://www.star-history.com/?repos=mclemp%2FMCLEClient-Archive%2Cmclemp%2FMCLEClient&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=mclemp/MCLEClient-Archive%2Cmclemp/MCLEClient&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=mclemp/MCLEClient-Archive%2Cmclemp/MCLEClient&type=date&legend=top-left" />
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=mclemp/MCLEClient-Archive%2Cmclemp/MCLEClient&type=date&legend=top-left" />
</picture>
</a>
+12
View File
@@ -10,6 +10,18 @@ function(add_gamehdd_target TARGET_NAME)
set_property(TARGET EnsureGameHDD_${TARGET_NAME} PROPERTY FOLDER "Build")
endfunction()
# Make sure the Settings directory exists
function(add_settings_target TARGET_NAME)
add_custom_target(EnsureSettings_${TARGET_NAME} ALL
COMMAND ${CMAKE_COMMAND}
-E make_directory "$<TARGET_FILE_DIR:${TARGET_NAME}>/Windows64/Settings"
COMMENT "Ensuring Settings directory exists..."
VERBATIM
)
add_dependencies(${TARGET_NAME} EnsureSettings_${TARGET_NAME})
set_property(TARGET EnsureSettings_${TARGET_NAME} PROPERTY FOLDER "Build")
endfunction()
# Copy any needed redist files to the output directory
function(add_copyredist_target TARGET_NAME)
set(COPY_SCRIPT "${CMAKE_SOURCE_DIR}/cmake/CopyFolderScript.cmake")