22 Commits

Author SHA1 Message Date
Kolyah35
f5fecbc928 Merge remote-tracking branch 'refs/remotes/origin/dedicated-rewrite' into dedicated-rewrite 2026-03-27 22:15:26 +03:00
Kolyah35
77d02fcca2 FIX: workbench compatibility 2026-03-27 22:15:03 +03:00
6d696af235 FEAT: taken nickname 2026-03-27 21:08:17 +02:00
Kolyah35
370363f792 Merge remote-tracking branch 'refs/remotes/origin/dedicated-rewrite' into dedicated-rewrite 2026-03-27 21:26:48 +03:00
Kolyah35
61a2349b8b FEAT: Player data saving/loading 2026-03-27 21:26:25 +03:00
eed3a6df61 FEAT: Message for outdated clients 2026-03-27 20:22:05 +02:00
97b0fb4d46 FEAT: New proto check 2026-03-27 20:16:59 +02:00
8be842a8ac FEAT: player anticheat speed 2026-03-27 19:41:54 +02:00
6957f144e1 FIX: Inventory change when cheating items (TODO: Linked slots) 2026-03-27 17:05:50 +02:00
f9d9a0f0f9 FIX: Recheck recipes in MP 2026-03-27 13:47:33 +02:00
Kolyah35
28febb4e63 FIX: tool durablity mismatch 2026-03-27 14:01:49 +03:00
Kolyah35
aeef442f76 FIX: Server-side item remove when crafting 2026-03-27 04:02:27 +03:00
8098ab8906 easy 2026-03-27 02:48:56 +02:00
f0cb6d0b7c Fix compile errors 2026-03-27 02:42:34 +02:00
d1672c0ee2 Merge branch 'dedicated-rewrite' of https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1 into dedicated-rewrite 2026-03-27 02:40:55 +02:00
c234abe3aa FIX: Item crafting 2026-03-27 02:40:52 +02:00
Kolyah35
e4ff7728af Merge remote-tracking branch 'refs/remotes/origin/dedicated-rewrite' into dedicated-rewrite 2026-03-27 03:34:29 +03:00
Kolyah35
41c5bdf243 FIX: The end of item cheating 2026-03-27 03:33:21 +03:00
96e8826f01 FEAT: Crafting on server 2026-03-27 02:14:28 +02:00
db8993683f Merge branch 'dedicated-rewrite' of https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1 into dedicated-rewrite 2026-03-26 22:48:52 +02:00
2c1b5e256e change proto ver 2026-03-26 22:48:50 +02:00
Kolyah35
4beb5cb0f9 i think i fixed player equip 2026-03-26 23:32:09 +03:00
110 changed files with 2305 additions and 3455 deletions

View File

@@ -72,30 +72,6 @@ jobs:
${{github.workspace}}/build/OpenAL32.dll
${{github.workspace}}/build/libz.dll
build-ios:
# credit to pengubow from deepfriedwaffles repo
name: Build iOS
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@main
- name: Build
run: |
cd project/iosproj
xcodebuild -scheme minecraftpe -derivedDataPath build -destination 'generic/platform=iOS' CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
mkdir -p Payload
cp -R build/Build/Products/Debug-iphoneos/minecraftpe.app Payload/
zip -r minecraftpe.ipa Payload
rm -rf Payload
- name: Upload artifact
uses: actions/upload-artifact@main
with:
name: minecraftpe-ios
path: project/iosproj/minecraftpe.ipa
build-linux:
name: Build Linux
runs-on: ubuntu-latest
@@ -290,7 +266,8 @@ jobs:
publish:
name: Publish
runs-on: ubuntu-latest
needs: [ build-windows, build-ios, build-linux, build-android, build-web ]
needs: [ build-windows, build-linux, build-android, build-web ]
if: github.ref == 'refs/heads/main'
steps:
- name: Checkout
uses: actions/checkout@v4
@@ -363,4 +340,4 @@ jobs:
./minecraftpe-server-${{ steps.ref.outputs.hash }}.zip
./minecraftpe-${{ steps.ref.outputs.hash }}-android-arm64-v8a.zip
./minecraftpe-${{ steps.ref.outputs.hash }}-android-armeabi-v7a.zip
./minecraftpe-${{ steps.ref.outputs.hash }}-web.zip
./minecraftpe-${{ steps.ref.outputs.hash }}-web.zip

View File

@@ -111,7 +111,6 @@ CPMAddPackage(
"ALSOFT_STATIC_LIBGCC ON"
)
# TODO: Clear this paths with *
file(GLOB SERVER_SOURCES
"project/lib_projects/raknet/jni/RaknetSources/*.cpp"
"src/NinecraftApp.cpp"
@@ -166,7 +165,6 @@ file(GLOB SERVER_SOURCES
"src/util/Mth.cpp"
"src/util/PerfTimer.cpp"
"src/util/StringUtils.cpp"
"src/util/Color.cpp"
"src/world/Direction.cpp"
@@ -200,9 +198,6 @@ file(GLOB SERVER_SOURCES
"src/world/level/dimension/Dimension.cpp"
"src/world/level/dimension/FoliageColor.cpp"
"src/world/level/GrassColor.cpp"
"src/world/level/levelgen/*.cpp"
"src/world/level/levelgen/feature/Feature.cpp"
"src/world/level/levelgen/synth/*.cpp"
@@ -262,8 +257,6 @@ file(GLOB CLIENT_SOURCES
"src/util/**.cpp"
"src/util/Color.cpp"
"src/world/*.cpp"
"src/world/phys/*.cpp"
"src/world/entity/*.cpp"

View File

@@ -197,39 +197,4 @@ cmake --build .
3. Run game:
```
emrun --port 8080 .
```
## iOS
### Xcode
> [Note!]
> There's a precompiled IPA artifact in the GitHub mirror under Actions for those who either don't have Macs or don't want to build themself. But if you want to build youself, you'll need a Mac with Xcode. Download Xcode from the Mac App Store.
### 1. Clone
Open your terminal and clone the repository
```bash
git clone https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1.git
cd minecraft-pe-0.6.1
```
You can also build from the ios-support branch by checking out to it
```
git checkout ios-support
```
### 2. Open in Xcode
The project file is in `minecraft-pe-0.6.1/project/iosproj/minecraftpe.xcodeproj`. Open it.
### 3. Configure Code Signing
Before you can deploy to an iPhone, you must sign the app with your own Apple Developer account:
1. Select the **minecraftpe** project in the left sidebar.
2. Go to **Signing & Capabilities**.
3. Change the **Bundle Identifier** to something unique (e.g., `com.yourname.mcpe`).
4. Select your **Team** from the dropdown menu.
### 4. Build and Run
1. Connect your iPhone via USB or LAN.
2. Select your device from the run destination menu at the top of Xcode.
3. Press **Cmd + R** (or the Play button).
4. **Note:** If you encounter a "Developer Mode" or "Untrusted Developer" error on your phone, go to **Settings > General > VPN & Device Management** to trust your certificate.
```

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 868 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -153,7 +153,6 @@ options.group.tweaks=Tweaks
options.allowSprint=Allow sprint
options.barOnTop=HUD above inventory
options.rpiCursor=Show Raspberry PI cursor
options.foliageTint=Tint Grass and Leaves
options.autoJump=Auto Jump
options.thirdperson=Third Person
options.servervisible=Server Visible

View File

@@ -146,7 +146,6 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
../../../src/util/StringUtils.cpp \
../../../src/util/PerfTimer.cpp \
../../../src/util/PerfRenderer.cpp \
../../../src/util/Color.cpp \
../../../src/world/Direction.cpp \
../../../src/world/entity/AgableMob.cpp \
../../../src/world/entity/Entity.cpp \
@@ -210,8 +209,6 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
../../../src/world/level/MobSpawner.cpp \
../../../src/world/level/Region.cpp \
../../../src/world/level/TickNextTickData.cpp \
../../../src/world/level/FoliageColor.cpp \
../../../src/world/level/GrassColor.cpp \
../../../src/world/level/biome/Biome.cpp \
../../../src/world/level/biome/BiomeSource.cpp \
../../../src/world/level/chunk/LevelChunk.cpp \

View File

@@ -122,7 +122,6 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
../../../src/util/StringUtils.cpp \
../../../src/util/PerfTimer.cpp \
../../../src/util/PerfRenderer.cpp \
../../../src/util/Color.cpp \
../../../src/world/Direction.cpp \
../../../src/world/entity/AgableMob.cpp \
../../../src/world/entity/Entity.cpp \
@@ -184,8 +183,6 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
../../../src/world/level/MobSpawner.cpp \
../../../src/world/level/Region.cpp \
../../../src/world/level/TickNextTickData.cpp \
../../../src/world/level/FoliageColor.cpp \
../../../src/world/level/GrassColor.cpp \
../../../src/world/level/biome/Biome.cpp \
../../../src/world/level/biome/BiomeSource.cpp \
../../../src/world/level/chunk/LevelChunk.cpp \

View File

@@ -1,48 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13142" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12042"/>
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="obG-Y5-kRd">
<rect key="frame" x="0.0" y="626.5" width="375" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="minecraftpe" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="GJd-Yh-RWb">
<rect key="frame" x="0.0" y="202" width="375" height="43"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="Bcu-3y-fUS" firstAttribute="centerX" secondItem="obG-Y5-kRd" secondAttribute="centerX" id="5cz-MP-9tL"/>
<constraint firstItem="Bcu-3y-fUS" firstAttribute="centerX" secondItem="GJd-Yh-RWb" secondAttribute="centerX" id="Q3B-4B-g5h"/>
<constraint firstItem="obG-Y5-kRd" firstAttribute="leading" secondItem="Bcu-3y-fUS" secondAttribute="leading" constant="20" symbolic="YES" id="SfN-ll-jLj"/>
<constraint firstAttribute="bottom" secondItem="obG-Y5-kRd" secondAttribute="bottom" constant="20" id="Y44-ml-fuU"/>
<constraint firstItem="GJd-Yh-RWb" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="bottom" multiplier="1/3" constant="1" id="moa-c2-u7t"/>
<constraint firstItem="GJd-Yh-RWb" firstAttribute="leading" secondItem="Bcu-3y-fUS" secondAttribute="leading" constant="20" symbolic="YES" id="x7j-FC-K8j"/>
</constraints>
<viewLayoutGuide key="safeArea" id="Bcu-3y-fUS"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
</document>

View File

@@ -41,6 +41,7 @@
042A91AE16B17517007ABBC6 /* GuiElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A316B17517007ABBC6 /* GuiElement.cpp */; };
042A91AF16B17517007ABBC6 /* NinePatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A516B17517007ABBC6 /* NinePatch.cpp */; };
042A91B016B17517007ABBC6 /* OptionsGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A716B17517007ABBC6 /* OptionsGroup.cpp */; };
042A91B116B17517007ABBC6 /* OptionsPane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A916B17517007ABBC6 /* OptionsPane.cpp */; };
042A91B216B17517007ABBC6 /* TextBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91AB16B17517007ABBC6 /* TextBox.cpp */; };
044129071682FF9600B70EE6 /* MouseHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 044129061682FF9600B70EE6 /* MouseHandler.cpp */; };
9D293CE716071C08000305C8 /* CreateNewWorld_iphone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9D293CE616071C08000305C8 /* CreateNewWorld_iphone.xib */; };
@@ -1146,39 +1147,6 @@
D5F3B7DD14548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D5F3B7C814548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.xib */; };
D5F3B7DE14548E7900D25470 /* IASKSpecifierValuesView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D5F3B7C914548E7900D25470 /* IASKSpecifierValuesView.xib */; };
D5F3B7E51454930400D25470 /* InAppSettings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D5F3B7E41454930400D25470 /* InAppSettings.bundle */; };
F912B8CF2F6C3D5200BC60DF /* TextBox.h in Sources */ = {isa = PBXBuildFile; fileRef = 042A91AC16B17517007ABBC6 /* TextBox.h */; };
F99D341F2F736AA100DC153E /* HttpClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D341E2F736AA100DC153E /* HttpClient.cpp */; };
F99D34202F736AA100DC153E /* HttpClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D341E2F736AA100DC153E /* HttpClient.cpp */; };
F99D34232F736AD400DC153E /* TextOption.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34222F736AD400DC153E /* TextOption.cpp */; };
F99D34242F736AD400DC153E /* TextOption.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34222F736AD400DC153E /* TextOption.cpp */; };
F99D34272F736AFB00DC153E /* OptionsFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34262F736AFB00DC153E /* OptionsFile.cpp */; };
F99D34282F736AFB00DC153E /* OptionsFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34262F736AFB00DC153E /* OptionsFile.cpp */; };
F99D342B2F736B6F00DC153E /* OptionsItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D342A2F736B6F00DC153E /* OptionsItem.cpp */; };
F99D342C2F736B6F00DC153E /* OptionsItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D342A2F736B6F00DC153E /* OptionsItem.cpp */; };
F99D342F2F736BAD00DC153E /* ConsoleScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D342E2F736BAD00DC153E /* ConsoleScreen.cpp */; };
F99D34302F736BAD00DC153E /* ConsoleScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D342E2F736BAD00DC153E /* ConsoleScreen.cpp */; };
F99D34332F736BDA00DC153E /* CreditsScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34322F736BDA00DC153E /* CreditsScreen.cpp */; };
F99D34342F736BDA00DC153E /* CreditsScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34322F736BDA00DC153E /* CreditsScreen.cpp */; };
F99D34372F736C1000DC153E /* JoinByIPScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34362F736C1000DC153E /* JoinByIPScreen.cpp */; };
F99D34382F736C1000DC153E /* JoinByIPScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34362F736C1000DC153E /* JoinByIPScreen.cpp */; };
F99D343B2F736C3B00DC153E /* UsernameScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D343A2F736C3B00DC153E /* UsernameScreen.cpp */; };
F99D343C2F736C3B00DC153E /* UsernameScreen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D343A2F736C3B00DC153E /* UsernameScreen.cpp */; };
F99D343F2F736C8400DC153E /* GuiElementContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D343E2F736C8400DC153E /* GuiElementContainer.cpp */; };
F99D34402F736C8400DC153E /* GuiElementContainer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D343E2F736C8400DC153E /* GuiElementContainer.cpp */; };
F99D34432F736F9400DC153E /* Option.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34422F736F9400DC153E /* Option.cpp */; };
F99D34442F736F9400DC153E /* Option.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34422F736F9400DC153E /* Option.cpp */; };
F99D34472F736FE800DC153E /* KeyOption.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34462F736FE800DC153E /* KeyOption.cpp */; };
F99D34482F736FE800DC153E /* KeyOption.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D34462F736FE800DC153E /* KeyOption.cpp */; };
F99D344B2F7370CF00DC153E /* Slider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D344A2F7370CF00DC153E /* Slider.cpp */; };
F99D344C2F7370CF00DC153E /* Slider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99D344A2F7370CF00DC153E /* Slider.cpp */; };
F99D344E2F7372A100DC153E /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F99D344D2F7372A100DC153E /* Launch Screen.storyboard */; };
F99D344F2F7372A100DC153E /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F99D344D2F7372A100DC153E /* Launch Screen.storyboard */; };
F99F0FA92F84369F00F2B29A /* GrassColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FA82F84369F00F2B29A /* GrassColor.cpp */; };
F99F0FAA2F84369F00F2B29A /* GrassColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FA82F84369F00F2B29A /* GrassColor.cpp */; };
F99F0FAC2F8436CE00F2B29A /* FoliageColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FAB2F8436CE00F2B29A /* FoliageColor.cpp */; };
F99F0FAD2F8436CE00F2B29A /* FoliageColor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FAB2F8436CE00F2B29A /* FoliageColor.cpp */; };
F99F0FAF2F8436EB00F2B29A /* Color.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FAE2F8436EB00F2B29A /* Color.cpp */; };
F99F0FB02F8436EB00F2B29A /* Color.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99F0FAE2F8436EB00F2B29A /* Color.cpp */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
@@ -1240,8 +1208,10 @@
042A91A616B17517007ABBC6 /* NinePatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NinePatch.h; sourceTree = "<group>"; };
042A91A716B17517007ABBC6 /* OptionsGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OptionsGroup.cpp; sourceTree = "<group>"; };
042A91A816B17517007ABBC6 /* OptionsGroup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OptionsGroup.h; sourceTree = "<group>"; };
042A91A916B17517007ABBC6 /* OptionsPane.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OptionsPane.cpp; sourceTree = "<group>"; };
042A91AA16B17517007ABBC6 /* OptionsPane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OptionsPane.h; sourceTree = "<group>"; };
042A91AB16B17517007ABBC6 /* TextBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextBox.cpp; sourceTree = "<group>"; };
042A91AC16B17517007ABBC6 /* TextBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TextBox.h; path = ../../src/client/gui/components/TextBox.h; sourceTree = SOURCE_ROOT; };
042A91AC16B17517007ABBC6 /* TextBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextBox.h; sourceTree = "<group>"; };
044129061682FF9600B70EE6 /* MouseHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MouseHandler.cpp; sourceTree = "<group>"; };
9D293CE616071C08000305C8 /* CreateNewWorld_iphone.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = CreateNewWorld_iphone.xib; path = minecraftpe/dialogs/CreateNewWorld_iphone.xib; sourceTree = "<group>"; };
9D293CEA160720D6000305C8 /* worldname_iphone5_3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = worldname_iphone5_3.png; sourceTree = "<group>"; };
@@ -2047,7 +2017,7 @@
D5B50D6914CFF66F005F7284 /* Multitouch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Multitouch.h; sourceTree = "<group>"; };
D5B50D6A14CFF66F005F7284 /* log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = "<group>"; };
D5B50D6B14CFF66F005F7284 /* time.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = time.cpp; sourceTree = "<group>"; };
D5B50D6C14CFF66F005F7284 /* time.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = time.h; sourceTree = "<group>"; };
D5B50D6C14CFF66F005F7284 /* time.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = time.h; sourceTree = "<group>"; };
D5B50E5614CFF66F005F7284 /* SharedConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedConstants.h; sourceTree = "<group>"; };
D5B50E5714CFF66F005F7284 /* terrain_4444.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = terrain_4444.h; sourceTree = "<group>"; };
D5B50E5814CFF66F005F7284 /* terrain_5551.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = terrain_5551.h; sourceTree = "<group>"; };
@@ -2438,34 +2408,6 @@
D5F3B7C814548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IASKPSToggleSwitchSpecifierViewCell.xib; sourceTree = "<group>"; };
D5F3B7C914548E7900D25470 /* IASKSpecifierValuesView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IASKSpecifierValuesView.xib; sourceTree = "<group>"; };
D5F3B7E41454930400D25470 /* InAppSettings.bundle */ = {isa = PBXFileReference; explicitFileType = "wrapper.installer-pkg"; path = InAppSettings.bundle; sourceTree = "<group>"; };
F99D341D2F736AA100DC153E /* HttpClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = HttpClient.h; path = ../../src/platform/HttpClient.h; sourceTree = "<group>"; };
F99D341E2F736AA100DC153E /* HttpClient.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = HttpClient.cpp; path = ../../src/platform/HttpClient.cpp; sourceTree = "<group>"; };
F99D34212F736AD400DC153E /* TextOption.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TextOption.h; path = ../../src/client/gui/components/TextOption.h; sourceTree = "<group>"; };
F99D34222F736AD400DC153E /* TextOption.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TextOption.cpp; path = ../../src/client/gui/components/TextOption.cpp; sourceTree = "<unknown>"; };
F99D34252F736AFB00DC153E /* OptionsFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OptionsFile.h; path = ../../src/client/OptionsFile.h; sourceTree = "<group>"; };
F99D34262F736AFB00DC153E /* OptionsFile.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = OptionsFile.cpp; path = ../../src/client/OptionsFile.cpp; sourceTree = "<group>"; };
F99D34292F736B6F00DC153E /* OptionsItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = OptionsItem.h; path = ../../src/client/gui/components/OptionsItem.h; sourceTree = "<group>"; };
F99D342A2F736B6F00DC153E /* OptionsItem.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = OptionsItem.cpp; path = ../../src/client/gui/components/OptionsItem.cpp; sourceTree = "<group>"; };
F99D342D2F736BAD00DC153E /* ConsoleScreen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ConsoleScreen.h; path = ../../src/client/gui/screens/ConsoleScreen.h; sourceTree = "<group>"; };
F99D342E2F736BAD00DC153E /* ConsoleScreen.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ConsoleScreen.cpp; path = ../../src/client/gui/screens/ConsoleScreen.cpp; sourceTree = "<group>"; };
F99D34312F736BDA00DC153E /* CreditsScreen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CreditsScreen.h; path = ../../src/client/gui/screens/CreditsScreen.h; sourceTree = "<group>"; };
F99D34322F736BDA00DC153E /* CreditsScreen.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CreditsScreen.cpp; path = ../../src/client/gui/screens/CreditsScreen.cpp; sourceTree = "<group>"; };
F99D34352F736C1000DC153E /* JoinByIPScreen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JoinByIPScreen.h; path = ../../src/client/gui/screens/JoinByIPScreen.h; sourceTree = "<group>"; };
F99D34362F736C1000DC153E /* JoinByIPScreen.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = JoinByIPScreen.cpp; path = ../../src/client/gui/screens/JoinByIPScreen.cpp; sourceTree = "<group>"; };
F99D34392F736C3B00DC153E /* UsernameScreen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = UsernameScreen.h; path = ../../src/client/gui/screens/UsernameScreen.h; sourceTree = "<group>"; };
F99D343A2F736C3B00DC153E /* UsernameScreen.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = UsernameScreen.cpp; path = ../../src/client/gui/screens/UsernameScreen.cpp; sourceTree = "<group>"; };
F99D343D2F736C8400DC153E /* GuiElementContainer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GuiElementContainer.h; path = ../../src/client/gui/components/GuiElementContainer.h; sourceTree = "<group>"; };
F99D343E2F736C8400DC153E /* GuiElementContainer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = GuiElementContainer.cpp; path = ../../src/client/gui/components/GuiElementContainer.cpp; sourceTree = "<group>"; };
F99D34412F736F9400DC153E /* Option.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Option.h; path = ../../src/client/Option.h; sourceTree = "<group>"; };
F99D34422F736F9400DC153E /* Option.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Option.cpp; path = ../../src/client/Option.cpp; sourceTree = "<group>"; };
F99D34452F736FE800DC153E /* KeyOption.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = KeyOption.h; path = ../../src/client/gui/components/KeyOption.h; sourceTree = "<group>"; };
F99D34462F736FE800DC153E /* KeyOption.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = KeyOption.cpp; path = ../../src/client/gui/components/KeyOption.cpp; sourceTree = "<group>"; };
F99D34492F7370CF00DC153E /* Slider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Slider.h; path = ../../src/client/gui/components/Slider.h; sourceTree = "<group>"; };
F99D344A2F7370CF00DC153E /* Slider.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Slider.cpp; path = ../../src/client/gui/components/Slider.cpp; sourceTree = "<group>"; };
F99D344D2F7372A100DC153E /* Launch Screen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = "<group>"; };
F99F0FA82F84369F00F2B29A /* GrassColor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GrassColor.cpp; sourceTree = "<group>"; };
F99F0FAB2F8436CE00F2B29A /* FoliageColor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FoliageColor.cpp; sourceTree = "<group>"; };
F99F0FAE2F8436EB00F2B29A /* Color.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Color.cpp; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -3284,6 +3226,8 @@
042A91A616B17517007ABBC6 /* NinePatch.h */,
042A91A716B17517007ABBC6 /* OptionsGroup.cpp */,
042A91A816B17517007ABBC6 /* OptionsGroup.h */,
042A91A916B17517007ABBC6 /* OptionsPane.cpp */,
042A91AA16B17517007ABBC6 /* OptionsPane.h */,
042A91AB16B17517007ABBC6 /* TextBox.cpp */,
042A91AC16B17517007ABBC6 /* TextBox.h */,
D5B50C2814CFF66F005F7284 /* Button.cpp */,
@@ -3770,7 +3714,6 @@
D5B50E6914CFF66F005F7284 /* StringUtils.cpp */,
D5B50E6A14CFF66F005F7284 /* StringUtils.h */,
D5B50E6B14CFF66F005F7284 /* WeighedRandom.h */,
F99F0FAE2F8436EB00F2B29A /* Color.cpp */,
);
path = util;
sourceTree = "<group>";
@@ -4035,8 +3978,6 @@
D5B50F3714CFF66F005F7284 /* TickNextTickData.h */,
D5B50F3814CFF66F005F7284 /* tile */,
D5B50F6814CFF66F005F7284 /* TilePos.h */,
F99F0FA82F84369F00F2B29A /* GrassColor.cpp */,
F99F0FAB2F8436CE00F2B29A /* FoliageColor.cpp */,
);
path = level;
sourceTree = "<group>";
@@ -4315,7 +4256,6 @@
D5CF9C37144C225000E4244F = {
isa = PBXGroup;
children = (
F99D344D2F7372A100DC153E /* Launch Screen.storyboard */,
D5E1BA9A1451C8A0007DCC4F /* Default@2x.png */,
9D959AFF16036BEE00E23A6F /* Default-568h@2x.png */,
D5F07744145EF79B00EC30FB /* Default-Landscape~ipad.png */,
@@ -4327,30 +4267,6 @@
D5CF9C45144C225000E4244F /* Frameworks */,
D5CF9C43144C225000E4244F /* Products */,
D5B50C1614CFF66F005F7284 /* src */,
F99D341D2F736AA100DC153E /* HttpClient.h */,
F99D341E2F736AA100DC153E /* HttpClient.cpp */,
F99D34212F736AD400DC153E /* TextOption.h */,
F99D34222F736AD400DC153E /* TextOption.cpp */,
F99D34252F736AFB00DC153E /* OptionsFile.h */,
F99D34262F736AFB00DC153E /* OptionsFile.cpp */,
F99D34292F736B6F00DC153E /* OptionsItem.h */,
F99D342A2F736B6F00DC153E /* OptionsItem.cpp */,
F99D342D2F736BAD00DC153E /* ConsoleScreen.h */,
F99D342E2F736BAD00DC153E /* ConsoleScreen.cpp */,
F99D34312F736BDA00DC153E /* CreditsScreen.h */,
F99D34322F736BDA00DC153E /* CreditsScreen.cpp */,
F99D34352F736C1000DC153E /* JoinByIPScreen.h */,
F99D34362F736C1000DC153E /* JoinByIPScreen.cpp */,
F99D34392F736C3B00DC153E /* UsernameScreen.h */,
F99D343A2F736C3B00DC153E /* UsernameScreen.cpp */,
F99D343D2F736C8400DC153E /* GuiElementContainer.h */,
F99D343E2F736C8400DC153E /* GuiElementContainer.cpp */,
F99D34412F736F9400DC153E /* Option.h */,
F99D34422F736F9400DC153E /* Option.cpp */,
F99D34452F736FE800DC153E /* KeyOption.h */,
F99D34462F736FE800DC153E /* KeyOption.cpp */,
F99D34492F7370CF00DC153E /* Slider.h */,
F99D344A2F7370CF00DC153E /* Slider.cpp */,
);
sourceTree = "<group>";
};
@@ -4611,16 +4527,10 @@
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0420;
TargetAttributes = {
D5CF9C41144C225000E4244F = {
DevelopmentTeam = PZUVNW8F2U;
ProvisioningStyle = Automatic;
};
};
};
buildConfigurationList = D5CF9C3C144C225000E4244F /* Build configuration list for PBXProject "minecraftpe" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = en;
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
@@ -4689,7 +4599,6 @@
D5B50A5614CFF492005F7284 /* pig.png in Resources */,
D5B50A5814CFF492005F7284 /* sheep_fur.png in Resources */,
D5B50A5A14CFF492005F7284 /* sheep.png in Resources */,
F99D344F2F7372A100DC153E /* Launch Screen.storyboard in Resources */,
D5B50A5C14CFF492005F7284 /* skeleton.png in Resources */,
D5B50A5E14CFF492005F7284 /* spider.png in Resources */,
D5B50A6014CFF492005F7284 /* zombie.png in Resources */,
@@ -5026,7 +4935,6 @@
D5ACF26F15C03DBF00E21C22 /* sand2.m4a in Resources */,
D5ACF27115C03DBF00E21C22 /* sand3.m4a in Resources */,
D5ACF27315C03DBF00E21C22 /* sand4.m4a in Resources */,
F99D344E2F7372A100DC153E /* Launch Screen.storyboard in Resources */,
D5ACF27515C03DBF00E21C22 /* snow1.m4a in Resources */,
D5ACF27715C03DBF00E21C22 /* snow2.m4a in Resources */,
D5ACF27915C03DBF00E21C22 /* snow3.m4a in Resources */,
@@ -5103,22 +5011,18 @@
D58BB544146A0B910002C9F5 /* IASKSettingsStore.m in Sources */,
D58BB545146A0B910002C9F5 /* IASKSettingsStoreFile.m in Sources */,
D58BB546146A0B910002C9F5 /* IASKSettingsStoreUserDefaults.m in Sources */,
F99D34232F736AD400DC153E /* TextOption.cpp in Sources */,
D58BB547146A0B910002C9F5 /* IASKSpecifier.m in Sources */,
D58BB548146A0B910002C9F5 /* IASKPSSliderSpecifierViewCell.m in Sources */,
D58BB549146A0B910002C9F5 /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
D58BB54A146A0B910002C9F5 /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
D58BB54B146A0B910002C9F5 /* IASKPSToggleSwitchSpecifierViewCell.m in Sources */,
F99D343B2F736C3B00DC153E /* UsernameScreen.cpp in Sources */,
D58BB54C146A0B910002C9F5 /* IASKSlider.m in Sources */,
D58BB54D146A0B910002C9F5 /* IASKSwitch.m in Sources */,
F99D34302F736BAD00DC153E /* ConsoleScreen.cpp in Sources */,
D58BB54E146A0B910002C9F5 /* IASKTextField.m in Sources */,
D58BB550146A0B910002C9F5 /* PVRTexture.m in Sources */,
D5D43CC9146AF4B4002ED842 /* RenameMPWorldViewController.mm in Sources */,
D5B50F7014CFF670005F7284 /* AppPlatform_iOS.mm in Sources */,
D5B50F7414CFF670005F7284 /* CreativeMode.cpp in Sources */,
F99D34432F736F9400DC153E /* Option.cpp in Sources */,
D5B50F7614CFF670005F7284 /* GameMode.cpp in Sources */,
D5B50F7814CFF670005F7284 /* Button.cpp in Sources */,
D5B50F7A14CFF670005F7284 /* ImageButton.cpp in Sources */,
@@ -5163,7 +5067,6 @@
D5B50FC814CFF670005F7284 /* KeyboardInput.cpp in Sources */,
D5B50FCA14CFF670005F7284 /* TouchscreenInput.cpp in Sources */,
D5B50FCC14CFF670005F7284 /* LocalPlayer.cpp in Sources */,
F99D34482F736FE800DC153E /* KeyOption.cpp in Sources */,
D5B50FCE14CFF670005F7284 /* Chunk.cpp in Sources */,
D5B50FD014CFF670005F7284 /* Frustum.cpp in Sources */,
D5B50FD214CFF670005F7284 /* ChickenRenderer.cpp in Sources */,
@@ -5206,7 +5109,6 @@
D5B5111014CFF670005F7284 /* Mth.cpp in Sources */,
D5B5111214CFF670005F7284 /* PerfRenderer.cpp in Sources */,
D5B5111414CFF670005F7284 /* PerfTimer.cpp in Sources */,
F99F0FA92F84369F00F2B29A /* GrassColor.cpp in Sources */,
D5B5111614CFF670005F7284 /* StringUtils.cpp in Sources */,
D5B5111814CFF670005F7284 /* Direction.cpp in Sources */,
D5B5111A14CFF670005F7284 /* Animal.cpp in Sources */,
@@ -5223,21 +5125,17 @@
D5B5113014CFF670005F7284 /* TripodCamera.cpp in Sources */,
D5B5113214CFF670005F7284 /* Mob.cpp in Sources */,
D5B5113414CFF670005F7284 /* MobCategory.cpp in Sources */,
F99D34282F736AFB00DC153E /* OptionsFile.cpp in Sources */,
D5B5113814CFF670005F7284 /* PathFinderMob.cpp in Sources */,
D5B5113A14CFF670005F7284 /* Inventory.cpp in Sources */,
D5B5113C14CFF670005F7284 /* Player.cpp in Sources */,
F99F0FB02F8436EB00F2B29A /* Color.cpp in Sources */,
D5B5113E14CFF670005F7284 /* Arrow.cpp in Sources */,
D5B5114014CFF670005F7284 /* Recipes.cpp in Sources */,
D5B5114214CFF670005F7284 /* ToolRecipes.cpp in Sources */,
D5B5114414CFF670005F7284 /* WeaponRecipes.cpp in Sources */,
D5B5114614CFF670005F7284 /* HatchetItem.cpp in Sources */,
D5B5114814CFF670005F7284 /* Item.cpp in Sources */,
F99F0FAC2F8436CE00F2B29A /* FoliageColor.cpp in Sources */,
D5B5114A14CFF670005F7284 /* ItemInstance.cpp in Sources */,
D5B5114C14CFF670005F7284 /* PickaxeItem.cpp in Sources */,
F99D344B2F7370CF00DC153E /* Slider.cpp in Sources */,
D5B5114E14CFF670005F7284 /* ShovelItem.cpp in Sources */,
D5B5115014CFF670005F7284 /* Biome.cpp in Sources */,
D5B5115214CFF670005F7284 /* BiomeSource.cpp in Sources */,
@@ -5288,7 +5186,6 @@
D5251DBA1538192700FC82C8 /* CloudServer.cpp in Sources */,
D5251DBE1538192700FC82C8 /* CommandParserInterface.cpp in Sources */,
D5251DC01538192700FC82C8 /* ConnectionGraph2.cpp in Sources */,
F99D34402F736C8400DC153E /* GuiElementContainer.cpp in Sources */,
D5251DC21538192700FC82C8 /* ConsoleServer.cpp in Sources */,
D5251DC41538192700FC82C8 /* DataCompressor.cpp in Sources */,
D5251DC61538192700FC82C8 /* DirectoryDeltaTransfer.cpp in Sources */,
@@ -5313,8 +5210,6 @@
D5251DEC1538192700FC82C8 /* HTTPConnection.cpp in Sources */,
D5251DEE1538192700FC82C8 /* IncrementalReadInterface.cpp in Sources */,
D5251DF01538192700FC82C8 /* Itoa.cpp in Sources */,
F99D34202F736AA100DC153E /* HttpClient.cpp in Sources */,
F99D34382F736C1000DC153E /* JoinByIPScreen.cpp in Sources */,
D5251DF21538192700FC82C8 /* LinuxStrings.cpp in Sources */,
D5251DF41538192700FC82C8 /* LocklessTypes.cpp in Sources */,
D5251DF61538192700FC82C8 /* LogCommandParser.cpp in Sources */,
@@ -5343,7 +5238,6 @@
D5251E2A1538192700FC82C8 /* RakSleep.cpp in Sources */,
D5251E2C1538192700FC82C8 /* RakString.cpp in Sources */,
D5251E2E1538192700FC82C8 /* RakThread.cpp in Sources */,
F99D34332F736BDA00DC153E /* CreditsScreen.cpp in Sources */,
D5251E301538192700FC82C8 /* RakWString.cpp in Sources */,
D5251E321538192700FC82C8 /* Rand.cpp in Sources */,
D5251E341538192700FC82C8 /* rdlmalloc.cpp in Sources */,
@@ -5386,7 +5280,6 @@
D5951EEB159349100043A12A /* TileEntity.cpp in Sources */,
D5951EEF159349680043A12A /* FurnaceScreen.cpp in Sources */,
D5951EF215934A2D0043A12A /* Feature.cpp in Sources */,
F99D342C2F736B6F00DC153E /* OptionsItem.cpp in Sources */,
D5951EF815934AC50043A12A /* BaseContainerMenu.cpp in Sources */,
D5951EFA15934AC50043A12A /* FurnaceMenu.cpp in Sources */,
D5D381F315A1A1CF00B6C50E /* FillingContainer.cpp in Sources */,
@@ -5446,10 +5339,8 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
F912B8CF2F6C3D5200BC60DF /* TextBox.h in Sources */,
D5CF9C57144C225000E4244F /* main.mm in Sources */,
D5CF9C5B144C225000E4244F /* minecraftpeAppDelegate.mm in Sources */,
F99D343C2F736C3B00DC153E /* UsernameScreen.cpp in Sources */,
D5CF9C65144C225000E4244F /* EAGLView.m in Sources */,
D5CFA01D144C453900E4244F /* minecraftpeViewController.mm in Sources */,
D5A55E4914500EDE00A7571B /* CreateNewWorldViewController.mm in Sources */,
@@ -5463,7 +5354,6 @@
D5F3B7D014548E7900D25470 /* IASKSettingsStoreUserDefaults.m in Sources */,
D5F3B7D114548E7900D25470 /* IASKSpecifier.m in Sources */,
D5F3B7D214548E7900D25470 /* IASKPSSliderSpecifierViewCell.m in Sources */,
F99D34472F736FE800DC153E /* KeyOption.cpp in Sources */,
D5F3B7D314548E7900D25470 /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
D5F3B7D414548E7900D25470 /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
D5F3B7D514548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.m in Sources */,
@@ -5543,7 +5433,6 @@
D5B5102F14CFF670005F7284 /* main.cpp in Sources */,
D5B5103514CFF670005F7284 /* Tag.cpp in Sources */,
D5B5103714CFF670005F7284 /* ClientSideNetworkHandler.cpp in Sources */,
F99F0FAF2F8436EB00F2B29A /* Color.cpp in Sources */,
D5B5103914CFF670005F7284 /* NetEventCallback.cpp in Sources */,
D5B5103B14CFF670005F7284 /* Packet.cpp in Sources */,
D5B5103D14CFF670005F7284 /* RakNetInstance.cpp in Sources */,
@@ -5564,7 +5453,6 @@
D5B5111514CFF670005F7284 /* StringUtils.cpp in Sources */,
D5B5111714CFF670005F7284 /* Direction.cpp in Sources */,
D5B5111914CFF670005F7284 /* Animal.cpp in Sources */,
F99F0FAD2F8436CE00F2B29A /* FoliageColor.cpp in Sources */,
D5B5111B14CFF670005F7284 /* Chicken.cpp in Sources */,
D5B5111D14CFF670005F7284 /* Cow.cpp in Sources */,
D5B5111F14CFF670005F7284 /* Pig.cpp in Sources */,
@@ -5577,13 +5465,11 @@
D5B5112D14CFF670005F7284 /* PrimedTnt.cpp in Sources */,
D5B5112F14CFF670005F7284 /* TripodCamera.cpp in Sources */,
D5B5113114CFF670005F7284 /* Mob.cpp in Sources */,
F99D34442F736F9400DC153E /* Option.cpp in Sources */,
D5B5113314CFF670005F7284 /* MobCategory.cpp in Sources */,
D5B5113714CFF670005F7284 /* PathFinderMob.cpp in Sources */,
D5B5113914CFF670005F7284 /* Inventory.cpp in Sources */,
D5B5113B14CFF670005F7284 /* Player.cpp in Sources */,
D5B5113D14CFF670005F7284 /* Arrow.cpp in Sources */,
F99D343F2F736C8400DC153E /* GuiElementContainer.cpp in Sources */,
D5B5113F14CFF670005F7284 /* Recipes.cpp in Sources */,
D5B5114114CFF670005F7284 /* ToolRecipes.cpp in Sources */,
D5B5114314CFF670005F7284 /* WeaponRecipes.cpp in Sources */,
@@ -5615,19 +5501,16 @@
D5B5117714CFF670005F7284 /* ExternalFileLevelStorageSource.cpp in Sources */,
D5B5117914CFF670005F7284 /* RegionFile.cpp in Sources */,
D5B5117B14CFF670005F7284 /* TickNextTickData.cpp in Sources */,
F99F0FAA2F84369F00F2B29A /* GrassColor.cpp in Sources */,
D5B5117D14CFF670005F7284 /* DoorTile.cpp in Sources */,
D5B5118114CFF670005F7284 /* StoneSlabTile.cpp in Sources */,
D5B5118314CFF670005F7284 /* Tile.cpp in Sources */,
D5B5118514CFF670005F7284 /* HitResult.cpp in Sources */,
D5B5118B14D03342005F7284 /* SynchedEntityData.cpp in Sources */,
D5B5118E14DEA27F005F7284 /* DeathScreen.cpp in Sources */,
F99D34242F736AD400DC153E /* TextOption.cpp in Sources */,
D5B5119114DEA2B7005F7284 /* LevelData.cpp in Sources */,
D5B5119414DEA2EF005F7284 /* DyePowderItem.cpp in Sources */,
D584926D14FD234400741128 /* SharedConstants.cpp in Sources */,
D584927314FD236700741128 /* MoveControl.cpp in Sources */,
F99D344C2F7370CF00DC153E /* Slider.cpp in Sources */,
D584928614FD240D00741128 /* IConfigListener.cpp in Sources */,
D584928914FD2FAF00741128 /* Path.cpp in Sources */,
D5B86281153810BD00F3238A /* I18n.cpp in Sources */,
@@ -5679,7 +5562,6 @@
D5251E011538192700FC82C8 /* NatTypeDetectionServer.cpp in Sources */,
D5251E031538192700FC82C8 /* NetworkIDManager.cpp in Sources */,
D5251E051538192700FC82C8 /* NetworkIDObject.cpp in Sources */,
F99D34372F736C1000DC153E /* JoinByIPScreen.cpp in Sources */,
D5251E071538192700FC82C8 /* PacketConsoleLogger.cpp in Sources */,
D5251E091538192700FC82C8 /* PacketFileLogger.cpp in Sources */,
D5251E0B1538192700FC82C8 /* PacketizedTCP.cpp in Sources */,
@@ -5709,13 +5591,11 @@
D5251E411538192700FC82C8 /* SendToThread.cpp in Sources */,
D5251E431538192700FC82C8 /* SHA1.cpp in Sources */,
D5251E451538192700FC82C8 /* SignaledEvent.cpp in Sources */,
F99D34342F736BDA00DC153E /* CreditsScreen.cpp in Sources */,
D5251E471538192700FC82C8 /* SimpleMutex.cpp in Sources */,
D5251E491538192700FC82C8 /* SocketLayer.cpp in Sources */,
D5251E4B1538192700FC82C8 /* StringCompressor.cpp in Sources */,
D5251E4D1538192700FC82C8 /* StringTable.cpp in Sources */,
D5251E4F1538192700FC82C8 /* SuperFastHash.cpp in Sources */,
F99D342B2F736B6F00DC153E /* OptionsItem.cpp in Sources */,
D5251E511538192700FC82C8 /* TableSerializer.cpp in Sources */,
D5251E531538192700FC82C8 /* TCPInterface.cpp in Sources */,
D5251E551538192700FC82C8 /* TeamBalancer.cpp in Sources */,
@@ -5738,7 +5618,6 @@
D5951EDD159348C50043A12A /* ItemPane.cpp in Sources */,
D5951EE3159349000043A12A /* FurnaceTile.cpp in Sources */,
D5951EE8159349100043A12A /* FurnaceTileEntity.cpp in Sources */,
F99D342F2F736BAD00DC153E /* ConsoleScreen.cpp in Sources */,
D5951EEA159349100043A12A /* TileEntity.cpp in Sources */,
D5951EEE159349680043A12A /* FurnaceScreen.cpp in Sources */,
D5951EF115934A2D0043A12A /* Feature.cpp in Sources */,
@@ -5775,7 +5654,6 @@
D544941E15D13F45005FA9B0 /* PlayerRenderer.cpp in Sources */,
D544942215D13F5E005FA9B0 /* RemotePlayer.cpp in Sources */,
D5B17ED515E226F50056E751 /* Throwable.cpp in Sources */,
F99D341F2F736AA100DC153E /* HttpClient.cpp in Sources */,
D5B17ED915E2273F0056E751 /* SurvivalMode.cpp in Sources */,
D5B17EDD15E227670056E751 /* TrapDoorTile.cpp in Sources */,
D5B17EE115E260910056E751 /* MoveFolder.mm in Sources */,
@@ -5811,7 +5689,6 @@
0400453A16A4125C003EB6FA /* FallingTileRenderer.cpp in Sources */,
0413970716A82E1E008A9F1A /* ArmorItem.cpp in Sources */,
0413970D16A82E6B008A9F1A /* CraftingFilters.cpp in Sources */,
F99D34272F736AFB00DC153E /* OptionsFile.cpp in Sources */,
0413970E16A82E6B008A9F1A /* StonecutterScreen.cpp in Sources */,
0413971116A82E7B008A9F1A /* ArmorScreen.cpp in Sources */,
0413971516A82EB9008A9F1A /* ArmorRecipes.cpp in Sources */,
@@ -5820,6 +5697,7 @@
042A91AE16B17517007ABBC6 /* GuiElement.cpp in Sources */,
042A91AF16B17517007ABBC6 /* NinePatch.cpp in Sources */,
042A91B016B17517007ABBC6 /* OptionsGroup.cpp in Sources */,
042A91B116B17517007ABBC6 /* OptionsPane.cpp in Sources */,
042A91B216B17517007ABBC6 /* TextBox.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -5857,29 +5735,25 @@
D50BE20815EE05B8008AA75E /* Ad-Hoc */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = YES;
ARCHS = "$(ARCHS_STANDARD)";
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Mojang AB";
COPY_PHASE_STRIP = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_PREPROCESSOR_DEFINITIONS = PUBLISH;
GCC_VERSION = "";
GCC_VERSION = com.apple.compilers.llvmgcc42;
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
IPHONEOS_DEPLOYMENT_TARGET = 12;
ONLY_ACTIVE_ARCH = YES;
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "C93D3524-5C6F-466E-B12B-833663B7EAE0";
RUN_CLANG_STATIC_ANALYZER = NO;
SDKROOT = iphoneos;
SDKROOT = iphoneos6.0;
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
USE_HEADERMAP = NO;
VALIDATE_PRODUCT = YES;
};
name = "Ad-Hoc";
@@ -5891,26 +5765,15 @@
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
GCC_PREPROCESSOR_DEFINITIONS = "";
"GCC_THUMB_SUPPORT[arch=armv7]" = NO;
GCC_VERSION = "";
GCC_VERSION = com.apple.compilers.llvmgcc42;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
HEADER_SEARCH_PATHS = (
"$(SRCROOT)/../../src",
"$(SRCROOT)/../../src/client/gui/components",
"$(SRCROOT)/../../src/world",
"$(SRCROOT)/../../src/platform/input",
"$(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views",
);
HEADER_SEARCH_PATHS = "";
INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
IPHONEOS_DEPLOYMENT_TARGET = 12;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.mojang.mcpe-arm64";
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
PRODUCT_NAME = "$(TARGET_NAME)";
RUN_CLANG_STATIC_ANALYZER = NO;
SDKROOT = iphoneos;
SYSTEM_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../lib_projects/InAppSettingsKit/Models $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
USE_HEADERMAP = NO;
SDKROOT = iphoneos6.0;
VALID_ARCHS = "i386 armv6 armv7";
WRAPPER_EXTENSION = app;
};
name = "Ad-Hoc";
@@ -5983,28 +5846,24 @@
D5A20ADB146AAD9C00A52FEC /* AppStore */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = YES;
ARCHS = "$(ARCHS_STANDARD)";
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Mojang AB";
COPY_PHASE_STRIP = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_VERSION = "";
GCC_VERSION = com.apple.compilers.llvmgcc42;
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
IPHONEOS_DEPLOYMENT_TARGET = 12;
ONLY_ACTIVE_ARCH = YES;
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "64BA8967-1A9A-4980-972C-42E75AD5E023";
RUN_CLANG_STATIC_ANALYZER = NO;
SDKROOT = iphoneos;
SDKROOT = iphoneos6.0;
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
USE_HEADERMAP = NO;
VALIDATE_PRODUCT = YES;
};
name = AppStore;
@@ -6017,19 +5876,11 @@
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
GCC_PREPROCESSOR_DEFINITIONS = PUBLISH;
"GCC_THUMB_SUPPORT[arch=armv7]" = NO;
GCC_VERSION = "";
GCC_VERSION = com.apple.compilers.llvmgcc42;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
HEADER_SEARCH_PATHS = (
"$(SRCROOT)/../../src",
"$(SRCROOT)/../../src/client/gui/components",
"$(SRCROOT)/../../src/world",
"$(SRCROOT)/../../src/platform/input",
"$(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views",
);
HEADER_SEARCH_PATHS = "";
INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
IPHONEOS_DEPLOYMENT_TARGET = 12;
ONLY_ACTIVE_ARCH = YES;
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
OTHER_CFLAGS = (
"-DNS_BLOCK_ASSERTIONS=1",
"-DANDROID_PUBLISH",
@@ -6037,10 +5888,8 @@
PRODUCT_NAME = "$(TARGET_NAME)";
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "1B194957-98CF-49B7-A0E7-76692B4B722D";
RUN_CLANG_STATIC_ANALYZER = NO;
SDKROOT = iphoneos;
SYSTEM_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../lib_projects/InAppSettingsKit/Models $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
USE_HEADERMAP = NO;
SDKROOT = iphoneos6.0;
VALID_ARCHS = "i386 armv6 armv7";
WRAPPER_EXTENSION = app;
};
name = AppStore;
@@ -6073,8 +5922,8 @@
D5CF9C6C144C225000E4244F /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = YES;
ARCHS = "$(ARCHS_STANDARD)";
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
@@ -6086,50 +5935,41 @@
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_VERSION = "";
GCC_VERSION = com.apple.compilers.llvmgcc42;
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
IPHONEOS_DEPLOYMENT_TARGET = 12;
ONLY_ACTIVE_ARCH = YES;
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
RUN_CLANG_STATIC_ANALYZER = NO;
SDKROOT = iphoneos;
SDKROOT = iphoneos6.0;
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
USE_HEADERMAP = NO;
VALIDATE_PRODUCT = YES;
};
name = Debug;
};
D5CF9C6D144C225000E4244F /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = YES;
ARCHS = "$(ARCHS_STANDARD)";
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_PREPROCESSOR_DEFINITIONS = PUBLISH;
GCC_VERSION = "";
GCC_VERSION = com.apple.compilers.llvmgcc42;
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
IPHONEOS_DEPLOYMENT_TARGET = 12;
ONLY_ACTIVE_ARCH = YES;
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
RUN_CLANG_STATIC_ANALYZER = NO;
SDKROOT = iphoneos;
SDKROOT = iphoneos6.0;
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
USE_HEADERMAP = NO;
VALIDATE_PRODUCT = YES;
};
name = Release;
@@ -6137,34 +5977,19 @@
D5CF9C6F144C225000E4244F /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = PZUVNW8F2U;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
"GCC_THUMB_SUPPORT[arch=armv7]" = NO;
GCC_VERSION = "";
GCC_VERSION = com.apple.compilers.llvmgcc42;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
HEADER_SEARCH_PATHS = (
"$(SRCROOT)/../../src",
"$(SRCROOT)/../../src/client/gui/components",
"$(SRCROOT)/../../src/world",
"$(SRCROOT)/../../src/platform/input",
"$(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views",
);
HEADER_SEARCH_PATHS = "";
INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
IPHONEOS_DEPLOYMENT_TARGET = 12;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.mojang.mcpe-arm64";
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
RUN_CLANG_STATIC_ANALYZER = NO;
SDKROOT = iphoneos;
SYSTEM_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../lib_projects/InAppSettingsKit/Models $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
USE_HEADERMAP = NO;
SDKROOT = iphoneos6.0;
VALID_ARCHS = "i386 armv6 armv7";
WRAPPER_EXTENSION = app;
};
name = Debug;
@@ -6172,34 +5997,19 @@
D5CF9C70144C225000E4244F /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = PZUVNW8F2U;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
GCC_PREPROCESSOR_DEFINITIONS = "";
"GCC_THUMB_SUPPORT[arch=armv7]" = NO;
GCC_VERSION = "";
GCC_VERSION = com.apple.compilers.llvmgcc42;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
HEADER_SEARCH_PATHS = (
"$(SRCROOT)/../../src",
"$(SRCROOT)/../../src/client/gui/components",
"$(SRCROOT)/../../src/world",
"$(SRCROOT)/../../src/platform/input",
"$(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views",
);
HEADER_SEARCH_PATHS = "";
INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
IPHONEOS_DEPLOYMENT_TARGET = 12;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.mojang.mcpe-arm64";
IPHONEOS_DEPLOYMENT_TARGET = 4.3;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
RUN_CLANG_STATIC_ANALYZER = NO;
SDKROOT = iphoneos;
SYSTEM_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src $(SRCROOT)/../lib_projects/InAppSettingsKit/Models $(SRCROOT)/../../src/client/gui/components $(SRCROOT)/../../src/world $(SRCROOT)/../../src/platform/input $(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views";
USE_HEADERMAP = NO;
SDKROOT = iphoneos6.0;
VALID_ARCHS = "i386 armv6 armv7";
WRAPPER_EXTENSION = app;
};
name = Release;

View File

@@ -37,7 +37,7 @@
</dict>
</dict>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<string>com.mojang.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
@@ -58,8 +58,6 @@
<array>
<string>minecraft.ttf</string>
</array>
<key>UILaunchStoryboardName</key>
<string>Launch Screen</string>
<key>UIPrerenderedIcon</key>
<true/>
<key>UIRequiresPersistentWiFi</key>

View File

@@ -52,10 +52,11 @@ public:
virtual StringVector getOptionStrings();
virtual bool isPowerVR();
virtual bool isPowerVR() { return false; }
virtual bool isSuperFast();
virtual void showKeyboard();
virtual void hideKeyboard();
virtual void isPowerVR();
private:
std::string _basePath;

View File

@@ -275,10 +275,8 @@ void AppPlatform_iOS::hideKeyboard() {
[_viewController hideKeyboard];
super::hideKeyboard();
}
// this was originally void but i changed it to bool because void cant return values
bool AppPlatform_iOS::isPowerVR() {
void AppPlatform_iOS::isPowerVR() {
const char* s = (const char*)glGetString(GL_RENDERER);
if (!s) return false;
return strstr(s, "SGX") != NULL;
}
}

View File

@@ -1,21 +0,0 @@
#ifndef NET_MINECRAFT_CLIENT__KeyMapping_H__
#define NET_MINECRAFT_CLIENT__KeyMapping_H__
//package net.minecraft.client;
#include <string>
class KeyMapping
{
public:
std::string name;
int key;
KeyMapping() {}
KeyMapping(const std::string& name_, int key_)
: name(name_),
key(key_)
{}
};
#endif /*NET_MINECRAFT_CLIENT__KeyMapping_H__*/

View File

@@ -90,7 +90,6 @@
#include "../network/command/CommandServer.h"
#include "gamemode/CreatorMode.h"
#include "../world/level/GrassColor.h"
static void checkGlError(const char* tag) {
#ifdef GLDEBUG
while (1) {
@@ -727,6 +726,21 @@ void Minecraft::tickInput() {
if (key == Keyboard::KEY_F3) {
options.toggle(OPTIONS_RENDER_DEBUG);
}
// TODO: replace it with client /give command :face_vomiting:
if (key == Keyboard::KEY_F4) {
player->inventory->add(new ItemInstance(Tile::redBrick));
player->inventory->add(new ItemInstance(Item::ironIngot, 64));
player->inventory->add(new ItemInstance(Item::ironIngot, 34));
player->inventory->add(new ItemInstance(Tile::stonecutterBench));
player->inventory->add(new ItemInstance(Tile::workBench));
player->inventory->add(new ItemInstance(Tile::furnace));
player->inventory->add(new ItemInstance(Tile::wood, 54));
player->inventory->add(new ItemInstance(Item::stick, 14));
player->inventory->add(new ItemInstance(Item::coal, 31));
player->inventory->add(new ItemInstance(Tile::sand, 6));
}
if (key == Keyboard::KEY_F5) {
options.toggle(OPTIONS_THIRD_PERSON_VIEW);
@@ -1106,9 +1120,7 @@ void Minecraft::releaseMouse()
}
bool Minecraft::useTouchscreen() {
#if defined(TARGET_OS_IPHONE)
return true;
#elif defined(RPI)
#ifdef RPI
return false;
#endif
return options.getBooleanValue(OPTIONS_USE_TOUCHSCREEN) && !_supportsNonTouchscreen;
@@ -1128,31 +1140,12 @@ void Minecraft::init()
textures = new Textures(&options, platform());
textures->addDynamicTexture(new WaterTexture());
textures->addDynamicTexture(new WaterSideTexture());
textures->addDynamicTexture(new FireTexture());
gui.texturesLoaded(textures);
levelRenderer = new LevelRenderer(this);
gameRenderer = new GameRenderer(this);
particleEngine = new ParticleEngine(level, textures);
// 4j's code for reference
// FoliageColor::init(textures->loadTexturePixels(L"misc/foliagecolor.png"));
// my code
TextureId foliageId = (textures->loadTexture("misc/foliagecolor.png")); // loading the uh png for foliage color
int* foliagePixels = textures->loadTexturePixels(foliageId, "misc/foliagecolor.png");
// now i can finally initialize foliage color, probably not the best way to handle this but i cant be arsed rn
FoliageColor::init(foliagePixels);
TextureId grassId = (textures->loadTexture("misc/foliagecolor.png")); // loading the uh png for foliage color
int* grassPixels = textures->loadTexturePixels(grassId, "misc/foliagecolor.png");
GrassColor::init(grassPixels);
bool tint = options.getBooleanValue(OPTIONS_FOLIAGE_TINT); // finally, toggleable foliage color
FoliageColor::setUseTint(tint);
GrassColor::setUseTint(tint);
// Platform specific initialization here
font = new Font(&options, "font/default8.png", textures);
@@ -1214,7 +1207,7 @@ void Minecraft::setSize(int w, int h) {
int screenHeight = (int)(height * Gui::InvGuiScale);
// if (platform()) {
// float pixelsPerMillimeter = options.getProgressValue(&Option::PIXELS_PER_MILLIMETER);
// float pixelsPerMillimeter = options.getProgressValue(&Options::Option::PIXELS_PER_MILLIMETER);
// pixelCalc.setPixelsPerMillimeter(pixelsPerMillimeter);
// pixelCalcUi.setPixelsPerMillimeter(pixelsPerMillimeter * Gui::InvGuiScale);
// }
@@ -1403,12 +1396,6 @@ void Minecraft::_levelGenerated()
player->resetPos(false);
}
if (level && level->dimension) {
// For example, if you want FogType or any other option
level->dimension->FogType = options.getBooleanValue(OPTIONS_FOG_TYPE);
}
this->cameraTargetPlayer = player;
std::string serverName = options.getStringValue(OPTIONS_USERNAME) + " - " + level->getLevelData()->levelName;

View File

@@ -120,6 +120,8 @@ public:
void optionUpdated(OptionId option, bool value);
void optionUpdated(OptionId option, float value);
void optionUpdated(OptionId option, int value);
int getTicks() { return ticks; }
#ifdef __APPLE__
bool _isSuperFast;
bool isSuperFast() { return _isSuperFast; }
@@ -197,7 +199,8 @@ public:
std::string externalCacheStoragePath;
protected:
Timer timer;
// @note @attn @warn: this is dangerous as fuck!
// @note @attn @warn: this is dangerous as fuck!
volatile bool isGeneratingLevel;
bool _hasSignaledGeneratingLevelFinished;
@@ -221,7 +224,6 @@ private:
bool _isCreativeMode;
//int _respawnPlayerTicks;
Player* _pendingRemovePlayer; // @attn @todo @fix: remove this shait and fix the respawn behaviour
// shit* lmao
PerfRenderer* _perfRenderer;
CommandServer* _commandServer;

View File

@@ -104,4 +104,4 @@ public:
private:
std::string m_value;
};
};

View File

@@ -60,12 +60,6 @@ OptionBool useTouchscreen("useTouchscreen", true);
OptionBool serverVisible("servervisible", true);
OptionBool foliageTint("foliagetint", false);
OptionInt fogType("fogType", 0, 0, 2);
OptionBool javaHud("javaHud", false);
OptionInt keyForward("key.forward", Keyboard::KEY_W);
OptionInt keyLeft("key.left", Keyboard::KEY_A);
OptionInt keyBack("key.back", Keyboard::KEY_S);
@@ -142,8 +136,6 @@ void Options::initTable() {
m_options[OPTIONS_USE_TOUCHSCREEN] = &useTouchscreen;
m_options[OPTIONS_SERVER_VISIBLE] = &serverVisible;
m_options[OPTIONS_KEY_FORWARD] = &keyForward;
@@ -168,12 +160,6 @@ void Options::initTable() {
m_options[OPTIONS_BAR_ON_TOP] = &barOnTop;
m_options[OPTIONS_ALLOW_SPRINT] = &allowSprint;
m_options[OPTIONS_RPI_CURSOR] = &rpiCursor;
m_options[OPTIONS_FOLIAGE_TINT] = &foliageTint;
// more options yay
m_options[OPTIONS_FOG_TYPE] = &fogType;
m_options[OPTIONS_JAVA_HUD] = &javaHud;
m_options[OPTIONS_AUTOJUMP] = &autoJump;
m_options[OPTIONS_LAST_IP] = &lastIp;

View File

@@ -84,9 +84,6 @@ enum OptionId {
OPTIONS_LAST_IP,
OPTIONS_RPI_CURSOR,
OPTIONS_FOLIAGE_TINT,
OPTIONS_FOG_TYPE,
OPTIONS_JAVA_HUD,
// Should be last!
OPTIONS_COUNT
};
@@ -97,10 +94,6 @@ typedef std::vector<std::string> StringVector;
class Options
{
public:
// deepfriedwaffles: for iOS, was getting compile errors saying: No member named 'sound' in 'Options' and No member named 'music' in 'Options' so I floated them here. 1.0f means full volume out of the box, but if everything is too loud, you might want to try adjusting this
float sound = 1.0f;
float music = 1.0f;
static bool debugGl;
Options(Minecraft* minecraft, const std::string& workingDirectory = "")

View File

@@ -68,6 +68,7 @@ bool SurvivalMode::destroyBlock( int x, int y, int z, int face ) {
minecraft->player->inventory->clearSlot(minecraft->player->inventory->selected);
}
}
if (changed && couldDestroy) {
ItemInstance instance(t, 1, data);
Tile::tiles[t]->playerDestroy(minecraft->level, minecraft->player, x, y, z, data);

View File

@@ -36,7 +36,7 @@ const float Gui::DropTicks = 40.0f;
//#include <android/log.h>
Gui::Gui(Minecraft* minecraft)
: minecraft(minecraft),
: minecraft(minecraft),
tickCount(0),
progress(0),
overlayMessageTime(0),
@@ -77,7 +77,7 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
Font* font = minecraft->font;
const bool isTouchInterface = minecraft->useTouchscreen();
const int screenWidth = (int)(minecraft->width * InvGuiScale);
const int screenHeight = (int)(minecraft->height * InvGuiScale);
blitOffset = -90;
@@ -86,9 +86,9 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
glColor4f2(1, 1, 1, 1);
// H: 4
// T: 7
// L: 6
// F: 3
// T: 7
// L: 6
// F: 3
int ySlot = screenHeight - 16 - 3;
if (!minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
@@ -103,12 +103,6 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
}
}
// @todo - Shredder: I added this here but currently viginette is broken so i cant do much about it.
// if (minecraft->options.getBooleanValue(OPTIONS_FANCY_GRAPHICS)){
// this->renderVignette(this->minecraft->player->getBrightness(a), screenWidth, screenHeight);
// }
// shredder end
if(minecraft->player->getSleepTimer() > 0) {
glDisable(GL_DEPTH_TEST);
glDisable(GL_ALPHA_TEST);
@@ -119,38 +113,38 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
glEnable(GL_DEPTH_TEST);
}
if (!minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
renderToolBar(a, ySlot, screenWidth);
renderToolBar(a, ySlot, screenWidth);
glEnable(GL_BLEND);
bool isChatting = (minecraft->screen && (dynamic_cast<ChatScreen*>(minecraft->screen) || dynamic_cast<ConsoleScreen*>(minecraft->screen)));
unsigned int max = 10;
if (isChatting) {
int lineHeight = 9;
max = (screenHeight - 48) / lineHeight;
if (max < 1) max = 1;
int maxScroll = (int)guiMessages.size() - (int)max;
if (maxScroll < 0) maxScroll = 0;
if (chatScrollOffset > maxScroll) chatScrollOffset = maxScroll;
} else {
chatScrollOffset = 0;
}
renderChatMessages(screenHeight, max, isChatting, font);
glEnable(GL_BLEND);
bool isChatting = (minecraft->screen && (dynamic_cast<ChatScreen*>(minecraft->screen) || dynamic_cast<ConsoleScreen*>(minecraft->screen)));
unsigned int max = 10;
if (isChatting) {
int lineHeight = 9;
max = (screenHeight - 48) / lineHeight;
if (max < 1) max = 1;
int maxScroll = (int)guiMessages.size() - (int)max;
if (maxScroll < 0) maxScroll = 0;
if (chatScrollOffset > maxScroll) chatScrollOffset = maxScroll;
} else {
chatScrollOffset = 0;
}
renderChatMessages(screenHeight, max, isChatting, font);
#if !defined(RPI)
renderOnSelectItemNameText(screenWidth, font, ySlot);
renderOnSelectItemNameText(screenWidth, font, ySlot);
#endif
#if defined(RPI)
renderDebugInfo();
renderDebugInfo();
#endif
if (Keyboard::isKeyDown(Keyboard::KEY_TAB)) {
renderPlayerList(font, screenWidth, screenHeight);
}
if (minecraft->options.getBooleanValue(OPTIONS_RENDER_DEBUG))
renderDebugInfo();
if (Keyboard::isKeyDown(Keyboard::KEY_TAB)) {
renderPlayerList(font, screenWidth, screenHeight);
}
glDisable(GL_BLEND);
if (minecraft->options.getBooleanValue(OPTIONS_RENDER_DEBUG))
renderDebugInfo();
}
glDisable(GL_BLEND);
glEnable2(GL_ALPHA_TEST);
}
@@ -189,7 +183,7 @@ void Gui::getSlotPos(int slot, int& posX, int& posY) {
int screenWidth = (int)(minecraft->width * InvGuiScale);
int screenHeight = (int)(minecraft->height * InvGuiScale);
posX = screenWidth / 2 - getNumSlots() * 10 + slot * 20,
posY = screenHeight - 22;
posY = screenHeight - 22;
}
RectangleArea Gui::getRectangleArea(int extendSide) {
@@ -202,7 +196,7 @@ RectangleArea Gui::getRectangleArea(int extendSide) {
return RectangleArea(0, (float)minecraft->height-pHeight, pCenterX+pHalfWidth+2, (float)minecraft->height);
if (extendSide > 0)
return RectangleArea(pCenterX-pHalfWidth, (float)minecraft->height-pHeight, (float)minecraft->width, (float)minecraft->height);
return RectangleArea(pCenterX-pHalfWidth, (float)minecraft->height-pHeight, pCenterX+pHalfWidth+2, (float)minecraft->height);
}
@@ -248,7 +242,7 @@ void Gui::handleKeyPressed(int key)
if (key == Keyboard::KEY_F1) {
minecraft->options.toggle(OPTIONS_HIDEGUI);
}
if (key == 99)
{
if (minecraft->player->inventory->selected > 0)
@@ -296,11 +290,11 @@ void Gui::tick() {
if(itemNameOverlayTime < 2)
itemNameOverlayTime += 1.0f / SharedConstants::TicksPerSecond;
for (unsigned int i = 0; i < guiMessages.size(); i++) {
guiMessages.at(i).ticks++;
guiMessages.at(i).ticks++;
}
if (!minecraft->isCreativeMode())
tickItemDrop();
if (!minecraft->isCreativeMode())
tickItemDrop();
}
void Gui::addMessage(const std::string& _string) {
@@ -350,8 +344,6 @@ void Gui::displayClientMessage(const std::string& messageId) {
addMessage(messageId);
}
// @todo - shredder: Function seems to be completely fine and ported over from java beta, but renders opaque??? need to investigate
void Gui::renderVignette(float br, int w, int h) {
br = 1 - br;
if (br < 0) br = 0;
@@ -362,10 +354,7 @@ void Gui::renderVignette(float br, int w, int h) {
glDepthMask(false);
glBlendFunc2(GL_ZERO, GL_ONE_MINUS_SRC_COLOR);
glColor4f2(tbr, tbr, tbr, 1);
minecraft->textures->loadAndBindTexture("misc/vignette.png");
glTexParameteri2(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri2(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
Tesselator& t = Tesselator::instance;
t.begin();
@@ -418,7 +407,7 @@ void Gui::inventoryUpdated() {
}
void Gui::onGraphicsReset() {
inventoryUpdated();
inventoryUpdated();
}
void Gui::texturesLoaded( Textures* textures ) {
@@ -596,12 +585,12 @@ void Gui::renderProgressIndicator( const bool isTouchInterface, const int screen
bool bowEquipped = currentItem != NULL ? currentItem->getItem() == Item::bow : false;
bool itemInUse = currentItem != NULL ? currentItem->getItem() == minecraft->player->getUseItem()->getItem() : false;
if ((!isTouchInterface || minecraft->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA)
|| (bowEquipped && itemInUse)) && !minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
minecraft->textures->loadAndBindTexture("gui/icons.png");
glEnable(GL_BLEND);
glBlendFunc2(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);
blit(screenWidth/2 - 8, screenHeight/2 - 8, 0, 0, 16, 16);
glDisable(GL_BLEND);
|| (bowEquipped && itemInUse)) && !minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
minecraft->textures->loadAndBindTexture("gui/icons.png");
glEnable(GL_BLEND);
glBlendFunc2(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);
blit(screenWidth/2 - 8, screenHeight/2 - 8, 0, 0, 16, 16);
glDisable(GL_BLEND);
} else if(!bowEquipped) {
const float tprogress = minecraft->gameMode->destroyProgress;
const float alpha = Mth::clamp(minecraft->inputHolder->alpha, 0.0f, 1.0f);
@@ -676,10 +665,10 @@ void Gui::renderHearts() {
int ip2 = i + i + 1;
if (armor > 0) {
int xo = xx + 80 + i * 8 + 4;
if (ip2 < armor) blit(xo, yo, 16 + 2 * 9, 9 * 1, 9, 9);
else if (ip2 == armor) blit(xo, yo, 16 + 4 * 9, 9 * 1, 9, 9);
else if (ip2 > armor) blit(xo, yo, 16 + 0 * 9, 9 * 1, 9, 9);
int xo = xx + 80 + i * 8 + 4;
if (ip2 < armor) blit(xo, yo, 16 + 2 * 9, 9 * 1, 9, 9);
else if (ip2 == armor) blit(xo, yo, 16 + 4 * 9, 9 * 1, 9, 9);
else if (ip2 > armor) blit(xo, yo, 16 + 0 * 9, 9 * 1, 9, 9);
}
int bg = 0;
@@ -702,7 +691,7 @@ void Gui::renderBubbles() {
if (minecraft->player->isUnderLiquid(Material::water)) {
int screenWidth = (int)(minecraft->width * InvGuiScale);
int screenHeight = (int)(minecraft->height * InvGuiScale);
int xx = (minecraft->options.getBooleanValue(OPTIONS_BAR_ON_TOP)) ? screenWidth / 2 - getNumSlots() * 10 - 1 : 2;
int yo = (minecraft->options.getBooleanValue(OPTIONS_BAR_ON_TOP)) ? screenHeight - 42 : 12;
int count = (int) std::ceil((minecraft->player->airSupply - 2) * 10.0f / Player::TOTAL_AIR_SUPPLY);
@@ -921,64 +910,64 @@ void Gui::renderOnSelectItemNameText( const int screenWidth, Font* font, int ySl
// helper structure used by drawColoredString
struct ColorSegment {
std::string text;
uint32_t color;
std::string text;
uint32_t color;
};
// parse [tag] and [/tag] markers; tags may contain a color name (gold, green, etc.)
static void parseColorTags(const std::string& in, std::vector<ColorSegment>& out) {
uint32_t curColor = 0xffffff;
size_t pos = 0;
while (pos < in.size()) {
size_t open = in.find('[', pos);
if (open == std::string::npos) {
out.push_back({in.substr(pos), curColor});
break;
}
if (open > pos) {
out.push_back({in.substr(pos, open - pos), curColor});
}
size_t close = in.find(']', open);
if (close == std::string::npos) {
out.push_back({in.substr(open), curColor});
break;
}
std::string tag = in.substr(open + 1, close - open - 1);
if (!tag.empty() && tag[0] == '/') {
curColor = 0xffffff;
} else {
std::string lower;
lower.resize(tag.size());
std::transform(tag.begin(), tag.end(), lower.begin(), ::tolower);
if (lower.find("gold") != std::string::npos) curColor = 0xffd700;
else if (lower.find("green") != std::string::npos) curColor = 0x00ff00;
else if (lower.find("yellow") != std::string::npos) curColor = 0xffff00;
else if (lower.find("red") != std::string::npos) curColor = 0xff0000;
else if (lower.find("blue") != std::string::npos) curColor = 0x0000ff;
}
pos = close + 1;
}
uint32_t curColor = 0xffffff;
size_t pos = 0;
while (pos < in.size()) {
size_t open = in.find('[', pos);
if (open == std::string::npos) {
out.push_back({in.substr(pos), curColor});
break;
}
if (open > pos) {
out.push_back({in.substr(pos, open - pos), curColor});
}
size_t close = in.find(']', open);
if (close == std::string::npos) {
out.push_back({in.substr(open), curColor});
break;
}
std::string tag = in.substr(open + 1, close - open - 1);
if (!tag.empty() && tag[0] == '/') {
curColor = 0xffffff;
} else {
std::string lower;
lower.resize(tag.size());
std::transform(tag.begin(), tag.end(), lower.begin(), ::tolower);
if (lower.find("gold") != std::string::npos) curColor = 0xffd700;
else if (lower.find("green") != std::string::npos) curColor = 0x00ff00;
else if (lower.find("yellow") != std::string::npos) curColor = 0xffff00;
else if (lower.find("red") != std::string::npos) curColor = 0xff0000;
else if (lower.find("blue") != std::string::npos) curColor = 0x0000ff;
}
pos = close + 1;
}
}
void Gui::drawColoredString(Font* font, const std::string& text, float x, float y, int alpha) {
std::vector<ColorSegment> segs;
parseColorTags(text, segs);
float cx = x;
for (auto &s : segs) {
int color = s.color + (alpha << 24);
font->drawShadow(s.text, cx, y, color);
cx += font->width(s.text);
}
std::vector<ColorSegment> segs;
parseColorTags(text, segs);
float cx = x;
for (auto &s : segs) {
int color = s.color + (alpha << 24);
font->drawShadow(s.text, cx, y, color);
cx += font->width(s.text);
}
}
float Gui::getColoredWidth(Font* font, const std::string& text) {
std::vector<ColorSegment> segs;
parseColorTags(text, segs);
float w = 0;
for (auto &s : segs) {
w += font->width(s.text);
}
return w;
std::vector<ColorSegment> segs;
parseColorTags(text, segs);
float w = 0;
for (auto &s : segs) {
w += font->width(s.text);
}
return w;
}
void Gui::renderChatMessages( const int screenHeight, unsigned int max, bool isChatting, Font* font ) {
@@ -1022,13 +1011,13 @@ void Gui::renderChatMessages( const int screenHeight, unsigned int max, bool isC
glEnable(GL_BLEND);
// special-case join/leave announcements
int baseColor = 0xffffff;
if (msg.find(" joined the game") != std::string::npos ||
msg.find(" left the game") != std::string::npos) {
baseColor = 0xffff00; // yellow
}
// replace previous logic; allow full colour tags now
Gui::drawColoredString(font, msg, x, y, alpha);
int baseColor = 0xffffff;
if (msg.find(" joined the game") != std::string::npos ||
msg.find(" left the game") != std::string::npos) {
baseColor = 0xffff00; // yellow
}
// replace previous logic; allow full colour tags now
Gui::drawColoredString(font, msg, x, y, alpha);
}
}
}
@@ -1116,41 +1105,22 @@ void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
// Draw count
//Tesselator& t = Tesselator::instance;
glPushMatrix2();
glScalef2(InvGuiScale + InvGuiScale, InvGuiScale + InvGuiScale, 1);
const float k = 0.5f * GuiScale;
if (minecraft->options.getBooleanValue(OPTIONS_JAVA_HUD)) // if true enables the java beta item count size and color and calls the java items decorations
{
t.beginOverride();
if (minecraft->gameMode->isSurvivalType()) {
x = baseItemX;
for (int i = 0; i < slots; i++) {
ItemInstance* item = minecraft->player->inventory->getItem(i);
if (item && item->count >= 0)
ItemRenderer::renderGuiItemDecorations(minecraft->font, minecraft->textures, minecraft->player->inventory->getItem(i), x, (float)ySlot);
x += 20;
}
t.beginOverride();
if (minecraft->gameMode->isSurvivalType()) {
x = baseItemX;
for (int i = 0; i < slots; i++) {
ItemInstance* item = minecraft->player->inventory->getItem(i);
if (item && item->count >= 0)
renderSlotText(item, k*x, k*ySlot + 1, true, true);
x += 20;
}
minecraft->textures->loadAndBindTexture("font/default8.png");
t.endOverrideAndDraw();
}
else { // otherwise uses the normal pocket edition one
glPushMatrix2();
glScalef2(InvGuiScale + InvGuiScale, InvGuiScale + InvGuiScale, 1);
t.beginOverride();
if (minecraft->gameMode->isSurvivalType()) {
x = baseItemX;
for (int i = 0; i < slots; i++) {
ItemInstance* item = minecraft->player->inventory->getItem(i);
if (item && item->count >= 0)
renderSlotText(item, k*x, k*ySlot, true, true);
x += 20;
}
}
minecraft->textures->loadAndBindTexture("font/default8.png");
t.endOverrideAndDraw();
glPopMatrix2();
}
minecraft->textures->loadAndBindTexture("font/default8.png");
t.endOverrideAndDraw();
glPopMatrix2();
}

View File

@@ -1,64 +0,0 @@
#include "OptionsPane.h"
#include "OptionsGroup.h"
#include "OptionsItem.h"
#include "ImageButton.h"
#include "Slider.h"
#include "../../Minecraft.h"
#include "client/Options.h"
OptionsPane::OptionsPane() {
}
void OptionsPane::setupPositions() {
int currentHeight = y + 1;
for(std::vector<GuiElement*>::iterator it = children.begin(); it != children.end(); ++it ) {
(*it)->width = width;
(*it)->y = currentHeight;
(*it)->x = x;
currentHeight += (*it)->height + 1;
}
height = currentHeight;
super::setupPositions();
}
OptionsGroup& OptionsPane::createOptionsGroup( std::string label ) {
OptionsGroup* newGroup = new OptionsGroup(label);
children.push_back(newGroup);
// create and return a new group index
return *newGroup;
}
void OptionsPane::createToggle( unsigned int group, std::string label, OptionId option ) {
if(group > children.size()) return;
ImageDef def;
def.setSrc(IntRectangle(160, 206, 39, 20));
def.name = "gui/touchgui.png";
def.width = 39 * 0.7f;
def.height = 20 * 0.7f;
OptionButton* element = new OptionButton(option);
element->setImageDef(def, true);
OptionsItem* item = new OptionsItem(option, label, element);
((OptionsGroup*)children[group])->addChild(item);
setupPositions();
}
void OptionsPane::createProgressSlider( Minecraft* minecraft, unsigned int group, std::string label, OptionId option, float progressMin/*=1.0f*/, float progressMax/*=1.0f */ ) {
if(group > children.size()) return;
Slider* element = new SliderFloat(minecraft, option);
element->width = 100;
element->height = 20;
OptionsItem* item = new OptionsItem(option, label, element);
((OptionsGroup*)children[group])->addChild(item);
setupPositions();
}
void OptionsPane::createStepSlider( Minecraft* minecraft, unsigned int group, std::string label, OptionId option, const std::vector<int>& stepVec ) {
if(group > children.size()) return;
Slider* element = new SliderInt(minecraft, option);
element->width = 100;
element->height = 20;
OptionsItem* item = new OptionsItem(option, label, element);
((OptionsGroup*)children[group])->addChild(item);
setupPositions();
}

View File

@@ -1,30 +0,0 @@
#ifndef ITEMPANE_H__
#define ITEMPANE_H__
#include <string>
#include <vector>
#include "GuiElementContainer.h"
#include "../../../world/item/ItemInstance.h"
#include "../../../client/Options.h"
class Font;
class Textures;
class NinePatchLayer;
class ItemPane;
class OptionButton;
class Button;
class OptionsGroup;
class Slider;
class Minecraft;
class OptionsPane: public GuiElementContainer
{
typedef GuiElementContainer super;
public:
OptionsPane();
OptionsGroup& createOptionsGroup( std::string label );
void createToggle( unsigned int group, std::string label, OptionId option );
void createProgressSlider(Minecraft* minecraft, unsigned int group, std::string label, OptionId option, float progressMin=1.0f, float progressMax=1.0f );
void createStepSlider(Minecraft* minecraft, unsigned int group, std::string label, OptionId option, const std::vector<int>& stepVec );
void setupPositions();
};
#endif /*ITEMPANE_H__*/

View File

@@ -3,6 +3,7 @@
#include "GuiElement.h"
#include "../../../client/Options.h"
#include <client/Option.h>
class Slider : public GuiElement {
typedef GuiElement super;

View File

@@ -1,24 +0,0 @@
#include "SmallButton.h"
SmallButton::SmallButton( int id, int x, int y, const std::string& msg )
: super(id, x, y, 150, 20, msg),
option(NULL)
{
}
SmallButton::SmallButton( int id, int x, int y, int width, int height, const std::string& msg )
: super(id, x, y, width, height, msg),
option(NULL)
{
}
SmallButton::SmallButton( int id, int x, int y, Option* item, const std::string& msg )
: super(id, x, y, 150, 20, msg),
option(item)
{
}
Option* SmallButton::getOption()
{
return option;
}

View File

@@ -1,23 +0,0 @@
#ifndef NET_MINECRAFT_CLIENT_GUI_COMPONENTS__SmallButton_H__
#define NET_MINECRAFT_CLIENT_GUI_COMPONENTS__SmallButton_H__
//package net.minecraft.client.gui;
#include <string>
#include "Button.h"
#include "../../Options.h"
class SmallButton: public Button
{
typedef Button super;
public:
SmallButton(int id, int x, int y, const std::string& msg);
SmallButton(int id, int x, int y, int width, int height, const std::string& msg);
SmallButton(int id, int x, int y, Option* item, const std::string& msg);
Option* getOption();
private:
Option* option;
};
#endif /*NET_MINECRAFT_CLIENT_GUI_COMPONENTS__SmallButton_H__*/

View File

@@ -1,26 +0,0 @@
#ifndef NET_MINECRAFT_CLIENT_GUI_SCREENS__BuyGameScreen_H__
#define NET_MINECRAFT_CLIENT_GUI_SCREENS__BuyGameScreen_H__
#include "../Screen.h"
#include "../components/Button.h"
class BuyGameScreen: public Screen
{
public:
BuyGameScreen() {}
virtual ~BuyGameScreen() {}
void init();
void render(int xm, int ym, float a);
void buttonClicked(Button* button) {
//if (button->id == bQuit.id)
}
private:
//Button bQuit;
//Button bBuyGame;
};
#endif /*NET_MINECRAFT_CLIENT_GUI_SCREENS__BuyGameScreen_H__*/

View File

@@ -1,107 +0,0 @@
#ifndef NET_MINECRAFT_CLIENT_GUI_SCREENS__InvalidLicenseScreen_H__
#define NET_MINECRAFT_CLIENT_GUI_SCREENS__InvalidLicenseScreen_H__
#include "../Screen.h"
#include "../components/Button.h"
#include "../../Minecraft.h"
#include "../../../LicenseCodes.h"
class InvalidLicenseScreen: public Screen
{
public:
InvalidLicenseScreen(int id, bool hasBuyButton)
: _id(id),
_hasBuyButton(hasBuyButton),
_baseY(0),
bOk(0),
bBuy(0)
{
}
virtual ~InvalidLicenseScreen() {
delete bOk;
delete bBuy;
}
void init() {
if (minecraft->useTouchscreen()) {
bOk = new Touch::TButton(1, "Ok");
bBuy = new Touch::TButton(2, "Buy");
} else {
bOk = new Button(1, "Ok");
bBuy = new Button(2, "Buy");
}
if (_hasBuyButton)
bOk->msg = "Quit";
if (!LicenseCodes::isOk(_id)) {
char buf[20] = {0};
sprintf(buf, "%d", _id);
desc1 = "License verification failed (error ";
desc1 += buf;
desc1 += ")";
desc2 = "Try again later.";
hint = "You need to be connected to the internet\n";
hint += "once while you start the game.";
}
buttons.push_back(bOk);
tabButtons.push_back(bOk);
if (_hasBuyButton) {
buttons.push_back(bBuy);
tabButtons.push_back(bBuy);
}
}
void setupPositions() {
_baseY = height/5 + 6;
//if (_hasBuyButton)
_baseY -= 24;
bOk->width = bBuy->width = 200;
bOk->x = bBuy->x = (width - bOk->width) / 2;
bBuy->y = _baseY + 84;
bOk->y = bBuy->y + bBuy->height + 4;
if (!_hasBuyButton)
bOk->y -= 24;
}
void tick() {}
//void keyPressed(int eventKey) {}
void render(int xm, int ym, float a) {
renderDirtBackground(0);
drawCenteredString(minecraft->font, desc1, width/2, _baseY, 0xffffff);
drawCenteredString(minecraft->font, desc2, width/2, _baseY + 24, 0xffffff);
drawCenteredString(minecraft->font, hint, width/2, _baseY + 60, 0xffffff);
Screen::render(xm, ym, a);
}
void buttonClicked(Button* button) {
if (button->id == bOk->id) {
minecraft->quit();
}
if (button->id == bBuy->id) {
minecraft->platform()->buyGame();
}
};
private:
int _id;
std::string desc1;
std::string desc2;
std::string hint;
Button* bOk;
Button* bBuy;
bool _hasBuyButton;
int _baseY;
};
#endif /*NET_MINECRAFT_CLIENT_GUI_SCREENS__InvalidLicenseScreen_H__*/

View File

@@ -2,8 +2,8 @@
#include "../Screen.h"
#include "../components/Button.h"
#include "../../Minecraft.h"
#include "../components/ImageButton.h"
#include "../components/TextBox.h"
#include "client/gui/components/ImageButton.h"
#include "client/gui/components/TextBox.h"
class JoinByIPScreen: public Screen
{
@@ -25,4 +25,4 @@ private:
Touch::THeader bHeader;
Touch::TButton bJoin;
ImageButton bBack;
};
};

View File

@@ -138,7 +138,7 @@ void OptionsScreen::render(int xm, int ym, float a) {
if (currentOptionsGroup != NULL)
currentOptionsGroup->render(minecraft, xmm, ymm);
super::render(xm, ym, a);
}
@@ -216,23 +216,16 @@ void OptionsScreen::generateOptionScreens() {
// // Graphics Pane
optionPanes[3]->addOptionItem(OPTIONS_FANCY_GRAPHICS, minecraft)
// .addOptionItem(&Option::VIEW_BOBBING, minecraft)
// .addOptionItem(&Option::AMBIENT_OCCLUSION, minecraft)
// .addOptionItem(&Option::ANAGLYPH, minecraft)
.addOptionItem(OPTIONS_LIMIT_FRAMERATE, minecraft)
.addOptionItem(OPTIONS_VSYNC, minecraft)
.addOptionItem(OPTIONS_RENDER_DEBUG, minecraft)
.addOptionItem(OPTIONS_ANAGLYPH_3D, minecraft)
.addOptionItem(OPTIONS_VIEW_BOBBING, minecraft)
.addOptionItem(OPTIONS_AMBIENT_OCCLUSION, minecraft);
optionPanes[4]->addOptionItem(OPTIONS_ALLOW_SPRINT, minecraft)
.addOptionItem(OPTIONS_BAR_ON_TOP, minecraft)
.addOptionItem(OPTIONS_RPI_CURSOR, minecraft)
.addOptionItem(OPTIONS_FOLIAGE_TINT, minecraft)
.addOptionItem(OPTIONS_JAVA_HUD, minecraft)
.addOptionItem(OPTIONS_FOG_TYPE, minecraft);
.addOptionItem(OPTIONS_RPI_CURSOR, minecraft);
}
void OptionsScreen::mouseClicked(int x, int y, int buttonNum) {
@@ -254,7 +247,7 @@ void OptionsScreen::keyPressed(int eventKey) {
currentOptionsGroup->keyPressed(minecraft, eventKey);
if (eventKey == Keyboard::KEY_ESCAPE)
minecraft->options.save();
super::keyPressed(eventKey);
}

View File

@@ -14,7 +14,7 @@
#include "../../Minecraft.h"
#include "UsernameScreen.h"
#include <client/gui/screens/UsernameScreen.h>
Screen* ScreenChooser::createScreen( ScreenId id )
{

View File

@@ -35,8 +35,8 @@ void UsernameScreen::setupPositions()
// Make the done button match the touch-style option tabs
_btnDone.width = 66;
_btnDone.height = 26;
_btnDone.x = cx - (_btnDone.width / 2);
_btnDone.y = cy + 52;
_btnDone.x = (width - _btnDone.width) / 2;
_btnDone.y = height / 2 + 52;
tUsername.width = 120;
tUsername.height = 20;

View File

@@ -3,8 +3,7 @@
#include "../Screen.h"
#include "../components/Button.h"
// this is cursed lol
#include "../../../client/gui/components/TextBox.h"
#include "client/gui/components/TextBox.h"
#include <string>
class UsernameScreen : public Screen

View File

@@ -16,7 +16,12 @@
#include "../../../../world/level/Level.h"
#include "../../../../world/item/DyePowderItem.h"
#include "../../../../world/item/crafting/Recipe.h"
#include "network/RakNetInstance.h"
#include "network/packet/WantCreatePacket.h"
#include "platform/input/Keyboard.h"
#include <cstdint>
#include <iostream>
#include <string>
static NinePatchLayer* guiPaneFrame = NULL;
@@ -193,6 +198,26 @@ void PaneCraftingScreen::setupPositions() {
}
void PaneCraftingScreen::tick() {
if (minecraft->isOnline()) {
// TODO: Make better algorithm
static std::map<uint8_t, uint16_t> oldMap = {};
std::map<uint8_t, uint16_t> newMap = {};
for (int i = Inventory::MAX_SELECTION_SIZE; i < minecraft->player->inventory->getContainerSize(); ++i) {
auto itm = minecraft->player->inventory->getItem(i);
if (itm != NULL) {
newMap[itm->id] += itm->count;
}
}
if (oldMap != newMap) {
oldMap = newMap;
newMap = {};
recheckRecipes();
}
}
if (pane) pane->tick();
}
@@ -439,25 +464,29 @@ void PaneCraftingScreen::craftSelectedItem()
ItemInstance resultItem = currentItem->item;
if (minecraft->player) {
if (minecraft->isOnline()) {
WantCreatePacket packet(minecraft->player->entityId, resultItem.count, resultItem.getAuxValue(), resultItem.id);
minecraft->raknetInstance->send(packet);
}
// Remove all items required for the recipe and ...
for (unsigned int i = 0; i < currentItem->neededItems.size(); ++i) {
CItem::ReqItem& req = currentItem->neededItems[i];
// If the recipe allows any aux-value as ingredients, first deplete
// aux == 0 from inventory. Since I'm not sure if this always is
// correct, let's only do it for ingredient sandstone for now.
ItemInstance toRemove = req.item;
// If the recipe allows any aux-value as ingredients, first deplete
// aux == 0 from inventory. Since I'm not sure if this always is
// correct, let's only do it for ingredient sandstone for now.
ItemInstance toRemove = req.item;
if (Tile::sandStone->id == req.item.id
&& Recipe::ANY_AUX_VALUE == req.item.getAuxValue()) {
toRemove.setAuxValue(0);
toRemove.count = minecraft->player->inventory->removeResource(toRemove, true);
toRemove.setAuxValue(Recipe::ANY_AUX_VALUE);
}
if (Tile::sandStone->id == req.item.id
&& Recipe::ANY_AUX_VALUE == req.item.getAuxValue()) {
toRemove.setAuxValue(0);
toRemove.count = minecraft->player->inventory->removeResource(toRemove, true);
toRemove.setAuxValue(Recipe::ANY_AUX_VALUE);
}
if (toRemove.count > 0) {
minecraft->player->inventory->removeResource(toRemove);
}
if (toRemove.count > 0) {
minecraft->player->inventory->removeResource(toRemove);
}
}
// ... add the new one! (in this order, to fill empty slots better)
// if it doesn't fit, throw it on the ground!

View File

@@ -456,7 +456,7 @@ void LocalPlayer::tick() {
{
sentInventoryItemId = newItemId;
sentInventoryItemData = newItemData;
PlayerEquipmentPacket packet(entityId, newItemId, newItemData);
PlayerEquipmentPacket packet(entityId, newItemId, newItemData, inventory->selected, inventory->getSlot(newItemId, newItemData));
minecraft->raknetInstance->send(packet);
}
}

View File

@@ -7,10 +7,6 @@
#include "../../world/level/Region.h"
#include "../../world/level/chunk/LevelChunk.h"
#include "../../util/Mth.h"
#include "../../world/level/biome/BiomeSource.h"
#include "../../world/level/Level.h"
//#include "../../platform/time.h"
/*static*/ int Chunk::updates = 0;
@@ -263,4 +259,4 @@ void Chunk::resetUpdates()
{
updates = 0;
//swRebuild.reset();
}
}

View File

@@ -25,8 +25,6 @@
#include "../../client/player/LocalPlayer.h"
#include "../../world/level/GrassColor.h"
#ifdef GFX_SMALLER_CHUNKS
/* static */ const int LevelRenderer::CHUNK_SIZE = 8;
#else
@@ -34,7 +32,7 @@
#endif
LevelRenderer::LevelRenderer( Minecraft* mc)
: mc(mc),
: mc(mc),
textures(mc->textures),
level(NULL),
cullStep(0),
@@ -49,7 +47,6 @@ LevelRenderer::LevelRenderer( Minecraft* mc)
xMaxChunk(0), yMaxChunk(0), zMaxChunk(0),
lastViewDistance(-1),
lastFogType(-1),
noEntityRenderFrames(2),
totalEntities(0),
@@ -146,10 +143,6 @@ void LevelRenderer::setLevel( Level* level )
level->addListener(this);
allChanged();
}
if (mc->options.getBooleanValue(OPTIONS_AMBIENT_OCCLUSION)) {
mc->useAmbientOcclusion = !mc->useAmbientOcclusion;
allChanged();
}
}
void LevelRenderer::allChanged()
@@ -162,21 +155,14 @@ void LevelRenderer::allChanged()
Tile::leaves_carried->setFancy(fancy);
lastViewDistance = mc->options.getIntValue(OPTIONS_VIEW_DISTANCE);
lastFogType = mc->options.getIntValue(OPTIONS_FOG_TYPE);
bool tint = mc->options.getBooleanValue(OPTIONS_FOLIAGE_TINT);
FoliageColor::setUseTint(tint);
GrassColor::setUseTint(tint);
int dist = (512 >> 3) << (3 - lastViewDistance);
if (lastViewDistance <= 2 && mc->isPowerVR())
dist = (int)((float)dist * 0.8f);
LOGI("last: %d, power: %d\n", lastViewDistance, mc->isPowerVR());
#if defined(RPI)
dist *= 0.6f;
#endif
#if defined(RPI)
dist *= 0.6f;
#endif
if (dist > 400) dist = 400;
/*
@@ -241,17 +227,17 @@ void LevelRenderer::allChanged()
void LevelRenderer::deleteChunks()
{
for (int z = 0; z < zChunks; ++z)
for (int y = 0; y < yChunks; ++y)
for (int x = 0; x < xChunks; ++x) {
int c = getLinearCoord(x, y, z);
delete chunks[c];
}
for (int y = 0; y < yChunks; ++y)
for (int x = 0; x < xChunks; ++x) {
int c = getLinearCoord(x, y, z);
delete chunks[c];
}
delete[] chunks;
chunks = NULL;
delete[] chunks;
chunks = NULL;
delete[] sortedChunks;
sortedChunks = NULL;
delete[] sortedChunks;
sortedChunks = NULL;
}
void LevelRenderer::resortChunks( int xc, int yc, int zc )
@@ -315,17 +301,6 @@ int LevelRenderer::render( Mob* player, int layer, float alpha )
allChanged();
}
int currentFogType = mc->options.getIntValue(OPTIONS_FOG_TYPE);
if (currentFogType != lastFogType) {
lastFogType = currentFogType;
if (level && level->dimension) {
level->dimension->FogType = currentFogType; // use new fog stuff
}
allChanged();
}
TIMER_PUSH("sortchunks");
for (int i = 0; i < 10; i++) {
chunkFixOffs = (chunkFixOffs + 1) % chunksLength;
@@ -594,11 +569,11 @@ int LevelRenderer::renderChunks( int from, int to, int layer, float alpha )
for (unsigned int i = 0; i < _renderChunks.size(); ++i) {
Chunk* chunk = _renderChunks[i];
#ifdef USE_VBO
renderList.addR(chunk->getRenderChunk(layer));
#else
renderList.add(chunk->getList(layer));
#endif
#ifdef USE_VBO
renderList.addR(chunk->getRenderChunk(layer));
#else
renderList.add(chunk->getList(layer));
#endif
renderList.next();
}
@@ -749,20 +724,20 @@ bool LevelRenderer::updateDirtyChunks( Mob* player, bool force )
Chunk* chunk = dirtyChunks[cursor];
if (chunk != NULL) {
bool remove = false;
for (int i = 0; i < count && !remove; i++)
if (chunk == toAdd[i]) {
remove = true;
}
for (int i = 0; i < count && !remove; i++)
if (chunk == toAdd[i]) {
remove = true;
}
if (!remove) {
//if (chunk == toAdd[0] || chunk == toAdd[1] || chunk == toAdd[2]) {
// ; // this chunk was rendered and should be removed
//} else {
if (target != cursor) {
dirtyChunks[target] = chunk;
}
target++;
if (!remove) {
//if (chunk == toAdd[0] || chunk == toAdd[1] || chunk == toAdd[2]) {
// ; // this chunk was rendered and should be removed
//} else {
if (target != cursor) {
dirtyChunks[target] = chunk;
}
target++;
}
}
cursor++;
}
@@ -936,23 +911,23 @@ bool entityRenderPredicate(const Entity* a, const Entity* b) {
}
void LevelRenderer::renderEntities(Vec3 cam, Culler* culler, float a) {
if (noEntityRenderFrames > 0) {
noEntityRenderFrames--;
return;
}
if (noEntityRenderFrames > 0) {
noEntityRenderFrames--;
return;
}
TIMER_PUSH("prepare");
TileEntityRenderDispatcher::getInstance()->prepare(level, textures, mc->font, mc->cameraTargetPlayer, a);
EntityRenderDispatcher::getInstance()->prepare(level, mc->font, mc->cameraTargetPlayer, &mc->options, a);
TileEntityRenderDispatcher::getInstance()->prepare(level, textures, mc->font, mc->cameraTargetPlayer, a);
EntityRenderDispatcher::getInstance()->prepare(level, mc->font, mc->cameraTargetPlayer, &mc->options, a);
totalEntities = 0;
renderedEntities = 0;
culledEntities = 0;
totalEntities = 0;
renderedEntities = 0;
culledEntities = 0;
Entity* player = mc->cameraTargetPlayer;
EntityRenderDispatcher::xOff = TileEntityRenderDispatcher::xOff = (player->xOld + (player->x - player->xOld) * a);
EntityRenderDispatcher::yOff = TileEntityRenderDispatcher::yOff = (player->yOld + (player->y - player->yOld) * a);
EntityRenderDispatcher::zOff = TileEntityRenderDispatcher::zOff = (player->zOld + (player->z - player->zOld) * a);
EntityRenderDispatcher::xOff = TileEntityRenderDispatcher::xOff = (player->xOld + (player->x - player->xOld) * a);
EntityRenderDispatcher::yOff = TileEntityRenderDispatcher::yOff = (player->yOld + (player->y - player->yOld) * a);
EntityRenderDispatcher::zOff = TileEntityRenderDispatcher::zOff = (player->zOld + (player->z - player->zOld) * a);
glEnableClientState2(GL_VERTEX_ARRAY);
glEnableClientState2(GL_TEXTURE_COORD_ARRAY);
@@ -991,10 +966,10 @@ void LevelRenderer::renderEntities(Vec3 cam, Culler* culler, float a) {
delete[] toRender;
}
TIMER_POP_PUSH("tileentities");
for (unsigned int i = 0; i < level->tileEntities.size(); i++) {
TileEntityRenderDispatcher::getInstance()->render(level->tileEntities[i], a);
}
TIMER_POP_PUSH("tileentities");
for (unsigned int i = 0; i < level->tileEntities.size(); i++) {
TileEntityRenderDispatcher::getInstance()->render(level->tileEntities[i], a);
}
glDisableClientState2(GL_VERTEX_ARRAY);
glDisableClientState2(GL_TEXTURE_COORD_ARRAY);
@@ -1005,7 +980,7 @@ void LevelRenderer::renderEntities(Vec3 cam, Culler* culler, float a) {
std::string LevelRenderer::gatherStats1() {
std::stringstream ss;
ss << "C: " << renderedChunks << "/" << totalChunks << ". F: " << offscreenChunks << ", O: " << occludedChunks << ", E: " << emptyChunks << "\n";
return ss.str();
return ss.str();
}
//
@@ -1017,34 +992,34 @@ std::string LevelRenderer::gatherStats1() {
// IntBuffer resultBuffer = MemoryTracker.createIntBuffer(64);
void LevelRenderer::renderSky(float alpha) {
if (mc->level->dimension->foggy) return;
if (mc->level->dimension->foggy) return;
glDisable2(GL_TEXTURE_2D);
Vec3 sc = level->getSkyColor(mc->cameraTargetPlayer, alpha);
float sr = (float) sc.x;
float sg = (float) sc.y;
float sb = (float) sc.z;// + 0.5f;
glDisable2(GL_TEXTURE_2D);
Vec3 sc = level->getSkyColor(mc->cameraTargetPlayer, alpha);
float sr = (float) sc.x;
float sg = (float) sc.y;
float sb = (float) sc.z;// + 0.5f;
if (mc->options.getBooleanValue(OPTIONS_ANAGLYPH_3D)) {
float srr = (sr * 30.0f + sg * 59.0f + sb * 11.0f) / 100.0f;
float sgg = (sr * 30.0f + sg * 70.0f) / (100.0f);
float sbb = (sr * 30.0f + sb * 70.0f) / (100.0f);
if (mc->options.getBooleanValue(OPTIONS_ANAGLYPH_3D)) {
float srr = (sr * 30.0f + sg * 59.0f + sb * 11.0f) / 100.0f;
float sgg = (sr * 30.0f + sg * 70.0f) / (100.0f);
float sbb = (sr * 30.0f + sb * 70.0f) / (100.0f);
sr = srr;
sg = sgg;
sb = sbb;
}
glColor4f2(sr, sg, Mth::Min(1.0f, sb), 1);
sr = srr;
sg = sgg;
sb = sbb;
}
glColor4f2(sr, sg, Mth::Min(1.0f, sb), 1);
//Tesselator& t = Tesselator::instance;
//Tesselator& t = Tesselator::instance;
glEnable2(GL_FOG);
glColor4f2(sr, sg, sb, 1.0f);
glEnable2(GL_FOG);
glColor4f2(sr, sg, sb, 1.0f);
#ifdef OPENGL_ES
drawArrayVT(skyBuffer, skyVertexCount);
#endif
glEnable2(GL_TEXTURE_2D);
glEnable2(GL_TEXTURE_2D);
}
void LevelRenderer::renderClouds( float alpha ) {
@@ -1058,7 +1033,7 @@ void LevelRenderer::renderClouds( float alpha ) {
//glBindTexture(GL_TEXTURE_2D, texturesloadTexture("/environment/clouds.png"));
textures->loadAndBindTexture("environment/clouds.png");
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
@@ -1101,17 +1076,17 @@ void LevelRenderer::playSound(const std::string& name, float x, float y, float z
// @todo: deny sounds here if sound is off (rather than waiting 'til SoundEngine)
float dd = 16;
if (volume > 1) dd *= volume;
if (mc->cameraTargetPlayer->distanceToSqr(x, y, z) < dd * dd) {
mc->soundEngine->play(name, x, y, z, volume, pitch);
}
if (volume > 1) dd *= volume;
if (mc->cameraTargetPlayer->distanceToSqr(x, y, z) < dd * dd) {
mc->soundEngine->play(name, x, y, z, volume, pitch);
}
}
void LevelRenderer::addParticle(const std::string& name, float x, float y, float z, float xa, float ya, float za, int data) {
float xd = mc->cameraTargetPlayer->x - x;
float yd = mc->cameraTargetPlayer->y - y;
float zd = mc->cameraTargetPlayer->z - z;
float yd = mc->cameraTargetPlayer->y - y;
float zd = mc->cameraTargetPlayer->z - z;
float distanceSquared = xd * xd + yd * yd + zd * zd;
//Particle* p = NULL;
@@ -1125,27 +1100,27 @@ void LevelRenderer::addParticle(const std::string& name, float x, float y, float
// return;
//}
const float particleDistance = 16;
if (distanceSquared > particleDistance * particleDistance) return;
const float particleDistance = 16;
if (distanceSquared > particleDistance * particleDistance) return;
//static Stopwatch sw;
//sw.start();
if (name == "bubble") mc->particleEngine->add(new BubbleParticle(level, x, y, z, xa, ya, za));
if (name == "bubble") mc->particleEngine->add(new BubbleParticle(level, x, y, z, xa, ya, za));
else if (name == "crit") mc->particleEngine->add(new CritParticle2(level, x, y, z, xa, ya, za));
else if (name == "smoke") mc->particleEngine->add(new SmokeParticle(level, x, y, z, xa, ya, za));
//else if (name == "note") mc->particleEngine->add(new NoteParticle(level, x, y, z, xa, ya, za));
else if (name == "explode") mc->particleEngine->add(new ExplodeParticle(level, x, y, z, xa, ya, za));
else if (name == "flame") mc->particleEngine->add(new FlameParticle(level, x, y, z, xa, ya, za));
else if (name == "lava") mc->particleEngine->add(new LavaParticle(level, x, y, z));
//else if (name == "splash") mc->particleEngine->add(new SplashParticle(level, x, y, z, xa, ya, za));
//else if (name == "note") mc->particleEngine->add(new NoteParticle(level, x, y, z, xa, ya, za));
else if (name == "explode") mc->particleEngine->add(new ExplodeParticle(level, x, y, z, xa, ya, za));
else if (name == "flame") mc->particleEngine->add(new FlameParticle(level, x, y, z, xa, ya, za));
else if (name == "lava") mc->particleEngine->add(new LavaParticle(level, x, y, z));
//else if (name == "splash") mc->particleEngine->add(new SplashParticle(level, x, y, z, xa, ya, za));
else if (name == "largesmoke") mc->particleEngine->add(new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f));
else if (name == "reddust") mc->particleEngine->add(new RedDustParticle(level, x, y, z, xa, ya, za));
else if (name == "reddust") mc->particleEngine->add(new RedDustParticle(level, x, y, z, xa, ya, za));
else if (name == "iconcrack") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]));
else if (name == "snowballpoof") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::snowBall));
//else if (name == "snowballpoof") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::snowBall));
//else if (name == "slime") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::slimeBall));
//else if (name == "heart") mc->particleEngine->add(new HeartParticle(level, x, y, z, xa, ya, za));
//else if (name == "snowballpoof") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::snowBall));
//else if (name == "slime") mc->particleEngine->add(new BreakingItemParticle(level, x, y, z, Item::slimeBall));
//else if (name == "heart") mc->particleEngine->add(new HeartParticle(level, x, y, z, xa, ya, za));
//sw.stop();
//sw.printEvery(50, "add-particle-string");
@@ -1153,53 +1128,53 @@ void LevelRenderer::addParticle(const std::string& name, float x, float y, float
/*
void LevelRenderer::addParticle(ParticleType::Id name, float x, float y, float z, float xa, float ya, float za, int data) {
float xd = mc->cameraTargetPlayer->x - x;
float yd = mc->cameraTargetPlayer->y - y;
float zd = mc->cameraTargetPlayer->z - z;
float xd = mc->cameraTargetPlayer->x - x;
float yd = mc->cameraTargetPlayer->y - y;
float zd = mc->cameraTargetPlayer->z - z;
const float particleDistance = 16;
if (xd * xd + yd * yd + zd * zd > particleDistance * particleDistance) return;
const float particleDistance = 16;
if (xd * xd + yd * yd + zd * zd > particleDistance * particleDistance) return;
//static Stopwatch sw;
//sw.start();
//static Stopwatch sw;
//sw.start();
//Particle* p = NULL;
//Particle* p = NULL;
if (name == ParticleType::bubble) mc->particleEngine->add( new BubbleParticle(level, x, y, z, xa, ya, za) );
else if (name == ParticleType::crit) mc->particleEngine->add(new CritParticle2(level, x, y, z, xa, ya, za) );
else if (name == ParticleType::smoke) mc->particleEngine->add(new SmokeParticle(level, x, y, z, xa, ya, za) );
else if (name == ParticleType::explode) mc->particleEngine->add( new ExplodeParticle(level, x, y, z, xa, ya, za) );
else if (name == ParticleType::flame) mc->particleEngine->add( new FlameParticle(level, x, y, z, xa, ya, za) );
else if (name == ParticleType::lava) mc->particleEngine->add( new LavaParticle(level, x, y, z) );
else if (name == ParticleType::largesmoke) mc->particleEngine->add( new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f) );
else if (name == ParticleType::reddust) mc->particleEngine->add( new RedDustParticle(level, x, y, z, xa, ya, za) );
else if (name == ParticleType::iconcrack) mc->particleEngine->add( new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]) );
if (name == ParticleType::bubble) mc->particleEngine->add( new BubbleParticle(level, x, y, z, xa, ya, za) );
else if (name == ParticleType::crit) mc->particleEngine->add(new CritParticle2(level, x, y, z, xa, ya, za) );
else if (name == ParticleType::smoke) mc->particleEngine->add(new SmokeParticle(level, x, y, z, xa, ya, za) );
else if (name == ParticleType::explode) mc->particleEngine->add( new ExplodeParticle(level, x, y, z, xa, ya, za) );
else if (name == ParticleType::flame) mc->particleEngine->add( new FlameParticle(level, x, y, z, xa, ya, za) );
else if (name == ParticleType::lava) mc->particleEngine->add( new LavaParticle(level, x, y, z) );
else if (name == ParticleType::largesmoke) mc->particleEngine->add( new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f) );
else if (name == ParticleType::reddust) mc->particleEngine->add( new RedDustParticle(level, x, y, z, xa, ya, za) );
else if (name == ParticleType::iconcrack) mc->particleEngine->add( new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]) );
//switch (name) {
// case ParticleType::bubble: p = new BubbleParticle(level, x, y, z, xa, ya, za); break;
// case ParticleType::crit: p = new CritParticle2(level, x, y, z, xa, ya, za); break;
// case ParticleType::smoke: p = new SmokeParticle(level, x, y, z, xa, ya, za); break;
// //case ParticleType::note: p = new NoteParticle(level, x, y, z, xa, ya, za); break;
// case ParticleType::explode: p = new ExplodeParticle(level, x, y, z, xa, ya, za); break;
// case ParticleType::flame: p = new FlameParticle(level, x, y, z, xa, ya, za); break;
// case ParticleType::lava: p = new LavaParticle(level, x, y, z); break;
// //case ParticleType::splash: p = new SplashParticle(level, x, y, z, xa, ya, za); break;
// case ParticleType::largesmoke: p = new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f); break;
// case ParticleType::reddust: p = new RedDustParticle(level, x, y, z, xa, ya, za); break;
// case ParticleType::iconcrack: p = new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]); break;
// //case ParticleType::snowballpoof: p = new BreakingItemParticle(level, x, y, z, Item::snowBall); break;
// //case ParticleType::slime: p = new BreakingItemParticle(level, x, y, z, Item::slimeBall); break;
// //case ParticleType::heart: p = new HeartParticle(level, x, y, z, xa, ya, za); break;
// default:
// LOGW("Couldn't find particle of type: %d\n", name);
// break;
//}
//if (p) {
// mc->particleEngine->add(p);
//}
//switch (name) {
// case ParticleType::bubble: p = new BubbleParticle(level, x, y, z, xa, ya, za); break;
// case ParticleType::crit: p = new CritParticle2(level, x, y, z, xa, ya, za); break;
// case ParticleType::smoke: p = new SmokeParticle(level, x, y, z, xa, ya, za); break;
// //case ParticleType::note: p = new NoteParticle(level, x, y, z, xa, ya, za); break;
// case ParticleType::explode: p = new ExplodeParticle(level, x, y, z, xa, ya, za); break;
// case ParticleType::flame: p = new FlameParticle(level, x, y, z, xa, ya, za); break;
// case ParticleType::lava: p = new LavaParticle(level, x, y, z); break;
// //case ParticleType::splash: p = new SplashParticle(level, x, y, z, xa, ya, za); break;
// case ParticleType::largesmoke: p = new SmokeParticle(level, x, y, z, xa, ya, za, 2.5f); break;
// case ParticleType::reddust: p = new RedDustParticle(level, x, y, z, xa, ya, za); break;
// case ParticleType::iconcrack: p = new BreakingItemParticle(level, x, y, z, xa, ya, za, Item::items[data]); break;
// //case ParticleType::snowballpoof: p = new BreakingItemParticle(level, x, y, z, Item::snowBall); break;
// //case ParticleType::slime: p = new BreakingItemParticle(level, x, y, z, Item::slimeBall); break;
// //case ParticleType::heart: p = new HeartParticle(level, x, y, z, xa, ya, za); break;
// default:
// LOGW("Couldn't find particle of type: %d\n", name);
// break;
//}
//if (p) {
// mc->particleEngine->add(p);
//}
//sw.stop();
//sw.printEvery(50, "add-particle-enum");
//sw.stop();
//sw.printEvery(50, "add-particle-enum");
}
*/
@@ -1217,7 +1192,7 @@ void LevelRenderer::renderHitSelect( Player* player, const HitResult& h, int mod
glEnable2(GL_DEPTH_TEST);
textures->loadAndBindTexture("terrain.png");
int tileId = level->getTile(h.x, h.y, h.z);
Tile* tile = tileId > 0 ? Tile::tiles[tileId] : NULL;
glDisable2(GL_ALPHA_TEST);
@@ -1314,11 +1289,11 @@ void LevelRenderer::takePicture( TripodCamera* cam, Entity* entity )
void LevelRenderer::levelEvent(Player* player, int type, int x, int y, int z, int data) {
switch (type) {
case LevelEvent::SOUND_OPEN_DOOR:
if (Mth::random() < 0.5f) {
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, "random.door_open", 1, level->random.nextFloat() * 0.1f + 0.9f);
} else {
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, "random.door_close", 1, level->random.nextFloat() * 0.1f + 0.9f);
}
break;
if (Mth::random() < 0.5f) {
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, "random.door_open", 1, level->random.nextFloat() * 0.1f + 0.9f);
} else {
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, "random.door_close", 1, level->random.nextFloat() * 0.1f + 0.9f);
}
break;
}
}

View File

@@ -113,9 +113,6 @@ private:
bool occlusionCheck;
int lastViewDistance;
// shredder added again...
int lastFogType;
int ticks;
int starList, skyList, darkList;

View File

@@ -249,37 +249,6 @@ int Textures::crispBlend( int c0, int c1 )
return (a << 24) | (r << 16) | (g << 8) | b;
}
// shredder here, moved the code from minecraft.cpp bcus that isnt the right place
// had to implement this because i couldn't find a similar function in the code to do this
int* Textures::loadTexturePixels(TextureId texId, const std::string& resourceName){
const TextureData* texture = getTemporaryTextureData(texId); // storing raw pixels
int size = texture->w * texture->h; // gets the size of our funny lil guy
int* pixels = new int[size]; // memory leaks be galore
unsigned char* raw = texture->data; // storing raw data into our beloved variable
for (int i = 0; i < (texture->w * texture->h); i++){
// my head hurts i hate working with this
// uh since each pixel stores r g b a, aka the color channels which are each one byte, we multiply them by 4 to move from one pixel to another
int r = raw[i * 4 + 0]; // gets us the first channel aka red
int g = raw[i * 4 + 1]; // gets us the second channel green
int b = raw[i * 4 + 2]; // gets us the third channel blue
int a = raw[i * 4 + 3]; // gets us the alpha channel
// woohoo pixels uh should have been seperated into their colors now hopefully
// r g b a
// ugh we now got to turn it into the AA RR GGBB format aak 0xAARRGGBB
// b gets 0 - 7 (8 bits), g gets 7 - 15 (8 bits), r gets 16 - 23 (8 bits), alpha gets the last ones 24 - 31 (8 bits),
pixels[i] = (a << 24) | (r << 16) | (g << 8) | (b); // shuld combine them into one 32 bit int unless i did something dumb
}
return pixels; // your meal has been prepared john colors
}
///*public*/ int loadHttpTexture(std::string url, std::string backup) {
// HttpTexture texture = httpTextures.get(url);
// if (texture != NULL) {

View File

@@ -44,8 +44,6 @@ public:
TextureId assignTexture(const std::string& resourceName, const TextureData& img);
const TextureData* getTemporaryTextureData(TextureId id);
int* loadTexturePixels(TextureId texId, const std::string& resourceName);
void tick(bool uploadToGraphicsCard);
void clear();

View File

@@ -13,7 +13,6 @@
#include "../../world/level/tile/BedTile.h"
#include "../../world/level/tile/StemTile.h"
#include "../../world/level/tile/StairTile.h"
#include "../../world/level/tile/FireTile.h"
#include "../../world/Direction.h"
#include "../../world/Facing.h"
#include "tileentity/TileEntityRenderer.h"
@@ -158,8 +157,8 @@ bool TileRenderer::tesselateInWorld( Tile* tt, int x, int y, int z )
return tesselateRowInWorld(tt, x, y, z);
} else if (shape == Tile::SHAPE_TORCH) {
return tesselateTorchInWorld(tt, x, y, z);
} else if (shape == Tile::SHAPE_FIRE) {
return tesselateFireInWorld(tt, x, y, z);
//} else if (shape == Tile::SHAPE_FIRE) {
// return tesselateFireInWorld(tt, x, y, z);
//} else if (shape == Tile::SHAPE_RED_DUST) {
// return tesselateDustInWorld(tt, x, y, z);
} else if (shape == Tile::SHAPE_LADDER) {
@@ -223,278 +222,6 @@ bool TileRenderer::tesselateTorchInWorld( Tile* tt, int x, int y, int z )
return true;
}
bool TileRenderer::tesselateFireInWorld( Tile* tt, int x, int y, int z )
{
// @todo: fire alpha transparency seems to be scuffed, also it seems i might have messed up the second layer while porting from lce/java , need to look into it - shredder
Tesselator& t = Tesselator::instance;
int tex = tt->getTexture(0);
if (fixedTexture >= 0) tex = fixedTexture;
float br = tt->getBrightness( level, x, y, z );
t.color( br, br, br );
int xt = ((tex & 0xf) << 4);
int yt = tex & 0xf0;
float u0 = (xt) / 256.0f;
float u1 = (xt + 15.99f) / 256.0f;
float v0 = (yt) / 256.0f;
float v1 = (yt + 15.99f) / 256.0f;
float h = 1.4f;
if ( level->isSolidBlockingTile( x, y - 1, z ) || Tile::fire->canBurn( level, x, y - 1, z ) )
{
float x0 = x + 0.5f + 0.2f;
float x1 = x + 0.5f - 0.2f;
float z0 = z + 0.5f + 0.2f;
float z1 = z + 0.5f - 0.2f;
float x0_ = x + 0.5f - 0.3f;
float x1_ = x + 0.5f + 0.3f;
float z0_ = z + 0.5f - 0.3f;
float z1_ = z + 0.5f + 0.3f;
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z + 1 ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z + 1 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z + 0 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z + 0 ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z + 0 ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z + 0 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z + 1 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z + 1 ), ( float )( u0 ), ( float )( v0 ) );
u0 = (xt) / 256.0f;
u1 = (xt + 15.99f) / 256.0f;
v0 = (yt) / 256.0f;
v1 = (yt + 15.99f) / 256.0f;
t.vertexUV( ( float )( x + 1 ), ( float )( y + h ), ( float )( z1_ ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0 ), ( float )( y + h ), ( float )( z1_ ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 0 ), ( float )( y + h ), ( float )( z0_ ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1 ), ( float )( y + h ), ( float )( z0_ ), ( float )( u0 ), ( float )( v0 ) );
x0 = x + 0.5f - 0.5f;
x1 = x + 0.5f + 0.5f;
z0 = z + 0.5f - 0.5f;
z1 = z + 0.5f + 0.5f;
x0_ = x + 0.5f - 0.4f;
x1_ = x + 0.5f + 0.4f;
z0_ = z + 0.5f - 0.4f;
z1_ = z + 0.5f + 0.4f;
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z + 0 ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z + 0 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z + 1 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z + 1 ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z + 1 ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z + 1 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x1 ), ( float )( y + 0 ), ( float )( z + 0 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z + 0 ), ( float )( u1 ), ( float )( v0 ) );
u0 = (xt) / 256.0f;
u1 = (xt + 15.99f) / 256.0f;
v0 = (yt) / 256.0f;
v1 = (yt + 15.99f) / 256.0f;
t.vertexUV( ( float )( x + 0 ), ( float )( y + h ), ( float )( z1_ ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1 ), ( float )( y + h ), ( float )( z1_ ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 1 ), ( float )( y + h ), ( float )( z0_ ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 1 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0 ), ( float )( y + 0 ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0 ), ( float )( y + h ), ( float )( z0_ ), ( float )( u1 ), ( float )( v0 ) );
}
else
{
float r = 0.2f;
float yo = 1 / 16.0f;
if ( ( ( x + y + z ) & 1 ) == 1 )
{
u0 = (xt) / 256.0f;
u1 = (xt + 15.99f) / 256.0f;
v0 = (yt) / 256.0f;
v1 = (yt + 15.99f) / 256.0f;
}
if ( ( ( x / 2 + y / 2 + z / 2 ) & 1 ) == 1 )
{
float tmp = u1;
u1 = u0;
u0 = tmp;
}
if ( Tile::fire->canBurn( level, x - 1, y, z ) )
{
t.vertexUV( ( float )( x + r ), ( float )( y + h + yo ), ( float )( z +
1.0f ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
1.0f ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
0.0f ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + r ), ( float )( y + h + yo ), ( float )( z +
0.0f ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + r ), ( float )( y + h + yo ), ( float )( z +
0.0f ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
0.0f ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
1.0f ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + r ), ( float )( y + h + yo ), ( float )( z +
1.0f ), ( float )( u1 ), ( float )( v0 ) );
}
if ( Tile::fire->canBurn( level, x + 1, y, z ) )
{
t.vertexUV( ( float )( x + 1 - r ), ( float )( y + h + yo ), ( float )( z +
0.0f ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 1 - 0 ), ( float )( y + 0 + yo ), ( float )( z +
0.0f ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1 - 0 ), ( float )( y + 0 + yo ), ( float )( z +
1.0f ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1 - r ), ( float )( y + h + yo ), ( float )( z +
1.0f ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 1.0f - r ), ( float )( y + h + yo ), ( float )( z +
1.0f ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 1.0f - 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
1.0f ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1.0f - 0 ), ( float )( y + 0.0f + yo ), ( float )( z +
0.0f ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1.0f - r ), ( float )( y + h + yo ), ( float )( z +
0.0f ), ( float )( u0 ), ( float )( v0 ) );
}
if ( Tile::fire->canBurn( level, x, y, z - 1 ) )
{
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + h + yo ), ( float )( z +
r ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
0.0f ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
0.0f ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + h + yo ), ( float )( z +
r ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + h + yo ), ( float )( z +
r ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
0.0f ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z +
0.0f ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + h + yo ), ( float )( z +
r ), ( float )( u1 ), ( float )( v0 ) );
}
if ( Tile::fire->canBurn( level, x, y, z + 1 ) )
{
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + h + yo ), ( float )( z + 1.0f -
r ), ( float )( u0 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + 0.0f + yo ), ( float )( z + 1.0f -
0.0f ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z + 1.0f -
0.0f ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + h + yo ), ( float )( z + 1.0f -
r ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + h + yo ), ( float )( z + 1.0f -
r ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y + 0.0f + yo ), ( float )( z + 1.0f -
0.0f ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + 0.0f + yo ), ( float )( z + 1.0f -
0.0f ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1.0f ), ( float )( y + h + yo ), ( float )( z + 1.0f -
r ), ( float )( u0 ), ( float )( v0 ) );
}
if ( Tile::fire->canBurn( level, x, y + 1.0f, z ) )
{
double x0 = x + 0.5f + 0.5f;
double x1 = x + 0.5f - 0.5f;
double z0 = z + 0.5f + 0.5f;
double z1 = z + 0.5f - 0.5f;
double x0_ = x + 0.5f - 0.5f;
double x1_ = x + 0.5f + 0.5f;
double z0_ = z + 0.5f - 0.5f;
double z1_ = z + 0.5f + 0.5f;
u0 = (xt) / 256.0f;
u1 = (xt + 15.99f) / 256.0f;
v0 = (yt) / 256.0f;
v1 = (yt + 15.99f) / 256.0f;
y += 1;
h = -0.2f;
if ( ( ( x + y + z ) & 1 ) == 0 )
{
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z +
0 ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z +
0 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x0 ), ( float )( y + 0 ), ( float )( z +
1 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x0_ ), ( float )( y + h ), ( float )( z +
1 ), ( float )( u0 ), ( float )( v0 ) );
u0 = (xt) / 256.0f;
u1 = (xt + 15.99f) / 256.0f;
v0 = (yt) / 256.0f;
v1 = (yt + 15.99f) / 256.0f;
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z +
1.0f ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x1 ), ( float )( y + 0.0f ), ( float )( z +
1.0f ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x1 ), ( float )( y + 0.0f ), ( float )( z +
0 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x1_ ), ( float )( y + h ), ( float )( z +
0 ), ( float )( u0 ), ( float )( v0 ) );
}
else
{
t.vertexUV( ( float )( x + 0.0f ), ( float )( y +
h ), ( float )( z1_ ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y +
0.0f ), ( float )( z1 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1.0f ), ( float )( y +
0.0f ), ( float )( z1 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 1.0f ), ( float )( y +
h ), ( float )( z1_ ), ( float )( u0 ), ( float )( v0 ) );
u0 = (xt) / 256.0f;
u1 = (xt + 15.99f) / 256.0f;
v0 = (yt) / 256.0f;
v1 = (yt + 15.99f) / 256.0f;
t.vertexUV( ( float )( x + 1.0f ), ( float )( y +
h ), ( float )( z0_ ), ( float )( u1 ), ( float )( v0 ) );
t.vertexUV( ( float )( x + 1.0f ), ( float )( y +
0.0f ), ( float )( z0 ), ( float )( u1 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y +
0.0f ), ( float )( z0 ), ( float )( u0 ), ( float )( v1 ) );
t.vertexUV( ( float )( x + 0.0f ), ( float )( y +
h ), ( float )( z0_ ), ( float )( u0 ), ( float )( v0 ) );
}
}
}
return true;
}
bool TileRenderer::tesselateLadderInWorld( Tile* tt, int x, int y, int z )
{
Tesselator& t = Tesselator::instance;

View File

@@ -34,8 +34,6 @@ public:
bool tesselateFenceGateInWorld(FenceGateTile* tt, int x, int y, int z);
bool tesselateBedInWorld(Tile *tt, int x, int y, int z);
bool tesselateRowInWorld(Tile* tt, int x, int y, int z);
bool tesselateFireInWorld(Tile* tt, int x, int y, int z);
void tesselateTorch(Tile* tt, float x, float y, float z, float xxa, float zza);
void tesselateCrossTexture(Tile* tt, int data, float x, float y, float z);

View File

@@ -40,18 +40,18 @@ EntityRenderDispatcher::EntityRenderDispatcher()
{
//@note: The Models (model/armor) will be deleted by resp. MobRenderer
assign( ER_ITEM_RENDERER, new ItemRenderer());
assign( ER_HUMANOID_RENDERER, new HumanoidMobRenderer(new HumanoidModel(), 0.5));
assign( ER_PIG_RENDERER, new PigRenderer(new PigModel(0.5), NULL/*new PigModel(0.5f)*/, 0.7));
assign( ER_COW_RENDERER, new MobRenderer(new CowModel(), 0.7));
assign( ER_CHICKEN_RENDERER, new ChickenRenderer( new ChickenModel(), 0.3));
assign( ER_SHEEP_RENDERER, new SheepRenderer(new SheepModel(), new SheepFurModel(), 0.7));
assign( ER_HUMANOID_RENDERER, new HumanoidMobRenderer(new HumanoidModel(), 0));
assign( ER_PIG_RENDERER, new PigRenderer(new PigModel(), NULL/*new PigModel(0.5f)*/, 0));
assign( ER_COW_RENDERER, new MobRenderer(new CowModel(), 0));
assign( ER_CHICKEN_RENDERER, new ChickenRenderer( new ChickenModel(), 0));
assign( ER_SHEEP_RENDERER, new SheepRenderer(new SheepModel(), new SheepFurModel(), 0));
assign( ER_SKELETON_RENDERER, new HumanoidMobRenderer(new SkeletonModel(), 0.5f));
assign( ER_ZOMBIE_RENDERER, new HumanoidMobRenderer(new ZombieModel(), 0.5f));
assign( ER_CREEPER_RENDERER, new CreeperRenderer());
assign( ER_SPIDER_RENDERER, new SpiderRenderer());
assign( ER_TNT_RENDERER, new TntRenderer());
assign( ER_ARROW_RENDERER, new ArrowRenderer());
assign( ER_PLAYER_RENDERER, new PlayerRenderer(new HumanoidModel(0, 0, 64, 64), 0.5));
assign( ER_PLAYER_RENDERER, new PlayerRenderer(new HumanoidModel(0, 0, 64, 64), 0));
assign( ER_THROWNEGG_RENDERER, new ItemSpriteRenderer(Item::egg->getIcon(0)));
assign( ER_SNOWBALL_RENDERER, new ItemSpriteRenderer(Item::snowBall->getIcon(0)));
assign( ER_PAINTING_RENDERER, new PaintingRenderer());
@@ -133,7 +133,7 @@ void EntityRenderDispatcher::render( Entity* entity, float x, float y, float z,
EntityRenderer* renderer = getRenderer(entity);
if (renderer != NULL) {
renderer->render(entity, x, y, z, rot, a);
renderer->postRender(entity, x, y, z, rot, a);
//renderer->postRender(entity, x, y, z, rot, a);
}
}

View File

@@ -5,17 +5,11 @@
#include "../gles.h"
#include "../../../world/phys/AABB.h"
#include "EntityRenderDispatcher.h"
#include "../../../util/Mth.h"
#include "../../../world/level/Level.h"
#include "../../../world/level/tile/Tile.h"
#include "../../Minecraft.h"
#include "../../Option.h"
EntityRenderDispatcher* EntityRenderer::entityRenderDispatcher = NULL;
EntityRenderer::EntityRenderer()
: shadowRadius(0),
: shadowRadius(0),
shadowStrength(1.0f)
{}
@@ -42,37 +36,37 @@ void EntityRenderer::render(const AABB& bb, float xo, float yo, float zo) {
glColor4f2(1, 1, 1, 1);
t.begin();
t.offset(xo, yo, zo);
t.normal(0, 0, -1);
//t.normal(0, 0, -1);
t.vertex(bb.x0, bb.y1, bb.z0);
t.vertex(bb.x1, bb.y1, bb.z0);
t.vertex(bb.x1, bb.y0, bb.z0);
t.vertex(bb.x0, bb.y0, bb.z0);
t.normal(0, 0, 1);
//t.normal(0, 0, 1);
t.vertex(bb.x0, bb.y0, bb.z1);
t.vertex(bb.x1, bb.y0, bb.z1);
t.vertex(bb.x1, bb.y1, bb.z1);
t.vertex(bb.x0, bb.y1, bb.z1);
t.normal(0, -1, 0);
//t.normal(0, -1, 0);
t.vertex(bb.x0, bb.y0, bb.z0);
t.vertex(bb.x1, bb.y0, bb.z0);
t.vertex(bb.x1, bb.y0, bb.z1);
t.vertex(bb.x0, bb.y0, bb.z1);
t.normal(0, 1, 0);
//t.normal(0, 1, 0);
t.vertex(bb.x0, bb.y1, bb.z1);
t.vertex(bb.x1, bb.y1, bb.z1);
t.vertex(bb.x1, bb.y1, bb.z0);
t.vertex(bb.x0, bb.y1, bb.z0);
t.normal(-1, 0, 0);
//t.normal(-1, 0, 0);
t.vertex(bb.x0, bb.y0, bb.z1);
t.vertex(bb.x0, bb.y1, bb.z1);
t.vertex(bb.x0, bb.y1, bb.z0);
t.vertex(bb.x0, bb.y0, bb.z0);
t.normal(1, 0, 0);
//t.normal(1, 0, 0);
t.vertex(bb.x1, bb.y0, bb.z0);
t.vertex(bb.x1, bb.y1, bb.z0);
t.vertex(bb.x1, bb.y1, bb.z1);
@@ -122,139 +116,134 @@ Font* EntityRenderer::getFont() {
return entityRenderDispatcher->getFont();
}
void EntityRenderer::postRender(Entity* entity, float x, float y, float z, float rot, float a) {
if (/*entityRenderDispatcher.options.fancyGraphics &&*/entityRenderDispatcher->minecraft->options.getBooleanValue(OPTIONS_FANCY_GRAPHICS) && shadowRadius > 0) {
float dist = entityRenderDispatcher->distanceToSqr(entity->x, entity->y, entity->z);
float pow = (float) ((1 - dist / (16.0f * 16.0f)) * shadowStrength);
if (pow > 0) {
renderShadow(entity, x, y, z, pow, a);
}
//}
if (entity->isOnFire()) renderFlame(entity, x, y, z, a);
}
}
void EntityRenderer::renderFlame(Entity* e, float x, float y, float z, float a) {
//void postRender(Entity entity, float x, float y, float z, float rot, float a) {
// if (entityRenderDispatcher.options.fancyGraphics && shadowRadius > 0) {
// float dist = entityRenderDispatcher.distanceToSqr(entity.x, entity.y, entity.z);
// float pow = (float) ((1 - dist / (16.0f * 16.0f)) * shadowStrength);
// if (pow > 0) {
// renderShadow(entity, x, y, z, pow, a);
// }
// }
// if (entity.isOnFire()) renderFlame(entity, x, y, z, a);
//}
int tex = ((Tile*)Tile::fire)->tex;
//void renderFlame(Entity e, float x, float y, float z, float a) {
// glDisable2(GL_LIGHTING);
// int tex = Tile.fire.tex;
int xt = (tex & 0xf) << 4;
int yt = tex & 0xf0;
// int xt = (tex & 0xf) << 4;
// int yt = tex & 0xf0;
float u0 = (xt) / 256.0f;
float u1 = (xt + 15.99f) / 256.0f;
float v0 = (yt) / 256.0f;
float v1 = (yt + 15.99f) / 256.0f;
// float u0 = (xt) / 256.0f;
// float u1 = (xt + 15.99f) / 256.0f;
// float v0 = (yt) / 256.0f;
// float v1 = (yt + 15.99f) / 256.0f;
glPushMatrix2();
glTranslatef2((float) x, (float) y, (float) z);
// glPushMatrix2();
// glTranslatef2((float) x, (float) y, (float) z);
float s = e->bbWidth * 1.4f;
glScalef2(s, s, s);
bindTexture("terrain.png");
Tesselator& t = Tesselator::instance;
// float s = e.bbWidth * 1.4f;
// glScalef2(s, s, s);
// bindTexture("terrain.png");
// Tesselator t = Tesselator.instance;
float r = 1.0f;
float xo = 0.5f;
float yo = 0.0f;
// float r = 1.0f;
// float xo = 0.5f;
// float yo = 0.0f;
float h = e->bbHeight / e->bbWidth;
// float h = e.bbHeight / e.bbWidth;
glRotatef2(-entityRenderDispatcher->playerRotY, 0, 1, 0);
glTranslatef2(0, 0, -0.4f + ((int) h) * 0.02f);
glColor4f2(1, 1, 1, 1);
// glRotatef2(-playerRotX, 1, 0, 0);
t.begin();
while (h > 0) {
t.vertexUV(r - xo, 0 - yo, 0, u1, v1);
t.vertexUV(0 - xo, 0 - yo, 0, u0, v1);
t.vertexUV(0 - xo, 1.4f - yo, 0, u0, v0);
t.vertexUV(r - xo, 1.4f - yo, 0, u1, v0);
h -= 1;
yo -= 1;
r *= 0.9f;
glTranslatef2(0, 0, -0.04f);
}
t.draw();
glPopMatrix2();
// glEnable2(GL_LIGHTING);
}
// glRotatef2(-entityRenderDispatcher.playerRotY, 0, 1, 0);
// glTranslatef2(0, 0, -0.4f + ((int) h) * 0.02f);
// glColor4f2(1, 1, 1, 1);
// // glRotatef2(-playerRotX, 1, 0, 0);
// t.begin();
// while (h > 0) {
// t.vertexUV(r - xo, 0 - yo, 0, u1, v1);
// t.vertexUV(0 - xo, 0 - yo, 0, u0, v1);
// t.vertexUV(0 - xo, 1.4f - yo, 0, u0, v0);
// t.vertexUV(r - xo, 1.4f - yo, 0, u1, v0);
// h -= 1;
// yo -= 1;
// r *= 0.9f;
// glTranslatef2(0, 0, -0.04f);
// }
// t.end();
// glPopMatrix2();
// glEnable2(GL_LIGHTING);
//}
void EntityRenderer::renderShadow(Entity* e, float x, float y, float z, float pow, float a) { //
glEnable2(GL_BLEND);
glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//void renderShadow(Entity e, float x, float y, float z, float pow, float a) {
// glEnable2(GL_BLEND);
// glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//Textures* textures = entityRenderDispatcher->textures;
//textures->bind(textures->loadTexture("%clamp%/environment/shadow.png"));
Textures* textures = entityRenderDispatcher->textures;
textures->bind(textures->loadTexture("/misc/shadow.png"));
// Textures textures = entityRenderDispatcher.textures;
// textures.bind(textures.loadTexture("%clamp%/misc/shadow.png"));
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
// Level level = getLevel();
Level* level = getLevel();
// glDepthMask(false);
// float r = shadowRadius;
glDepthMask(false);
float r = shadowRadius;
// float ex = e.xOld + (e.x - e.xOld) * a;
// float ey = e.yOld + (e.y - e.yOld) * a + e.getShadowHeightOffs();
// float ez = e.zOld + (e.z - e.zOld) * a;
float ex = e->xOld + (e->x - e->xOld) * a;
float ey = e->yOld + (e->y - e->yOld) * a + e->getShadowHeightOffs();
float ez = e->zOld + (e->z - e->zOld) * a;
// int x0 = Mth.floor(ex - r);
// int x1 = Mth.floor(ex + r);
// int y0 = Mth.floor(ey - r);
// int y1 = Mth.floor(ey);
// int z0 = Mth.floor(ez - r);
// int z1 = Mth.floor(ez + r);
int x0 = Mth::floor(ex - r);
int x1 = Mth::floor(ex + r);
int y0 = Mth::floor(ey - r);
int y1 = Mth::floor(ey);
int z0 = Mth::floor(ez - r);
int z1 = Mth::floor(ez + r);
// float xo = x - ex;
// float yo = y - ey;
// float zo = z - ez;
float xo = x - ex;
float yo = y - ey;
float zo = z - ez;
// Tesselator tt = Tesselator.instance;
// tt.begin();
// for (int xt = x0; xt <= x1; xt++)
// for (int yt = y0; yt <= y1; yt++)
// for (int zt = z0; zt <= z1; zt++) {
// int t = level.getTile(xt, yt - 1, zt);
// if (t > 0 && level.getRawBrightness(xt, yt, zt) > 3) {
// renderTileShadow(Tile.tiles[t], x, y + e.getShadowHeightOffs(), z, xt, yt, zt, pow, r, xo, yo + e.getShadowHeightOffs(), zo);
// }
// }
// tt.end();
Tesselator& tt = Tesselator::instance;
tt.begin();
for (int xt = x0; xt <= x1; xt++)
for (int yt = y0; yt <= y1; yt++)
for (int zt = z0; zt <= z1; zt++) {
int t = level->getTile(xt, yt - 1, zt);
if (t > 0 && level->getRawBrightness(xt, yt, zt) > 3) {
renderTileShadow(Tile::tiles[t], x, y + e->getShadowHeightOffs(), z, xt, yt, zt, pow, r, xo, yo + e->getShadowHeightOffs(), zo);
}
}
tt.draw();
// glColor4f2(1, 1, 1, 1);
// glDisable2(GL_BLEND);
// glDepthMask(true);
//}
glColor4f2(1, 1, 1, 1);
glDisable2(GL_BLEND);
glDepthMask(true);
}
//Level* getLevel() {
// return entityRenderDispatcher.level;
//}
Level* EntityRenderer::getLevel() {
return entityRenderDispatcher->level;
}
//void renderTileShadow(Tile tt, float x, float y, float z, int xt, int yt, int zt, float pow, float r, float xo, float yo, float zo) {
// Tesselator t = Tesselator.instance;
// if (!tt.isCubeShaped()) return;
void EntityRenderer::renderTileShadow(Tile* tt, float x, float y, float z, int xt, int yt, int zt, float pow, float r, float xo, float yo, float zo) {
Tesselator& t = Tesselator::instance;
if (!tt->isCubeShaped()) return;
// float a = ((pow - (y - (yt + yo)) / 2) * 0.5f) * getLevel().getBrightness(xt, yt, zt);
// if (a < 0) return;
// if (a > 1) a = 1;
// t.color(1, 1, 1, (float) a);
// // glColor4f2(1, 1, 1, (float) a);
float a = ((pow - (y - (yt + yo)) / 2) * 0.5f) * getLevel()->getBrightness(xt, yt, zt);
if (a < 0) return;
if (a > 1) a = 1;
// t.color(1, 1, 1, (float) a);
glColor4f2(1, 1, 1, (float) a);
// float x0 = xt + tt.xx0 + xo;
// float x1 = xt + tt.xx1 + xo;
// float y0 = yt + tt.yy0 + yo + 1.0 / 64.0f;
// float z0 = zt + tt.zz0 + zo;
// float z1 = zt + tt.zz1 + zo;
float x0 = xt + tt->xx0 + xo;
float x1 = xt + tt->xx1 + xo;
float y0 = yt + tt->yy0 + yo + 1.0 / 64.0f;
float z0 = zt + tt->zz0 + zo;
float z1 = zt + tt->zz1 + zo;
// float u0 = (float) ((x - (x0)) / 2 / r + 0.5f);
// float u1 = (float) ((x - (x1)) / 2 / r + 0.5f);
// float v0 = (float) ((z - (z0)) / 2 / r + 0.5f);
// float v1 = (float) ((z - (z1)) / 2 / r + 0.5f);
float u0 = (float) ((x - (x0)) / 2 / r + 0.5f);
float u1 = (float) ((x - (x1)) / 2 / r + 0.5f);
float v0 = (float) ((z - (z0)) / 2 / r + 0.5f);
float v1 = (float) ((z - (z1)) / 2 / r + 0.5f);
t.vertexUV(x0, y0, z0, u0, v0);
t.vertexUV(x0, y0, z1, u0, v1);
t.vertexUV(x1, y0, z1, u1, v1);
t.vertexUV(x1, y0, z0, u1, v0);
}
// t.vertexUV(x0, y0, z0, u0, v0);
// t.vertexUV(x0, y0, z1, u0, v1);
// t.vertexUV(x1, y0, z1, u1, v1);
// t.vertexUV(x1, y0, z0, u1, v0);
//}

View File

@@ -12,8 +12,6 @@ class EntityRenderDispatcher;
class Entity;
class AABB;
class Font;
class Tile;
class Level;
class EntityRenderer
{
@@ -26,11 +24,6 @@ public:
virtual void render(Entity* entity, float x, float y, float z, float rot, float a) = 0;
static void render(const AABB& bb, float xo, float yo, float zo);
static void renderFlat(const AABB& bb);
void renderShadow(Entity* e, float x, float y, float z, float pow, float a);
void renderTileShadow(Tile* tt, float x, float y, float z, int xt, int yt, int zt, float pow, float r, float xo, float yo, float zo);
void renderFlame(Entity* e, float x, float y, float z, float a);
void postRender(Entity* entity, float x, float y, float z, float rot, float a);
Level* getLevel();
Font* getFont();

View File

@@ -226,42 +226,7 @@ void ItemRenderer::renderGuiItem(Font* font, Textures* textures, const ItemInsta
t.draw();
}
void ItemRenderer::renderGuiItemDecorations(Font* font, Textures* textures, ItemInstance* item, int x, int y){ // this is normally unused in the header but i ported it from java beta - shredder
if (item != NULL) {
if (item->count > 1) {
char buf[16];
sprintf(buf, "%d", item->count);
std::string countStr = buf;
// glDisable(GL_LIGHTING);
// glDisable(GL_DEPTH_TEST);
font->drawShadow(countStr, x + 19 - 2 - font->width(countStr),
y + 6 + 3, 0xFFFFFF);
// glEnable(GL_LIGHTING);
// glEnable(GL_DEPTH_TEST);
}
if (item->isDamaged()) {
float p = std::floor(13.5f - (float) item->getDamageValue() * 13.0f / (float) item->getMaxDamage() + 0.5);
int cc = (int) std::floor(255.5f - (float) item->getDamageValue() * 255.0f / (float) item->getMaxDamage() + 0.5);
// glDisable(GL_LIGHTING);
// glDisable(GL_DEPTH_TEST);
// glDisable(GL_TEXTURE_2D);
// auto var8 = ::net::minecraft::client::renderer::Tesselator::instance();
Tesselator& t = Tesselator::instance;
int ca = ((255 - cc)<< 16 | (cc << 8));
int cb = (((255 - cc) / 4) << 16 | 16128);
fillRect(t, x + 2, y + 13, 13, 2, 0);
fillRect(t, x + 2, y + 13, 12, 1, cb);
fillRect(t, x + 2, y + 13, p, 1, ca);
// glEnable(GL_TEXTURE_2D);
// glEnable(GL_LIGHTING);
// glEnable(GL_DEPTH_TEST);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
}
}
}
void ItemRenderer::renderGuiItemDecorations(const ItemInstance* item, float x, float y) { // nothing changed here this is the normal pocket edition one.
void ItemRenderer::renderGuiItemDecorations(const ItemInstance* item, float x, float y) {
if (!item) return;
if (item->count > 0 && item->isDamaged()) {
float p = std::floor(13.5f - (float) item->getDamageValue() * 13.0f / (float) item->getMaxDamage());

View File

@@ -22,7 +22,7 @@ public:
static void renderGuiItem(Font* font, Textures* textures, const ItemInstance* item, float x, float y, bool fancy);
static void renderGuiItem(Font* font, Textures* textures, const ItemInstance* item, float x, float y, float w, float h, bool fancy);
static void renderGuiItemCorrect(Font* font, Textures* textures, const ItemInstance* item, int x, int y);
static void renderGuiItemDecorations(Font* font, Textures* textures, ItemInstance* item, int x, int y);
//void renderGuiItemDecorations(Font* font, Textures* textures, ItemInstance* item, int x, int y);
static void renderGuiItemDecorations(const ItemInstance* item, float x, float y);
static void blit(float x, float y, float sx, float sy, float w, float h);

View File

@@ -135,7 +135,7 @@ void MobRenderer::render(Entity* e, float x, float y, float z, float rot, float
//glEnable2(GL_DEPTH_TEST);
glPopMatrix2();
postRender(mob, x, y, z, rot, a);
renderName(mob, x, y, z);
}

View File

@@ -77,10 +77,10 @@ void PlayerRenderer::render(Entity* mob_, float x, float y, float z, float rot,
model = desired;
humanoidModel = desired;
}
LOGI("[PlayerRenderer] %s: skin=%s, modelTex=%dx%d, desired=%s\n",
/* LOGI("[PlayerRenderer] %s: skin=%s, modelTex=%dx%d, desired=%s\n",
((Player*)mob)->name.c_str(), mob->getTexture().c_str(),
humanoidModel->texWidth, humanoidModel->texHeight,
(desired == playerModel64 ? "64" : "32"));
(desired == playerModel64 ? "64" : "32")); */
HumanoidMobRenderer::render(mob_, x, y, z, rot, a);
}

View File

@@ -14,11 +14,11 @@
#define USE_VBO
#define GL_QUADS 0x0007
#if defined(__APPLE__)
#import <OpenGLES/ES1/gl.h>
#import <OpenGLES/ES1/glext.h>
#import <OpenGLES/ES1/gl.height>
#import <OpenGLES/ES1/glext.height>
#elif defined(ANDROID) || defined(__EMSCRIPTEN__)
#import <GLES/gl.h>
#import <GLES/glext.h>
#include <GLES/gl.h>
#include <GLES/glext.h>
#else
#include <glad/glad.h>

View File

@@ -206,93 +206,3 @@ void WaterSideTexture::tick() {
pixels[i * 4 + 3] = a;
}
}
FireTexture::FireTexture()
: super(((Tile*)Tile::fire)->tex),
_tick(0),
_frame(0)
{
current = new float[16*20];
next = new float[16*20];
heat = new float[16*20];
heata = new float[16*20];
for (int i = 0; i < 256; ++i) {
current[i] = 0;
next[i] = 0;
heat[i] = 0;
heata[i] = 0;
}
}
FireTexture::~FireTexture() {
delete[] current;
delete[] next;
delete[] heat;
delete[] heata;
}
// oh boy time to implement fire textures, i am so fucked - shredder
void FireTexture::tick() {
// loop generates fire texture on the empty texture grid, hopefully shouldnt be too taxing on older hardware - shredder
for (int x = 0; x < 16; x++) {
for (int y = 0; y < 20; y++) {
int count = 18;
float pow = this->current[x + (y + 1) % 20 * 16] * (float)(count);
for (int xx = x - 1; xx <= x + 1; xx++) {
for (int yy = y; yy <= y + 1; yy++) {
if (xx >= 0 && yy >= 0 && xx < 16 && yy < 20) {
pow += this->current[xx + yy * 16];
}
count++;
}
}
this->next[x + y * 16] = pow / (float(count) * 1.06f);
if (y >= 19) {
this->next[x + y * 16] = float(Mth::random() * Mth::random() * Mth::random() * 4.0 + Mth::random() * 0.1f + 0.2f);
}
}
}
// hopefully this doesn't cause any mysterious issues - shredder
float* tmp = next;
next = current;
current = tmp;
for (int i = 0; i < 256; i++) {
float pow = this->current[i] * 1.8f;
if (pow > 1.0f) {
pow = 1.0f;
}
if (pow < 0.0f) {
pow = 0.0f;
}
int r = (int) (pow * 155.0f + 100.0f);
int g = (int)(pow * pow * 255.0f);
int b = (int)(pow * pow * pow * pow * pow * pow * pow * pow * pow * pow * 255.0f);
int a = 255;
if (pow < 0.5f) {
a = 0;
}
// @TODO: cant be arsed rn to implement the anaglyph3d check would be nice to check if it does - shredder
//if (this->anaglyph3d) {
// float rr = (r * 30 + g * 59 + b * 11) / 100;
// float gg = (r * 30 + g * 70) / 100;
// float bb = (r * 30 + b * 70) / 100;
// r = rr;
// g = gg;
// b = bb;
//}
pixels[i * 4 + 0] = r;
pixels[i * 4 + 1] = g;
pixels[i * 4 + 2] = b;
pixels[i * 4 + 3] = a;
}
}

View File

@@ -56,21 +56,4 @@ public:
void tick();
};
class FireTexture: public DynamicTexture
{
typedef DynamicTexture super;
int _tick;
int _frame;
float* current;
float* next;
float* heat;
float* heata;
public:
FireTexture();
~FireTexture();
void tick();
};
#endif /*NET_MINECRAFT_CLIENT_RENDERER_PTEXTURE__DynamicTexture_H__*/

View File

@@ -1,6 +1,7 @@
#include "ClientSideNetworkHandler.h"
#include "client/Options.h"
#include "network/packet/LoginStatusPacket.h"
#include "packet/PacketInclude.h"
#include "RakNetInstance.h"
#include "../world/level/chunk/ChunkSource.h"
@@ -10,6 +11,7 @@
#include "../world/entity/player/Inventory.h"
#include "../client/Minecraft.h"
#include "../client/gamemode/GameMode.h"
#include "world/item/ItemInstance.h"
#ifndef STANDALONE_SERVER
#include "../client/gui/screens/DisconnectionScreen.h"
#endif
@@ -86,7 +88,7 @@ void ClientSideNetworkHandler::onConnect(const RakNet::RakNetGUID& hostGuid)
serverGuid = hostGuid;
clearChunksLoaded();
LoginPacket packet(minecraft->options.getStringValue(OPTIONS_USERNAME).c_str(), SharedConstants::NetworkProtocolVersion);
LoginPacket packet(minecraft->options.getStringValue(OPTIONS_USERNAME).c_str(), SharedConstants::NetworkProtocolVersion, true);
raknetInstance->send(packet);
}
@@ -130,6 +132,12 @@ void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, LoginSta
LOGI("Disconnect! Server is outdated!\n");
#ifndef STANDALONE_SERVER
minecraft->setScreen(new DisconnectionScreen("Could not connect: Outdated server!"));
#endif
}
if (packet->status == LoginStatus::Failed_TakenNickname) {
LOGI("Disconnect! Nickname is taken!\n");
#ifndef STANDALONE_SERVER
minecraft->setScreen(new DisconnectionScreen("Could not connect: Nickname is taken!"));
#endif
}
}
@@ -386,6 +394,55 @@ void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, MovePlay
}
}
void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, SendInventoryPacket* packet) {
if (!level) return;
// TODO: Linked slots
if (packet->entityId == minecraft->player->entityId) {
auto items = packet->items;
minecraft->player->inventory->replace(items);
for (int i = 0; i < packet->linkedSlot.size(); i++) {
minecraft->player->inventory->linkSlot(i, packet->linkedSlot[i].inventorySlot, true);
LOGI("%i -> %i\n", packet->linkedSlot[i].inventorySlot, i);
}
}
}
void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, TakeItemPacket* packet) {
if (!level) return;
LOGI("TakeItemPacket\n");
ItemInstance* item;
item->count = packet->count;
item->id = packet->itemId;
item->setAuxValue(packet->auxValue);
// if (minecraft->player->entityId == packet->playerId) {
if (!minecraft->player->inventory->add(item)) {
minecraft->player->drop(new ItemInstance(*item), false);
}
// }
}
void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, RemoveItemPacket* packet) {
// Idk how it works...
if (!level) return;
ItemInstance item;
item.count = packet->count;
item.id = packet->itemId;
item.setAuxValue(packet->auxValue);
// if (minecraft->player->entityId == packet->playerId) {
minecraft->player->inventory->removeResource(item);
// }
}
void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, MoveEntityPacket* packet)
{
if (!level)
@@ -782,6 +839,10 @@ void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, AnimateP
}
}
void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, WantCreatePacket* packet)
{
}
void ClientSideNetworkHandler::handle(const RakNet::RakNetGUID& source, UseItemPacket* packet)
{
}

View File

@@ -77,6 +77,11 @@ public:
virtual void handle(const RakNet::RakNetGUID& source, ChatPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, AdventureSettingsPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, SignUpdatePacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, RemoveItemPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, TakeItemPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, WantCreatePacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, SendInventoryPacket* packet);
private:
void requestNextChunk();

View File

@@ -18,6 +18,8 @@ class RemovePlayerPacket;
class RemoveEntityPacket;
class MoveEntityPacket;
//class TeleportEntityPacket;
class RemoveItemPacket;
class TakeItemPacket;
class MovePlayerPacket;
class PlaceBlockPacket;
class RemoveBlockPacket;
@@ -48,6 +50,7 @@ class ContainerClosePacket;
class ContainerSetSlotPacket;
class ContainerSetDataPacket;
class ContainerSetContentPacket;
class WantCreatePacket;
class ChatPacket;
class SignUpdatePacket;
class Minecraft;
@@ -119,6 +122,9 @@ public:
virtual void handle(const RakNet::RakNetGUID& source, SignUpdatePacket* packet) {}
virtual void handle(const RakNet::RakNetGUID& source, AdventureSettingsPacket* packet) {}
virtual void handle(const RakNet::RakNetGUID& source, AnimatePacket* packet) {}
virtual void handle(const RakNet::RakNetGUID& source, RemoveItemPacket* packet) {}
virtual void handle(const RakNet::RakNetGUID& source, TakeItemPacket* packet) {}
virtual void handle(const RakNet::RakNetGUID& source, WantCreatePacket* packet) {}
//
// Common implementation for Client and Server

View File

@@ -2,6 +2,7 @@
#include "Packet.h"
#include "../world/level/chunk/LevelChunk.h"
#include "network/packet/TakeItemPacket.h"
#include "packet/PacketInclude.h"
Packet::Packet()
@@ -41,10 +42,16 @@ Packet* MinecraftPackets::createPacket(int id)
case PACKET_ADDITEMENTITY:
packet = new AddItemEntityPacket();
break;
case PACKET_REMOVEITEM:
packet = new RemoveItemPacket();
break;
case PACKET_TAKEITEM:
packet = new TakeItemPacket();
break;
case PACKET_TAKEITEMENTITY:
packet = new TakeItemEntityPacket();
break;
case PACKET_ADDMOB:
case PACKET_ADDMOB:
packet = new AddMobPacket();
break;
case PACKET_ADDPLAYER:
@@ -68,6 +75,9 @@ Packet* MinecraftPackets::createPacket(int id)
case PACKET_RESPAWN:
packet = new RespawnPacket();
break;
case PACKET_WANTCREATEITEM:
packet = new WantCreatePacket();
break;
case PACKET_REMOVEENTITY:
packet = new RemoveEntityPacket();
break;

View File

@@ -33,7 +33,10 @@ enum MinecraftPacketIds
PACKET_REMOVEENTITY,
PACKET_ADDITEMENTITY,
PACKET_TAKEITEMENTITY,
PACKET_TAKEITEM,
PACKET_REMOVEITEM,
PACKET_WANTCREATEITEM,
PACKET_MOVEENTITY,
PACKET_MOVEENTITY_POS,
PACKET_MOVEENTITY_ROT,

View File

@@ -5,6 +5,14 @@
#include "../world/entity/player/Inventory.h"
#include "../world/Container.h"
#include "../world/inventory/BaseContainerMenu.h"
#include "network/packet/ContainerSetSlotPacket.h"
#include "network/packet/LoginStatusPacket.h"
#include "network/packet/RemoveBlockPacket.h"
#include "network/packet/SendInventoryPacket.h"
#include "network/packet/UpdateBlockPacket.h"
#include "network/packet/RemoveItemPacket.h"
#include "network/packet/TakeItemPacket.h"
#include "network/packet/WantCreatePacket.h"
#include "packet/PacketInclude.h"
#include "RakNetInstance.h"
@@ -13,6 +21,14 @@
#include "../client/gamemode/GameMode.h"
#include "../raknet/RakPeerInterface.h"
#include "../raknet/PacketPriority.h"
#include "platform/log.h"
#include "util/Mth.h"
#include "world/item/ItemInstance.h"
#include "world/level/storage/LevelStorage.h"
#include "world/phys/Vec3.h"
#include "world/item/crafting/Recipe.h"
#include "world/item/crafting/Recipes.h"
#include <cstddef>
#ifndef STANDALONE_SERVER
#include "../client/sound/SoundEngine.h"
#endif
@@ -156,6 +172,8 @@ void ServerSideNetworkHandler::onDisconnect(const RakNet::RakNetGUID& guid)
if (player->owner == guid)
{
minecraft->level->getLevelStorage()->savePlayer(*player);
std::string message = player->name;
message += " disconnected from the game";
displayGameMessage(message);
@@ -179,7 +197,7 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, LoginPac
if (!_allowIncoming) return;
LOGI("LoginPacket\n");
int loginStatus = LoginStatus::Success;
//
// Bad/incompatible client version
@@ -189,6 +207,14 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, LoginPac
if (oldClient || oldServer)
loginStatus = oldClient? LoginStatus::Failed_ClientOld : LoginStatus::Failed_ServerOld;
for (int i = 0; i < level->players.size(); i++) {
ServerPlayer* player = (ServerPlayer*) level->players.at(i);
if (player->name == packet->clientName.C_String()) {
loginStatus = packet->newProto ? LoginStatus::Failed_TakenNickname : LoginStatus::Failed_ClientOld;
}
}
RakNet::BitStream bitStream;
LoginStatusPacket(loginStatus).write(&bitStream);
rakPeer->Send(&bitStream, HIGH_PRIORITY, RELIABLE_ORDERED, 0, source, false);
@@ -199,13 +225,16 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, LoginPac
//
// Valid client version
//
Player* newPlayer = new ServerPlayer(minecraft, level);
Player* newPlayer = new ServerPlayer(minecraft, level, packet->newProto);
minecraft->gameMode->initAbilities(newPlayer->abilities);
newPlayer->owner = source;
newPlayer->name = packet->clientName.C_String();
_pendingPlayers.push_back(newPlayer);
LOGI("Adding new player... isCreative: %i\n", minecraft->isCreativeMode());
// Reset the player so he doesn't spawn inside blocks
while (newPlayer->y > 0) {
newPlayer->setPos(newPlayer->x, newPlayer->y, newPlayer->z);
@@ -232,6 +261,11 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, LoginPac
).write(&bitStream);
rakPeer->Send(&bitStream, HIGH_PRIORITY, RELIABLE_ORDERED, 0, source, false);
if (!packet->newProto) {
MessagePacket packet("You're using outdated client. Some features disabled.");
raknetInstance->send(packet);
}
}
}
@@ -244,6 +278,8 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, ReadyPac
if (packet->type == ReadyPacket::READY_REQUESTEDCHUNKS)
onReady_RequestedChunks(source);
LOGI("Ready player two ready ready player two!!\n ");
}
void ServerSideNetworkHandler::onReady_ClientGeneration(const RakNet::RakNetGUID& source)
@@ -301,6 +337,36 @@ void ServerSideNetworkHandler::onReady_ClientGeneration(const RakNet::RakNetGUID
}
}
if (!minecraft->level->getLevelStorage()->loadPlayer(*newPlayer)) {
LOGW("Failed to load %s data\n", newPlayer->name.c_str());
}
// Credits to EpikIzCool
bitStream.Reset();
MovePlayerPacket mv(newPlayer->entityId, newPlayer->x, newPlayer->y - newPlayer->heightOffset,
newPlayer->z, newPlayer->xRot, newPlayer->yRot);
mv.write(&bitStream);
rakPeer->Send(&bitStream, HIGH_PRIORITY, RELIABLE_ORDERED, 0, source, false);
bitStream.Reset();
SetHealthPacket hp(newPlayer->health);
hp.write(&bitStream);
rakPeer->Send(&bitStream, HIGH_PRIORITY, RELIABLE_ORDERED, 0, source, false);
if (newPlayer->hasRespawnPosition()) {
bitStream.Reset();
SetSpawnPositionPacket sp(newPlayer->getRespawnPosition());
sp.write(&bitStream);
rakPeer->Send(&bitStream, HIGH_PRIORITY, RELIABLE_ORDERED, 0, source, false);
}
bitStream.Reset();
SendInventoryPacket(newPlayer, false).write(&bitStream);
rakPeer->Send(&bitStream, HIGH_PRIORITY, RELIABLE_ORDERED, 0, source, false);
// Additional packets
// * set spawn
/*
@@ -342,11 +408,22 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, MovePlay
//LOGI("MovePlayerPacket\n");
if (Entity* entity = level->getEntity(packet->entityId))
{
entity->xd = entity->yd = entity->zd = 0;
entity->lerpTo(packet->x, packet->y, packet->z, packet->yRot, packet->xRot, 3);
ServerPlayer* player = (ServerPlayer*) getPlayer(source);
// broadcast this packet to other clients
redistributePacket(packet, source);
float vectorDist = sqrt( (packet->x - entity->x) * (packet->x - entity->x) +
(packet->y - entity->y) * (packet->y - entity->y) +
(packet->z - entity->z) * (packet->z - entity->z));
float speed = vectorDist / (minecraft->getTicks() - player->getLastMoveTicks());
if (speed < 2.5f) {
entity->xd = entity->yd = entity->zd = 0;
entity->lerpTo(packet->x, packet->y, packet->z, packet->yRot, packet->xRot, 3);
// broadcast this packet to other clients
redistributePacket(packet, source);
}
player->setLastMoveTicks(minecraft->getTicks());
}
}
@@ -368,12 +445,29 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, RemoveBl
if (oldTile != NULL && changed) {
level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, oldTile->soundType->getBreakSound(), (oldTile->soundType->getVolume() + 1) / 2, oldTile->soundType->getPitch() * 0.8f);
if (minecraft->gameMode->isSurvivalType() && player->canDestroy(oldTile))
if (minecraft->gameMode->isSurvivalType() && player->canDestroy(oldTile)) {
// From SurvivalMode.cpp
// Why tf i have to copy this shit from SurvivalMode class
// Why SurvivalMode class locked to LOCAL MINECRAFT PLAYER :sob: :sob: :sob: :sob: :sob: :sob: :sob: :sob:
// @fix @warn @ahtung @alert
ItemInstance* item = player->inventory->getSelected();
if (item != NULL) {
item->mineBlock(oldTile->id, x, y, z);
if (item->count == 0) {
//item->snap(minecraft->player);
player->inventory->clearSlot(player->inventory->selected);
}
}
//oldTile->spawnResources(level, x, y, z, data, 1); //@todo
oldTile->playerDestroy(level, player, x, y, z, data);
}
oldTile->destroy(level, x, y, z, data);
}
LOGI("Remove block [%i, %i, %i]\n", packet->x, packet->y, packet->z);
}
void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, RequestChunkPacket* packet)
@@ -403,6 +497,8 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, RequestC
raknetInstance->send(source, p);
}
}
// LOGI("Requested chunk [%i, %i]\n", packet->x, packet->z);
}
void ServerSideNetworkHandler::levelGenerated( Level* level )
@@ -429,23 +525,31 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, PlayerEq
if (!player) return;
if (rakPeer->GetMyGUID() == player->owner) return;
LOGI("Equip item: id %i aux %i\n", packet->itemId, packet->itemAuxValue);
// override the player's inventory
//int slot = player->inventory->getSlot(packet->itemId, packet->itemAuxValue);
int slot = Inventory::MAX_SELECTION_SIZE;
if (slot >= 0) {
if (packet->itemId == 0) {
player->inventory->clearSlot(slot);
} else {
// @note: 128 is an ugly hack for depletable items.
// @todo: fix
ItemInstance newItem(packet->itemId, 128, packet->itemAuxValue);
player->inventory->replaceSlot(slot, &newItem);
}
player->inventory->moveToSelectedSlot(slot, true);
redistributePacket(packet, source);
} else {
LOGW("Warning: Remote player doesn't have his thing, Odd!\n");
int slot = player->inventory->getSlot(packet->itemId, packet->itemAuxValue);
if (slot >= 0 && slot != packet->inventorySlot && packet->itemId != 0) {
LOGW("PlayerEquipmentPacket: Item in player inventory but slots doesn't match!");
packet->inventorySlot = slot;
}
if (slot < 0 && packet->itemId != 0) {
LOGW("PlayerEquipmentPacket: Remote player doesn't have his thing (or crafted it)!\n");
SendInventoryPacket newInventory (player, false);
raknetInstance->send(newInventory);
return;
}
player->inventory->selectSlot(packet->selectedSlot);
player->inventory->linkSlot(packet->selectedSlot, packet->inventorySlot, true);
player->inventory->print();
redistributePacket(packet, source);
}
void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, PlayerArmorEquipmentPacket* packet) {
@@ -455,6 +559,8 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, PlayerAr
if (!player) return;
if (rakPeer->GetMyGUID() == player->owner) return;
// LOGI("Equip armor: %i %i %i %i\n", packet->head, packet->torso, packet->legs, packet->feet);
packet->fillIn(player);
redistributePacket(packet, source);
}
@@ -466,6 +572,8 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, Interact
Entity* entity = level->getEntity(packet->targetId);
if (src && entity && src->isPlayer())
{
LOGI("Interact: source %i target %i\n", packet->sourceId, packet->targetId);
Player* player = (Player*) src;
if (InteractPacket::Attack == packet->action) {
player->swing();
@@ -506,12 +614,73 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, AnimateP
}
redistributePacket(packet, source);
}
void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, WantCreatePacket* packet) {
LOGI("WantCreatePacket\n");
Entity* entity = level->getEntity(packet->playerId);
if (entity && entity->isPlayer()) {
Player* p = (Player*)entity;
auto playerInv = p->inventory;
ItemInstance wantCreate;
wantCreate.id = packet->itemId;
wantCreate.count = packet->count;
wantCreate.setAuxValue(packet->auxValue);
Recipe* recipe = Recipes::getInstance()->getRecipeFor(wantCreate);
std::vector<ItemInstance> items = recipe->getItemPack().getItemInstances();
std::vector<int> checkForExists = {};
for (int i = Inventory::MAX_SELECTION_SIZE; i < p->inventory->getContainerSize(); ++i) {
auto itm = p->inventory->getItem(i);
if (itm != NULL) {
for (int y = 0; y < items.size(); y++) {
auto itmRecipe = items.at(y);
if (itmRecipe.id == itm->id && itm->count >= itmRecipe.count) {
checkForExists.push_back(itm->id);
}
}
}
}
if (checkForExists.empty()) {
return;
}
for (int i = 0; i < items.size(); i++) {
auto item = items.at(i);
auto it = std::find(checkForExists.begin(), checkForExists.end(), item.id);
if (it == checkForExists.end() && checkForExists.size() > 1) {
return;
}
}
// for (int i = 0; i < items.size(); i++) {
// RemoveItemPacket removePacket(packet->playerId, items.at(i).count, items.at(i).getAuxValue(), items.at(i).id);
// raknetInstance->send(source, removePacket);
// p->inventory->removeResource(ItemInstance(items.at(i).id, items.at(i).count, items.at(i).getAuxValue()));
// }
// TakeItemPacket itemAdd(p->entityId, wantCreate.count, wantCreate.getAuxValue(), wantCreate.id);
// raknetInstance->send(source, itemAdd);
p->inventory->add(new ItemInstance(wantCreate.id, wantCreate.count, wantCreate.getAuxValue()));
}
}
void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, UseItemPacket* packet)
{
if (!level) return;
LOGI("UseItemPacket\n");
LOGI("UseItemPacket: id %i data %i\n", packet->itemId, packet->itemData);
Entity* entity = level->getEntity(packet->entityId);
if (entity && entity->isPlayer()) {
Player* player = (Player*) entity;
@@ -522,7 +691,30 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, UseItemP
if (t && t->use(level, x, y, z, player)) return;
if (packet->item.isNull()) return;
ItemInstance* item = &packet->item;
ItemInstance* packetItem = &packet->item;
int slot = player->inventory->getSlot(packet->itemId, packet->itemData);
if (slot < 0) {
LOGW("UseItemPacket: Player doesn't have this item!\n");
auto pos = Vec3(packet->x, packet->y, packet->z);
if (ItemInstance::isBlock(packetItem)) {
LOGI("UseItemPacket: This is even block!!!\n");
pos.x += packet->clickX;
pos.y += packet->clickY;
pos.z += packet->clickZ;
}
UpdateBlockPacket refuse(pos.x, pos.y, pos.z, level->getTile(pos.x, pos.y, pos.z), level->getData(pos.x, pos.y, pos.z));
raknetInstance->send(refuse);
return;
}
ItemInstance* item = player->inventory->getItem(slot);
if(packet->face == 255) {
// Special case: x,y,z means direction-of-action
@@ -533,6 +725,10 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, UseItemP
minecraft->gameMode->useItemOn(player, level, item, packet->x, packet->y, packet->z, packet->face,
Vec3(packet->clickX + packet->x, packet->clickY + packet->y, packet->clickZ + packet->z));
}
if (item && item->count <= 0) {
player->inventory->clearSlot(slot);
}
//LOGW("Use Item not working! Out of synch?\n");
@@ -544,6 +740,8 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, UseItemP
void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, EntityEventPacket* packet) {
if (!level) return;
LOGI("EntityEventPacket: id %i\n", packet->eventId);
if (Entity* e = level->getEntity(packet->entityId))
e->handleEntityEvent(packet->eventId);
}
@@ -577,6 +775,11 @@ void ServerSideNetworkHandler::handle( const RakNet::RakNetGUID& source, SendInv
{
if (!level) return;
LOGI("SendInventoryPacket:\n");
for (int i = 0; i < packet->numItems; i++) {
LOGI("\t %i: %s (%i)\n", i, packet->items.at(i).getName().c_str(), packet->items.at(i).count);
}
Entity* entity = level->getEntity(packet->entityId);
if (entity && entity->isPlayer()) {
Player* p = (Player*)entity;
@@ -592,15 +795,27 @@ void ServerSideNetworkHandler::handle( const RakNet::RakNetGUID& source, DropIte
{
if (!level) return;
LOGI("DropItemPacket\n");
Entity* entity = level->getEntity(packet->entityId);
if (entity && entity->isPlayer()) {
Player* p = (Player*)entity;
p->drop(new ItemInstance(packet->item), packet->dropType != 0);
// p->drop(new ItemInstance(packet->item), packet->dropType != 0);
int slot = p->inventory->getSlot(packet->item.id, packet->item.getAuxValue());
if (slot < 0) {
LOGW("DropItemPacket: player doesn't have these items!\n");
return;
}
p->inventory->dropSlot(slot, false, packet->dropType != 0);
}
}
void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, ContainerClosePacket* packet) {
if (!level) return;
LOGI("ContainerClosePacket\n");
Player* p = findPlayer(level, &source);
if (!p) return;
@@ -612,6 +827,16 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, Containe
void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, ContainerSetSlotPacket* packet) {
if (!level) return;
const char* type = "unknown";
switch (packet->setType) {
case ContainerSetSlotPacket::SETTYPE_ADD: type = "add"; break;
case ContainerSetSlotPacket::SETTYPE_SET: type = "set"; break;
case ContainerSetSlotPacket::SETTYPE_TAKE: type = "take"; break;
};
LOGI("ContainerSetSlot: slot %i item %s type %s\n", packet->slot, packet->item.getName().c_str(), type);
Player* p = findPlayer(level, &source);
if (!p) return;
@@ -619,11 +844,79 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, Containe
LOGW("User has no container!\n");
return;
}
if (p->containerMenu->containerId != packet->containerId)
{
if (p->containerMenu->containerId != packet->containerId) {
LOGW("Wrong container id: %d vs %d\n", p->containerMenu->containerId, packet->containerId);
return;
}
if (packet->item.count > 64) {
LOGW("ContainerSetSlotPacket: player tried to put more than 64");
return;
}
auto contItems = p->containerMenu->getItems();
// find same item in player inventory (used not in all cases)
int invSlot = p->inventory->getSlot(packet->item.id, packet->item.getAuxValue());
auto invItem = p->inventory->getItem(invSlot);
if (contItems.at(packet->slot).id == 0 && packet->item.id != 0) {
LOGI("ContainerSetSlotPacket: player tried to put items to slot %i\n", packet->slot);
if (invSlot < 0) {
LOGW("ContainerSetSlotPacket: player doesn't have this item\n");
return;
}
if (invItem->count < packet->item.count) {
LOGW("ContainerSetSlotPacket: player tried to put more than he have\n");
packet->item.count = invItem->count;
}
invItem->count -= packet->item.count;
if (invItem->count <= 0) {
p->inventory->removeItem(invItem);
}
} else if(contItems.at(packet->slot).id == packet->item.id) {
int deltaItem = packet->item.count - contItems.at(packet->slot).count;
if (deltaItem > 0) {
LOGI("ContainerSetSlotPacket: player tried to add %i items to slot %i\n", deltaItem, packet->slot);
auto invItem = p->inventory->getItem(invSlot);
if (invSlot < 0) {
LOGW("ContainerSetSlotPacket: player doesn't have this item\n");
return;
}
if (invItem->count < deltaItem) {
LOGW("ContainerSetSlotPacket: player tried to put more than he have");
packet->item.count -= (deltaItem - invItem->count);
deltaItem = invItem->count;
}
invItem->count -= deltaItem;
if (invItem->count <= 0) {
p->inventory->removeItem(invItem);
}
} else if (deltaItem < 0) {
LOGW("ContainerSetSlotPacket: player tried to take %i items from slot %i\n", -deltaItem, packet->slot);
p->inventory->add(new ItemInstance(packet->item.getItem(), -deltaItem, contItems.at(packet->slot).getAuxValue()));
}
} else if(contItems.at(packet->slot).id && !packet->item.id) {
LOGI("ContainerSetSlotPacket: player tried to take all items from slot %i\n", packet->slot);
packet->item.count = 0;
packet->item.setAuxValue(0);
p->inventory->add(new ItemInstance(contItems.at(packet->slot).getItem(), contItems.at(packet->slot).count, contItems.at(packet->slot).getAuxValue()));
} else {
LOGW("ContainerSetSlotPacket: illegal container operation in slot %i\n", packet->slot);
return;
}
if (ContainerType::FURNACE == p->containerMenu->containerType) {
//LOGI("Server:Setting slot %d: %s\n", packet->slot, packet->item.toString().c_str());
@@ -635,10 +928,14 @@ void ServerSideNetworkHandler::handle(const RakNet::RakNetGUID& source, Containe
p->containerMenu->setSlot(packet->slot, &packet->item);
//p->containerMenu->setSlot(packet->slot, packet->item.isNull()? NULL : &packet->item);
}
p->inventory->print();
}
void ServerSideNetworkHandler::handle( const RakNet::RakNetGUID& source, SetHealthPacket* packet )
{
LOGI("SetHealthPacket\n");
for (unsigned int i = 0; i < level->players.size(); ++i) {
Player* p = level->players[i];
if (p->owner == source) {
@@ -657,6 +954,8 @@ void ServerSideNetworkHandler::handle( const RakNet::RakNetGUID& source, SignUpd
if (!level)
return;
LOGI("SignUpdate: [%i, %i, %i]\n", packet->x, packet->y, packet->z);
TileEntity* te = level->getTileEntity(packet->x, packet->y, packet->z);
if (TileEntity::isType(te, TileEntityType::Sign)) {
SignTileEntity* ste = (SignTileEntity*) te;

View File

@@ -58,7 +58,8 @@ public:
virtual void handle(const RakNet::RakNetGUID& source, ContainerClosePacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, SignUpdatePacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, ChatPacket* packet);
virtual void handle(const RakNet::RakNetGUID& source, WantCreatePacket* packet);
bool allowsIncomingConnections() { return _allowIncoming; }
void allowIncomingConnections(bool doAllow);

View File

@@ -9,17 +9,20 @@ public:
RakNet::RakString clientName;
int clientNetworkVersion;
int clientNetworkLowestSupportedVersion;
bool newProto;
LoginPacket()
: clientNetworkVersion(-1),
clientNetworkLowestSupportedVersion(-1)
clientNetworkLowestSupportedVersion(-1),
newProto(false)
{
}
LoginPacket(const RakNet::RakString& clientName, int clientVersion)
LoginPacket(const RakNet::RakString& clientName, int clientVersion, bool newProto)
: clientName(clientName),
clientNetworkVersion(clientVersion),
clientNetworkLowestSupportedVersion(clientVersion)
clientNetworkLowestSupportedVersion(clientVersion),
newProto(newProto)
{
}
@@ -29,6 +32,7 @@ public:
bitStream->Write(clientName);
bitStream->Write(clientNetworkVersion);
bitStream->Write(clientNetworkLowestSupportedVersion);
bitStream->Write(newProto);
}
void read(RakNet::BitStream* bitStream)
@@ -39,6 +43,11 @@ public:
if (bitStream->GetNumberOfUnreadBits() > 0) {
bitStream->Read(clientNetworkVersion);
bitStream->Read(clientNetworkLowestSupportedVersion);
// Checking for new proto
if (bitStream->GetNumberOfUnreadBits() > 0) {
bitStream->Read(newProto);
}
}
}

View File

@@ -3,10 +3,12 @@
#include "../Packet.h"
// wtf why not enum
namespace LoginStatus {
const int Success = 0;
const int Failed_ClientOld = 1;
const int Failed_ServerOld = 2;
const int Failed_TakenNickname = 3;
}
class LoginStatusPacket : public Packet {

View File

@@ -50,5 +50,7 @@
#include "TileEventPacket.h"
#include "UpdateBlockPacket.h"
#include "UseItemPacket.h"
#include "RemoveItemPacket.h"
#include "WantCreatePacket.h"
#include "TakeItemPacket.h"
#endif /*NET_MINECRAFT_NETWORK_PACKET__PacketInclude_H__*/

View File

@@ -9,15 +9,19 @@ public:
int entityId;
unsigned short itemId;
unsigned short itemAuxValue;
unsigned char selectedSlot;
unsigned char inventorySlot;
PlayerEquipmentPacket()
{
}
PlayerEquipmentPacket(int entityId, int itemId, int data)
PlayerEquipmentPacket(int entityId, int itemId, int data, int selSlot, int invSlot)
: entityId(entityId),
itemId(itemId),
itemAuxValue(data)
itemAuxValue(data),
selectedSlot(selSlot),
inventorySlot(invSlot)
{
}
@@ -28,6 +32,8 @@ public:
bitStream->Write(entityId);
bitStream->Write(itemId);
bitStream->Write(itemAuxValue);
bitStream->Write(selectedSlot);
bitStream->Write(inventorySlot);
}
void read(RakNet::BitStream* bitStream)
@@ -35,6 +41,8 @@ public:
bitStream->Read(entityId);
bitStream->Read(itemId);
bitStream->Read(itemAuxValue);
bitStream->Read(selectedSlot);
bitStream->Read(inventorySlot);
}
void handle(const RakNet::RakNetGUID& source, NetEventCallback* callback)

View File

@@ -0,0 +1,54 @@
#ifndef NET_MINECRAFT_NETWORK_PACKET__RemoveItemPacket_H__
#define NET_MINECRAFT_NETWORK_PACKET__RemoveItemPacket_H__
//package net.minecraft.network.packet;
#include "../Packet.h"
class RemoveItemPacket: public Packet
{
public:
RemoveItemPacket() {
}
RemoveItemPacket(int playerId, int count, int auxValue, int itemId)
:
playerId(playerId),
count(count),
auxValue(auxValue),
itemId(itemId)
{
}
void write(RakNet::BitStream* bitStream)
{
bitStream->Write((RakNet::MessageID)(ID_USER_PACKET_ENUM + PACKET_REMOVEITEM));
bitStream->Write(itemId);
bitStream->Write(count);
bitStream->Write(auxValue);
bitStream->Write(playerId);
}
void read(RakNet::BitStream* bitStream)
{
bitStream->Read(itemId);
bitStream->Read(count);
bitStream->Read(auxValue);
bitStream->Read(playerId);
}
void handle(const RakNet::RakNetGUID& source, NetEventCallback* callback)
{
callback->handle(source, (RemoveItemPacket*)this);
}
int playerId;
int itemId;
int count;
int auxValue;
};
#endif /*NET_MINECRAFT_NETWORK_PACKET__RemoveItemPacket_H__*/

View File

@@ -2,13 +2,14 @@
#define NET_MINECRAFT_NETWORK_PACKET__SendInventoryPacket_H__
#include "../Packet.h"
#include "world/entity/player/Inventory.h"
#include "world/inventory/FillingContainer.h"
#include <array>
class SendInventoryPacket: public Packet
{
public:
SendInventoryPacket()
{
}
SendInventoryPacket() {}
SendInventoryPacket(Player* player, bool dropItems)
: entityId(player->entityId),
@@ -21,10 +22,15 @@ public:
ItemInstance* item = inv->getItem(i);
items.push_back(item? *item : ItemInstance());
}
for (int i = 0; i < NumArmorItems; ++i) {
ItemInstance* item = player->getArmor(i);
items.push_back(item? *item : ItemInstance());
}
for (int i = 0; i < inv->numLinkedSlots; ++i) {
linkedSlot[i] = inv->linkedSlots[i];
}
}
void write(RakNet::BitStream* bitStream)
@@ -39,6 +45,13 @@ public:
// Armor
for (int i = 0; i < NumArmorItems; ++i)
PacketUtil::writeItemInstance(items[i + numItems], bitStream);
int lSlots = Inventory::MAX_SELECTION_SIZE;
// Linked slots
bitStream->Write(lSlots);
for (int i = 0; i < lSlots; ++i)
bitStream->Write(linkedSlot[i]);
}
void read(RakNet::BitStream* bitStream)
@@ -50,6 +63,12 @@ public:
// Inventory, Armor
for (int i = 0; i < numItems + NumArmorItems; ++i)
items.push_back(PacketUtil::readItemInstance(bitStream));
// Linked slots
int lSlots = 0;
bitStream->Read(lSlots);
for (int i = 0; i < lSlots; ++i)
bitStream->Read(linkedSlot[i]);
}
void handle(const RakNet::RakNetGUID& source, NetEventCallback* callback)
@@ -62,6 +81,8 @@ public:
short numItems;
unsigned char extra;
std::array<FillingContainer::LinkedSlot, Inventory::MAX_SELECTION_SIZE> linkedSlot;
static const int ExtraDrop = 1;
static const int NumArmorItems = 4;
};

View File

@@ -0,0 +1,54 @@
#ifndef NET_MINECRAFT_NETWORK_PACKET__TakeItemPacket_H__
#define NET_MINECRAFT_NETWORK_PACKET__TakeItemPacket_H__
//package net.minecraft.network.packet;
#include "../Packet.h"
class TakeItemPacket: public Packet
{
public:
TakeItemPacket() {
}
TakeItemPacket(int playerId, int count, int auxValue, int itemId)
:
playerId(playerId),
count(count),
auxValue(auxValue),
itemId(itemId)
{
}
void write(RakNet::BitStream* bitStream)
{
bitStream->Write((RakNet::MessageID)(ID_USER_PACKET_ENUM + PACKET_TAKEITEM));
bitStream->Write(itemId);
bitStream->Write(count);
bitStream->Write(auxValue);
bitStream->Write(playerId);
}
void read(RakNet::BitStream* bitStream)
{
bitStream->Read(itemId);
bitStream->Read(count);
bitStream->Read(auxValue);
bitStream->Read(playerId);
}
void handle(const RakNet::RakNetGUID& source, NetEventCallback* callback)
{
callback->handle(source, (TakeItemPacket*)this);
}
int playerId;
int itemId;
int count;
int auxValue;
};
#endif /*NET_MINECRAFT_NETWORK_PACKET__TakeItemPacket_H__*/

View File

@@ -0,0 +1,54 @@
#ifndef NET_MINECRAFT_NETWORK_PACKET__WantCreatePacket_H__
#define NET_MINECRAFT_NETWORK_PACKET__WantCreatePacket_H__
//package net.minecraft.network.packet;
#include "../Packet.h"
class WantCreatePacket: public Packet
{
public:
WantCreatePacket() {
}
WantCreatePacket(int playerId, int count, int auxValue, int itemId)
:
playerId(playerId),
count(count),
auxValue(auxValue),
itemId(itemId)
{
}
void write(RakNet::BitStream* bitStream)
{
bitStream->Write((RakNet::MessageID)(ID_USER_PACKET_ENUM + PACKET_WANTCREATEITEM));
bitStream->Write(itemId);
bitStream->Write(count);
bitStream->Write(auxValue);
bitStream->Write(playerId);
}
void read(RakNet::BitStream* bitStream)
{
bitStream->Read(itemId);
bitStream->Read(count);
bitStream->Read(auxValue);
bitStream->Read(playerId);
}
void handle(const RakNet::RakNetGUID& source, NetEventCallback* callback)
{
callback->handle(source, (WantCreatePacket*)this);
}
int playerId;
int itemId;
int count;
int auxValue;
};
#endif /*NET_MINECRAFT_NETWORK_PACKET__WantCreatePacket_H__*/

View File

@@ -3,14 +3,8 @@
#include "SoundSystem.h"
// If audio breaks for other platforms, this is probably why. Here, I'm just calling where Apple's OpenAL headers live (they arent in just "AL"
#if defined(__APPLE__)
#include <OpenAL/al.h>
#include <OpenAL/alc.h>
#else
#include <AL/al.h>
#include <AL/alc.h>
#endif
#include <AL/al.h>
#include <AL/alc.h>
#include <vector>
#include <list>

View File

@@ -12,16 +12,19 @@ ServerLevel::ServerLevel(LevelStorage* levelStorage, const std::string& levelNam
void ServerLevel::updateSleepingPlayerList() {
bool allPlayersWasSleeping = allPlayersAreSleeping;
allPlayersAreSleeping = !players.empty();
for(PlayerList::iterator it = players.begin(); it != players.end(); ++it) {
for (PlayerList::iterator it = players.begin(); it != players.end(); ++it) {
Player* player = *it;
if(!player->isSleeping()) {
if (!player->isSleeping()) {
allPlayersAreSleeping = false;
break;
}
}
if(!allPlayersWasSleeping && allPlayersAreSleeping) {
if (!allPlayersWasSleeping && allPlayersAreSleeping) {
levelEvent(NULL, LevelEvent::ALL_PLAYERS_SLEEPING, 0, 0, 0, 0);
for(PlayerList::iterator it = players.begin(); it != players.end(); ++it) {
for (PlayerList::iterator it = players.begin(); it != players.end(); ++it) {
(*it)->setAllPlayersSleeping();
}
}
@@ -29,23 +32,26 @@ void ServerLevel::updateSleepingPlayerList() {
void ServerLevel::awakenAllPlayers() {
allPlayersAreSleeping = false;
for(PlayerList::iterator it = players.begin(); it != players.end(); ++it) {
for (PlayerList::iterator it = players.begin(); it != players.end(); ++it) {
Player* player = *it;
if(player->isSleeping()) {
if (player->isSleeping()) {
player->stopSleepInBed(false, false, true);
player->health = Player::MAX_HEALTH;
player->lastHealth = Player::MAX_HEALTH;
}
}
SetHealthPacket packet(Player::MAX_HEALTH);
raknetInstance->send(packet);
}
bool ServerLevel::allPlayersSleeping() {
if(allPlayersAreSleeping && !isClientSide) {
if (allPlayersAreSleeping && !isClientSide) {
// all players are sleeping, but have they slept long enough?
for(PlayerList::iterator it = players.begin(); it != players.end(); ++it) {
if(!(*it)->isSleepingLongEnough()) {
for (PlayerList::iterator it = players.begin(); it != players.end(); ++it) {
if (!(*it)->isSleepingLongEnough()) {
return false;
}
}
@@ -55,13 +61,17 @@ bool ServerLevel::allPlayersSleeping() {
return false;
}
void ServerLevel::tick(){
void ServerLevel::tick() {
super::tick();
if(allPlayersSleeping()) {
if (allPlayersSleeping()) {
long newTime = levelData.getTime() + TICKS_PER_DAY;
levelData.setTime(newTime - (newTime % TICKS_PER_DAY));
SetTimePacket packet(levelData.getTime());
raknetInstance->send(packet);
awakenAllPlayers();
}
}

View File

@@ -19,14 +19,17 @@
#include "../network/packet/AnimatePacket.h"
#include "../world/level/tile/entity/ChestTileEntity.h"
#include "../network/packet/HurtArmorPacket.h"
#include "network/packet/SendInventoryPacket.h"
#include "world/entity/player/Inventory.h"
ServerPlayer::ServerPlayer( Minecraft* minecraft, Level* level )
ServerPlayer::ServerPlayer( Minecraft* minecraft, Level* level, bool proto)
: super(level, minecraft->isCreativeMode()),
_mc(minecraft),
_prevHealth(-999),
_containerCounter(0)
_containerCounter(0),
isNewProto(proto)
{
hasFakeInventory = true;
// hasFakeInventory = true;
footSize = 0;
}
@@ -67,8 +70,16 @@ void ServerPlayer::tick() {
void ServerPlayer::take( Entity* e, int orgCount ) {
TakeItemEntityPacket packet(e->entityId, entityId);
// SendInventoryPacket packet(this, false);
_mc->raknetInstance->send(packet);
LOGI("Inventory:\n");
for (int i = 0; i < inventory->numLinkedSlots; i++) {
auto item = inventory->getItem(i);
if (item)
LOGI("\t %i: %s (%i)\n", i, item->getName().c_str(), item->count);
}
super::take(e, orgCount);
}
@@ -118,20 +129,20 @@ bool ServerPlayer::hasResource( int id ) {
void ServerPlayer::setContainerData( BaseContainerMenu* menu, int id, int value ) {
ContainerSetDataPacket p(menu->containerId, id, value);
_mc->raknetInstance->send(owner, p);
//LOGI("Setting container data for id %d: %d\n", id, value);
LOGI("Setting container data for id %d: %d\n", id, value);
}
void ServerPlayer::slotChanged( BaseContainerMenu* menu, int slot, const ItemInstance& item, bool isResultSlot ) {
if (isResultSlot) return;
ContainerSetSlotPacket p(menu->containerId, slot, item);
_mc->raknetInstance->send(owner, p);
//LOGI("Slot %d changed\n", slot);
LOGI("Slot %d changed\n", slot);
}
void ServerPlayer::refreshContainer( BaseContainerMenu* menu, const std::vector<ItemInstance>& items ) {
ContainerSetContentPacket p(menu->containerId, menu->getItems());
_mc->raknetInstance->send(owner, p);
//LOGI("Refreshing container with %d items\n", items.size());
LOGI("Refreshing container with %zu items\n", items.size());
}
void ServerPlayer::nextContainerCounter() {

View File

@@ -15,7 +15,7 @@ class ServerPlayer: public Player,
{
typedef Player super;
public:
ServerPlayer(Minecraft* minecraft, Level* level);
ServerPlayer(Minecraft* minecraft, Level* level, bool proto);
~ServerPlayer();
@@ -43,6 +43,15 @@ public:
virtual void stopSleepInBed(bool forcefulWakeUp, bool updateLevelList, bool saveRespawnPoint);
void completeUsingItem();
void setLastMoveTicks(int lastMoveTicks) { this->lastMoveTicks = lastMoveTicks; }
int getLastMoveTicks() { return lastMoveTicks; }
void setTicksInAir(int ticksInAir) { this->ticksInAir = ticksInAir; }
int getTicksInAir() { return ticksInAir; }
void setNewProto(bool proto) { isNewProto = proto; }
bool getProto() { return isNewProto; }
private:
void nextContainerCounter();
void setContainerMenu( BaseContainerMenu* menu );
@@ -50,6 +59,11 @@ private:
Minecraft* _mc;
int _prevHealth;
int _containerCounter;
int lastMoveTicks = 0;
int ticksInAir = 0;
bool isNewProto = false;
};
#endif /*ServerPlayer_H__*/

View File

@@ -1,98 +0,0 @@
#include "Mth.h"
#include "Color.h"
#include <cassert>
//Creates an opaque sRGB color with the specified red, green, and blue values in the range (0.0 - 1.0).
//Alpha is defaulted to 1.0. The actual color used in rendering depends on finding the best match given the color space
//available for a particular output device.
//Parameters:
//r - the red component
//g - the green component
//b - the blue component
//Throws:
//IllegalArgumentException - if r, g or b are outside of the range 0.0 to 1.0, inclusive
Color::Color( float r, float g, float b)
{
assert( r >= 0.0f && r <= 1.0f );
assert( g >= 0.0f && g <= 1.0f );
assert( b >= 0.0f && b <= 1.0f );
//argb
colour = ( (0xFF<<24) | ( (int)(r*255)<<16 ) | ( (int)(g*255)<<8 ) | ( (int)(b*255) ) );
}
Color::Color( int r, int g, int b)
{
colour = ( (0xFF<<24) | ( (r&0xff)<<16 ) | ( (g&0xff)<<8 ) | ( (b&0xff) ) );
}
//Creates a Color object based on the specified values for the HSB color model.
//The s and b components should be floating-point values between zero and one (numbers in the range 0.0-1.0).
//The h component can be any floating-point number. The floor of this number is subtracted from it to create a fraction between 0 and 1.
//This fractional number is then multiplied by 360 to produce the hue angle in the HSB color model.
//
//Parameters:
//h - the hue component
//s - the saturation of the color
//b - the brightness of the color
//Returns:
//a Color object with the specified hue, saturation, and brightness.
Color Color::getHSBColor(float hue, float saturation, float brightness)
{
int r = 0, g = 0, b = 0;
if (saturation == 0)
{
r = g = b = (int) (brightness * 255.0f + 0.5f);
}
else
{
float h = (hue - (float)Mth::floor(hue)) * 6.0f;
float f = h - (float)Mth::floor(h);
float p = brightness * (1.0f - saturation);
float q = brightness * (1.0f - saturation * f);
float t = brightness * (1.0f - (saturation * (1.0f - f)));
switch ((int) h)
{
case 0:
r = (int) (brightness * 255.0f + 0.5f);
g = (int) (t * 255.0f + 0.5f);
b = (int) (p * 255.0f + 0.5f);
break;
case 1:
r = (int) (q * 255.0f + 0.5f);
g = (int) (brightness * 255.0f + 0.5f);
b = (int) (p * 255.0f + 0.5f);
break;
case 2:
r = (int) (p * 255.0f + 0.5f);
g = (int) (brightness * 255.0f + 0.5f);
b = (int) (t * 255.0f + 0.5f);
break;
case 3:
r = (int) (p * 255.0f + 0.5f);
g = (int) (q * 255.0f + 0.5f);
b = (int) (brightness * 255.0f + 0.5f);
break;
case 4:
r = (int) (t * 255.0f + 0.5f);
g = (int) (p * 255.0f + 0.5f);
b = (int) (brightness * 255.0f + 0.5f);
break;
case 5:
r = (int) (brightness * 255.0f + 0.5f);
g = (int) (p * 255.0f + 0.5f);
b = (int) (q * 255.0f + 0.5f);
break;
}
}
return Color( r, g, b );
}
int Color::getRGB()
{
return colour;
}

View File

@@ -1,15 +0,0 @@
#pragma once
class Color
{
private:
int colour;
public:
//Creates an opaque sRGB color with the specified red, green, and blue values in the range (0.0 - 1.0).
Color( float r, float g, float b);
Color( int r, int g, int b);
static Color getHSBColor(float h, float s, float b);
int getRGB();
};

View File

@@ -245,7 +245,6 @@ void Inventory::setupDefault() {
addItem(new ItemInstance(Item::seeds_melon));
addItem(new ItemInstance(Item::dye_powder, 1, DyePowderItem::WHITE));
addItem(new ItemInstance(Item::hoe_iron));
addItem(new ItemInstance(Item::flintAndSteel));
#ifdef RPI
Sel[0] = addItem(new ItemInstance(Item::sword_iron));
#else
@@ -358,3 +357,12 @@ bool Inventory::removeItem( const ItemInstance* samePtr ) {
}
return false;
}
void Inventory::print() {
LOGI("%s's Inventory:\n", player->name.c_str());
for (int i = 0; i < numTotalSlots; i++) {
auto item = getItem(i);
if (item) LOGI("\t %i: %s (%i) %s\n", i, item->getName().c_str(), item->count, (player->inventory->getLinked(i))? "(Linked)" : "");
}
}

View File

@@ -45,6 +45,8 @@ public:
int getAttackDamage(Entity* entity);
float getDestroySpeed(Tile* tile);
bool canDestroy(Tile* tile);
void print();
private:
void setupDefault();
public:

View File

@@ -141,6 +141,11 @@ bool FillingContainer::add( ItemInstance* item )
// // silently destroy the item when having a full inventory
// item->count = 0;
// return true;
LOGI("Inventory:\n");
for (int i = 0; i < numTotalSlots; i++) {
LOGI("\t %i: %s (%i)\n", i, items.at(i)->getName().c_str(), items.at(i)->count);
}
}
return false;

View File

@@ -19,7 +19,7 @@ public:
setMaxDamage(64);
}
/*
bool useOn(ItemInstance* instance, Player* player, Level* level, int x, int y, int z, int face, float clickX, float clickY, float clickZ) {
if (face == 0) y--;
if (face == 1) y++;
@@ -30,14 +30,14 @@ public:
int targetType = level->getTile(x, y, z);
if (targetType == 0) {
level->playSound(x + 0.5, y + 0.5, z + 0.5, "fire.ignite", 1, random.nextFloat() * 0.4f + 0.8f);
level->setTile(x, y, z, ((Tile*)Tile::fire)->id);
level->playSound(x + 0.5, y + 0.5, z + 0.5, "fire.ignite", 1, sharedRandom.nextFloat() * 0.4f + 0.8f);
level->setTile(x, y, z, Tile::fire->id);
}
instance->hurt(1);
return true;
}
*/
};
#endif /*NET_MINECRAFT_WORLD_ITEM__FlintAndSteelItem_H__*/

View File

@@ -290,3 +290,7 @@ bool ItemInstance::isArmorItem( const ItemInstance* instance ) {
return item->isArmor();
}
bool ItemInstance::isBlock(const ItemInstance* instance) {
return instance->id < 256;
}

View File

@@ -81,6 +81,8 @@ public:
static bool isArmorItem(const ItemInstance* instance);
static bool isBlock(const ItemInstance* instance);
/**
* Checks if this item is the same item as the other one, disregarding the
* 'count' value.

View File

@@ -1,13 +0,0 @@
#include "FoliageColor.h"
// TODO: Probably move all the stuff from the header into here so it's a bit cleaner
bool FoliageColor::useTint = true;
int FoliageColor::get(float temp, float rain) {
rain *= temp;
int x = (int) ((1 - temp) * 255);
int y = (int) ((1 - rain) * 255);
return pixels[y << 8 | x];
}
int* FoliageColor::pixels = nullptr;

View File

@@ -6,49 +6,31 @@
class FoliageColor
{
public:
static bool useTint;
// static void init(int[] pixels) {
// FoliageColor::pixels = pixels;
// }
//
// static int get(float temp, float rain) {
// rain *= temp;
// int x = (int) ((1 - temp) * 255);
// int y = (int) ((1 - rain) * 255);
// return pixels[y << 8 | x];
// }
static void setUseTint(bool value) {
useTint = value;
}
/*
Shredder here, Ive converted the unused commented out code into their correct syntax, though if i did something incorrectly feel free to take reference from the
commented out code
*/
static int getEvergreenColor() {
return 0x619961;
}
// static void init(int[] pixels) {
// FoliageColor::pixels = pixels;
// }
//
// static int get(float temp, float rain) {
// rain *= temp;
// int x = (int) ((1 - temp) * 255);
// int y = (int) ((1 - rain) * 255);
// return pixels[y << 8 | x];
// }
static int getBirchColor() {
return 0x80a755;
}
static void init(int* p) {
pixels = p;
}
static int get(float temp, float rain);
static int getEvergreenColor() {
return 0x619961;
}
static int getBirchColor() {
return 0x80a755;
}
static int getDefaultColor() {
return 0xFFFFFF;
}
static int getDefaultColor() {
return 0x48b518;
}
private:
// static int pixels[256*256];
static int* pixels;
//static int pixels[256*256];
};
#endif /*NET_MINECRAFT_WORLD_LEVEL__FoliageColor_H__*/

View File

@@ -1,13 +0,0 @@
#include "GrassColor.h"
// TODO: Probably move all the stuff from the header into here so it's a bit cleaner
bool GrassColor::useTint = true;
int GrassColor::get(float temp, float rain) {
rain *= temp;
int x = (int) ((1 - temp) * 255);
int y = (int) ((1 - rain) * 255);
return pixels[y << 8 | x];
}
int* GrassColor::pixels = nullptr;

View File

@@ -1,42 +0,0 @@
#ifndef NET_MINECRAFT_WORLD_LEVEL__GrassColor_H__
#define NET_MINECRAFT_WORLD_LEVEL__GrassColor_H__
//package net.minecraft.world.level;
class GrassColor
{
public:
static bool useTint;
static void setUseTint(bool value) {
useTint = value;
}
/*
Shredder here, Ive converted the unused commented out code into their correct syntax, though if i did something incorrectly feel free to take reference from the
commented out code
*/
// static void init(int[] pixels) {
// GrassColor::pixels = pixels;
// }
//
// static int get(float temp, float rain) {
// rain *= temp;
// int x = (int) ((1 - temp) * 255);
// int y = (int) ((1 - rain) * 255);
// return pixels[y << 8 | x];
// }
static void init(int* p) {
pixels = p;
}
static int get(float temp, float rain);
private:
// static int pixels[256*256];
static int* pixels;
};
#endif /*NET_MINECRAFT_WORLD_LEVEL__GrassColor_H__*/

File diff suppressed because it is too large Load Diff

View File

@@ -3,9 +3,8 @@
//package net.minecraft.world.level;
class BiomeSource;
/*
class BiomeSource;
class TileEntity;
*/
class Material;
@@ -30,7 +29,7 @@ public:
virtual bool isSolidRenderTile(int x, int i, int z) = 0;
virtual bool isSolidBlockingTile(int x, int i, int z) = 0;
virtual BiomeSource* getBiomeSource() = 0;
//virtual BiomeSource* getBiomeSource() = 0;
virtual Biome* getBiome(int x, int z) = 0;
};

View File

@@ -4,7 +4,6 @@
#include "tile/Tile.h"
#include "Level.h"
Region::Region(Level* level, int x1, int y1, int z1, int x2, int y2, int z2) {
this->level = level;
@@ -136,6 +135,6 @@ Biome* Region::getBiome( int x, int z ) {
return level->getBiome(x, z);
}
BiomeSource* Region::getBiomeSource() {
return level->getBiomeSource();
}
//BiomeSource getBiomeSource() {
// return level.getBiomeSource();
//}

View File

@@ -5,7 +5,6 @@
#include "LevelSource.h"
class Level;
class Material;
class LevelChunk;
@@ -28,7 +27,6 @@ public:
int getData(int x, int y, int z);
const Material* getMaterial(int x, int y, int z);
Biome* getBiome(int x, int z);
BiomeSource* getBiomeSource() override;
private:
int xc1, zc1;
LevelChunk*** chunks;

View File

@@ -2,14 +2,11 @@
#include "../levelgen/feature/TreeFeature.h"
#include "../levelgen/feature/TallgrassFeature.h"
#include "../levelgen/feature/BasicTree.h"
#include "../../entity/EntityTypes.h"
#include "../../entity/MobCategory.h"
#include "../../level/tile/TallGrass.h"
#include "../../../util/Color.h"
Biome* Biome::rainForest = NULL;
Biome* Biome::swampland = NULL;
Biome* Biome::seasonalForest = NULL;
@@ -143,7 +140,7 @@ void Biome::teardownBiomes() {
Feature* Biome::getTreeFeature( Random* random )
{
if (random->nextInt(10) == 0) {
return new BasicTree(false);
//return /*new*/ BasicTree();
}
return new TreeFeature(false);
}
@@ -151,9 +148,6 @@ Feature* Biome::getGrassFeature( Random* random ) {
return new TallgrassFeature(Tile::tallgrass->id, TallGrass::TALL_GRASS);
}
Biome* Biome::getBiome( float temperature, float downfall )
{
int a = (int) (temperature * 63);
@@ -210,11 +204,11 @@ float Biome::adjustDepth( float depth )
int Biome::getSkyColor( float temp )
{
temp /= 3.f;
if (temp < -1) temp = -1;
if (temp > 1) temp = 1;
// return 0x80808080;This is the vanilla way, add it as OPTION_SKY or leave it like this bcus this function literally never gets used anyways if level has vanilla sky color - shredder
return Color::getHSBColor(224 / 360.0f - temp * 0.05f, 0.50f + temp * 0.1f, 1.0f).getRGB();
// temp /= 3.f;
// if (temp < -1) temp = -1;
// if (temp > 1) temp = 1;
return 0x80808080;
//return Color.getHSBColor(224 / 360.0f - temp * 0.05f, 0.50f + temp * 0.1f, 1.0f).getRGB();
}
Biome::MobList& Biome::getMobs(const MobCategory& category)

View File

@@ -69,11 +69,11 @@ Biome* BiomeSource::getBiome( int x, int z )
return getBiomeBlock(x, z, 1, 1)[0];
}
float BiomeSource::getTemperature( int x, int z )
{
temperatures = temperatureMap->getRegion(temperatures, x, z, 1, 1, tempScale, tempScale, 0.5f);
return temperatures[0];
}
//float BiomeSource::getTemperature( int x, int z )
//{
// temperatures = temperatureMap->getRegion(temperatures, x, z, 1, 1, tempScale, tempScale, 0.5f);
// return temperatures[0];
//}
Biome** BiomeSource::getBiomeBlock( int x, int z, int w, int h )
{
@@ -123,7 +123,7 @@ Biome** BiomeSource::getBiomeBlock( Biome** biomes__, int x, int z, int w, int h
return biomes;
}
float* BiomeSource::getTemperatureBlock( float* temperatures__, int x, int z, int w, int h )
float* BiomeSource::getTemperatureBlock( /*float* temperatures__, */int x, int z, int w, int h )
{
//LOGI("gTempBlock: 1\n");
//const int size = w * h;
@@ -164,8 +164,8 @@ float* BiomeSource::getTemperatureBlock( float* temperatures__, int x, int z, in
return temperatures;
}
float* BiomeSource::getDownfallBlock( float* downfalls__, int x, int z, int w, int h )
{
//float* BiomeSource::getDownfallBlock( /*float* downfalls__,*/ int x, int z, int w, int h )
//{
// //const int size = w * h;
// //if (lenDownfalls < size) {
// // delete[] downfalls;
@@ -173,6 +173,6 @@ float* BiomeSource::getDownfallBlock( float* downfalls__, int x, int z, int w, i
// // lenDownfalls = size;
// //}
//
downfalls = downfallMap->getRegion(downfalls, x, z, w, w, downfallScale, downfallScale, 0.5f);
return downfalls;
}
// downfalls = downfallMap->getRegion(downfalls, x, z, w, w, downfallScale, downfallScale, 0.5f);
// return downfalls;
//}

View File

@@ -31,13 +31,13 @@ public:
virtual Biome* getBiome(const ChunkPos& chunk);
virtual Biome* getBiome(int x, int z);
virtual float getTemperature(int x, int z);
//virtual float getTemperature(int x, int z);
// Note: The arrays returned here are temporary in the meaning that their
// contents might change in the future. If you need to SAVE the
// values, do a shallow copy to an array of your own.
virtual float* getTemperatureBlock(float* temperatures, int x, int z, int w, int h);
virtual float* getDownfallBlock(float* downfalls, int x, int z, int w, int h);
virtual float* getTemperatureBlock(/*float* temperatures, */ int x, int z, int w, int h);
//virtual float* getDownfallBlock(/*float* downfalls, */int x, int z, int w, int h);
virtual Biome** getBiomeBlock(int x, int z, int w, int h);
private:

View File

@@ -6,7 +6,6 @@
#include "Biome.h"
#include "../levelgen/feature/TreeFeature.h"
#include "../levelgen/feature/BirchFeature.h"
#include "../levelgen/feature/BasicTree.h"
class ForestBiome: public Biome
{
@@ -16,7 +15,7 @@ public:
return new BirchFeature();
}
if (random->nextInt(3) == 0) {
return new BasicTree(false);
//return new BasicTree();
}
return new TreeFeature(false);
}

View File

@@ -6,14 +6,13 @@
#include "Biome.h"
#include "../../../util/Random.h"
#include "../levelgen/feature/TreeFeature.h"
#include "../levelgen/feature/BasicTree.h"
class RainforestBiome: public Biome
{
public:
Feature* getTreeFeature(Random* random) {
if (random->nextInt(3) == 0) {
return new BasicTree(false);
//return new BasicTree();
}
return new TreeFeature(false);
}

View File

@@ -262,14 +262,14 @@ void LevelChunk::recalcHeight(int x, int yStart, int z) {
/*public*/
void LevelChunk::skyBrightnessChanged() {
int x0 = xt;
int y0 = this->minHeight - 16;
int z0 = zt;
int x1 = xt + 16;
int y1 = Level::DEPTH - 1;
int z1 = zt + 16;
// int x0 = xt;
// int y0 = this->minHeight - 16;
// int z0 = zt;
// int x1 = xt + 16;
// int y1 = Level::DEPTH - 1;
// int z1 = zt + 16;
level->setTilesDirty(x0, y0, z0, x1, y1, z1);
//level->setTilesDirty(x0, y0, z0, x1, y1, z1);
}
/*public*/

View File

@@ -15,8 +15,7 @@ Dimension::Dimension()
ultraWarm(false),
hasCeiling(false),
biomeSource(NULL),
id(0),
fogColor(0x80daff)
id(0)
{
}
@@ -94,18 +93,6 @@ float* Dimension::getSunriseColor( float td, float a )
Vec3 Dimension::getFogColor( float td, float a )
{
if (FogType == 1)
{
fogColor = 0xc0d8ff; // 1 returns java beta styled fog color.
}
else if (FogType == 2)
{
fogColor = 0x406fe5; // 2 returns some type of unused fog color IDK what this one was used for possibly early pe??
}
else // otherwise as default we return the mcpe fog color
{
fogColor = 0x80daff;
}
float br = Mth::cos(td * Mth::PI * 2) * 2 + 0.5f;
if (br < 0.0f) br = 0.0f;
if (br > 1.0f) br = 1.0f;
@@ -117,8 +104,7 @@ Vec3 Dimension::getFogColor( float td, float a )
g *= br * 0.94f + 0.06f;
b *= br * 0.91f + 0.09f;
return Vec3(r, g, b);
//
//return Vec3(0.752941f, 0.847059f, 1);
}
bool Dimension::mayRespawn()

View File

@@ -49,11 +49,8 @@ public:
bool hasCeiling;
float brightnessRamp[16];//Level::MAX_BRIGHTNESS + 1];
int id;
// shredder added
int FogType; // lets us choose between what fog we want ig
protected:
long fogColor; //= 0x80daff;//0x406fe5;//0xc0d8ff;
static const long fogColor = 0x80daff;//0x406fe5;//0xc0d8ff;
float sunriseCol[4];
};

View File

@@ -9,7 +9,6 @@
class NormalDayCycleDimension: public Dimension {
public:
float getTimeOfDay(long time, float a) {
int dayStep = (int) (time % Level::TICKS_PER_DAY);
float td = (dayStep + a) / Level::TICKS_PER_DAY - 0.25f;
@@ -21,18 +20,6 @@ public:
}
Vec3 getFogColor( float td, float a ) {
if (FogType == 1)
{
fogColor = 0xc0d8ff; // 1 returns java beta styled fog color.
}
else if (FogType == 2)
{
fogColor = 0x406fe5; // 2 returns some type of unused fog color IDK what this one was used for possibly early pe??
}
else // otherwise as default we return the mcpe fog color
{
fogColor = 0x80daff;
}
float br = cos(td * Mth::PI * 2) * 2 + 0.5f;
if (br < 0) br = 0;
if (br > 1.f) br = 1.f;
@@ -48,7 +35,7 @@ public:
return Vec3(r, g, b);
}
};
#endif /*NET_MINECRAFT_WORLD_LEVEL_DIMENSION__NormalDayCycleDimension_H__*/

View File

@@ -1,4 +1,4 @@
#if 0
#include "CanyonFeature.h"
@@ -138,7 +138,7 @@ void CanyonFeature::addTunnel( int xOffs, int zOffs, unsigned char* blocks, floa
}
}
void CanyonFeature::addFeature(Level* level, int x, int z, int xOffs, int zOffs,unsigned char* blocks)
void CanyonFeature::addFeature( Level level, int x, int z, int xOffs, int zOffs, char* blocks )
{
if (random.nextInt(15) != 0) return;
@@ -151,7 +151,6 @@ void CanyonFeature::addFeature(Level* level, int x, int z, int xOffs, int zOffs,
float thickness = (random.nextFloat() * 2 + random.nextFloat()) + 1;
addTunnel(xOffs, zOffs, blocks, xCave, yCave, zCave, thickness, yRot, xRot, 0, 0, 5.0);
}
/* //private
@@ -166,4 +165,4 @@ void CanyonFeature::addFeature(Level* level, int x, int z, int xOffs, int zOffs,
for (int z = zOffs - r; z <= zOffs + r; z++) {
random.setSeed((x * xScale + z * zScale) ^ level.seed);*/
#endif

View File

@@ -1,7 +1,7 @@
#ifndef NET_MINECRAFT_WORLD_LEVEL_LEVELGEN__CanyonFeature_H__
#define NET_MINECRAFT_WORLD_LEVEL_LEVELGEN__CanyonFeature_H__
#if 0
//package net.minecraft.world.level.levelgen;
@@ -12,8 +12,8 @@ class CanyonFeature: public LargeFeature {
/*protected*/
void addTunnel(int xOffs, int zOffs, unsigned char* blocks, float xCave, float yCave, float zCave, float thickness, float yRot, float xRot, int step, int dist, float yScale);
/*protected*/
void addFeature(Level* level, int x, int z, int xOffs, int zOffs,unsigned char* blocks);
void addFeature(Level level, int x, int z, int xOffs, int zOffs, char* blocks);
};
#endif
#endif /*NET_MINECRAFT_WORLD_LEVEL_LEVELGEN__CanyonFeature_H__*/

Some files were not shown because too many files have changed in this diff Show More