238 Commits

Author SHA1 Message Date
09cc2ceee4 hopefully fixed web world creation 2026-07-20 23:35:32 +03:00
7620d49489 I should go sleep ig 2026-07-20 23:14:59 +03:00
381ef354c6 wtfffffff with git 2026-07-20 23:14:21 +03:00
8be6e381d8 ok i was wrong 2026-07-20 23:12:34 +03:00
3ab30eefa4 Revert "hopefully fixed ios build"
This reverts commit 92f972d320.
2026-07-20 23:10:28 +03:00
325ab94a64 Revert "fuck i forgot ro remove tinted side option too"
This reverts commit c616546e1e.
2026-07-20 23:10:25 +03:00
9434a48ae7 Revert "help me"
This reverts commit 79be815827.
2026-07-20 23:10:21 +03:00
79be815827 help me 2026-07-20 23:01:12 +03:00
c616546e1e fuck i forgot ro remove tinted side option too 2026-07-20 22:56:20 +03:00
92f972d320 hopefully fixed ios build 2026-07-20 22:53:31 +03:00
980fc2ccfb fix build!! 2026-07-20 22:48:38 +03:00
3b82c519d0 Merge pull request 'Add icon for win32' (#18) from yefeng/minecraft-pe-0.6.1:main into main
Reviewed-on: #18
2026-07-20 21:41:45 +02:00
002bb40aae FIX: OpenAL error loop 2026-07-20 22:25:18 +03:00
6f4a07a306 Merge pull request 'Style changes' (#27) from Dram27-fix-settings-scrolling into main
Reviewed-on: #27
2026-07-20 21:14:57 +02:00
d5a3871f56 Merge pull request 'fix-settings-scrolling' (#24) from Dram27/minecraft-pe-0.6.1:fix-settings-scrolling into main
Reviewed-on: #24
2026-07-20 21:13:41 +02:00
0c32f620af Sorry, apple users, I'm temporary removing foliage tinting 2026-07-20 22:11:41 +03:00
93bf97a15e Style changes 2026-07-20 20:05:29 +03:00
0ee809daf1 Added new sources to xcodeproj so it can compile again
pull request opened and merged by me [obama giving medal to himself gif]
2026-07-20 18:12:11 +02:00
a048a51300 Added new sources to xcodeproj so it can compile again 2026-07-20 11:53:20 -04:00
365d8a10da Update README.md 2026-07-20 17:25:02 +02:00
3940c9ce1b Update README.MD 2026-07-20 16:22:56 +02:00
156849eeb6 Update README.md 2026-07-20 15:56:21 +02:00
6a8b192024 Update README.md 2026-07-20 15:45:27 +02:00
ce8ca15c56 FIX: android entity shadows 2026-07-20 15:37:19 +03:00
f7ad5acd33 remove includes for server 2026-07-19 01:04:34 +03:00
444e826d1b aa 2026-07-18 23:41:05 +02:00
6b6ad48617 Merge branch 'dedicated-rewrite' 2026-07-18 23:23:46 +02:00
e43da17d66 oh i didnt know 2026-07-18 23:02:25 +03:00
3fcf3e3418 link WSA with server 2026-07-18 22:47:41 +03:00
8955b6ea47 ADD: server build for windows 2026-07-18 22:32:13 +03:00
4f21343e3b release soon but we need to fix large world in mp 2026-07-18 21:01:13 +02:00
fcf7427fb2 gg fixed 2026-07-18 19:14:16 +02:00
50d1de49e0 FIX: multiplayer leave crash and compilation 2026-07-18 15:25:03 +03:00
3811964689 ffqwfqwfw 2026-07-18 14:02:45 +02:00
26e5376030 FIX: Crash when server is disaibling 2026-07-10 21:45:52 +02:00
d3d9b1a238 anticheat sucks xdxd 2026-07-10 00:59:26 +02:00
f0df3fe257 Server for windows wow 2026-07-10 00:46:36 +02:00
3ebed84cdb FIX: crash while joining to large world server 2026-07-02 16:32:17 +03:00
Shredder
d08948fb00 renable generation features 2026-05-23 06:03:34 +05:00
Shredder
061d6db3a9 add burp1.ogg to fix android compilation 2026-05-23 05:46:11 +05:00
Shredder
346ec7469e merge branch 'main' of https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1 2026-05-23 05:30:27 +05:00
Shredder
d7d887f882 few additions and bug fixes
Added Hand Sway (not an option yet) from b1,8

Fire works properly in multiplayer now and also renders on undead mobs in sunlight now

hopefully fixed bow stuck bug on touchscreen devices

Fire on entites uses updated rendering from b1.6.6

Shadow bug fix attempt the 15th

Added looking at block in debug screen

Zombie Pigman now renders his hat layer

Temporarily disabled most randomlevelsource cave, canyon and tall grass code just for this commit to test performance
2026-05-23 05:29:47 +05:00
ce182b676f Merge pull request 'added missing audio random.burp when finishing a food item' (#14) from sas3/minecraft-pe-0.6.1:main into main
Reviewed-on: #14
2026-05-12 21:50:28 +02:00
b73f7f121d ee 2026-05-12 21:29:17 +02:00
Kolyah35
5e19ef778e FIX: memset ._. 2026-05-12 22:12:52 +03:00
Shredder
4b69a1240a Some fixes
Fixed Missing Lighting calls and GL states which was causing stars to render too early

Split Controls should hopefully work on phones now

Chickens should hopefully lay eggs now
2026-05-12 02:25:04 +05:00
Shredder
8f34fbc1ec It isn't a commit without a linux compilation fail 2026-05-11 05:07:07 +05:00
Shredder
890604256b Fixes and New Additions
Added GUI Styles with 3 options: Java, Pi/Xperia and Pocket

Hopefully fixed touch input eating and breaking blocks bug

Fire should render on all mobs now

Fixed only one side of the first person burning animation being animated

Added Window Scaling Option for PC Users (Hasn't been tested on other platforms

Render Distance is now configurable from the settings menu

Tried to fix shadows again on IOS and Android, hopefully works?

Block Outline Selection now has a thicker outline for better visibility
2026-05-11 04:51:03 +05:00
5bc19c4ab2 FEAT: Ban command, save ops and banned ppl in files
TODO: fix many crashes...
2026-05-09 16:37:11 +02:00
dfb3bf1da7 FIX: render
ty shredder
2026-05-09 14:41:31 +02:00
263118f2e0 Fix 2026-05-09 13:09:45 +02:00
Shredder
792d4b32e7 Fixed Grass Foliage color using foliagecolor.png instead of grasscolor.png
Debug Screen now also renders mob id nametags like in beta java

SkyDarken is now also no longer clamped in Java Fog Style
2026-05-09 06:27:30 +05:00
1d0264a9c5 FEAT: World size 2026-05-09 01:45:19 +02:00
43f0d1f75f server config 2026-05-08 23:42:41 +02:00
Shredder
2da05d94c8 should return some value in the debug stuff so nothing breaks 2026-05-07 14:06:01 +05:00
Shredder
a0e99e2f03 debug screen ifdef case because linux compilation is hell 2026-05-07 13:59:13 +05:00
Shredder
b6ea0c7dc3 this has to be an insanely hacky solution to get it working on linux again 2026-05-07 13:50:08 +05:00
Shredder
620b358ba7 i love when my errors are cryptic 2026-05-07 13:33:57 +05:00
70308d4151 qqqqqq 2026-05-05 21:55:03 +02:00
830549791a 121 2026-05-05 21:51:35 +02:00
27b22d8108 vegetables 2026-05-05 21:41:26 +02:00
4047fd71e1 oi 2026-05-05 21:36:35 +02:00
30dd344208 123 2026-05-05 21:33:28 +02:00
7e9de7a461 fck android build!!! 2026-05-05 21:19:08 +02:00
2465292473 jopa 2026-05-05 21:14:17 +02:00
26b2c196fa :\ 2026-05-05 21:09:42 +02:00
18793a6e05 idk? 2026-05-05 20:40:41 +02:00
Shredder
edc6985a6b opengl and gles and their damn deprecated functions 2026-05-05 01:18:57 +05:00
Shredder
9cd91b1508 should finally work hopefully... 2026-05-05 01:05:57 +05:00
Shredder
9c46d7094c sigh converted to_string calls to sprintf 2026-05-05 00:51:03 +05:00
Shredder
52afff463b left a debug opengl only feature accidentally in, and also hopefully fixed include mess 2026-05-05 00:21:37 +05:00
Shredder
0d23fadc3e how did this even slip past me 2026-05-05 00:13:05 +05:00
Shredder
614e018dc6 fixed merge 2026-05-05 00:05:17 +05:00
Shredder
e346df682c Another Huge Commit my bad - shredder
Restored Java's Debug Screen using partial unused code and ported code, avaliable in options menu as a style

Slight Water texture is now overlayed when in water

Vignette function has been fixed and can now be toggled in options

World Generation now includes Tall Grass and Ferns both

Broken Frame Chart Graph found in the source has now been fixed and enabled when debug screen is turned on

Pie Chart works now and will appear when debug screen is opened

Most changes have not been tested on anything besides windows, will test it
2026-05-04 01:28:27 +05:00
Kolyah35
3e48c7fabd FIX: compilation 2026-05-02 21:31:48 +03:00
de72a9a3b7 all was broken :\ 2026-04-27 23:43:36 +02:00
0645905fc6 eeee it doesnt work 😭 2026-04-27 22:18:18 +02:00
b3561e773d Fix to prevent text overlap in options list during scroll 2026-04-26 16:12:56 +02:00
162ec7adfa Fix bottom settings overlapping with Credits button 2026-04-26 16:00:44 +02:00
4cfaa43d77 Added scroll with wheel on PC and touch scroll on Android/IOS 2026-04-26 15:47:52 +02:00
Shredder
31d80aedf8 Massive Java Parity Update - fileshredder
3D/Fancy Clouds have been ported over

Sky Rendering is now an option between Java and PE

Java Sky/Fog color option is now accurate using the original color ramp instead of PE's slightly lower one

Grass Sides are now tinted, and can be toggled in settings

Added stars, the sun, and the moon in the daylight cycle

Sunset color has been added, appears when the sun is rising or falling, buggy on PE's sky rendering option.

Fixed leaves being rendered bright green when foliage tinting was turned off.

Enabled Tall Grass generation code

Tall Grass is now tinted.

Other compile options have to be tested
2026-04-25 04:47:07 +05:00
Kolyah35
bc82f5c091 FIX: Completely remove renderSky() codeblock 2026-04-15 01:06:48 +03:00
8d7a1973e7 Merge pull request 'Fix upper sky cut when using fancy graphics' (#22) from Dram27/minecraft-pe-0.6.1:fix-height-based-culling into main
Reviewed-on: https://192.168.0.2:3000/Kolyah35/minecraft-pe-0.6.1/pulls/22
2026-04-15 00:04:39 +02:00
3a0f4c3647 Fix upper sky cut when using fancy graphics 2026-04-13 17:42:19 +02:00
Shredder
d6a3e477c1 forgot to move the clamp calls below 2026-04-12 02:29:27 +05:00
Shredder
4d68c4dff8 forgot to change vertex size for touch circle, also shadow attempt fix again 2026-04-12 02:26:54 +05:00
Shredder
e1c2210621 sigh, another attempt at fixing normal shading for android 2026-04-12 02:09:42 +05:00
Shredder
c188fa0ce2 Attempt to fix Normal Lighting and Shadows on Android, also disabled fancy trees temporarily due to performance issues on android. 2026-04-12 01:12:17 +05:00
Shredder
9db9f469cc xcode attempt 2 2026-04-11 20:40:56 +05:00
Shredder
db7a889962 please xcode work with me here 2026-04-11 20:33:14 +05:00
Shredder
95a193323c ios compile fix attempt again.... xcode my behated 2026-04-11 20:28:00 +05:00
Shredder
f19c2d24a3 Attempt to fix Normal Shading on Android and fix IOS compile, also hopefully fixes the millions of errors in the ios logs 2026-04-11 19:39:46 +05:00
Shredder
e1b81a7cc3 another attempt... i hate gles... 2026-04-11 15:21:21 +05:00
Shredder
baeefae94d synced branch

2026-04-11 14:46:36 +05:00
Shredder
aa9fa659df Extremely Big Update - fileshredder
(MAJOR)Added Java Beta/Normal Shading, toggleble in settings

Fixed and restored the unused Item Switching Animation, toggleble in tweaks too

Added Dynamic Texture for Lava

Added option to use Block Outline Selection which was unused normally

Added Split Touch Controls into Options

Mobs will now drop cooked variants of their meat if they died by fire

Fixed Untranslated Strings in Settings

(MAJOR) Ravines and Lava/Water pools have been fixed and renabled

Tweaked BasicTree to hopefully speed up generation a bit, might disable them temporarily if they keep being slow

You can now grow Fancy Oak Trees using saplings.
2026-04-11 14:45:47 +05:00
Kolyah35
6049239303 why tf apks in releases are zipped 2026-04-10 23:53:18 +03:00
Shredder
55d06f0590 Merge branch 'main' of https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1 2026-04-09 04:35:25 +05:00
Shredder
58b7724ba2 fileshredder - fixed fire tile's alpha transparency and fixed vanilla bug where hotbar slots are not rendered transparent like how they are in Beta Java 2026-04-09 04:34:10 +05:00
6ae787b90d Merge PR 'Support for iOS builds!' (#21) | Many thanks to deepfriedwaffles!
Reviewed-on: https://192.168.0.2:3000/Kolyah35/minecraft-pe-0.6.1/pulls/21
2026-04-06 21:58:19 +02:00
Kolyah35
fe73853a64 defined() would be better ig 2026-04-06 22:49:54 +03:00
845d721b1e fixed compile issues from main rebase and lowered ios minimum deployment back to 12 2026-04-06 14:48:46 -04:00
d7a02bfc90 Added iOS comppiling instructions to README 2026-04-06 14:28:07 -04:00
13fd830361 fixed the possible broken header search and added all jobs including ios to publish 2026-04-06 14:28:07 -04:00
Kolyah35
a96b942c17 FIX: web and android compilation 2026-04-06 14:28:07 -04:00
Kolyah35
c476153231 FIX: other platforms compilation 2026-04-06 14:28:07 -04:00
412a34562f Lowered minimum deployment to iOS 12, rather than iOS 14 2026-04-06 14:28:06 -04:00
98dd53e2f5 Update .github/workflows/build.yml
I keep messing this up. For now I am removing all the needs for publish except iOS
2026-04-06 14:28:06 -04:00
6f0c485a9f removed if line from publish to always run it. can we not skip publish thanks 2026-04-06 14:28:06 -04:00
7cc33b011d Fixed bugs in starting the game. ALso added build job for iOS ipa unsigned 2026-04-06 14:28:06 -04:00
aeb8e45879 fixed button not pressable on ios 2026-04-06 14:28:06 -04:00
d554767309 IT COMPILESgit add .! also added full screen support. see issues. 2026-04-06 14:28:06 -04:00
aec534d948 restore include paths for cross-platform builds because i messed absolutely every #include up. 2026-04-06 14:28:06 -04:00
8867878ccf more refactoring for iOS 2026-04-06 14:28:06 -04:00
44ece561e8 fixed slider for hopefully the final fucking time. Nether Reactor fix: Need to make the array for building it all unsigned integers as now Xcode is strict about the new C++ Standards as they have changed since 2011 2026-04-06 14:28:06 -04:00
22b59bd2cc Synced options UI files from main branch 2026-04-06 14:28:06 -04:00
705c4154ee gonna try changing all Options::Option* in the whole project to just Option* not sure if this works but it gets the compiler to shut up. if this breaks everything change all 'Option*' to 'Options::Option*' as it once was. 2026-04-06 14:28:06 -04:00
59898ca504 more header fixes 2026-04-06 14:28:06 -04:00
b658132dac fix missing file, commiting now because what im about to do might break Option class 2026-04-06 14:28:06 -04:00
ab5f177208 added needed missing files 2026-04-06 14:28:06 -04:00
72b68389b2 Started to port to iOS; fixing compiler errors here and there 2026-04-06 14:28:06 -04:00
Shredder
59ba8bfb7c my bad should be fixed now 2026-04-06 10:00:12 +05:00
Shredder
ef32fcfe08 attempt again 2026-04-06 02:26:46 +05:00
Shredder
2237515793 fileshredder - linux compile fix 2026-04-06 02:15:35 +05:00
Shredder
e272991159 fileshredder - minor goof up 2026-04-06 02:05:23 +05:00
Shredder
055f00be49 A bit big of a commit but
Added 3 Fog Choices (Pocket) (Java) (Unknown that was unused)

Restored Java Beta Sky Color code that was unused that depends on biome temperature (choosable using Java fog)

Tile Shadows and Entity Shadows that appear beneath them have been restored and fixed from the unused code, toggleable by turning fancy graphics on or off

Entities will now render flames on themselves when on fire, including the player

Added option to use Java Style Item Count text and position in tweaks

- fileshredder
2026-04-06 01:52:27 +05:00
Kolyah35
4023d70687 FEAT: server-side commands 2026-04-04 01:13:56 +03:00
Shredder
378dfe8e22 award for brain of a goldfish goes to me 2026-04-03 15:54:48 +05:00
Shredder
61f0124beb oops forgot to define some things 2026-04-03 15:37:15 +05:00
Shredder
ff5c57f6ba Added Foliage and Grass Color tinting, Started Basic Work on restoring ravines, New Option to Toggle Tinting. 2026-04-03 14:55:33 +05:00
Shredder
eac71a93d1 ok this should finally work now 2026-04-02 01:35:06 +05:00
Shredder
fa249728e5 hopefully fixes broken build 2026-04-02 01:19:47 +05:00
Shredder
84e8744387 oops forgot to include the other files. 2026-04-01 23:37:37 +05:00
Shredder
27f0287986 Ported over Spooner Trees (Fancy Trees), Flint and Steel can be used to ignite fire now and modified Forest and Rainforest to generate spooner trees. 2026-04-01 23:31:15 +05:00
Shredder
109bbcfdb1 Added Rendering and Dynamic texture for Fire and it's behaviour 2026-04-01 14:03:38 +05:00
Kolyah35
4dc7055d9d FIX: make antispeedhack working 2026-03-31 23:34:41 +03:00
Kolyah35
1ec347d5d5 FEAT: Server operators 2026-03-31 00:40:10 +03:00
Kolyah35
5194575092 FEAT: Meet the commands 2026-03-30 14:04:16 +03:00
3cfa2d9ee7 FIX IT AHTUNG AHTUNG ALL DOESNT WORK FIX IT FIX IT FIX IT FIX IT BIG WARNING BIG WARNING 2026-03-29 16:53:46 +02:00
f016f00eab idk?? 2026-03-29 00:16:19 +02:00
Kolyah35
470c28d83a I dont know what im doin please help 2026-03-29 00:36:36 +03:00
4363157cd9 Delete useless class 2026-03-28 21:08:52 +02:00
ba3ed3b4dd i dont see reason of this error 2026-03-28 18:37:02 +02:00
5783fb93f3 forgot to comment 2026-03-28 17:39:37 +02:00
73fb2a2b3d wtf 2026-03-28 17:18:38 +02:00
bcf48eb5e3 FEAT: Damage on server 2026-03-28 16:41:00 +02:00
yefengeeeeeeeeeee
f1e8932fbd Add icon for win32 2026-03-28 18:12:34 +08:00
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
SAS_OP
88ef7f3d17 added missing audio random.burp when finishing a food item 2026-03-25 06:07:49 +03:00
Kolyah35
cbd81b47ce ADD: EpikIzCool to credits 2026-03-24 17:32:52 +03:00
c146791845 Merge pull request 'Fix Whool and block variations n slabs n stuff' (#13) from EpikIzCool/minecraft-pe-0.6.1:main into main
Reviewed-on: https://192.168.0.2:3000/Kolyah35/minecraft-pe-0.6.1/pulls/13
2026-03-24 16:31:46 +02:00
a7c75d2ad2 Touch thingie 2026-03-24 00:29:52 +02:00
468ae4a211 Whool Fix part 1 2026-03-24 00:24:16 +02:00
9405e8daad FIXED: Scrolling with mouse wheel improved 2026-03-22 18:38:14 +01:00
bef09a3305 FIXED: sprinting now works when flying 2026-03-22 14:51:22 +01:00
Kolyah35
82f827af29 Merge remote-tracking branch 'refs/remotes/origin/main' 2026-03-22 02:12:46 +03:00
Kolyah35
4f8b18b735 FIX: Now we're using useTouchsceen() right way!!!! 2026-03-22 02:12:04 +03:00
2acb57d051 revert all sht 2026-03-21 19:19:07 +02:00
5251085752 i broke all 2026-03-21 19:09:11 +02:00
a16f76f2b6 idk??? 2026-03-21 19:05:00 +02:00
b088f39e52 emm 2026-03-21 18:54:51 +02:00
13c624e07e hmmmmmmmmmm 2026-03-21 18:54:04 +02:00
2bfa8f11f1 hmm 2026-03-21 18:39:08 +02:00
98a05e5aa3 FIX: Keyboard on android 2026-03-21 18:25:42 +02:00
3f6d9cdcb8 FIX: Armor display 2026-03-21 18:10:46 +02:00
39186069cf Merge branch 'main' of https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1 2026-03-21 16:22:50 +02:00
b94c16b22a FIX: Bow release 2026-03-21 16:22:50 +02:00
Kolyah35
91ce365a26 Merge remote-tracking branch 'refs/remotes/origin/main' 2026-03-21 17:20:18 +03:00
Kolyah35
f114536463 FIX: improve web port 2026-03-21 17:19:46 +03:00
6e0615c0bc FEAT: Auto jump in settings (again) 2026-03-21 16:03:51 +02:00
fd3ee23e4e Merge branch 'main' of https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1 2026-03-21 15:44:06 +02:00
e9766ed2a1 FEAT: Option button in PauseScreen 2026-03-21 15:44:05 +02:00
Kolyah35
298451c290 USE_LIBPNG when compile web 2026-03-21 15:28:50 +03:00
Kolyah35
668fc9d16f oh i forgot data 2026-03-21 15:25:18 +03:00
Kolyah35
5717aeab24 ADD: Web action 2026-03-21 15:23:37 +03:00
Kolyah35
9af1496b9d FIX: windows CI build 2026-03-21 15:04:50 +03:00
6bfae5a14e Merge branch 'main' of https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1 2026-03-21 13:43:29 +02:00
4034cf243d FIX: glfw crash when closing the game 2026-03-21 13:43:28 +02:00
b6e7414f04 Merge pull request 'fix msvc build & mingw build' (#10) from evildebugger/minecraft-pe-0.6.1:main into main
Reviewed-on: https://192.168.0.2:3000/Kolyah35/minecraft-pe-0.6.1/pulls/10
2026-03-21 12:48:51 +02:00
66hh
83f3284827 fix msvc build & mingw build
1. Include unified header files using lowercase filenames
2. Change special characters to escape sequences to solve encoding issues
2026-03-21 18:32:09 +08:00
Kolyah35
3dab395af3 fix workflow and im done 2026-03-21 02:45:06 +03:00
Kolyah35
011c8f7123 fix mingw build 2026-03-21 02:35:04 +03:00
Kolyah35
f69c009da9 replace pwd with workspace 2026-03-21 01:38:17 +03:00
Kolyah35
b66b4a2dc2 wtf im dumb 2026-03-21 01:35:40 +03:00
Kolyah35
7037b2b5f2 create build dir 2026-03-21 01:33:57 +03:00
Kolyah35
d54e39b332 -_- 2026-03-21 01:32:47 +03:00
Kolyah35
f96ba8bb33 ubuntu 22.04 2026-03-21 01:31:42 +03:00
Kolyah35
f0e1980f59 i dont like xwin anymore 2026-03-21 01:31:35 +03:00
52f607b126 Made some changes to the GUI scale slider.
Should be waaaaaaay better now
2026-03-20 23:20:37 +01:00
Kolyah35
84a956531c and here 2026-03-21 00:56:21 +03:00
Kolyah35
c4f5f22f24 disable module scan 2026-03-21 00:51:35 +03:00
Kolyah35
7867aea042 bruh 2026-03-21 00:43:57 +03:00
Kolyah35
a90e1463ee maybe try geode msvc sdk 2026-03-21 00:41:19 +03:00
Kolyah35
59e820e27f setup ninja 2026-03-21 00:33:59 +03:00
Kolyah35
1199f53632 -_- 2026-03-21 00:28:07 +03:00
Kolyah35
dc0e2c192b oh i forgot headers 2026-03-21 00:23:56 +03:00
Kolyah35
6ef9efa434 maybe ninja? 2026-03-21 00:17:53 +03:00
Kolyah35
72e6537dc5 Merge remote-tracking branch 'refs/remotes/origin/main' 2026-03-21 00:15:24 +03:00
Kolyah35
0e2e7694d3 oops 2026-03-21 00:12:51 +03:00
45f04ca07b readme fix 2026-03-20 23:08:24 +02:00
42e7a3da90 Merge branch 'main' of https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1 2026-03-20 23:00:36 +02:00
0edee15930 FEAT:Raspberry PI cursor in tweaks 2026-03-20 22:59:52 +02:00
753fdbe701 FIXED: support 64x32 + 64x64 skins with fallback for failed skin URL 2026-03-20 21:47:53 +01:00
ac60559a22 FIXED: Saving works on Android now!
I honestly changed too much stuff trying to pinpoint a fix. I might be stupid.
I have no idea what I did that fixed this.
2026-03-20 21:11:17 +01:00
Kolyah35
be6fa57a10 trying to speed up windows build 2026-03-20 23:07:27 +03:00
Kolyah35
68f5bc3a0a why zip only files inside data??? 2026-03-20 22:56:00 +03:00
Kolyah35
0a24a51663 uuuh 2026-03-20 22:43:49 +03:00
Kolyah35
96b17e9c8a tring to pack data with desktop releases 2026-03-20 22:26:26 +03:00
Kolyah35
c08c4d270d specify targets for linux 2026-03-20 22:17:20 +03:00
Kolyah35
8cd74922bf maybe remove that subdir from path? 2026-03-20 22:10:50 +03:00
Kolyah35
b2707cc35d yeah fix shit 2026-03-20 22:03:41 +03:00
Kolyah35
1ff91505d8 FIX: ndk and tools caching 2026-03-20 21:57:57 +03:00
Kolyah35
b909f3c576 EnumOption 2026-03-20 21:53:10 +03:00
Kolyah35
8d1c4f1c4e aaah who did revert my cmake changes 2026-03-20 21:50:45 +03:00
Kolyah35
bc5cbe6b73 Merge remote-tracking branch 'refs/remotes/origin/main' 2026-03-20 21:47:46 +03:00
Kolyah35
cda2534c1e ADD: pause and chat btn 2026-03-20 21:46:43 +03:00
c54bdfdcff Target SDK lowered for compatibility
Setting it to 36 broke some permission things
Still seems like the game can't write anywhere even with r/w permissions...
2026-03-20 19:07:25 +01:00
d5b2c59ebf FIX: Cmake 2026-03-20 19:14:18 +02:00
258 changed files with 12935 additions and 5141 deletions

17
.github/actions/setup-ninja/action.yml vendored Normal file
View File

@@ -0,0 +1,17 @@
name: Setup Ninja
description: Sets up Ninja
inputs:
host:
description: 'Host platform: win, mac or linux'
required: true
runs:
using: "composite"
steps:
- name: Setup
shell: bash
run: |
curl -L https://github.com/ninja-build/ninja/releases/latest/download/ninja-${{ inputs.host }}.zip -o ninja.zip
7z x ninja.zip -o"$GITHUB_WORKSPACE/ninja"
echo "$GITHUB_WORKSPACE/ninja" >> $GITHUB_PATH

View File

@@ -18,8 +18,8 @@ permissions:
jobs: jobs:
build-windows: build-windows:
name: Windows Build name: Build Windows
runs-on: windows-latest runs-on: ubuntu-22.04
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@@ -27,37 +27,80 @@ jobs:
- name: Setup caches - name: Setup caches
uses: ./.github/actions/setup-cache uses: ./.github/actions/setup-cache
with: with:
host: win host: linux
target: win target: win
- name: Setup Ninja
uses: ./.github/actions/setup-ninja
with:
host: linux
- name: Download llvm-mingw
run: |
curl -L https://github.com/mstorsjo/llvm-mingw/releases/download/20260311/llvm-mingw-20260311-msvcrt-ubuntu-22.04-x86_64.tar.xz -o llvm-mingw.tar.xz
tar -xf llvm-mingw.tar.xz
mv llvm-mingw-* llvm-mingw
- name: Create Build Environment - name: Create Build Environment
# Some projects don't allow in-source building, so create a separate build directory # Some projects don't allow in-source building, so create a separate build directory
# We'll use this as our working directory for all subsequent commands # We'll use this as our working directory for all subsequent commands
run: cmake -E make_directory ${{github.workspace}}/build run: cmake -E make_directory ${{github.workspace}}/build
- name: Configure CMake - name: Configure CMake
shell: powershell
working-directory: ${{github.workspace}}/build working-directory: ${{github.workspace}}/build
run: cmake $env:GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$env:BUILD_TYPE run: |
cmake $GITHUB_WORKSPACE \
-G Ninja \
-DCMAKE_SYSTEM_NAME=Windows \
-DCMAKE_C_COMPILER=$GITHUB_WORKSPACE/llvm-mingw/bin/x86_64-w64-mingw32-clang \
-DCMAKE_CXX_COMPILER=$GITHUB_WORKSPACE/llvm-mingw/bin/x86_64-w64-mingw32-clang++ \
-DCMAKE_RC_COMPILER=$GITHUB_WORKSPACE/llvm-mingw/bin/x86_64-w64-mingw32-windres \
-DALSOFT_BACKEND_PIPEWIRE=OFF \
-DCMAKE_BUILD_TYPE=$BUILD_TYPE
- name: Build - name: Build
working-directory: ${{github.workspace}}/build working-directory: ${{github.workspace}}/build
shell: powershell run: |
run: cmake --build . --config $env:BUILD_TYPE --target MinecraftPE cmake --build . --config $BUILD_TYPE --target MinecraftPE --parallel
cmake --build . --config $BUILD_TYPE --target MinecraftPE-server --parallel
- name: Upload Artifact - name: Upload Artifact
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: mcpe-windows name: mcpe-windows
path: | path: |
${{github.workspace}}/build/${{ env.BUILD_TYPE }}/MinecraftPE.exe ${{github.workspace}}/build/MinecraftPE-server.exe
${{github.workspace}}/build/${{ env.BUILD_TYPE }}/glfw3.dll ${{github.workspace}}/build/MinecraftPE.exe
${{github.workspace}}/build/${{ env.BUILD_TYPE }}/libpng16.dll ${{github.workspace}}/build/libpng16.dll
${{github.workspace}}/build/${{ env.BUILD_TYPE }}/OpenAL32.dll ${{github.workspace}}/build/OpenAL32.dll
${{github.workspace}}/build/${{ env.BUILD_TYPE }}/z.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: build-linux:
name: Linux Build name: Build Linux
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
@@ -90,7 +133,9 @@ jobs:
- name: Build - name: Build
working-directory: ${{github.workspace}}/build working-directory: ${{github.workspace}}/build
shell: bash shell: bash
run: cmake --build . --config $BUILD_TYPE run: |
cmake --build . --config $BUILD_TYPE --target MinecraftPE --parallel
cmake --build . --config $BUILD_TYPE --target MinecraftPE-server --parallel
- name: Upload Artifact - name: Upload Artifact
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
@@ -101,7 +146,7 @@ jobs:
${{github.workspace}}/build/MinecraftPE-server ${{github.workspace}}/build/MinecraftPE-server
build-android: # pray to god build-android: # pray to god
name: Build Android APK (${{ matrix.abi }}) name: Build Android (${{ matrix.abi }})
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
@@ -112,11 +157,10 @@ jobs:
env: env:
ANDROID_SDK_ROOT: ${{ github.workspace }}/android-sdk ANDROID_SDK_ROOT: ${{ github.workspace }}/android-sdk
# ANDROID_NDK_PATH: ${{ env.ANDROID_NDK_PATH }} ANDROID_NDK_PATH: ${{ github.workspace }}/android-ndk-r14b
ANDROID_PLATFORM_API: 36 ANDROID_PLATFORM_API: 36
ANDROID_BUILD_TOOLS_VERSION: 36.0.0 ANDROID_BUILD_TOOLS_VERSION: 36.0.0
ADB: /bin/true ADB: /bin/true
# JAVA_HOME: ${{ env.JAVA_HOME }}
# build.sh reads MATRIX_ABI to decide which ABI to build when no --abi flag is passed # build.sh reads MATRIX_ABI to decide which ABI to build when no --abi flag is passed
MATRIX_ABI: ${{ matrix.abi }} MATRIX_ABI: ${{ matrix.abi }}
@@ -125,12 +169,14 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Cache Android command-line tools - name: Cache Android command-line tools
id: cache-android-tools
uses: actions/cache@v3 uses: actions/cache@v3
with: with:
path: ${{ github.workspace }}/android-sdk/cmdline-tools path: ${{ env.ANDROID_SDK_ROOT }}
key: android-cmdline-tools-v36 key: android-cmdline-tools-v36
- name: Setup Android command line tools - name: Setup Android command line tools
if: steps.cache-android-tools.outputs.cache-hit != 'true'
run: | run: |
if [ ! -d "$ANDROID_SDK_ROOT/cmdline-tools/latest" ]; then if [ ! -d "$ANDROID_SDK_ROOT/cmdline-tools/latest" ]; then
mkdir -p "$ANDROID_SDK_ROOT/cmdline-tools" mkdir -p "$ANDROID_SDK_ROOT/cmdline-tools"
@@ -140,19 +186,21 @@ jobs:
fi fi
yes | "$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager" --sdk_root="$ANDROID_SDK_ROOT" "platform-tools" "platforms;android-${ANDROID_PLATFORM_API}" "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" yes | "$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager" --sdk_root="$ANDROID_SDK_ROOT" "platform-tools" "platforms;android-${ANDROID_PLATFORM_API}" "build-tools;${ANDROID_BUILD_TOOLS_VERSION}"
- name: Cache Android NDK r14b - name: Cache Android NDK r14b
id: cache-android-ndk
uses: actions/cache@v3 uses: actions/cache@v3
with: with:
path: ${{ github.workspace }}/android-ndk-r14b path: ${{ github.workspace }}/android-ndk-r14b
key: android-ndk-r14b key: android-ndk-r14b
- name: Install Android NDK r14b - name: Install Android NDK r14b
if: steps.cache-android-ndk.outputs.cache-hit != 'true'
run: | run: |
if [ ! -d "$GITHUB_WORKSPACE/android-ndk-r14b" ]; then if [ ! -d "$ANDROID_NDK_PATH" ]; then
curl -L -o ndk.zip "https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip" curl -L -o ndk.zip "https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip"
unzip -q ndk.zip -d "$GITHUB_WORKSPACE" unzip -q ndk.zip -d "$GITHUB_WORKSPACE"
fi fi
echo "ANDROID_NDK_PATH=$GITHUB_WORKSPACE/android-ndk-r14b" >> $GITHUB_ENV
- name: Install system prerequisites - name: Install system prerequisites
run: | run: |
@@ -171,16 +219,6 @@ jobs:
distribution: temurin distribution: temurin
java-version: 25 java-version: 25
- name: Validate environment
run: |
echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT"
echo "ANDROID_NDK_PATH=$ANDROID_NDK_PATH"
echo "JAVA_HOME=$JAVA_HOME"
echo "MATRIX_ABI=$MATRIX_ABI"
$ANDROID_SDK_ROOT/platform-tools/adb version || true
java -version
javac -version
- name: Run Android build script - name: Run Android build script
run: | run: |
chmod +x ./build.sh chmod +x ./build.sh
@@ -193,11 +231,59 @@ jobs:
name: minecraftpe-apk-${{ matrix.abi }} name: minecraftpe-apk-${{ matrix.abi }}
path: ${{ github.workspace }}/build-apk/minecraftpe-*-debug.apk path: ${{ github.workspace }}/build-apk/minecraftpe-*-debug.apk
build-web:
name: Build Web
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup caches
uses: ./.github/actions/setup-cache
with:
host: linux
target: linux
- name: Setup Ninja
uses: ./.github/actions/setup-ninja
with:
host: linux
- name: Setup emsdk
uses: mymindstorm/setup-emsdk@v14
with:
version: 5.0.3
actions-cache-folder: 'emsdk-cache'
- name: Create Build Environment
# Some projects don't allow in-source building, so create a separate build directory
# We'll use this as our working directory for all subsequent commands
run: cmake -E make_directory ${{github.workspace}}/build
- name: Configure CMake
# Use a bash shell so we can use the same syntax for environment variable
# access regardless of the host operating system
shell: bash
working-directory: ${{github.workspace}}/build
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE -G Ninja -DCMAKE_TOOLCHAIN_FILE="$GITHUB_WORKSPACE/emsdk-cache/emsdk-main/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake"
- name: Build
working-directory: ${{github.workspace}}/build
run: cmake --build . --config $BUILD_TYPE --target MinecraftPE --parallel
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: mcpe-web
path: |
${{github.workspace}}/build/MinecraftPE.js
${{github.workspace}}/build/MinecraftPE.wasm
${{github.workspace}}/build/MinecraftPE.data
publish: publish:
name: Publish name: Publish
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [ build-windows, build-linux, build-android ] needs: [ build-windows, build-ios, build-linux, build-android, build-web ]
if: github.ref == 'refs/heads/main'
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
@@ -214,32 +300,44 @@ jobs:
- name: Zip Windows Artifacts - name: Zip Windows Artifacts
uses: vimtor/action-zip@v1.2 uses: vimtor/action-zip@v1.2
with: with:
files: ${{github.workspace}}/data/ mcpe-windows/MinecraftPE.exe mcpe-windows/glfw3.dll mcpe-windows/libpng16.dll mcpe-windows/OpenAL32.dll mcpe-windows/z.dll files: mcpe-windows/MinecraftPE.exe mcpe-windows/libpng16.dll mcpe-windows/OpenAL32.dll mcpe-windows/libz.dll
dest: minecraftpe-${{ steps.ref.outputs.hash }}-windows.zip dest: minecraftpe-${{ steps.ref.outputs.hash }}-windows.zip
- name: Zip Windows Server Artifacts
uses: vimtor/action-zip@v1.2
with:
files: mcpe-windows/MinecraftPE-server.exe
dest: minecraftpe-server-${{ steps.ref.outputs.hash }}-windows.zip
- name: Zip Linux Artifacts - name: Zip Linux Artifacts
uses: vimtor/action-zip@v1.2 uses: vimtor/action-zip@v1.2
with: with:
files: ${{github.workspace}}/data/ mcpe-linux/MinecraftPE # ye, you should install libraries by urself :trollface: files: mcpe-linux/MinecraftPE
dest: minecraftpe-${{ steps.ref.outputs.hash }}-linux.zip dest: minecraftpe-${{ steps.ref.outputs.hash }}-linux.zip
- name: Zip Linux Server Artifacts - name: Zip Linux Server Artifacts
uses: vimtor/action-zip@v1.2 uses: vimtor/action-zip@v1.2
with: with:
files: mcpe-linux/MinecraftPE-server files: mcpe-linux/MinecraftPE-server
dest: minecraftpe-server-${{ steps.ref.outputs.hash }}.zip dest: minecraftpe-server-${{ steps.ref.outputs.hash }}-linux.zip
- name: Zip Android arm64-v8a Artifact - name: Rename Android Artifacts
run: |
mv minecraftpe-apk-arm64-v8a/minecraftpe-v8a-debug.apk minecraftpe-${{ steps.ref.outputs.hash }}-android-arm64-v8a.apk
mv minecraftpe-apk-armeabi-v7a/minecraftpe-v7a-debug.apk minecraftpe-${{ steps.ref.outputs.hash }}-android-armeabi-v7a.apk
- name: Zip Web Artifact
uses: vimtor/action-zip@v1.2 uses: vimtor/action-zip@v1.2
with: with:
files: minecraftpe-apk-arm64-v8a/minecraftpe-v8a-debug.apk files: mcpe-web/MinecraftPE.js mcpe-web/MinecraftPE.wasm mcpe-web/MinecraftPE.data misc/web/index.html
dest: minecraftpe-${{ steps.ref.outputs.hash }}-android-arm64-v8a.zip dest: minecraftpe-${{ steps.ref.outputs.hash }}-web.zip
- name: Zip Android armeabi-v7a Artifact - name: Zip Data
uses: vimtor/action-zip@v1.2 uses: vimtor/action-zip@v1.2
with: with:
files: minecraftpe-apk-armeabi-v7a/minecraftpe-v7a-debug.apk files: data
dest: minecraftpe-${{ steps.ref.outputs.hash }}-android-armeabi-v7a.zip recursive: false
dest: data.zip
- name: Update Development Release - name: Update Development Release
uses: andelf/nightly-release@main uses: andelf/nightly-release@main
@@ -251,8 +349,14 @@ jobs:
body: | body: |
MinecraftPE development release for commit ${{ github.sha }}. MinecraftPE development release for commit ${{ github.sha }}.
files: | files: |
./minecraftpe-${{ steps.ref.outputs.hash }}-windows.zip ./data.zip
./minecraftpe-${{ steps.ref.outputs.hash }}-linux.zip
./minecraftpe-server-${{ steps.ref.outputs.hash }}.zip ./minecraftpe-server-${{ steps.ref.outputs.hash }}.zip
./minecraftpe-${{ steps.ref.outputs.hash }}-windows.zip
./minecraftpe-server-${{ steps.ref.outputs.hash }}-windows.zip
./minecraftpe-${{ steps.ref.outputs.hash }}-linux.zip
./minecraftpe-${{ steps.ref.outputs.hash }}-android-arm64-v8a.apk
./minecraftpe-${{ steps.ref.outputs.hash }}-android-armeabi-v7a.apk
./minecraftpe-server-${{ steps.ref.outputs.hash }}-linux.zip
./minecraftpe-${{ steps.ref.outputs.hash }}-android-arm64-v8a.zip ./minecraftpe-${{ steps.ref.outputs.hash }}-android-arm64-v8a.zip
./minecraftpe-${{ steps.ref.outputs.hash }}-android-armeabi-v7a.zip ./minecraftpe-${{ steps.ref.outputs.hash }}-android-armeabi-v7a.zip
./minecraftpe-${{ steps.ref.outputs.hash }}-web.zip

2
.gitignore vendored
View File

@@ -9,8 +9,6 @@ CMakeFiles/
CMakeCache.txt CMakeCache.txt
cmake_install.cmake cmake_install.cmake
Makefile Makefile
*.cmake
!cmake/CPM.cmake
# Compiled object files # Compiled object files
*.o *.o

View File

@@ -7,12 +7,6 @@ set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE) set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
set(CMAKE_POLICY_VERSION_MINIMUM 3.10) set(CMAKE_POLICY_VERSION_MINIMUM 3.10)
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(CMAKE_CXX_FLAGS "-Wno-c++11-narrowing -Wno-narrowing -Wno-invalid-source-encoding -Wno-reserved-user-defined-literal")
endif()
# ## Config options ###
include(CMakeDependentOption)
include(cmake/EnumOption.cmake) include(cmake/EnumOption.cmake)
if(EMSCRIPTEN) if(EMSCRIPTEN)
@@ -28,9 +22,18 @@ find_package(OpenSSL)
if (${PLATFORM} STREQUAL "Desktop") if (${PLATFORM} STREQUAL "Desktop")
set(PLATFORM_CPP "PLATFORM_DESKTOP") set(PLATFORM_CPP "PLATFORM_DESKTOP")
if (MINGW)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++ -static-libgcc")
endif()
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-c++11-narrowing -Wno-narrowing -Wno-invalid-source-encoding -Wno-reserved-user-defined-literal")
endif()
if (WIN32) if (WIN32)
add_definitions(-D_CRT_SECURE_NO_WARNINGS) add_definitions(-D_CRT_SECURE_NO_WARNINGS)
set(EXTRA_LIBS ws2_32) include_directories(misc/windows)
set(EXTRA_LIBS ws2_32 winhttp)
elseif(UNIX) elseif(UNIX)
find_library(pthread NAMES pthread) find_library(pthread NAMES pthread)
set(EXTRA_LIBS pthread m) set(EXTRA_LIBS pthread m)
@@ -53,6 +56,7 @@ if(${PLATFORM} MATCHES "Web")
add_library(png INTERFACE IMPORTED) add_library(png INTERFACE IMPORTED)
set_target_properties(png PROPERTIES set_target_properties(png PROPERTIES
INTERFACE_COMPILE_OPTIONS "-sUSE_LIBPNG=1"
INTERFACE_LINK_OPTIONS "-sUSE_LIBPNG=1" INTERFACE_LINK_OPTIONS "-sUSE_LIBPNG=1"
) )
@@ -102,9 +106,11 @@ CPMAddPackage(
"ALSOFT_TESTS OFF" "ALSOFT_TESTS OFF"
"ALSOFT_UTILS OFF" "ALSOFT_UTILS OFF"
"LIBTYPE ${AL_LIBTYPE}" "LIBTYPE ${AL_LIBTYPE}"
"ALSOFT_ENABLE_MODULES OFF"
"ALSOFT_STATIC_STDCXX ON"
"ALSOFT_STATIC_LIBGCC ON"
) )
# TODO: Clear this paths with *
file(GLOB SERVER_SOURCES file(GLOB SERVER_SOURCES
"project/lib_projects/raknet/jni/RaknetSources/*.cpp" "project/lib_projects/raknet/jni/RaknetSources/*.cpp"
"src/NinecraftApp.cpp" "src/NinecraftApp.cpp"
@@ -143,7 +149,6 @@ file(GLOB SERVER_SOURCES
"src/platform/CThread.cpp" "src/platform/CThread.cpp"
"src/platform/HttpClient.cpp" "src/platform/HttpClient.cpp"
"src/platform/PngLoader.cpp"
"src/platform/time.cpp" "src/platform/time.cpp"
"src/platform/input/Controller.cpp" "src/platform/input/Controller.cpp"
@@ -159,6 +164,7 @@ file(GLOB SERVER_SOURCES
"src/util/Mth.cpp" "src/util/Mth.cpp"
"src/util/PerfTimer.cpp" "src/util/PerfTimer.cpp"
"src/util/StringUtils.cpp" "src/util/StringUtils.cpp"
"src/util/Color.cpp"
"src/world/Direction.cpp" "src/world/Direction.cpp"
@@ -192,6 +198,9 @@ file(GLOB SERVER_SOURCES
"src/world/level/dimension/Dimension.cpp" "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/*.cpp"
"src/world/level/levelgen/feature/Feature.cpp" "src/world/level/levelgen/feature/Feature.cpp"
"src/world/level/levelgen/synth/*.cpp" "src/world/level/levelgen/synth/*.cpp"
@@ -205,6 +214,7 @@ file(GLOB SERVER_SOURCES
"src/world/level/tile/entity/*.cpp" "src/world/level/tile/entity/*.cpp"
"src/world/phys/HitResult.cpp" "src/world/phys/HitResult.cpp"
"src/commands/*.cpp"
) )
file(GLOB CLIENT_SOURCES file(GLOB CLIENT_SOURCES
@@ -251,6 +261,8 @@ file(GLOB CLIENT_SOURCES
"src/util/**.cpp" "src/util/**.cpp"
"src/util/Color.cpp"
"src/world/*.cpp" "src/world/*.cpp"
"src/world/phys/*.cpp" "src/world/phys/*.cpp"
"src/world/entity/*.cpp" "src/world/entity/*.cpp"
@@ -286,6 +298,8 @@ file(GLOB CLIENT_SOURCES
"src/AppPlatform_glfw.cpp" "src/AppPlatform_glfw.cpp"
"src/main.cpp" "src/main.cpp"
"src/commands/*.cpp"
) )
if (${PLATFORM} STREQUAL "Desktop") if (${PLATFORM} STREQUAL "Desktop")
@@ -293,21 +307,23 @@ if (${PLATFORM} STREQUAL "Desktop")
endif() endif()
# Server # Server
if(UNIX) add_executable("${PROJECT_NAME}-server" ${SERVER_SOURCES})
add_executable("${PROJECT_NAME}-server" ${SERVER_SOURCES})
target_compile_definitions("${PROJECT_NAME}-server" PUBLIC "STANDALONE_SERVER" "SERVER_PROFILER") target_compile_definitions("${PROJECT_NAME}-server" PUBLIC "STANDALONE_SERVER" "SERVER_PROFILER")
target_include_directories("${PROJECT_NAME}-server" PUBLIC target_include_directories("${PROJECT_NAME}-server" PUBLIC
"${CMAKE_SOURCE_DIR}/src/" "${CMAKE_SOURCE_DIR}/src/"
"project/lib_projects/raknet/jni/RaknetSources" "project/lib_projects/raknet/jni/RaknetSources"
) )
target_link_libraries("${PROJECT_NAME}-server" ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries("${PROJECT_NAME}-server" ${CMAKE_THREAD_LIBS_INIT} ${EXTRA_LIBS})
endif()
add_executable(${PROJECT_NAME} ${CLIENT_SOURCES}) add_executable(${PROJECT_NAME} ${CLIENT_SOURCES})
if(WIN32)
target_sources(${PROJECT_NAME} PRIVATE data/images/pe.rc)
endif()
target_compile_definitions(${PROJECT_NAME} PUBLIC ${PLATFORM_CPP}) target_compile_definitions(${PROJECT_NAME} PUBLIC ${PLATFORM_CPP})
target_include_directories(${PROJECT_NAME} PUBLIC target_include_directories(${PROJECT_NAME} PUBLIC
@@ -321,11 +337,11 @@ target_include_directories(${PROJECT_NAME} PUBLIC
if(${PLATFORM} MATCHES "Web") if(${PLATFORM} MATCHES "Web")
set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD 11)
# uuuh i hate it # uuuh i hate it
set(EM_FLAGS "-pthread -sUSE_PTHREADS=1 -sSHARED_MEMORY=1") set(EM_FLAGS "-pthread -sUSE_PTHREADS=1 -sUSE_LIBPNG=1 -sSHARED_MEMORY=1")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EM_FLAGS}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EM_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EM_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EM_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${EM_FLAGS} --preload-file ${CMAKE_SOURCE_DIR}/data@/data -sPROXY_TO_PTHREAD") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${EM_FLAGS} --preload-file ${CMAKE_SOURCE_DIR}/data@/data")
target_compile_options(${PROJECT_NAME} PUBLIC target_compile_options(${PROJECT_NAME} PUBLIC
"-Os" "-Os"
@@ -363,7 +379,7 @@ endif()
# Client # Client
target_compile_definitions(${PROJECT_NAME} PUBLIC "OPENGL_ES" "NO_EGL" ${PLATFORM}) target_compile_definitions(${PROJECT_NAME} PUBLIC "OPENGL_ES" "NO_EGL" ${PLATFORM})
target_link_libraries(${PROJECT_NAME} zlib ${PNG_LIB} alsoft.common OpenAL::OpenAL glfw ${EXTRA_LIBS}) target_link_libraries(${PROJECT_NAME} zlib ${PNG_LIB} OpenAL::OpenAL glfw ${EXTRA_LIBS})
if (OpenSSL_FOUND) if (OpenSSL_FOUND)
target_link_libraries(${PROJECT_NAME} OpenSSL::SSL OpenSSL::Crypto) target_link_libraries(${PROJECT_NAME} OpenSSL::SSL OpenSSL::Crypto)

View File

@@ -1,6 +1,6 @@
# MinecraftPE # MinecraftPE
> [!Warning] > [!Warning]
> Github repository **isnt main**. All issues and pull requests should be send in [Gitea Repository](https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1). > [Github repository](https://github.com/Minecraft-PE-0-6-1/minecraft-pe-0.6.1-on-all) **isnt main**. All issues and pull requests should be send in [Gitea Repository](https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1).
> [!Important] > [!Important]
> We have a discord server, where you can report bugs or send feedback https://discord.gg/c58YesBxve > We have a discord server, where you can report bugs or send feedback https://discord.gg/c58YesBxve
@@ -9,23 +9,20 @@ Source code for **Minecraft Pocket Edition 0.6.1 alpha** with various fixes and
This project aims to preserve and improve this early version of Minecraft PE. This project aims to preserve and improve this early version of Minecraft PE.
# TODO / Roadmap # Features
- [x] Add platform GLFW - Support for modern IOS and Android, Linux, Web
- [x] Compile for Linux - Improved Dedicated Server (Windows build, anticheat, commands, etc)
- [x] Compile for android aarch64 - Features from Beta version of Minecraft (Grass tint, Beta sky, Smooth lighting, etc) and other tweaks
- [x] Touch control improvements
- [ ] Screen fixes # Screenshots
- [ ] Rewrite platform logic <p align="center">
- [x] Fix sound
- [x] Do a server connection GUI <img width="49%" alt="menu" src="https://sffempire.ru/mcpe-screenshots/menu.png" />
- [ ] Controller support <img width="49%" alt="settings" src="https://sffempire.ru/mcpe-screenshots/settings.png" />
- [x] Minecraft server hosting <img width="49%" alt="worlds" src="https://sffempire.ru/mcpe-screenshots/worlds.png" />
- [x] Screen fixess <img width="49%" alt="gameplay" src="https://sffempire.ru/mcpe-screenshots/gameplay.png" />
- [x] Fix fog
- [x] Add sprinting </p>
- [x] Chat (semi working) and commands
- [x] Implementing options
- [x] Better F3
# Build # Build
@@ -79,8 +76,14 @@ cmake --build .
``` ```
C:\android-ndk-r14b C:\android-ndk-r14b
``` ```
3. Install **Build tools 35** with [SDKManager](https://dl.google.com/android/repository/commandlinetools-win-15859902_latest.zip) (build-tools should be in AppData):
3. Run the build script: ```powershell
sdkmanager "build-tools;35.0.0" --sdk_root="%LocalAppData%\Android\Sdk"
sdkmanager "build-tools;android-36" --sdk_root="%LocalAppData%\Android\Sdk"
```
4. Run the build script:
```powershell ```powershell
# Full build (NDK + Java + APK + install) # Full build (NDK + Java + APK + install)
@@ -113,7 +116,7 @@ cmake --build .
$HOME/Android/Sdk/cmdline-tools/bin/sdkmanager $HOME/Android/Sdk/cmdline-tools/bin/sdkmanager
``` ```
> [!NOTE] > [!Note]
> `sdkmanager` expects the SDK to include a `cmdline-tools/latest/` folder. > `sdkmanager` expects the SDK to include a `cmdline-tools/latest/` folder.
> If you only have `cmdline-tools/bin`, create the required layout: > If you only have `cmdline-tools/bin`, create the required layout:
> >
@@ -134,7 +137,7 @@ cmake --build .
sdkmanager --install "platform-tools" "platforms;android-35" "build-tools;35.0.0" sdkmanager --install "platform-tools" "platforms;android-35" "build-tools;35.0.0"
``` ```
> [!NOTE] > [!Note]
> if you want build.sh to always find the SDK, > if you want build.sh to always find the SDK,
> Set ANDROID_SDK_ROOT in your shell config (~/.bashrc / ~/.profile / ~/.config/fish/config.fish), for example: > Set ANDROID_SDK_ROOT in your shell config (~/.bashrc / ~/.profile / ~/.config/fish/config.fish), for example:
> >
@@ -154,7 +157,6 @@ cmake --build .
```bash ```bash
35.0.0 35.0.0
33.0.2
``` ```
6. Download **Android NDK r14b**: 6. Download **Android NDK r14b**:
@@ -162,14 +164,14 @@ cmake --build .
7. Extract the archive to `/home/username/`, so that the final directory path is `/home/username/android-ndk-r14b/` 7. Extract the archive to `/home/username/`, so that the final directory path is `/home/username/android-ndk-r14b/`
> [!WARNING] > [!Warning]
> Make sure you dont end up with a nested folder like `/home/username/android-ndk-r14b/android-ndk-r14b/`. > Make sure you dont end up with a nested folder like `/home/username/android-ndk-r14b/android-ndk-r14b/`.
8. Re run `build.sh` 8. Re run `build.sh`
## Web ## Web
1. Download and install **emsdk**: https://emscripten.org/docs/getting_started/downloads.html 1. Download and install **emsdk**: https://emscripten.org/docs/getting_started/downloads.html
> [!NOTE] > [!Note]
> On arch linux you can use AUR: > On arch linux you can use AUR:
> `yay -Sy emsdk` > `yay -Sy emsdk`
@@ -179,7 +181,7 @@ cmake --build .
cmake .. -B . -G Ninja "-DCMAKE_TOOLCHAIN_FILE=$EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake" cmake .. -B . -G Ninja "-DCMAKE_TOOLCHAIN_FILE=$EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake"
cmake --build . --target MinecraftPE cmake --build . --target MinecraftPE
``` ```
> [!NOTE] > [!Note]
> If you are using VSCode with CMake plugin, you can add Emscripten kit > If you are using VSCode with CMake plugin, you can add Emscripten kit
> 1. Press Ctrl + Shift + P > 1. Press Ctrl + Shift + P
> 2. Type `CMake: Edit User-Local CMake Kits` and hit Enter > 2. Type `CMake: Edit User-Local CMake Kits` and hit Enter
@@ -197,4 +199,39 @@ cmake --build .
3. Run game: 3. Run game:
``` ```
emrun --port 8080 . 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.

9
cmake/EnumOption.cmake Normal file
View File

@@ -0,0 +1,9 @@
macro(enum_option var values description)
set(${var}_VALUES ${values})
list(GET ${var}_VALUES 0 default)
set(${var} "${default}" CACHE STRING "${description}")
set_property(CACHE ${var} PROPERTY STRINGS ${${var}_VALUES})
if (NOT ";${${var}_VALUES};" MATCHES ";${${var}};")
message(FATAL_ERROR "Unknown value ${${var}}. Only -D${var}=${${var}_VALUES} allowed.")
endif()
endmacro()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
data/images/misc/shadow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 868 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
data/images/misc/water.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 B

BIN
data/images/pe.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

1
data/images/pe.rc Normal file
View File

@@ -0,0 +1 @@
IDI_ICON1 ICON "pe.ico"

Binary file not shown.

After

Width:  |  Height:  |  Size: 910 B

BIN
data/images/terrain/sun.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 799 B

View File

@@ -152,7 +152,34 @@ options.group.graphics=Graphics
options.group.tweaks=Tweaks options.group.tweaks=Tweaks
options.allowSprint=Allow sprint options.allowSprint=Allow sprint
options.barOnTop=HUD above inventory options.barOnTop=HUD above inventory
options.autojump=Auto Jump options.rpiCursor=Show Raspberry PI cursor
options.foliagetint=Foliage Tinting
options.javaHud=Beta Java hotbar tweaks
options.blockOutline=Block Outline Selection
options.fogType=Fog/Sky Color
options.fogType.vanilla=Vanilla
options.fogType.java=Beta Java
options.fogType.unused=Unused
options.debugStyle=Debug Menu Style
options.debugStyle.javaBeta=Java Beta
options.debugStyle.custom=Custom
options.beautifulSky=Beautiful Skies
options.useVignette=Vignette Overlay
options.tintedSide=Tint Grass Sides
options.betaSky=Java Beta Sky
options.restoredAnims=Restored Animations
options.normalLighting=Java Beta/Normals Shading
options.isJoyTouchArea=Use Split Controls
options.autoJump=Auto Jump
options.thirdperson=Third Person options.thirdperson=Third Person
options.servervisible=Server Visible options.servervisible=Server Visible
options.sensitivity=Sensitivity options.sensitivity=Sensitivity
@@ -181,9 +208,10 @@ options.graphics.fast=Fast
options.guiScale=GUI Scale options.guiScale=GUI Scale
options.guiScale.auto=Auto options.guiScale.auto=Auto
options.guiScale.small=Small options.guiScale.small=Small
options.guiScale.normal=Normal options.guiScale.medium=Medium
options.guiScale.large=Large options.guiScale.large=Large
options.guiScale.larger=Larger options.guiScale.larger=Larger
options.guiScale.largest=Largest
options.advancedOpengl=Advanced OpenGL options.advancedOpengl=Advanced OpenGL
options.renderClouds=Clouds options.renderClouds=Clouds
options.farWarning1=A 64 bit Java installation is recommended options.farWarning1=A 64 bit Java installation is recommended
@@ -201,6 +229,12 @@ options.fancyGraphics=Fancy graphics
options.renderDebug=Debug render options.renderDebug=Debug render
options.anaglyph3d=3D anaglyph options.anaglyph3d=3D anaglyph
options.windowScale =Window Scaling
options.menuStyle =Menu Style
options.menuStyle.pocket =Pocket Edition
options.menuStyle.xperia =Xperia/Pi
options.menuStyle.java =Java Beta
performance.max=Max FPS performance.max=Max FPS
performance.balanced=Balanced performance.balanced=Balanced

View File

@@ -1,143 +1,46 @@
<!doctype html> <!DOCTYPE html>
<html lang="en-us"> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>MCPE 0.6.1</title>
<title>Emscripten-Generated Code</title> <style>
<style> html, body {
.emscripten { padding-right: 0; margin-left: auto; margin-right: auto; display: block; } margin: 0;
textarea.emscripten { font-family: monospace; width: 80%; } padding: 0;
div.emscripten { text-align: center; } height: 100%;
div.emscripten_border { border: 1px solid black; } background: black;
/* the canvas *must not* have any border or padding, or mouse coords will be wrong */ overflow: hidden;
canvas.emscripten { border: 0px none; background-color: black; } }
.spinner { #canvas {
height: 50px; width: 100vw;
width: 50px; height: 100vh;
margin: 0px auto; display: block;
-webkit-animation: rotation .8s linear infinite; }
-moz-animation: rotation .8s linear infinite; </style>
-o-animation: rotation .8s linear infinite; </head>
animation: rotation 0.8s linear infinite; <body>
border-left: 10px solid rgb(0,150,240);
border-right: 10px solid rgb(0,150,240);
border-bottom: 10px solid rgb(0,150,240);
border-top: 10px solid rgb(100,0,200);
border-radius: 100%;
background-color: rgb(200,100,250);
}
@-webkit-keyframes rotation {
from {-webkit-transform: rotate(0deg);}
to {-webkit-transform: rotate(360deg);}
}
@-moz-keyframes rotation {
from {-moz-transform: rotate(0deg);}
to {-moz-transform: rotate(360deg);}
}
@-o-keyframes rotation {
from {-o-transform: rotate(0deg);}
to {-o-transform: rotate(360deg);}
}
@keyframes rotation {
from {transform: rotate(0deg);}
to {transform: rotate(360deg);}
}
</style> <canvas id="canvas"></canvas>
</head>
<body>
<hr/>
<figure style="overflow:visible;" id="spinner"><div class="spinner"></div><center style="margin-top:0.5em"><strong>emscripten</strong></center></figure>
<div class="emscripten" id="status">Downloading...</div>
<div class="emscripten">
<progress value="0" max="100" id="progress" hidden=1></progress>
</div>
<div class="emscripten_border">
<canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()" tabindex=-1></canvas>
</div>
<hr/>
<div class="emscripten">
<input type="checkbox" id="resize">Resize canvas
<input type="checkbox" id="pointerLock" checked>Lock/hide mouse pointer
&nbsp;&nbsp;&nbsp;
<input type="button" value="Fullscreen" onclick="Module.requestFullscreen(document.getElementById('pointerLock').checked,
document.getElementById('resize').checked)">
</div>
<hr/> <script>
<textarea class="emscripten" id="output" rows="8"></textarea> var Module = {
<hr> canvas: document.getElementById('canvas'),
<script type='text/javascript'> onRuntimeInitialized: function () { resizeCanvas() }
var statusElement = document.getElementById('status'); };
var progressElement = document.getElementById('progress');
var spinnerElement = document.getElementById('spinner');
var canvasElement = document.getElementById('canvas');
var outputElement = document.getElementById('output');
if (outputElement) outputElement.value = ''; // clear browser cache
// As a default initial behavior, pop up an alert when webgl context is lost. To make your function resizeCanvas() {
// application robust, you may want to override this behavior before shipping! const canvas = Module.canvas;
// See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2 canvas.width = window.innerWidth;
canvasElement.addEventListener("webglcontextlost", (e) => { canvas.height = window.innerHeight;
alert('WebGL context lost. You will need to reload the page.'); }
e.preventDefault();
}, false);
function setStatus(text) { window.addEventListener('resize', resizeCanvas);
if (!setStatus.last) setStatus.last = { time: Date.now(), text: '' }; window.addEventListener('onunload', () => {
if (text === setStatus.last.text) return; FS.syncfs(true, function (err) { console.log('Sync FS failed: ' + err) });
var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/); })
var now = Date.now(); </script>
if (m && now - setStatus.last.time < 30) return; // if this is a progress update, skip it if too soon
setStatus.last.time = now;
setStatus.last.text = text;
if (m) {
text = m[1];
progressElement.value = parseInt(m[2])*100;
progressElement.max = parseInt(m[4])*100;
progressElement.hidden = false;
spinnerElement.hidden = false;
} else {
progressElement.value = null;
progressElement.max = null;
progressElement.hidden = true;
if (!text) spinnerElement.hidden = true;
}
statusElement.innerHTML = text;
}
var Module = { <script src="MinecraftPE.js"></script>
print(...args) { </body>
// These replacements are necessary if you render to raw HTML
//text = text.replace(/&/g, "&amp;");
//text = text.replace(/</g, "&lt;");
//text = text.replace(/>/g, "&gt;");
//text = text.replace('\n', '<br>', 'g');
console.log(...args);
if (outputElement) {
var text = args.join(' ');
outputElement.value += text + "\n";
outputElement.scrollTop = outputElement.scrollHeight; // focus on bottom
}
},
canvas: canvasElement,
setStatus: setStatus,
totalDependencies: 0,
monitorRunDependencies(left) {
this.totalDependencies = Math.max(this.totalDependencies, left);
setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.');
}
};
setStatus('Downloading...');
window.onerror = () => {
setStatus('Exception thrown, see JavaScript console');
spinnerElement.style.display = 'none';
setStatus = (text) => {
if (text) console.error('[post-exception status] ' + text);
};
};
</script>
<script src="MinecraftPE.js"></script>
</body>
</html> </html>

View File

@@ -7,7 +7,7 @@
<!-- This is the platform API where NativeActivity was introduced. --> <!-- This is the platform API where NativeActivity was introduced. -->
<uses-sdk android:minSdkVersion="19" <uses-sdk android:minSdkVersion="19"
android:targetSdkVersion="36" /> android:targetSdkVersion="30" />
<!-- uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="true"/ --> <!-- uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="true"/ -->

View File

@@ -168,9 +168,10 @@ options.graphics.fast=Fast
options.guiScale=GUI Scale options.guiScale=GUI Scale
options.guiScale.auto=Auto options.guiScale.auto=Auto
options.guiScale.small=Small options.guiScale.small=Small
options.guiScale.normal=Normal options.guiScale.medium=Medium
options.guiScale.large=Large options.guiScale.large=Large
options.guiScale.larger=Larger options.guiScale.larger=Larger
options.guiScale.largest=Largest
options.advancedOpengl=Advanced OpenGL options.advancedOpengl=Advanced OpenGL
options.renderClouds=Clouds options.renderClouds=Clouds
options.farWarning1=A 64 bit Java installation is recommended options.farWarning1=A 64 bit Java installation is recommended

View File

@@ -98,6 +98,7 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
../../../src/client/player/RemotePlayer.cpp \ ../../../src/client/player/RemotePlayer.cpp \
../../../src/client/player/input/KeyboardInput.cpp \ ../../../src/client/player/input/KeyboardInput.cpp \
../../../src/client/player/input/touchscreen/TouchscreenInput.cpp \ ../../../src/client/player/input/touchscreen/TouchscreenInput.cpp \
../../../src/client/renderer/Lighting.cpp \
../../../src/client/renderer/Chunk.cpp \ ../../../src/client/renderer/Chunk.cpp \
../../../src/client/renderer/EntityTileRenderer.cpp \ ../../../src/client/renderer/EntityTileRenderer.cpp \
../../../src/client/renderer/GameRenderer.cpp \ ../../../src/client/renderer/GameRenderer.cpp \
@@ -109,6 +110,7 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
../../../src/client/renderer/Textures.cpp \ ../../../src/client/renderer/Textures.cpp \
../../../src/client/renderer/TileRenderer.cpp \ ../../../src/client/renderer/TileRenderer.cpp \
../../../src/client/renderer/gles.cpp \ ../../../src/client/renderer/gles.cpp \
../../../src/world/level/LevelConstants.cpp \
../../../src/client/renderer/culling/Frustum.cpp \ ../../../src/client/renderer/culling/Frustum.cpp \
../../../src/client/renderer/entity/ArrowRenderer.cpp \ ../../../src/client/renderer/entity/ArrowRenderer.cpp \
../../../src/client/renderer/entity/ChickenRenderer.cpp \ ../../../src/client/renderer/entity/ChickenRenderer.cpp \
@@ -139,6 +141,12 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
../../../src/network/Packet.cpp \ ../../../src/network/Packet.cpp \
../../../src/network/RakNetInstance.cpp \ ../../../src/network/RakNetInstance.cpp \
../../../src/network/ServerSideNetworkHandler.cpp \ ../../../src/network/ServerSideNetworkHandler.cpp \
../../../src/commands/Command.cpp \
../../../src/commands/CommandHelp.cpp \
../../../src/commands/CommandKick.cpp \
../../../src/commands/CommandBan.cpp \
../../../src/commands/CommandManager.cpp \
../../../src/commands/CommandOp.cpp \
../../../src/server/ServerLevel.cpp \ ../../../src/server/ServerLevel.cpp \
../../../src/server/ServerPlayer.cpp \ ../../../src/server/ServerPlayer.cpp \
../../../src/util/DataIO.cpp \ ../../../src/util/DataIO.cpp \
@@ -146,6 +154,7 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
../../../src/util/StringUtils.cpp \ ../../../src/util/StringUtils.cpp \
../../../src/util/PerfTimer.cpp \ ../../../src/util/PerfTimer.cpp \
../../../src/util/PerfRenderer.cpp \ ../../../src/util/PerfRenderer.cpp \
../../../src/util/Color.cpp \
../../../src/world/Direction.cpp \ ../../../src/world/Direction.cpp \
../../../src/world/entity/AgableMob.cpp \ ../../../src/world/entity/AgableMob.cpp \
../../../src/world/entity/Entity.cpp \ ../../../src/world/entity/Entity.cpp \
@@ -209,6 +218,8 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
../../../src/world/level/MobSpawner.cpp \ ../../../src/world/level/MobSpawner.cpp \
../../../src/world/level/Region.cpp \ ../../../src/world/level/Region.cpp \
../../../src/world/level/TickNextTickData.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/Biome.cpp \
../../../src/world/level/biome/BiomeSource.cpp \ ../../../src/world/level/biome/BiomeSource.cpp \
../../../src/world/level/chunk/LevelChunk.cpp \ ../../../src/world/level/chunk/LevelChunk.cpp \

View File

@@ -6,7 +6,7 @@
<uses-sdk <uses-sdk
android:minSdkVersion="19" android:minSdkVersion="19"
android:targetSdkVersion="36"/> android:targetSdkVersion="30"/>
<uses-feature <uses-feature
android:name="android.hardware.touchscreen.multitouch" android:name="android.hardware.touchscreen.multitouch"

View File

@@ -168,8 +168,10 @@ options.graphics.fast=Fast
options.guiScale=GUI Scale options.guiScale=GUI Scale
options.guiScale.auto=Auto options.guiScale.auto=Auto
options.guiScale.small=Small options.guiScale.small=Small
options.guiScale.normal=Normal options.guiScale.medium=Medium
options.guiScale.large=Large options.guiScale.large=Large
options.guiScale.larger=Larger
options.guiScale.largest=Largest
options.advancedOpengl=Advanced OpenGL options.advancedOpengl=Advanced OpenGL
options.renderClouds=Clouds options.renderClouds=Clouds
options.farWarning1=A 64 bit Java installation is recommended options.farWarning1=A 64 bit Java installation is recommended

View File

@@ -75,6 +75,7 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
../../../src/client/player/RemotePlayer.cpp \ ../../../src/client/player/RemotePlayer.cpp \
../../../src/client/player/input/KeyboardInput.cpp \ ../../../src/client/player/input/KeyboardInput.cpp \
../../../src/client/player/input/touchscreen/TouchscreenInput.cpp \ ../../../src/client/player/input/touchscreen/TouchscreenInput.cpp \
../../../src/client/renderer/Lighting.cpp \
../../../src/client/renderer/Chunk.cpp \ ../../../src/client/renderer/Chunk.cpp \
../../../src/client/renderer/EntityTileRenderer.cpp \ ../../../src/client/renderer/EntityTileRenderer.cpp \
../../../src/client/renderer/GameRenderer.cpp \ ../../../src/client/renderer/GameRenderer.cpp \
@@ -122,6 +123,7 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
../../../src/util/StringUtils.cpp \ ../../../src/util/StringUtils.cpp \
../../../src/util/PerfTimer.cpp \ ../../../src/util/PerfTimer.cpp \
../../../src/util/PerfRenderer.cpp \ ../../../src/util/PerfRenderer.cpp \
../../../src/util/Color.cpp \
../../../src/world/Direction.cpp \ ../../../src/world/Direction.cpp \
../../../src/world/entity/AgableMob.cpp \ ../../../src/world/entity/AgableMob.cpp \
../../../src/world/entity/Entity.cpp \ ../../../src/world/entity/Entity.cpp \
@@ -183,6 +185,8 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
../../../src/world/level/MobSpawner.cpp \ ../../../src/world/level/MobSpawner.cpp \
../../../src/world/level/Region.cpp \ ../../../src/world/level/Region.cpp \
../../../src/world/level/TickNextTickData.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/Biome.cpp \
../../../src/world/level/biome/BiomeSource.cpp \ ../../../src/world/level/biome/BiomeSource.cpp \
../../../src/world/level/chunk/LevelChunk.cpp \ ../../../src/world/level/chunk/LevelChunk.cpp \
@@ -228,6 +232,7 @@ LOCAL_SRC_FILES := ../../../src/main.cpp \
../../../src/world/level/tile/entity/TileEntity.cpp \ ../../../src/world/level/tile/entity/TileEntity.cpp \
../../../src/world/level/tile/entity/FurnaceTileEntity.cpp \ ../../../src/world/level/tile/entity/FurnaceTileEntity.cpp \
../../../src/world/phys/HitResult.cpp ../../../src/world/phys/HitResult.cpp
../../../src/world/level/LevelConstants.cpp
LOCAL_CFLAGS := -Wno-psabi $(LOCAL_CFLAGS) LOCAL_CFLAGS := -Wno-psabi $(LOCAL_CFLAGS)

Binary file not shown.

View File

@@ -59,6 +59,7 @@ public class MainActivity extends Activity {
private static final int PERMISSION_REQUEST_CODE = 123; private static final int PERMISSION_REQUEST_CODE = 123;
private GLView _glView; private GLView _glView;
private boolean _nativeInitialized = false;
public float invScale = 1.0f;// / 1.5f; public float invScale = 1.0f;// / 1.5f;
private int _screenWidth = 0; private int _screenWidth = 0;
private int _screenHeight = 0; private int _screenHeight = 0;
@@ -77,63 +78,48 @@ public class MainActivity extends Activity {
_screenWidth = Math.max(_dm.widthPixels, _dm.heightPixels); _screenWidth = Math.max(_dm.widthPixels, _dm.heightPixels);
_screenHeight = Math.min(_dm.widthPixels, _dm.heightPixels); _screenHeight = Math.min(_dm.widthPixels, _dm.heightPixels);
nativeOnCreate(_screenWidth, _screenHeight);
_glView = new GLView(getApplication(), this); _glView = new GLView(getApplication(), this);
//_glView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); //_glView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
_glView.setEGLConfigChooser(true); _glView.setEGLConfigChooser(true);
//_glView //_glView
// _glView.setEGLConfigChooser(
// new GLSurfaceView.EGLConfigChooser() {
//
// @Override
// public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) {
// // TODO Auto-generated method stub
//
// // Specify a configuration for our opengl session
// // and grab the first configuration that matches is
// int[] configSpec = {
// EGL10.EGL_DEPTH_SIZE, 24,
// EGL10.EGL_NONE
// };
// EGLConfig[] configs = new EGLConfig[1];
// int[] num_config = new int[1];
// egl.eglChooseConfig(display, configSpec, configs, 1, num_config);
// EGLConfig config = configs[0];
// return config;
//
// //return null;
// }
// } );
_glView.commit(); _glView.commit();
setContentView(_glView); setContentView(_glView);
_soundPlayer = new SoundPlayer(this, AudioManager.STREAM_MUSIC); _soundPlayer = new SoundPlayer(this, AudioManager.STREAM_MUSIC);
// request dangerous permissions at runtime if necessary
checkAndRequestPermissions(); checkAndRequestPermissions();
initNative();
} }
private void checkAndRequestPermissions() { private void initNative() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (_nativeInitialized) {
boolean needRequest = false; return;
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
needRequest = true;
}
if (checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
needRequest = true;
}
if (needRequest) {
requestPermissions(new String[] {
android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
android.Manifest.permission.READ_EXTERNAL_STORAGE
}, PERMISSION_REQUEST_CODE);
}
} }
_nativeInitialized = true;
nativeOnCreate(_screenWidth, _screenHeight);
}
// request dangerous permissions at runtime if necessary
private boolean checkAndRequestPermissions() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return true;
}
boolean writeGranted = checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
boolean readGranted = checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
if (writeGranted && readGranted) {
return true;
}
requestPermissions(new String[] {
android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
android.Manifest.permission.READ_EXTERNAL_STORAGE
}, PERMISSION_REQUEST_CODE);
return false;
} }
@Override @Override
@@ -146,8 +132,18 @@ public class MainActivity extends Activity {
break; break;
} }
} }
if (!granted) { if (granted) {
// user denied; you might want to warn or close the app initNative();
} else {
// We can still run using app-specific external files in scoped-storage,
// so allow startup while warning the user.
initNative();
new AlertDialog.Builder(this)
.setTitle("Storage permission recommended")
.setMessage("MinecraftPE can still run with app-private storage, but public external save/load may require permission.")
.setPositiveButton("OK", null)
.setCancelable(true)
.show();
} }
} }
super.onRequestPermissionsResult(requestCode, permissions, grantResults); super.onRequestPermissionsResult(requestCode, permissions, grantResults);

View File

@@ -129,6 +129,7 @@ public class SoundPlayer
new SoundId(R.raw.eat1, "random.eat"), new SoundId(R.raw.eat1, "random.eat"),
new SoundId(R.raw.eat2, "random.eat"), new SoundId(R.raw.eat2, "random.eat"),
new SoundId(R.raw.eat3, "random.eat"), new SoundId(R.raw.eat3, "random.eat"),
new SoundId(R.raw.burp1, "random.burp"),
new SoundId(R.raw.fuse, "random.fuse"), new SoundId(R.raw.fuse, "random.fuse"),
new SoundId(R.raw.zpig1, "mob.zombiepig.zpig"), new SoundId(R.raw.zpig1, "mob.zombiepig.zpig"),

View File

@@ -0,0 +1,48 @@
<?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,13 +41,14 @@
042A91AE16B17517007ABBC6 /* GuiElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A316B17517007ABBC6 /* GuiElement.cpp */; }; 042A91AE16B17517007ABBC6 /* GuiElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A316B17517007ABBC6 /* GuiElement.cpp */; };
042A91AF16B17517007ABBC6 /* NinePatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A516B17517007ABBC6 /* NinePatch.cpp */; }; 042A91AF16B17517007ABBC6 /* NinePatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A516B17517007ABBC6 /* NinePatch.cpp */; };
042A91B016B17517007ABBC6 /* OptionsGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91A716B17517007ABBC6 /* OptionsGroup.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 */; }; 042A91B216B17517007ABBC6 /* TextBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 042A91AB16B17517007ABBC6 /* TextBox.cpp */; };
044129071682FF9600B70EE6 /* MouseHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 044129061682FF9600B70EE6 /* MouseHandler.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 */; }; 9D293CE716071C08000305C8 /* CreateNewWorld_iphone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9D293CE616071C08000305C8 /* CreateNewWorld_iphone.xib */; };
9D293CE816071C08000305C8 /* CreateNewWorld_iphone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9D293CE616071C08000305C8 /* CreateNewWorld_iphone.xib */; }; 9D293CE816071C08000305C8 /* CreateNewWorld_iphone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9D293CE616071C08000305C8 /* CreateNewWorld_iphone.xib */; };
9D293CEB160720D6000305C8 /* worldname_iphone5_3.png in Resources */ = {isa = PBXBuildFile; fileRef = 9D293CEA160720D6000305C8 /* worldname_iphone5_3.png */; }; 9D293CEB160720D6000305C8 /* worldname_iphone5_3.png in Resources */ = {isa = PBXBuildFile; fileRef = 9D293CEA160720D6000305C8 /* worldname_iphone5_3.png */; };
9D293CEC160720D6000305C8 /* worldname_iphone5_3.png in Resources */ = {isa = PBXBuildFile; fileRef = 9D293CEA160720D6000305C8 /* worldname_iphone5_3.png */; }; 9D293CEC160720D6000305C8 /* worldname_iphone5_3.png in Resources */ = {isa = PBXBuildFile; fileRef = 9D293CEA160720D6000305C8 /* worldname_iphone5_3.png */; };
BEEF202614CFF670005F0002 /* Lighting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEEF202614CFF670005F0001 /* Lighting.cpp */; };
BEEF202614CFF670005F0003 /* Lighting.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEEF202614CFF670005F0001 /* Lighting.cpp */; };
D506D3E2161288BD0099FA65 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9D959AFF16036BEE00E23A6F /* Default-568h@2x.png */; }; D506D3E2161288BD0099FA65 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9D959AFF16036BEE00E23A6F /* Default-568h@2x.png */; };
D51DC73614581D4E00E3D761 /* itemframe.png in Resources */ = {isa = PBXBuildFile; fileRef = D51DC73514581D4E00E3D761 /* itemframe.png */; }; D51DC73614581D4E00E3D761 /* itemframe.png in Resources */ = {isa = PBXBuildFile; fileRef = D51DC73514581D4E00E3D761 /* itemframe.png */; };
D51DC74314592B8B00E3D761 /* PVRTexture.m in Sources */ = {isa = PBXBuildFile; fileRef = D51DC74214592B8A00E3D761 /* PVRTexture.m */; }; D51DC74314592B8B00E3D761 /* PVRTexture.m in Sources */ = {isa = PBXBuildFile; fileRef = D51DC74214592B8A00E3D761 /* PVRTexture.m */; };
@@ -1147,6 +1148,52 @@
D5F3B7DD14548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D5F3B7C814548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.xib */; }; D5F3B7DD14548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D5F3B7C814548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.xib */; };
D5F3B7DE14548E7900D25470 /* IASKSpecifierValuesView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D5F3B7C914548E7900D25470 /* IASKSpecifierValuesView.xib */; }; D5F3B7DE14548E7900D25470 /* IASKSpecifierValuesView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D5F3B7C914548E7900D25470 /* IASKSpecifierValuesView.xib */; };
D5F3B7E51454930400D25470 /* InAppSettings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D5F3B7E41454930400D25470 /* InAppSettings.bundle */; }; 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 */; };
F9E5A772300E7A8700164066 /* LevelConstants.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9E5A771300E7A8700164066 /* LevelConstants.cpp */; };
F9E5A775300E7AB700164066 /* CommandManager.hpp in Sources */ = {isa = PBXBuildFile; fileRef = F9E5A773300E7AB700164066 /* CommandManager.hpp */; };
F9E5A776300E7AB700164066 /* CommandManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9E5A774300E7AB700164066 /* CommandManager.cpp */; };
F9E5A779300E7AD500164066 /* CommandBan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9E5A777300E7AD500164066 /* CommandBan.cpp */; };
F9E5A77A300E7AD500164066 /* CommandBan.hpp in Sources */ = {isa = PBXBuildFile; fileRef = F9E5A778300E7AD500164066 /* CommandBan.hpp */; };
F9E5A77D300E7AF400164066 /* CommandHelp.hpp in Sources */ = {isa = PBXBuildFile; fileRef = F9E5A77B300E7AF400164066 /* CommandHelp.hpp */; };
F9E5A77E300E7AF400164066 /* CommandHelp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9E5A77C300E7AF400164066 /* CommandHelp.cpp */; };
F9E5A783300E7B0B00164066 /* CommandKick.hpp in Sources */ = {isa = PBXBuildFile; fileRef = F9E5A77F300E7B0A00164066 /* CommandKick.hpp */; };
F9E5A784300E7B0B00164066 /* CommandOp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9E5A780300E7B0A00164066 /* CommandOp.cpp */; };
F9E5A785300E7B0B00164066 /* CommandKick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9E5A781300E7B0B00164066 /* CommandKick.cpp */; };
F9E5A786300E7B0B00164066 /* CommandOp.hpp in Sources */ = {isa = PBXBuildFile; fileRef = F9E5A782300E7B0B00164066 /* CommandOp.hpp */; };
F9E5A789300E7B3400164066 /* Command.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9E5A787300E7B3400164066 /* Command.cpp */; };
F9E5A78A300E7B3400164066 /* Command.hpp in Sources */ = {isa = PBXBuildFile; fileRef = F9E5A788300E7B3400164066 /* Command.hpp */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
@@ -1208,14 +1255,13 @@
042A91A616B17517007ABBC6 /* NinePatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NinePatch.h; sourceTree = "<group>"; }; 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>"; }; 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>"; }; 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>"; }; 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; path = TextBox.h; 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; };
044129061682FF9600B70EE6 /* MouseHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MouseHandler.cpp; 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>"; }; 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>"; }; 9D293CEA160720D6000305C8 /* worldname_iphone5_3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = worldname_iphone5_3.png; sourceTree = "<group>"; };
9D959AFF16036BEE00E23A6F /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = "<group>"; }; 9D959AFF16036BEE00E23A6F /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = "<group>"; };
BEEF202614CFF670005F0001 /* Lighting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Lighting.cpp; sourceTree = "<group>"; };
D51A8B01146A200000E5D720 /* minecraftpedemo-info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "minecraftpedemo-info.plist"; sourceTree = "<group>"; }; D51A8B01146A200000E5D720 /* minecraftpedemo-info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "minecraftpedemo-info.plist"; sourceTree = "<group>"; };
D51DC73514581D4E00E3D761 /* itemframe.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = itemframe.png; sourceTree = "<group>"; }; D51DC73514581D4E00E3D761 /* itemframe.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = itemframe.png; sourceTree = "<group>"; };
D51DC74114592B8A00E3D761 /* PVRTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PVRTexture.h; sourceTree = "<group>"; }; D51DC74114592B8A00E3D761 /* PVRTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PVRTexture.h; sourceTree = "<group>"; };
@@ -2017,7 +2063,7 @@
D5B50D6914CFF66F005F7284 /* Multitouch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Multitouch.h; sourceTree = "<group>"; }; 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>"; }; 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>"; }; D5B50D6B14CFF66F005F7284 /* time.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = time.cpp; sourceTree = "<group>"; };
D5B50D6C14CFF66F005F7284 /* time.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = time.h; sourceTree = "<group>"; }; D5B50D6C14CFF66F005F7284 /* time.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = time.h; sourceTree = "<group>"; };
D5B50E5614CFF66F005F7284 /* SharedConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedConstants.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>"; }; 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>"; }; D5B50E5814CFF66F005F7284 /* terrain_5551.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = terrain_5551.h; sourceTree = "<group>"; };
@@ -2408,6 +2454,47 @@
D5F3B7C814548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IASKPSToggleSwitchSpecifierViewCell.xib; sourceTree = "<group>"; }; 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>"; }; 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>"; }; 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>"; };
F9E5A771300E7A8700164066 /* LevelConstants.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = LevelConstants.cpp; path = ../../src/world/level/LevelConstants.cpp; sourceTree = "<group>"; };
F9E5A773300E7AB700164066 /* CommandManager.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = CommandManager.hpp; path = ../../src/commands/CommandManager.hpp; sourceTree = "<group>"; };
F9E5A774300E7AB700164066 /* CommandManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CommandManager.cpp; path = ../../src/commands/CommandManager.cpp; sourceTree = "<group>"; };
F9E5A777300E7AD500164066 /* CommandBan.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CommandBan.cpp; path = ../../src/commands/CommandBan.cpp; sourceTree = "<group>"; };
F9E5A778300E7AD500164066 /* CommandBan.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = CommandBan.hpp; path = ../../src/commands/CommandBan.hpp; sourceTree = "<group>"; };
F9E5A77B300E7AF400164066 /* CommandHelp.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = CommandHelp.hpp; path = ../../src/commands/CommandHelp.hpp; sourceTree = "<group>"; };
F9E5A77C300E7AF400164066 /* CommandHelp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CommandHelp.cpp; path = ../../src/commands/CommandHelp.cpp; sourceTree = "<group>"; };
F9E5A77F300E7B0A00164066 /* CommandKick.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = CommandKick.hpp; path = ../../src/commands/CommandKick.hpp; sourceTree = "<group>"; };
F9E5A780300E7B0A00164066 /* CommandOp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CommandOp.cpp; path = ../../src/commands/CommandOp.cpp; sourceTree = "<group>"; };
F9E5A781300E7B0B00164066 /* CommandKick.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CommandKick.cpp; path = ../../src/commands/CommandKick.cpp; sourceTree = "<group>"; };
F9E5A782300E7B0B00164066 /* CommandOp.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = CommandOp.hpp; path = ../../src/commands/CommandOp.hpp; sourceTree = "<group>"; };
F9E5A787300E7B3400164066 /* Command.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Command.cpp; path = ../../src/commands/Command.cpp; sourceTree = "<group>"; };
F9E5A788300E7B3400164066 /* Command.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; name = Command.hpp; path = ../../src/commands/Command.hpp; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
@@ -3226,8 +3313,6 @@
042A91A616B17517007ABBC6 /* NinePatch.h */, 042A91A616B17517007ABBC6 /* NinePatch.h */,
042A91A716B17517007ABBC6 /* OptionsGroup.cpp */, 042A91A716B17517007ABBC6 /* OptionsGroup.cpp */,
042A91A816B17517007ABBC6 /* OptionsGroup.h */, 042A91A816B17517007ABBC6 /* OptionsGroup.h */,
042A91A916B17517007ABBC6 /* OptionsPane.cpp */,
042A91AA16B17517007ABBC6 /* OptionsPane.h */,
042A91AB16B17517007ABBC6 /* TextBox.cpp */, 042A91AB16B17517007ABBC6 /* TextBox.cpp */,
042A91AC16B17517007ABBC6 /* TextBox.h */, 042A91AC16B17517007ABBC6 /* TextBox.h */,
D5B50C2814CFF66F005F7284 /* Button.cpp */, D5B50C2814CFF66F005F7284 /* Button.cpp */,
@@ -3477,6 +3562,7 @@
D5B50CF114CFF66F005F7284 /* TileRenderer.cpp */, D5B50CF114CFF66F005F7284 /* TileRenderer.cpp */,
D5B50CF214CFF66F005F7284 /* TileRenderer.h */, D5B50CF214CFF66F005F7284 /* TileRenderer.h */,
D5B50CF314CFF66F005F7284 /* VertecDecl.h */, D5B50CF314CFF66F005F7284 /* VertecDecl.h */,
BEEF202614CFF670005F0001 /* Lighting.cpp */,
); );
path = renderer; path = renderer;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -3714,6 +3800,7 @@
D5B50E6914CFF66F005F7284 /* StringUtils.cpp */, D5B50E6914CFF66F005F7284 /* StringUtils.cpp */,
D5B50E6A14CFF66F005F7284 /* StringUtils.h */, D5B50E6A14CFF66F005F7284 /* StringUtils.h */,
D5B50E6B14CFF66F005F7284 /* WeighedRandom.h */, D5B50E6B14CFF66F005F7284 /* WeighedRandom.h */,
F99F0FAE2F8436EB00F2B29A /* Color.cpp */,
); );
path = util; path = util;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -3978,6 +4065,8 @@
D5B50F3714CFF66F005F7284 /* TickNextTickData.h */, D5B50F3714CFF66F005F7284 /* TickNextTickData.h */,
D5B50F3814CFF66F005F7284 /* tile */, D5B50F3814CFF66F005F7284 /* tile */,
D5B50F6814CFF66F005F7284 /* TilePos.h */, D5B50F6814CFF66F005F7284 /* TilePos.h */,
F99F0FA82F84369F00F2B29A /* GrassColor.cpp */,
F99F0FAB2F8436CE00F2B29A /* FoliageColor.cpp */,
); );
path = level; path = level;
sourceTree = "<group>"; sourceTree = "<group>";
@@ -4256,6 +4345,20 @@
D5CF9C37144C225000E4244F = { D5CF9C37144C225000E4244F = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
F9E5A788300E7B3400164066 /* Command.hpp */,
F9E5A787300E7B3400164066 /* Command.cpp */,
F9E5A77F300E7B0A00164066 /* CommandKick.hpp */,
F9E5A781300E7B0B00164066 /* CommandKick.cpp */,
F9E5A782300E7B0B00164066 /* CommandOp.hpp */,
F9E5A780300E7B0A00164066 /* CommandOp.cpp */,
F9E5A77B300E7AF400164066 /* CommandHelp.hpp */,
F9E5A77C300E7AF400164066 /* CommandHelp.cpp */,
F9E5A778300E7AD500164066 /* CommandBan.hpp */,
F9E5A777300E7AD500164066 /* CommandBan.cpp */,
F9E5A773300E7AB700164066 /* CommandManager.hpp */,
F9E5A774300E7AB700164066 /* CommandManager.cpp */,
F9E5A771300E7A8700164066 /* LevelConstants.cpp */,
F99D344D2F7372A100DC153E /* Launch Screen.storyboard */,
D5E1BA9A1451C8A0007DCC4F /* Default@2x.png */, D5E1BA9A1451C8A0007DCC4F /* Default@2x.png */,
9D959AFF16036BEE00E23A6F /* Default-568h@2x.png */, 9D959AFF16036BEE00E23A6F /* Default-568h@2x.png */,
D5F07744145EF79B00EC30FB /* Default-Landscape~ipad.png */, D5F07744145EF79B00EC30FB /* Default-Landscape~ipad.png */,
@@ -4267,6 +4370,30 @@
D5CF9C45144C225000E4244F /* Frameworks */, D5CF9C45144C225000E4244F /* Frameworks */,
D5CF9C43144C225000E4244F /* Products */, D5CF9C43144C225000E4244F /* Products */,
D5B50C1614CFF66F005F7284 /* src */, 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>"; sourceTree = "<group>";
}; };
@@ -4527,10 +4654,16 @@
isa = PBXProject; isa = PBXProject;
attributes = { attributes = {
LastUpgradeCheck = 0420; LastUpgradeCheck = 0420;
TargetAttributes = {
D5CF9C41144C225000E4244F = {
DevelopmentTeam = PZUVNW8F2U;
ProvisioningStyle = Automatic;
};
};
}; };
buildConfigurationList = D5CF9C3C144C225000E4244F /* Build configuration list for PBXProject "minecraftpe" */; buildConfigurationList = D5CF9C3C144C225000E4244F /* Build configuration list for PBXProject "minecraftpe" */;
compatibilityVersion = "Xcode 3.2"; compatibilityVersion = "Xcode 3.2";
developmentRegion = English; developmentRegion = en;
hasScannedForEncodings = 0; hasScannedForEncodings = 0;
knownRegions = ( knownRegions = (
en, en,
@@ -4599,6 +4732,7 @@
D5B50A5614CFF492005F7284 /* pig.png in Resources */, D5B50A5614CFF492005F7284 /* pig.png in Resources */,
D5B50A5814CFF492005F7284 /* sheep_fur.png in Resources */, D5B50A5814CFF492005F7284 /* sheep_fur.png in Resources */,
D5B50A5A14CFF492005F7284 /* sheep.png in Resources */, D5B50A5A14CFF492005F7284 /* sheep.png in Resources */,
F99D344F2F7372A100DC153E /* Launch Screen.storyboard in Resources */,
D5B50A5C14CFF492005F7284 /* skeleton.png in Resources */, D5B50A5C14CFF492005F7284 /* skeleton.png in Resources */,
D5B50A5E14CFF492005F7284 /* spider.png in Resources */, D5B50A5E14CFF492005F7284 /* spider.png in Resources */,
D5B50A6014CFF492005F7284 /* zombie.png in Resources */, D5B50A6014CFF492005F7284 /* zombie.png in Resources */,
@@ -4935,6 +5069,7 @@
D5ACF26F15C03DBF00E21C22 /* sand2.m4a in Resources */, D5ACF26F15C03DBF00E21C22 /* sand2.m4a in Resources */,
D5ACF27115C03DBF00E21C22 /* sand3.m4a in Resources */, D5ACF27115C03DBF00E21C22 /* sand3.m4a in Resources */,
D5ACF27315C03DBF00E21C22 /* sand4.m4a in Resources */, D5ACF27315C03DBF00E21C22 /* sand4.m4a in Resources */,
F99D344E2F7372A100DC153E /* Launch Screen.storyboard in Resources */,
D5ACF27515C03DBF00E21C22 /* snow1.m4a in Resources */, D5ACF27515C03DBF00E21C22 /* snow1.m4a in Resources */,
D5ACF27715C03DBF00E21C22 /* snow2.m4a in Resources */, D5ACF27715C03DBF00E21C22 /* snow2.m4a in Resources */,
D5ACF27915C03DBF00E21C22 /* snow3.m4a in Resources */, D5ACF27915C03DBF00E21C22 /* snow3.m4a in Resources */,
@@ -5011,18 +5146,22 @@
D58BB544146A0B910002C9F5 /* IASKSettingsStore.m in Sources */, D58BB544146A0B910002C9F5 /* IASKSettingsStore.m in Sources */,
D58BB545146A0B910002C9F5 /* IASKSettingsStoreFile.m in Sources */, D58BB545146A0B910002C9F5 /* IASKSettingsStoreFile.m in Sources */,
D58BB546146A0B910002C9F5 /* IASKSettingsStoreUserDefaults.m in Sources */, D58BB546146A0B910002C9F5 /* IASKSettingsStoreUserDefaults.m in Sources */,
F99D34232F736AD400DC153E /* TextOption.cpp in Sources */,
D58BB547146A0B910002C9F5 /* IASKSpecifier.m in Sources */, D58BB547146A0B910002C9F5 /* IASKSpecifier.m in Sources */,
D58BB548146A0B910002C9F5 /* IASKPSSliderSpecifierViewCell.m in Sources */, D58BB548146A0B910002C9F5 /* IASKPSSliderSpecifierViewCell.m in Sources */,
D58BB549146A0B910002C9F5 /* IASKPSTextFieldSpecifierViewCell.m in Sources */, D58BB549146A0B910002C9F5 /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
D58BB54A146A0B910002C9F5 /* IASKPSTitleValueSpecifierViewCell.m in Sources */, D58BB54A146A0B910002C9F5 /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
D58BB54B146A0B910002C9F5 /* IASKPSToggleSwitchSpecifierViewCell.m in Sources */, D58BB54B146A0B910002C9F5 /* IASKPSToggleSwitchSpecifierViewCell.m in Sources */,
F99D343B2F736C3B00DC153E /* UsernameScreen.cpp in Sources */,
D58BB54C146A0B910002C9F5 /* IASKSlider.m in Sources */, D58BB54C146A0B910002C9F5 /* IASKSlider.m in Sources */,
D58BB54D146A0B910002C9F5 /* IASKSwitch.m in Sources */, D58BB54D146A0B910002C9F5 /* IASKSwitch.m in Sources */,
F99D34302F736BAD00DC153E /* ConsoleScreen.cpp in Sources */,
D58BB54E146A0B910002C9F5 /* IASKTextField.m in Sources */, D58BB54E146A0B910002C9F5 /* IASKTextField.m in Sources */,
D58BB550146A0B910002C9F5 /* PVRTexture.m in Sources */, D58BB550146A0B910002C9F5 /* PVRTexture.m in Sources */,
D5D43CC9146AF4B4002ED842 /* RenameMPWorldViewController.mm in Sources */, D5D43CC9146AF4B4002ED842 /* RenameMPWorldViewController.mm in Sources */,
D5B50F7014CFF670005F7284 /* AppPlatform_iOS.mm in Sources */, D5B50F7014CFF670005F7284 /* AppPlatform_iOS.mm in Sources */,
D5B50F7414CFF670005F7284 /* CreativeMode.cpp in Sources */, D5B50F7414CFF670005F7284 /* CreativeMode.cpp in Sources */,
F99D34432F736F9400DC153E /* Option.cpp in Sources */,
D5B50F7614CFF670005F7284 /* GameMode.cpp in Sources */, D5B50F7614CFF670005F7284 /* GameMode.cpp in Sources */,
D5B50F7814CFF670005F7284 /* Button.cpp in Sources */, D5B50F7814CFF670005F7284 /* Button.cpp in Sources */,
D5B50F7A14CFF670005F7284 /* ImageButton.cpp in Sources */, D5B50F7A14CFF670005F7284 /* ImageButton.cpp in Sources */,
@@ -5067,6 +5206,7 @@
D5B50FC814CFF670005F7284 /* KeyboardInput.cpp in Sources */, D5B50FC814CFF670005F7284 /* KeyboardInput.cpp in Sources */,
D5B50FCA14CFF670005F7284 /* TouchscreenInput.cpp in Sources */, D5B50FCA14CFF670005F7284 /* TouchscreenInput.cpp in Sources */,
D5B50FCC14CFF670005F7284 /* LocalPlayer.cpp in Sources */, D5B50FCC14CFF670005F7284 /* LocalPlayer.cpp in Sources */,
F99D34482F736FE800DC153E /* KeyOption.cpp in Sources */,
D5B50FCE14CFF670005F7284 /* Chunk.cpp in Sources */, D5B50FCE14CFF670005F7284 /* Chunk.cpp in Sources */,
D5B50FD014CFF670005F7284 /* Frustum.cpp in Sources */, D5B50FD014CFF670005F7284 /* Frustum.cpp in Sources */,
D5B50FD214CFF670005F7284 /* ChickenRenderer.cpp in Sources */, D5B50FD214CFF670005F7284 /* ChickenRenderer.cpp in Sources */,
@@ -5109,6 +5249,7 @@
D5B5111014CFF670005F7284 /* Mth.cpp in Sources */, D5B5111014CFF670005F7284 /* Mth.cpp in Sources */,
D5B5111214CFF670005F7284 /* PerfRenderer.cpp in Sources */, D5B5111214CFF670005F7284 /* PerfRenderer.cpp in Sources */,
D5B5111414CFF670005F7284 /* PerfTimer.cpp in Sources */, D5B5111414CFF670005F7284 /* PerfTimer.cpp in Sources */,
F99F0FA92F84369F00F2B29A /* GrassColor.cpp in Sources */,
D5B5111614CFF670005F7284 /* StringUtils.cpp in Sources */, D5B5111614CFF670005F7284 /* StringUtils.cpp in Sources */,
D5B5111814CFF670005F7284 /* Direction.cpp in Sources */, D5B5111814CFF670005F7284 /* Direction.cpp in Sources */,
D5B5111A14CFF670005F7284 /* Animal.cpp in Sources */, D5B5111A14CFF670005F7284 /* Animal.cpp in Sources */,
@@ -5125,17 +5266,21 @@
D5B5113014CFF670005F7284 /* TripodCamera.cpp in Sources */, D5B5113014CFF670005F7284 /* TripodCamera.cpp in Sources */,
D5B5113214CFF670005F7284 /* Mob.cpp in Sources */, D5B5113214CFF670005F7284 /* Mob.cpp in Sources */,
D5B5113414CFF670005F7284 /* MobCategory.cpp in Sources */, D5B5113414CFF670005F7284 /* MobCategory.cpp in Sources */,
F99D34282F736AFB00DC153E /* OptionsFile.cpp in Sources */,
D5B5113814CFF670005F7284 /* PathFinderMob.cpp in Sources */, D5B5113814CFF670005F7284 /* PathFinderMob.cpp in Sources */,
D5B5113A14CFF670005F7284 /* Inventory.cpp in Sources */, D5B5113A14CFF670005F7284 /* Inventory.cpp in Sources */,
D5B5113C14CFF670005F7284 /* Player.cpp in Sources */, D5B5113C14CFF670005F7284 /* Player.cpp in Sources */,
F99F0FB02F8436EB00F2B29A /* Color.cpp in Sources */,
D5B5113E14CFF670005F7284 /* Arrow.cpp in Sources */, D5B5113E14CFF670005F7284 /* Arrow.cpp in Sources */,
D5B5114014CFF670005F7284 /* Recipes.cpp in Sources */, D5B5114014CFF670005F7284 /* Recipes.cpp in Sources */,
D5B5114214CFF670005F7284 /* ToolRecipes.cpp in Sources */, D5B5114214CFF670005F7284 /* ToolRecipes.cpp in Sources */,
D5B5114414CFF670005F7284 /* WeaponRecipes.cpp in Sources */, D5B5114414CFF670005F7284 /* WeaponRecipes.cpp in Sources */,
D5B5114614CFF670005F7284 /* HatchetItem.cpp in Sources */, D5B5114614CFF670005F7284 /* HatchetItem.cpp in Sources */,
D5B5114814CFF670005F7284 /* Item.cpp in Sources */, D5B5114814CFF670005F7284 /* Item.cpp in Sources */,
F99F0FAC2F8436CE00F2B29A /* FoliageColor.cpp in Sources */,
D5B5114A14CFF670005F7284 /* ItemInstance.cpp in Sources */, D5B5114A14CFF670005F7284 /* ItemInstance.cpp in Sources */,
D5B5114C14CFF670005F7284 /* PickaxeItem.cpp in Sources */, D5B5114C14CFF670005F7284 /* PickaxeItem.cpp in Sources */,
F99D344B2F7370CF00DC153E /* Slider.cpp in Sources */,
D5B5114E14CFF670005F7284 /* ShovelItem.cpp in Sources */, D5B5114E14CFF670005F7284 /* ShovelItem.cpp in Sources */,
D5B5115014CFF670005F7284 /* Biome.cpp in Sources */, D5B5115014CFF670005F7284 /* Biome.cpp in Sources */,
D5B5115214CFF670005F7284 /* BiomeSource.cpp in Sources */, D5B5115214CFF670005F7284 /* BiomeSource.cpp in Sources */,
@@ -5186,6 +5331,7 @@
D5251DBA1538192700FC82C8 /* CloudServer.cpp in Sources */, D5251DBA1538192700FC82C8 /* CloudServer.cpp in Sources */,
D5251DBE1538192700FC82C8 /* CommandParserInterface.cpp in Sources */, D5251DBE1538192700FC82C8 /* CommandParserInterface.cpp in Sources */,
D5251DC01538192700FC82C8 /* ConnectionGraph2.cpp in Sources */, D5251DC01538192700FC82C8 /* ConnectionGraph2.cpp in Sources */,
F99D34402F736C8400DC153E /* GuiElementContainer.cpp in Sources */,
D5251DC21538192700FC82C8 /* ConsoleServer.cpp in Sources */, D5251DC21538192700FC82C8 /* ConsoleServer.cpp in Sources */,
D5251DC41538192700FC82C8 /* DataCompressor.cpp in Sources */, D5251DC41538192700FC82C8 /* DataCompressor.cpp in Sources */,
D5251DC61538192700FC82C8 /* DirectoryDeltaTransfer.cpp in Sources */, D5251DC61538192700FC82C8 /* DirectoryDeltaTransfer.cpp in Sources */,
@@ -5210,6 +5356,8 @@
D5251DEC1538192700FC82C8 /* HTTPConnection.cpp in Sources */, D5251DEC1538192700FC82C8 /* HTTPConnection.cpp in Sources */,
D5251DEE1538192700FC82C8 /* IncrementalReadInterface.cpp in Sources */, D5251DEE1538192700FC82C8 /* IncrementalReadInterface.cpp in Sources */,
D5251DF01538192700FC82C8 /* Itoa.cpp in Sources */, D5251DF01538192700FC82C8 /* Itoa.cpp in Sources */,
F99D34202F736AA100DC153E /* HttpClient.cpp in Sources */,
F99D34382F736C1000DC153E /* JoinByIPScreen.cpp in Sources */,
D5251DF21538192700FC82C8 /* LinuxStrings.cpp in Sources */, D5251DF21538192700FC82C8 /* LinuxStrings.cpp in Sources */,
D5251DF41538192700FC82C8 /* LocklessTypes.cpp in Sources */, D5251DF41538192700FC82C8 /* LocklessTypes.cpp in Sources */,
D5251DF61538192700FC82C8 /* LogCommandParser.cpp in Sources */, D5251DF61538192700FC82C8 /* LogCommandParser.cpp in Sources */,
@@ -5238,6 +5386,7 @@
D5251E2A1538192700FC82C8 /* RakSleep.cpp in Sources */, D5251E2A1538192700FC82C8 /* RakSleep.cpp in Sources */,
D5251E2C1538192700FC82C8 /* RakString.cpp in Sources */, D5251E2C1538192700FC82C8 /* RakString.cpp in Sources */,
D5251E2E1538192700FC82C8 /* RakThread.cpp in Sources */, D5251E2E1538192700FC82C8 /* RakThread.cpp in Sources */,
F99D34332F736BDA00DC153E /* CreditsScreen.cpp in Sources */,
D5251E301538192700FC82C8 /* RakWString.cpp in Sources */, D5251E301538192700FC82C8 /* RakWString.cpp in Sources */,
D5251E321538192700FC82C8 /* Rand.cpp in Sources */, D5251E321538192700FC82C8 /* Rand.cpp in Sources */,
D5251E341538192700FC82C8 /* rdlmalloc.cpp in Sources */, D5251E341538192700FC82C8 /* rdlmalloc.cpp in Sources */,
@@ -5280,6 +5429,7 @@
D5951EEB159349100043A12A /* TileEntity.cpp in Sources */, D5951EEB159349100043A12A /* TileEntity.cpp in Sources */,
D5951EEF159349680043A12A /* FurnaceScreen.cpp in Sources */, D5951EEF159349680043A12A /* FurnaceScreen.cpp in Sources */,
D5951EF215934A2D0043A12A /* Feature.cpp in Sources */, D5951EF215934A2D0043A12A /* Feature.cpp in Sources */,
F99D342C2F736B6F00DC153E /* OptionsItem.cpp in Sources */,
D5951EF815934AC50043A12A /* BaseContainerMenu.cpp in Sources */, D5951EF815934AC50043A12A /* BaseContainerMenu.cpp in Sources */,
D5951EFA15934AC50043A12A /* FurnaceMenu.cpp in Sources */, D5951EFA15934AC50043A12A /* FurnaceMenu.cpp in Sources */,
D5D381F315A1A1CF00B6C50E /* FillingContainer.cpp in Sources */, D5D381F315A1A1CF00B6C50E /* FillingContainer.cpp in Sources */,
@@ -5332,6 +5482,7 @@
D5D8C4C41639341100FD35F0 /* Motive.cpp in Sources */, D5D8C4C41639341100FD35F0 /* Motive.cpp in Sources */,
D5D8C4C8163934BB00FD35F0 /* HangingEntityItem.cpp in Sources */, D5D8C4C8163934BB00FD35F0 /* HangingEntityItem.cpp in Sources */,
D5D8C4CC1639362F00FD35F0 /* NetherReactorPattern.cpp in Sources */, D5D8C4CC1639362F00FD35F0 /* NetherReactorPattern.cpp in Sources */,
BEEF202614CFF670005F0002 /* Lighting.cpp in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -5339,8 +5490,23 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
F9E5A789300E7B3400164066 /* Command.cpp in Sources */,
F9E5A78A300E7B3400164066 /* Command.hpp in Sources */,
F9E5A783300E7B0B00164066 /* CommandKick.hpp in Sources */,
F9E5A784300E7B0B00164066 /* CommandOp.cpp in Sources */,
F9E5A785300E7B0B00164066 /* CommandKick.cpp in Sources */,
F9E5A786300E7B0B00164066 /* CommandOp.hpp in Sources */,
F9E5A77D300E7AF400164066 /* CommandHelp.hpp in Sources */,
F9E5A77E300E7AF400164066 /* CommandHelp.cpp in Sources */,
F9E5A779300E7AD500164066 /* CommandBan.cpp in Sources */,
F9E5A77A300E7AD500164066 /* CommandBan.hpp in Sources */,
F9E5A775300E7AB700164066 /* CommandManager.hpp in Sources */,
F9E5A776300E7AB700164066 /* CommandManager.cpp in Sources */,
F9E5A772300E7A8700164066 /* LevelConstants.cpp in Sources */,
F912B8CF2F6C3D5200BC60DF /* TextBox.h in Sources */,
D5CF9C57144C225000E4244F /* main.mm in Sources */, D5CF9C57144C225000E4244F /* main.mm in Sources */,
D5CF9C5B144C225000E4244F /* minecraftpeAppDelegate.mm in Sources */, D5CF9C5B144C225000E4244F /* minecraftpeAppDelegate.mm in Sources */,
F99D343C2F736C3B00DC153E /* UsernameScreen.cpp in Sources */,
D5CF9C65144C225000E4244F /* EAGLView.m in Sources */, D5CF9C65144C225000E4244F /* EAGLView.m in Sources */,
D5CFA01D144C453900E4244F /* minecraftpeViewController.mm in Sources */, D5CFA01D144C453900E4244F /* minecraftpeViewController.mm in Sources */,
D5A55E4914500EDE00A7571B /* CreateNewWorldViewController.mm in Sources */, D5A55E4914500EDE00A7571B /* CreateNewWorldViewController.mm in Sources */,
@@ -5354,6 +5520,7 @@
D5F3B7D014548E7900D25470 /* IASKSettingsStoreUserDefaults.m in Sources */, D5F3B7D014548E7900D25470 /* IASKSettingsStoreUserDefaults.m in Sources */,
D5F3B7D114548E7900D25470 /* IASKSpecifier.m in Sources */, D5F3B7D114548E7900D25470 /* IASKSpecifier.m in Sources */,
D5F3B7D214548E7900D25470 /* IASKPSSliderSpecifierViewCell.m in Sources */, D5F3B7D214548E7900D25470 /* IASKPSSliderSpecifierViewCell.m in Sources */,
F99D34472F736FE800DC153E /* KeyOption.cpp in Sources */,
D5F3B7D314548E7900D25470 /* IASKPSTextFieldSpecifierViewCell.m in Sources */, D5F3B7D314548E7900D25470 /* IASKPSTextFieldSpecifierViewCell.m in Sources */,
D5F3B7D414548E7900D25470 /* IASKPSTitleValueSpecifierViewCell.m in Sources */, D5F3B7D414548E7900D25470 /* IASKPSTitleValueSpecifierViewCell.m in Sources */,
D5F3B7D514548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.m in Sources */, D5F3B7D514548E7900D25470 /* IASKPSToggleSwitchSpecifierViewCell.m in Sources */,
@@ -5433,6 +5600,7 @@
D5B5102F14CFF670005F7284 /* main.cpp in Sources */, D5B5102F14CFF670005F7284 /* main.cpp in Sources */,
D5B5103514CFF670005F7284 /* Tag.cpp in Sources */, D5B5103514CFF670005F7284 /* Tag.cpp in Sources */,
D5B5103714CFF670005F7284 /* ClientSideNetworkHandler.cpp in Sources */, D5B5103714CFF670005F7284 /* ClientSideNetworkHandler.cpp in Sources */,
F99F0FAF2F8436EB00F2B29A /* Color.cpp in Sources */,
D5B5103914CFF670005F7284 /* NetEventCallback.cpp in Sources */, D5B5103914CFF670005F7284 /* NetEventCallback.cpp in Sources */,
D5B5103B14CFF670005F7284 /* Packet.cpp in Sources */, D5B5103B14CFF670005F7284 /* Packet.cpp in Sources */,
D5B5103D14CFF670005F7284 /* RakNetInstance.cpp in Sources */, D5B5103D14CFF670005F7284 /* RakNetInstance.cpp in Sources */,
@@ -5453,6 +5621,7 @@
D5B5111514CFF670005F7284 /* StringUtils.cpp in Sources */, D5B5111514CFF670005F7284 /* StringUtils.cpp in Sources */,
D5B5111714CFF670005F7284 /* Direction.cpp in Sources */, D5B5111714CFF670005F7284 /* Direction.cpp in Sources */,
D5B5111914CFF670005F7284 /* Animal.cpp in Sources */, D5B5111914CFF670005F7284 /* Animal.cpp in Sources */,
F99F0FAD2F8436CE00F2B29A /* FoliageColor.cpp in Sources */,
D5B5111B14CFF670005F7284 /* Chicken.cpp in Sources */, D5B5111B14CFF670005F7284 /* Chicken.cpp in Sources */,
D5B5111D14CFF670005F7284 /* Cow.cpp in Sources */, D5B5111D14CFF670005F7284 /* Cow.cpp in Sources */,
D5B5111F14CFF670005F7284 /* Pig.cpp in Sources */, D5B5111F14CFF670005F7284 /* Pig.cpp in Sources */,
@@ -5465,11 +5634,13 @@
D5B5112D14CFF670005F7284 /* PrimedTnt.cpp in Sources */, D5B5112D14CFF670005F7284 /* PrimedTnt.cpp in Sources */,
D5B5112F14CFF670005F7284 /* TripodCamera.cpp in Sources */, D5B5112F14CFF670005F7284 /* TripodCamera.cpp in Sources */,
D5B5113114CFF670005F7284 /* Mob.cpp in Sources */, D5B5113114CFF670005F7284 /* Mob.cpp in Sources */,
F99D34442F736F9400DC153E /* Option.cpp in Sources */,
D5B5113314CFF670005F7284 /* MobCategory.cpp in Sources */, D5B5113314CFF670005F7284 /* MobCategory.cpp in Sources */,
D5B5113714CFF670005F7284 /* PathFinderMob.cpp in Sources */, D5B5113714CFF670005F7284 /* PathFinderMob.cpp in Sources */,
D5B5113914CFF670005F7284 /* Inventory.cpp in Sources */, D5B5113914CFF670005F7284 /* Inventory.cpp in Sources */,
D5B5113B14CFF670005F7284 /* Player.cpp in Sources */, D5B5113B14CFF670005F7284 /* Player.cpp in Sources */,
D5B5113D14CFF670005F7284 /* Arrow.cpp in Sources */, D5B5113D14CFF670005F7284 /* Arrow.cpp in Sources */,
F99D343F2F736C8400DC153E /* GuiElementContainer.cpp in Sources */,
D5B5113F14CFF670005F7284 /* Recipes.cpp in Sources */, D5B5113F14CFF670005F7284 /* Recipes.cpp in Sources */,
D5B5114114CFF670005F7284 /* ToolRecipes.cpp in Sources */, D5B5114114CFF670005F7284 /* ToolRecipes.cpp in Sources */,
D5B5114314CFF670005F7284 /* WeaponRecipes.cpp in Sources */, D5B5114314CFF670005F7284 /* WeaponRecipes.cpp in Sources */,
@@ -5501,16 +5672,19 @@
D5B5117714CFF670005F7284 /* ExternalFileLevelStorageSource.cpp in Sources */, D5B5117714CFF670005F7284 /* ExternalFileLevelStorageSource.cpp in Sources */,
D5B5117914CFF670005F7284 /* RegionFile.cpp in Sources */, D5B5117914CFF670005F7284 /* RegionFile.cpp in Sources */,
D5B5117B14CFF670005F7284 /* TickNextTickData.cpp in Sources */, D5B5117B14CFF670005F7284 /* TickNextTickData.cpp in Sources */,
F99F0FAA2F84369F00F2B29A /* GrassColor.cpp in Sources */,
D5B5117D14CFF670005F7284 /* DoorTile.cpp in Sources */, D5B5117D14CFF670005F7284 /* DoorTile.cpp in Sources */,
D5B5118114CFF670005F7284 /* StoneSlabTile.cpp in Sources */, D5B5118114CFF670005F7284 /* StoneSlabTile.cpp in Sources */,
D5B5118314CFF670005F7284 /* Tile.cpp in Sources */, D5B5118314CFF670005F7284 /* Tile.cpp in Sources */,
D5B5118514CFF670005F7284 /* HitResult.cpp in Sources */, D5B5118514CFF670005F7284 /* HitResult.cpp in Sources */,
D5B5118B14D03342005F7284 /* SynchedEntityData.cpp in Sources */, D5B5118B14D03342005F7284 /* SynchedEntityData.cpp in Sources */,
D5B5118E14DEA27F005F7284 /* DeathScreen.cpp in Sources */, D5B5118E14DEA27F005F7284 /* DeathScreen.cpp in Sources */,
F99D34242F736AD400DC153E /* TextOption.cpp in Sources */,
D5B5119114DEA2B7005F7284 /* LevelData.cpp in Sources */, D5B5119114DEA2B7005F7284 /* LevelData.cpp in Sources */,
D5B5119414DEA2EF005F7284 /* DyePowderItem.cpp in Sources */, D5B5119414DEA2EF005F7284 /* DyePowderItem.cpp in Sources */,
D584926D14FD234400741128 /* SharedConstants.cpp in Sources */, D584926D14FD234400741128 /* SharedConstants.cpp in Sources */,
D584927314FD236700741128 /* MoveControl.cpp in Sources */, D584927314FD236700741128 /* MoveControl.cpp in Sources */,
F99D344C2F7370CF00DC153E /* Slider.cpp in Sources */,
D584928614FD240D00741128 /* IConfigListener.cpp in Sources */, D584928614FD240D00741128 /* IConfigListener.cpp in Sources */,
D584928914FD2FAF00741128 /* Path.cpp in Sources */, D584928914FD2FAF00741128 /* Path.cpp in Sources */,
D5B86281153810BD00F3238A /* I18n.cpp in Sources */, D5B86281153810BD00F3238A /* I18n.cpp in Sources */,
@@ -5562,6 +5736,7 @@
D5251E011538192700FC82C8 /* NatTypeDetectionServer.cpp in Sources */, D5251E011538192700FC82C8 /* NatTypeDetectionServer.cpp in Sources */,
D5251E031538192700FC82C8 /* NetworkIDManager.cpp in Sources */, D5251E031538192700FC82C8 /* NetworkIDManager.cpp in Sources */,
D5251E051538192700FC82C8 /* NetworkIDObject.cpp in Sources */, D5251E051538192700FC82C8 /* NetworkIDObject.cpp in Sources */,
F99D34372F736C1000DC153E /* JoinByIPScreen.cpp in Sources */,
D5251E071538192700FC82C8 /* PacketConsoleLogger.cpp in Sources */, D5251E071538192700FC82C8 /* PacketConsoleLogger.cpp in Sources */,
D5251E091538192700FC82C8 /* PacketFileLogger.cpp in Sources */, D5251E091538192700FC82C8 /* PacketFileLogger.cpp in Sources */,
D5251E0B1538192700FC82C8 /* PacketizedTCP.cpp in Sources */, D5251E0B1538192700FC82C8 /* PacketizedTCP.cpp in Sources */,
@@ -5591,11 +5766,13 @@
D5251E411538192700FC82C8 /* SendToThread.cpp in Sources */, D5251E411538192700FC82C8 /* SendToThread.cpp in Sources */,
D5251E431538192700FC82C8 /* SHA1.cpp in Sources */, D5251E431538192700FC82C8 /* SHA1.cpp in Sources */,
D5251E451538192700FC82C8 /* SignaledEvent.cpp in Sources */, D5251E451538192700FC82C8 /* SignaledEvent.cpp in Sources */,
F99D34342F736BDA00DC153E /* CreditsScreen.cpp in Sources */,
D5251E471538192700FC82C8 /* SimpleMutex.cpp in Sources */, D5251E471538192700FC82C8 /* SimpleMutex.cpp in Sources */,
D5251E491538192700FC82C8 /* SocketLayer.cpp in Sources */, D5251E491538192700FC82C8 /* SocketLayer.cpp in Sources */,
D5251E4B1538192700FC82C8 /* StringCompressor.cpp in Sources */, D5251E4B1538192700FC82C8 /* StringCompressor.cpp in Sources */,
D5251E4D1538192700FC82C8 /* StringTable.cpp in Sources */, D5251E4D1538192700FC82C8 /* StringTable.cpp in Sources */,
D5251E4F1538192700FC82C8 /* SuperFastHash.cpp in Sources */, D5251E4F1538192700FC82C8 /* SuperFastHash.cpp in Sources */,
F99D342B2F736B6F00DC153E /* OptionsItem.cpp in Sources */,
D5251E511538192700FC82C8 /* TableSerializer.cpp in Sources */, D5251E511538192700FC82C8 /* TableSerializer.cpp in Sources */,
D5251E531538192700FC82C8 /* TCPInterface.cpp in Sources */, D5251E531538192700FC82C8 /* TCPInterface.cpp in Sources */,
D5251E551538192700FC82C8 /* TeamBalancer.cpp in Sources */, D5251E551538192700FC82C8 /* TeamBalancer.cpp in Sources */,
@@ -5618,6 +5795,7 @@
D5951EDD159348C50043A12A /* ItemPane.cpp in Sources */, D5951EDD159348C50043A12A /* ItemPane.cpp in Sources */,
D5951EE3159349000043A12A /* FurnaceTile.cpp in Sources */, D5951EE3159349000043A12A /* FurnaceTile.cpp in Sources */,
D5951EE8159349100043A12A /* FurnaceTileEntity.cpp in Sources */, D5951EE8159349100043A12A /* FurnaceTileEntity.cpp in Sources */,
F99D342F2F736BAD00DC153E /* ConsoleScreen.cpp in Sources */,
D5951EEA159349100043A12A /* TileEntity.cpp in Sources */, D5951EEA159349100043A12A /* TileEntity.cpp in Sources */,
D5951EEE159349680043A12A /* FurnaceScreen.cpp in Sources */, D5951EEE159349680043A12A /* FurnaceScreen.cpp in Sources */,
D5951EF115934A2D0043A12A /* Feature.cpp in Sources */, D5951EF115934A2D0043A12A /* Feature.cpp in Sources */,
@@ -5654,6 +5832,7 @@
D544941E15D13F45005FA9B0 /* PlayerRenderer.cpp in Sources */, D544941E15D13F45005FA9B0 /* PlayerRenderer.cpp in Sources */,
D544942215D13F5E005FA9B0 /* RemotePlayer.cpp in Sources */, D544942215D13F5E005FA9B0 /* RemotePlayer.cpp in Sources */,
D5B17ED515E226F50056E751 /* Throwable.cpp in Sources */, D5B17ED515E226F50056E751 /* Throwable.cpp in Sources */,
F99D341F2F736AA100DC153E /* HttpClient.cpp in Sources */,
D5B17ED915E2273F0056E751 /* SurvivalMode.cpp in Sources */, D5B17ED915E2273F0056E751 /* SurvivalMode.cpp in Sources */,
D5B17EDD15E227670056E751 /* TrapDoorTile.cpp in Sources */, D5B17EDD15E227670056E751 /* TrapDoorTile.cpp in Sources */,
D5B17EE115E260910056E751 /* MoveFolder.mm in Sources */, D5B17EE115E260910056E751 /* MoveFolder.mm in Sources */,
@@ -5689,6 +5868,7 @@
0400453A16A4125C003EB6FA /* FallingTileRenderer.cpp in Sources */, 0400453A16A4125C003EB6FA /* FallingTileRenderer.cpp in Sources */,
0413970716A82E1E008A9F1A /* ArmorItem.cpp in Sources */, 0413970716A82E1E008A9F1A /* ArmorItem.cpp in Sources */,
0413970D16A82E6B008A9F1A /* CraftingFilters.cpp in Sources */, 0413970D16A82E6B008A9F1A /* CraftingFilters.cpp in Sources */,
F99D34272F736AFB00DC153E /* OptionsFile.cpp in Sources */,
0413970E16A82E6B008A9F1A /* StonecutterScreen.cpp in Sources */, 0413970E16A82E6B008A9F1A /* StonecutterScreen.cpp in Sources */,
0413971116A82E7B008A9F1A /* ArmorScreen.cpp in Sources */, 0413971116A82E7B008A9F1A /* ArmorScreen.cpp in Sources */,
0413971516A82EB9008A9F1A /* ArmorRecipes.cpp in Sources */, 0413971516A82EB9008A9F1A /* ArmorRecipes.cpp in Sources */,
@@ -5697,8 +5877,8 @@
042A91AE16B17517007ABBC6 /* GuiElement.cpp in Sources */, 042A91AE16B17517007ABBC6 /* GuiElement.cpp in Sources */,
042A91AF16B17517007ABBC6 /* NinePatch.cpp in Sources */, 042A91AF16B17517007ABBC6 /* NinePatch.cpp in Sources */,
042A91B016B17517007ABBC6 /* OptionsGroup.cpp in Sources */, 042A91B016B17517007ABBC6 /* OptionsGroup.cpp in Sources */,
042A91B116B17517007ABBC6 /* OptionsPane.cpp in Sources */,
042A91B216B17517007ABBC6 /* TextBox.cpp in Sources */, 042A91B216B17517007ABBC6 /* TextBox.cpp in Sources */,
BEEF202614CFF670005F0003 /* Lighting.cpp in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -5735,25 +5915,29 @@
D50BE20815EE05B8008AA75E /* Ad-Hoc */ = { D50BE20815EE05B8008AA75E /* Ad-Hoc */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = YES;
ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)"; ARCHS = "$(ARCHS_STANDARD)";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Mojang AB"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Mojang AB";
COPY_PHASE_STRIP = YES; COPY_PHASE_STRIP = YES;
GCC_C_LANGUAGE_STANDARD = gnu99; GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_PREPROCESSOR_DEFINITIONS = PUBLISH; GCC_PREPROCESSOR_DEFINITIONS = PUBLISH;
GCC_VERSION = com.apple.compilers.llvmgcc42; GCC_VERSION = "";
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 4.3; HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
IPHONEOS_DEPLOYMENT_TARGET = 12;
ONLY_ACTIVE_ARCH = YES;
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "C93D3524-5C6F-466E-B12B-833663B7EAE0"; "PROVISIONING_PROFILE[sdk=iphoneos*]" = "C93D3524-5C6F-466E-B12B-833663B7EAE0";
RUN_CLANG_STATIC_ANALYZER = NO; RUN_CLANG_STATIC_ANALYZER = NO;
SDKROOT = iphoneos6.0; SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
USE_HEADERMAP = NO;
VALIDATE_PRODUCT = YES; VALIDATE_PRODUCT = YES;
}; };
name = "Ad-Hoc"; name = "Ad-Hoc";
@@ -5765,15 +5949,26 @@
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch"; GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
GCC_PREPROCESSOR_DEFINITIONS = ""; GCC_PREPROCESSOR_DEFINITIONS = "";
"GCC_THUMB_SUPPORT[arch=armv7]" = NO; "GCC_THUMB_SUPPORT[arch=armv7]" = NO;
GCC_VERSION = com.apple.compilers.llvmgcc42; GCC_VERSION = "";
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
HEADER_SEARCH_PATHS = ""; HEADER_SEARCH_PATHS = (
"$(SRCROOT)/../../src",
"$(SRCROOT)/../../src/client/gui/components",
"$(SRCROOT)/../../src/world",
"$(SRCROOT)/../../src/platform/input",
"$(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views",
);
INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist"; INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 4.3; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
IPHONEOS_DEPLOYMENT_TARGET = 12;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.mojang.mcpe-arm64";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
RUN_CLANG_STATIC_ANALYZER = NO; RUN_CLANG_STATIC_ANALYZER = NO;
SDKROOT = iphoneos6.0; SDKROOT = iphoneos;
VALID_ARCHS = "i386 armv6 armv7"; 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;
WRAPPER_EXTENSION = app; WRAPPER_EXTENSION = app;
}; };
name = "Ad-Hoc"; name = "Ad-Hoc";
@@ -5846,24 +6041,28 @@
D5A20ADB146AAD9C00A52FEC /* AppStore */ = { D5A20ADB146AAD9C00A52FEC /* AppStore */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = YES;
ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)"; ARCHS = "$(ARCHS_STANDARD)";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Mojang AB"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Mojang AB";
COPY_PHASE_STRIP = YES; COPY_PHASE_STRIP = YES;
GCC_C_LANGUAGE_STANDARD = gnu99; GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_VERSION = com.apple.compilers.llvmgcc42; GCC_VERSION = "";
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 4.3; HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
IPHONEOS_DEPLOYMENT_TARGET = 12;
ONLY_ACTIVE_ARCH = YES;
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "64BA8967-1A9A-4980-972C-42E75AD5E023"; "PROVISIONING_PROFILE[sdk=iphoneos*]" = "64BA8967-1A9A-4980-972C-42E75AD5E023";
RUN_CLANG_STATIC_ANALYZER = NO; RUN_CLANG_STATIC_ANALYZER = NO;
SDKROOT = iphoneos6.0; SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
USE_HEADERMAP = NO;
VALIDATE_PRODUCT = YES; VALIDATE_PRODUCT = YES;
}; };
name = AppStore; name = AppStore;
@@ -5876,11 +6075,19 @@
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch"; GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
GCC_PREPROCESSOR_DEFINITIONS = PUBLISH; GCC_PREPROCESSOR_DEFINITIONS = PUBLISH;
"GCC_THUMB_SUPPORT[arch=armv7]" = NO; "GCC_THUMB_SUPPORT[arch=armv7]" = NO;
GCC_VERSION = com.apple.compilers.llvmgcc42; GCC_VERSION = "";
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
HEADER_SEARCH_PATHS = ""; HEADER_SEARCH_PATHS = (
"$(SRCROOT)/../../src",
"$(SRCROOT)/../../src/client/gui/components",
"$(SRCROOT)/../../src/world",
"$(SRCROOT)/../../src/platform/input",
"$(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views",
);
INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist"; INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 4.3; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
IPHONEOS_DEPLOYMENT_TARGET = 12;
ONLY_ACTIVE_ARCH = YES;
OTHER_CFLAGS = ( OTHER_CFLAGS = (
"-DNS_BLOCK_ASSERTIONS=1", "-DNS_BLOCK_ASSERTIONS=1",
"-DANDROID_PUBLISH", "-DANDROID_PUBLISH",
@@ -5888,8 +6095,10 @@
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "1B194957-98CF-49B7-A0E7-76692B4B722D"; "PROVISIONING_PROFILE[sdk=iphoneos*]" = "1B194957-98CF-49B7-A0E7-76692B4B722D";
RUN_CLANG_STATIC_ANALYZER = NO; RUN_CLANG_STATIC_ANALYZER = NO;
SDKROOT = iphoneos6.0; SDKROOT = iphoneos;
VALID_ARCHS = "i386 armv6 armv7"; 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;
WRAPPER_EXTENSION = app; WRAPPER_EXTENSION = app;
}; };
name = AppStore; name = AppStore;
@@ -5922,8 +6131,8 @@
D5CF9C6C144C225000E4244F /* Debug */ = { D5CF9C6C144C225000E4244F /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = YES;
ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)"; ARCHS = "$(ARCHS_STANDARD)";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO; COPY_PHASE_STRIP = NO;
GCC_C_LANGUAGE_STANDARD = gnu99; GCC_C_LANGUAGE_STANDARD = gnu99;
@@ -5935,41 +6144,50 @@
"$(inherited)", "$(inherited)",
); );
GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_VERSION = com.apple.compilers.llvmgcc42; GCC_VERSION = "";
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 4.3; HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
IPHONEOS_DEPLOYMENT_TARGET = 12;
ONLY_ACTIVE_ARCH = YES;
RUN_CLANG_STATIC_ANALYZER = NO; RUN_CLANG_STATIC_ANALYZER = NO;
SDKROOT = iphoneos6.0; SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
USE_HEADERMAP = NO;
VALIDATE_PRODUCT = YES;
}; };
name = Debug; name = Debug;
}; };
D5CF9C6D144C225000E4244F /* Release */ = { D5CF9C6D144C225000E4244F /* Release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO; ALWAYS_SEARCH_USER_PATHS = YES;
ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)"; ARCHS = "$(ARCHS_STANDARD)";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = YES; COPY_PHASE_STRIP = YES;
GCC_C_LANGUAGE_STANDARD = gnu99; GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_PREPROCESSOR_DEFINITIONS = PUBLISH; GCC_PREPROCESSOR_DEFINITIONS = PUBLISH;
GCC_VERSION = com.apple.compilers.llvmgcc42; GCC_VERSION = "";
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES; GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO; GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES; GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 4.3; HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
IPHONEOS_DEPLOYMENT_TARGET = 12;
ONLY_ACTIVE_ARCH = YES;
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
RUN_CLANG_STATIC_ANALYZER = NO; RUN_CLANG_STATIC_ANALYZER = NO;
SDKROOT = iphoneos6.0; SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../src";
USE_HEADERMAP = NO;
VALIDATE_PRODUCT = YES; VALIDATE_PRODUCT = YES;
}; };
name = Release; name = Release;
@@ -5977,19 +6195,34 @@
D5CF9C6F144C225000E4244F /* Debug */ = { D5CF9C6F144C225000E4244F /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = PZUVNW8F2U;
GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch"; GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1"; GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1";
"GCC_THUMB_SUPPORT[arch=armv7]" = NO; "GCC_THUMB_SUPPORT[arch=armv7]" = NO;
GCC_VERSION = com.apple.compilers.llvmgcc42; GCC_VERSION = "";
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
HEADER_SEARCH_PATHS = ""; HEADER_SEARCH_PATHS = (
"$(SRCROOT)/../../src",
"$(SRCROOT)/../../src/client/gui/components",
"$(SRCROOT)/../../src/world",
"$(SRCROOT)/../../src/platform/input",
"$(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views",
);
INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist"; INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 4.3; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
IPHONEOS_DEPLOYMENT_TARGET = 12;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.mojang.mcpe-arm64";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
RUN_CLANG_STATIC_ANALYZER = NO; RUN_CLANG_STATIC_ANALYZER = NO;
SDKROOT = iphoneos6.0; SDKROOT = iphoneos;
VALID_ARCHS = "i386 armv6 armv7"; 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;
WRAPPER_EXTENSION = app; WRAPPER_EXTENSION = app;
}; };
name = Debug; name = Debug;
@@ -5997,19 +6230,34 @@
D5CF9C70144C225000E4244F /* Release */ = { D5CF9C70144C225000E4244F /* Release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
buildSettings = { buildSettings = {
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = PZUVNW8F2U;
GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch"; GCC_PREFIX_HEADER = "minecraftpe/minecraftpe-Prefix.pch";
GCC_PREPROCESSOR_DEFINITIONS = ""; GCC_PREPROCESSOR_DEFINITIONS = "";
"GCC_THUMB_SUPPORT[arch=armv7]" = NO; "GCC_THUMB_SUPPORT[arch=armv7]" = NO;
GCC_VERSION = com.apple.compilers.llvmgcc42; GCC_VERSION = "";
GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
HEADER_SEARCH_PATHS = ""; HEADER_SEARCH_PATHS = (
"$(SRCROOT)/../../src",
"$(SRCROOT)/../../src/client/gui/components",
"$(SRCROOT)/../../src/world",
"$(SRCROOT)/../../src/platform/input",
"$(SRCROOT)/../../project/lib_projects/InAppSettingsKit/Views",
);
INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist"; INFOPLIST_FILE = "minecraftpe/minecraftpe-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 4.3; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games";
IPHONEOS_DEPLOYMENT_TARGET = 12;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "com.mojang.mcpe-arm64";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
RUN_CLANG_STATIC_ANALYZER = NO; RUN_CLANG_STATIC_ANALYZER = NO;
SDKROOT = iphoneos6.0; SDKROOT = iphoneos;
VALID_ARCHS = "i386 armv6 armv7"; 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;
WRAPPER_EXTENSION = app; WRAPPER_EXTENSION = app;
}; };
name = Release; name = Release;

View File

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

View File

@@ -140,7 +140,7 @@ RakNet::TimeUS GetTimeUS_Windows( void )
#if _MSC_VER >= 1400 && defined (_M_X64) #if _MSC_VER >= 1400 && defined (_M_X64)
GetProcessAffinityMask(mProc, (PDWORD_PTR)&mProcMask, (PDWORD_PTR)&mSysMask); GetProcessAffinityMask(mProc, (PDWORD_PTR)&mProcMask, (PDWORD_PTR)&mSysMask);
#else #else
GetProcessAffinityMask(mProc, &mProcMask, &mSysMask); GetProcessAffinityMask(mProc, (PDWORD_PTR)&mProcMask, (PDWORD_PTR)&mSysMask);
#endif #endif
mThread = GetCurrentThread(); mThread = GetCurrentThread();

View File

@@ -1,8 +1,8 @@
#if defined(X360__) #if defined(X360__)
#elif defined (_WIN32) #elif defined (_WIN32)
#include <WinSock2.h> #include <winsock2.h>
#include <windows.h> #include <windows.h>
#include <Ws2tcpip.h> #include <ws2tcpip.h>
// Must always include Winsock2.h before windows.h // Must always include Winsock2.h before windows.h
// or else: // or else:

View File

@@ -74,6 +74,8 @@ public:
virtual TextureData loadTextureFromMemory(const unsigned char* data, size_t size) { return TextureData(); } virtual TextureData loadTextureFromMemory(const unsigned char* data, size_t size) { return TextureData(); }
virtual void playSound(const std::string& fn, float volume, float pitch) {} virtual void playSound(const std::string& fn, float volume, float pitch) {}
virtual void hideCursor(bool hide) {}
virtual void showDialog(int dialogId) {} virtual void showDialog(int dialogId) {}
virtual void createUserInput() {} virtual void createUserInput() {}

View File

@@ -20,6 +20,10 @@
#include <shellapi.h> #include <shellapi.h>
#endif #endif
#ifdef __EMSCRIPTEN__
#include <emscripten/html5.h>
#endif
static void png_funcReadFile(png_structp pngPtr, png_bytep data, png_size_t length) { static void png_funcReadFile(png_structp pngPtr, png_bytep data, png_size_t length) {
((std::istream*)png_get_io_ptr(pngPtr))->read((char*)data, length); ((std::istream*)png_get_io_ptr(pngPtr))->read((char*)data, length);
} }
@@ -73,50 +77,20 @@ public:
: filename_; : filename_;
std::ifstream source(filename.c_str(), std::ios::binary); std::ifstream source(filename.c_str(), std::ios::binary);
if (source) { if (!source) {
png_structp pngPtr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (!pngPtr)
return out;
png_infop infoPtr = png_create_info_struct(pngPtr);
if (!infoPtr) {
png_destroy_read_struct(&pngPtr, NULL, NULL);
return out;
}
// Hack to get around the broken libpng for windows
png_set_read_fn(pngPtr,(void*)&source, png_funcReadFile);
png_read_info(pngPtr, infoPtr);
// Set up the texdata properties
out.w = png_get_image_width(pngPtr, infoPtr);
out.h = png_get_image_height(pngPtr, infoPtr);
png_bytep* rowPtrs = new png_bytep[out.h];
out.data = new unsigned char[4 * out.w * out.h];
out.memoryHandledExternally = false;
int rowStrideBytes = 4 * out.w;
for (int i = 0; i < out.h; i++) {
rowPtrs[i] = (png_bytep)&out.data[i*rowStrideBytes];
}
png_read_image(pngPtr, rowPtrs);
// Teardown and return
png_destroy_read_struct(&pngPtr, &infoPtr,(png_infopp)0);
delete[] (png_bytep)rowPtrs;
source.close();
return out;
}
else
{
LOGI("Couldn't find file: %s\n", filename.c_str()); LOGI("Couldn't find file: %s\n", filename.c_str());
return out; return out;
} }
std::vector<unsigned char> fileData((std::istreambuf_iterator<char>(source)), std::istreambuf_iterator<char>());
source.close();
if (fileData.empty()) {
LOGI("Couldn't read file: %s\n", filename.c_str());
return out;
}
return loadTextureFromMemory(fileData.data(), fileData.size());
} }
TextureData loadTextureFromMemory(const unsigned char* data, size_t size) override { TextureData loadTextureFromMemory(const unsigned char* data, size_t size) override {
@@ -132,12 +106,36 @@ public:
return std::string(mbstr); return std::string(mbstr);
} }
virtual int getScreenWidth() override { return 854; }; virtual int getScreenWidth() override {
virtual int getScreenHeight() override { return 480; }; #ifdef __EMSCRIPTEN__
int w, h;
emscripten_get_canvas_element_size("canvas", &w, &h);
return w;
#endif
return 854;
};
virtual int getScreenHeight() override {
#ifdef __EMSCRIPTEN__
int w, h;
emscripten_get_canvas_element_size("canvas", &w, &h);
return h;
#endif
return 480;
};
virtual float getPixelsPerMillimeter() override; virtual float getPixelsPerMillimeter() override;
virtual bool supportsTouchscreen() override { return true; } virtual bool supportsTouchscreen() override { return false; /* glfw supports only mouse and keyboard */ }
virtual void hideCursor(bool hide) override {
int isHide = hide ? GLFW_CURSOR_NORMAL : GLFW_CURSOR_HIDDEN;
glfwSetInputMode(window, GLFW_CURSOR, isHide);
}
virtual void openURL(const std::string& url) override { virtual void openURL(const std::string& url) override {
#ifdef _WIN32 #ifdef _WIN32
@@ -145,6 +143,8 @@ public:
#elif __linux__ #elif __linux__
std::string command = "xdg-open " + url; std::string command = "xdg-open " + url;
system(command.c_str()); system(command.c_str());
#elif __EMSCRIPTEN__
emscripten_run_script(std::string("window.open('" + url + "', '_blank')").c_str());
#endif #endif
} }

View File

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

View File

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

View File

@@ -99,6 +99,9 @@ void NinecraftApp::init()
I18n::loadLanguage(platform(), "en_US"); I18n::loadLanguage(platform(), "en_US");
#endif #endif
if (!externalStoragePath.empty()) {
options.setOptionsFilePath(externalStoragePath);
}
Minecraft::init(); Minecraft::init();
#if !defined(DEMO_MODE) && !defined(APPLE_DEMO_PROMOTION) && !defined(NO_STORAGE) #if !defined(DEMO_MODE) && !defined(APPLE_DEMO_PROMOTION) && !defined(NO_STORAGE)
@@ -133,7 +136,7 @@ void NinecraftApp::teardown()
Recipes ::teardownRecipes(); Recipes ::teardownRecipes();
TileEntity::teardownTileEntities(); TileEntity::teardownTileEntities();
#endif #endif
#ifdef WIN32 #if defined(WIN32) && !defined(STANDALONE_SERVER)
ItemRenderer::teardown_static(); ItemRenderer::teardown_static();
if (EntityTileRenderer::instance != NULL) { if (EntityTileRenderer::instance != NULL) {
delete EntityTileRenderer::instance; delete EntityTileRenderer::instance;

View File

@@ -4,12 +4,11 @@ namespace Common {
std::string getGameVersionString(const std::string& versionSuffix /* = "" */) std::string getGameVersionString(const std::string& versionSuffix /* = "" */)
{ {
std::string result = std::string("v0.6.1") + versionSuffix; std::string result = std::string("v0.1.0 (forked from v0.6.1 alpha)") + versionSuffix;
// append 64-bit port marker only on Android 64bit targets // append 64-bit port marker only on Android 64bit targets
#if defined(ANDROID) && (defined(__aarch64__) || defined(__x86_64__)) #if defined(ANDROID) && (defined(__aarch64__) || defined(__x86_64__))
result += " (64-bit port)"; result += " (64-bit)";
#endif #endif
result += " alpha";
return result; return result;
} }

21
src/client/KeyMapping.h Normal file
View File

@@ -0,0 +1,21 @@
#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__*/

File diff suppressed because it is too large Load Diff

View File

@@ -2,6 +2,7 @@
#define NET_MINECRAFT_CLIENT__Minecraft_H__ #define NET_MINECRAFT_CLIENT__Minecraft_H__
#include "Options.h" #include "Options.h"
#include "commands/CommandManager.hpp"
#ifndef STANDALONE_SERVER #ifndef STANDALONE_SERVER
#include "MouseHandler.h" #include "MouseHandler.h"
#include "gui/Gui.h" #include "gui/Gui.h"
@@ -87,6 +88,14 @@ public:
void update(); void update();
std::string gatherStats1();
std::string gatherStats2();
std::string gatherStats4();
std::string gatherStats3();
void tick(int nTick, int maxTick); void tick(int nTick, int maxTick);
void tickInput(); void tickInput();
@@ -109,6 +118,8 @@ public:
bool isLevelGenerated(); bool isLevelGenerated();
void handleMouseDown(int button, bool down);
void audioEngineOn(); void audioEngineOn();
void audioEngineOff(); void audioEngineOff();
@@ -118,11 +129,17 @@ public:
void optionUpdated(OptionId option, bool value); void optionUpdated(OptionId option, bool value);
void optionUpdated(OptionId option, float value); void optionUpdated(OptionId option, float value);
void optionUpdated(OptionId option, int value); void optionUpdated(OptionId option, int value);
int getTicks() { return ticks; }
void addMessage(const std::string& msg);
#ifdef __APPLE__ #ifdef __APPLE__
bool _isSuperFast; bool _isSuperFast;
bool isSuperFast() { return _isSuperFast; } bool isSuperFast() { return _isSuperFast; }
#endif #endif
CommandManager& commandManager() { return m_commandManager; }
protected: protected:
void _levelGenerated(); void _levelGenerated();
@@ -195,7 +212,8 @@ public:
std::string externalCacheStoragePath; std::string externalCacheStoragePath;
protected: protected:
Timer timer; Timer timer;
// @note @attn @warn: this is dangerous as fuck!
// @note @attn @warn: this is dangerous as fuck!
volatile bool isGeneratingLevel; volatile bool isGeneratingLevel;
bool _hasSignaledGeneratingLevelFinished; bool _hasSignaledGeneratingLevelFinished;
@@ -219,9 +237,12 @@ private:
bool _isCreativeMode; bool _isCreativeMode;
//int _respawnPlayerTicks; //int _respawnPlayerTicks;
Player* _pendingRemovePlayer; // @attn @todo @fix: remove this shait and fix the respawn behaviour Player* _pendingRemovePlayer; // @attn @todo @fix: remove this shait and fix the respawn behaviour
// shit* lmao
PerfRenderer* _perfRenderer; PerfRenderer* _perfRenderer;
CommandServer* _commandServer; CommandServer* _commandServer;
CommandManager m_commandManager;
}; };
#endif /*NET_MINECRAFT_CLIENT__Minecraft_H__*/ #endif /*NET_MINECRAFT_CLIENT__Minecraft_H__*/

View File

@@ -5,7 +5,7 @@
#include <SDL/SDL.h> #include <SDL/SDL.h>
#endif #endif
#ifdef PLATFORM_DESKTOP #if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
#include <GLFW/glfw3.h> #include <GLFW/glfw3.h>
#endif #endif
@@ -34,7 +34,7 @@ void MouseHandler::grab() {
SDL_ShowCursor(0); SDL_ShowCursor(0);
#endif #endif
#ifdef PLATFORM_DESKTOP #if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
glfwSetInputMode(glfwGetCurrentContext(), GLFW_CURSOR, GLFW_CURSOR_DISABLED); glfwSetInputMode(glfwGetCurrentContext(), GLFW_CURSOR, GLFW_CURSOR_DISABLED);
#endif #endif
} }
@@ -46,7 +46,7 @@ void MouseHandler::release() {
SDL_ShowCursor(1); SDL_ShowCursor(1);
#endif #endif
#ifdef PLATFORM_DESKTOP #if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB)
glfwSetInputMode(glfwGetCurrentContext(), GLFW_CURSOR, GLFW_CURSOR_NORMAL); glfwSetInputMode(glfwGetCurrentContext(), GLFW_CURSOR, GLFW_CURSOR_NORMAL);
#endif #endif
} }

View File

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

View File

@@ -20,6 +20,7 @@ OptionBool fixedCamera("fixedCamera", false);
OptionBool isFlying("isflying", false); OptionBool isFlying("isflying", false);
OptionBool barOnTop("barOnTop", false); OptionBool barOnTop("barOnTop", false);
OptionBool allowSprint("allowSprint", true); OptionBool allowSprint("allowSprint", true);
OptionBool rpiCursor("rpiCursor", false);
OptionBool autoJump("autoJump", true); OptionBool autoJump("autoJump", true);
@@ -53,11 +54,33 @@ OptionBool limitFramerate("limitFramerate", false);
OptionBool vsync("vsync", true); OptionBool vsync("vsync", true);
OptionBool fancyGraphics("fancyGraphics", true); OptionBool fancyGraphics("fancyGraphics", true);
OptionBool viewBobbing("viewBobbing", true); OptionBool viewBobbing("viewBobbing", true);
OptionBool ambientOcclusion("ao", false); OptionBool ambientOcclusion("ao", true);
OptionBool useNormalLighting("normalLighting", true);
OptionBool beautifulSky("beautifulSky", true);
OptionBool useVignette("useVignette", true);
OptionBool useTouchscreen("useTouchscreen", true); OptionBool useTouchscreen("useTouchscreen", true);
OptionBool serverVisible("servervisible", true); OptionBool serverVisible("servervisible", true);
OptionBool foliageTint("foliagetint", false);
OptionInt fogType("fogType", 0, 0, 2);
OptionBool javaHud("javaHud", false);
OptionBool betaSky("betaSky", false);
OptionBool tintedSide("tintedSide", false);
OptionBool blockOutline("blockOutline", false);
OptionBool restoredAnims("restoredAnims", true);
OptionInt debugStyle("debugStyle", 0, 0, 1);
OptionInt menuStyle("menuStyle",0, 0, 2);
OptionBool windowScale("windowScale", false);
OptionInt keyForward("key.forward", Keyboard::KEY_W); OptionInt keyForward("key.forward", Keyboard::KEY_W);
OptionInt keyLeft("key.left", Keyboard::KEY_A); OptionInt keyLeft("key.left", Keyboard::KEY_A);
@@ -111,6 +134,7 @@ void Options::initTable() {
m_options[OPTIONS_GUI_SCALE] = &guiScale; m_options[OPTIONS_GUI_SCALE] = &guiScale;
m_options[OPTIONS_WINDOW_SCALE] = &windowScale;
m_options[OPTIONS_SKIN] = &skin; m_options[OPTIONS_SKIN] = &skin;
m_options[OPTIONS_USERNAME] = &username; m_options[OPTIONS_USERNAME] = &username;
@@ -135,8 +159,20 @@ void Options::initTable() {
m_options[OPTIONS_USE_TOUCHSCREEN] = &useTouchscreen; m_options[OPTIONS_USE_TOUCHSCREEN] = &useTouchscreen;
m_options[OPTIONS_BLOCK_OUTLINE] = &blockOutline;
m_options[OPTIONS_VIGNETTE] = &useVignette;
m_options[OPTIONS_BEAUTIFUL_SKY] = &beautifulSky;
m_options[OPTIONS_NORMAL_LIGHTING] = &useNormalLighting;
m_options[OPTIONS_RESTORED_ANIMS] = &restoredAnims;
m_options[OPTIONS_SERVER_VISIBLE] = &serverVisible; m_options[OPTIONS_SERVER_VISIBLE] = &serverVisible;
m_options[OPTIONS_MENU_STYLE] = &menuStyle;
m_options[OPTIONS_KEY_FORWARD] = &keyForward; m_options[OPTIONS_KEY_FORWARD] = &keyForward;
m_options[OPTIONS_KEY_LEFT] = &keyLeft; m_options[OPTIONS_KEY_LEFT] = &keyLeft;
m_options[OPTIONS_KEY_BACK] = &keyBack; m_options[OPTIONS_KEY_BACK] = &keyBack;
@@ -158,6 +194,16 @@ void Options::initTable() {
m_options[OPTIONS_BAR_ON_TOP] = &barOnTop; m_options[OPTIONS_BAR_ON_TOP] = &barOnTop;
m_options[OPTIONS_ALLOW_SPRINT] = &allowSprint; 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_DEBUG_STYLE] = &debugStyle;
m_options[OPTIONS_BETA_SKY] = &betaSky;
m_options[OPTIONS_TINTED_SIDE] = &tintedSide;
m_options[OPTIONS_JAVA_HUD] = &javaHud;
m_options[OPTIONS_AUTOJUMP] = &autoJump; m_options[OPTIONS_AUTOJUMP] = &autoJump;
m_options[OPTIONS_LAST_IP] = &lastIp; m_options[OPTIONS_LAST_IP] = &lastIp;
@@ -283,6 +329,10 @@ void Options::save() {
optionsFile.save(stringVec); optionsFile.save(stringVec);
} }
void Options::setOptionsFilePath(const std::string& path) {
optionsFile.setOptionsPath(path + "/options.txt");
}
void Options::notifyOptionUpdate(OptionId key, bool value) { void Options::notifyOptionUpdate(OptionId key, bool value) {
minecraft->optionUpdated(key, value); minecraft->optionUpdated(key, value);
} }

View File

@@ -37,6 +37,7 @@ enum OptionId {
OPTIONS_BAR_ON_TOP, OPTIONS_BAR_ON_TOP,
OPTIONS_ALLOW_SPRINT, OPTIONS_ALLOW_SPRINT,
OPTIONS_AUTOJUMP, OPTIONS_AUTOJUMP,
OPTIONS_WINDOW_SCALE,
// Graphics // Graphics
OPTIONS_RENDER_DEBUG, OPTIONS_RENDER_DEBUG,
@@ -49,6 +50,8 @@ enum OptionId {
OPTIONS_LIMIT_FRAMERATE, OPTIONS_LIMIT_FRAMERATE,
OPTIONS_VSYNC, OPTIONS_VSYNC,
OPTIONS_FANCY_GRAPHICS, OPTIONS_FANCY_GRAPHICS,
OPTIONS_NORMAL_LIGHTING,
// Cheats / debug // Cheats / debug
OPTIONS_FLY_SPEED, OPTIONS_FLY_SPEED,
@@ -56,6 +59,7 @@ enum OptionId {
OPTIONS_IS_FLYING, OPTIONS_IS_FLYING,
// Control // Control
OPTIONS_BLOCK_OUTLINE,
OPTIONS_USE_MOUSE_FOR_DIGGING, OPTIONS_USE_MOUSE_FOR_DIGGING,
OPTIONS_IS_LEFT_HANDED, OPTIONS_IS_LEFT_HANDED,
OPTIONS_IS_JOY_TOUCH_AREA, OPTIONS_IS_JOY_TOUCH_AREA,
@@ -83,6 +87,18 @@ enum OptionId {
OPTIONS_FIRST_LAUNCH, OPTIONS_FIRST_LAUNCH,
OPTIONS_LAST_IP, OPTIONS_LAST_IP,
OPTIONS_RPI_CURSOR,
OPTIONS_FOLIAGE_TINT,
OPTIONS_FOG_TYPE,
OPTIONS_JAVA_HUD,
OPTIONS_RESTORED_ANIMS,
OPTIONS_TINTED_SIDE,
OPTIONS_BETA_SKY,
OPTIONS_BEAUTIFUL_SKY,
OPTIONS_VIGNETTE,
OPTIONS_DEBUG_STYLE,
OPTIONS_COMPLETE_LIGHTING,
OPTIONS_MENU_STYLE,
// Should be last! // Should be last!
OPTIONS_COUNT OPTIONS_COUNT
}; };
@@ -93,6 +109,10 @@ typedef std::vector<std::string> StringVector;
class Options class Options
{ {
public: 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; static bool debugGl;
Options(Minecraft* minecraft, const std::string& workingDirectory = "") Options(Minecraft* minecraft, const std::string& workingDirectory = "")
@@ -100,15 +120,10 @@ public:
// elements werent initialized so i was getting a garbage pointer and a crash // elements werent initialized so i was getting a garbage pointer and a crash
m_options.fill(nullptr); m_options.fill(nullptr);
initTable(); initTable();
load(); // load() is deferred to init() where path is configured correctly
} }
void initTable(); void initTable();
void set(OptionId key, int value);
void set(OptionId key, float value);
void set(OptionId key, const std::string& value);
void toggle(OptionId key);
int getIntValue(OptionId key) { int getIntValue(OptionId key) {
auto option = opt<OptionInt>(key); auto option = opt<OptionInt>(key);
@@ -144,6 +159,11 @@ public:
void load(); void load();
void save(); void save();
void set(OptionId key, int value);
void set(OptionId key, float value);
void set(OptionId key, const std::string& value);
void setOptionsFilePath(const std::string& path);
void toggle(OptionId key);
void notifyOptionUpdate(OptionId key, bool value); void notifyOptionUpdate(OptionId key, bool value);
void notifyOptionUpdate(OptionId key, float value); void notifyOptionUpdate(OptionId key, float value);

View File

@@ -4,28 +4,73 @@
#include <errno.h> #include <errno.h>
#include <platform/log.h> #include <platform/log.h>
#if defined(_WIN32)
#include <direct.h>
#else
#include <sys/stat.h>
#include <sys/types.h>
#endif
OptionsFile::OptionsFile() { OptionsFile::OptionsFile() {
#ifdef __APPLE__ #ifdef __APPLE__
settingsPath = "./Documents/options.txt"; settingsPath = "./Documents/options.txt";
#elif defined(ANDROID) #elif defined(ANDROID)
settingsPath = "options.txt"; settingsPath = "options.txt";
#elif defined(__EMSCRIPTEN__)
settingsPath = "/games/com.mojang/options.txt";
#else #else
settingsPath = "options.txt"; settingsPath = "options.txt";
#endif #endif
} }
void OptionsFile::save(const StringVector& settings) { void OptionsFile::setOptionsPath(const std::string& path) {
FILE* pFile = fopen(settingsPath.c_str(), "w"); settingsPath = path;
if(pFile != NULL) {
for(StringVector::const_iterator it = settings.begin(); it != settings.end(); ++it) {
fprintf(pFile, "%s\n", it->c_str());
}
fclose(pFile);
} else {
LOGI("OptionsFile::save failed to open '%s' for writing: %s", settingsPath.c_str(), strerror(errno));
}
} }
std::string OptionsFile::getOptionsPath() const {
return settingsPath;
}
void OptionsFile::save(const StringVector& settings) {
FILE* pFile = fopen(settingsPath.c_str(), "w");
if (!pFile && errno == ENOENT) {
std::string dir = settingsPath;
size_t fpos = dir.find_last_of("/\\");
if (fpos != std::string::npos) {
dir.resize(fpos);
std::string toCreate;
for (size_t i = 0; i <= dir.size(); ++i) {
if (i == dir.size() || dir[i] == '/' || dir[i] == '\\') {
if (!toCreate.empty()) {
#if defined(_WIN32)
_mkdir(toCreate.c_str());
#else
mkdir(toCreate.c_str(), 0755);
#endif
}
}
if (i < dir.size())
toCreate.push_back(dir[i]);
}
}
pFile = fopen(settingsPath.c_str(), "w");
}
if (!pFile) {
LOGI("OptionsFile::save failed: %s", strerror(errno));
return;
}
for (const auto& s : settings) {
fprintf(pFile, "%s\n", s.c_str());
}
fclose(pFile);
}
StringVector OptionsFile::getOptionStrings() { StringVector OptionsFile::getOptionStrings() {
StringVector returnVector; StringVector returnVector;
FILE* pFile = fopen(settingsPath.c_str(), "r"); FILE* pFile = fopen(settingsPath.c_str(), "r");
@@ -46,7 +91,8 @@ StringVector OptionsFile::getOptionStrings() {
} }
fclose(pFile); fclose(pFile);
} else { } else {
LOGI("OptionsFile::getOptionStrings failed to open '%s' for reading: %s", settingsPath.c_str(), strerror(errno)); if (errno != ENOENT)
LOGI("OptionsFile::getOptionStrings failed to open '%s' for reading: %s", settingsPath.c_str(), strerror(errno));
} }
return returnVector; return returnVector;
} }

View File

@@ -11,7 +11,9 @@ public:
OptionsFile(); OptionsFile();
void save(const StringVector& settings); void save(const StringVector& settings);
StringVector getOptionStrings(); StringVector getOptionStrings();
void setOptionsPath(const std::string& path);
std::string getOptionsPath() const;
private: private:
std::string settingsPath; std::string settingsPath;
}; };

View File

@@ -1,69 +1,56 @@
#include "CreativeMode.h" #include "CreativeMode.h"
#include "../Minecraft.h" #include "../Minecraft.h"
#ifndef STANDALONE_SERVER #ifndef STANDALONE_SERVER
#include "../particle/ParticleEngine.h" #include "../particle/ParticleEngine.h"
#endif #endif
#include "../player/LocalPlayer.h" #include "../player/LocalPlayer.h"
#ifndef STANDALONE_SERVER #ifndef STANDALONE_SERVER
#include "../renderer/LevelRenderer.h" #include "../renderer/LevelRenderer.h"
#include "../sound/SoundEngine.h" #include "../sound/SoundEngine.h"
#endif #endif
#include "../../world/level/Level.h" #include "../../world/level/Level.h"
//#include "../../network/Packet.h" //#include "../../network/Packet.h"
#include "../../network/packet/RemoveBlockPacket.h" #include "../../network/packet/RemoveBlockPacket.h"
#include "../../world/entity/player/Abilities.h" #include "../../world/entity/player/Abilities.h"
static const int DestructionTickDelay = 5; static const int DestructionTickDelay = 5;
CreativeMode::CreativeMode(Minecraft* minecraft) CreativeMode::CreativeMode(Minecraft* minecraft)
: super(minecraft) : super(minecraft)
{ {
} }
void CreativeMode::startDestroyBlock(int x, int y, int z, int face) { void CreativeMode::startDestroyBlock(int x, int y, int z, int face) {
if(minecraft->player->getCarriedItem() != NULL && minecraft->player->getCarriedItem()->id == Item::bow->id) if(minecraft->player->getCarriedItem() != NULL && minecraft->player->getCarriedItem()->id == Item::bow->id)
return; return;
creativeDestroyBlock(x, y, z, face); creativeDestroyBlock(x, y, z, face);
destroyDelay = DestructionTickDelay; destroyDelay = DestructionTickDelay;
} }
void CreativeMode::creativeDestroyBlock(int x, int y, int z, int face) { void CreativeMode::creativeDestroyBlock(int x, int y, int z, int face) {
minecraft->level->extinguishFire(x, y, z, face); minecraft->level->extinguishFire(x, y, z, face);
destroyBlock(x, y, z, face); destroyBlock(x, y, z, face);
} }
void CreativeMode::continueDestroyBlock(int x, int y, int z, int face) { void CreativeMode::continueDestroyBlock(int x, int y, int z, int face) {
destroyDelay--; destroyDelay--;
if (destroyDelay <= 0) { if (destroyDelay <= 0) {
destroyDelay = DestructionTickDelay; destroyDelay = DestructionTickDelay;
creativeDestroyBlock(x, y, z, face); creativeDestroyBlock(x, y, z, face);
} }
} }
void CreativeMode::stopDestroyBlock() { void CreativeMode::stopDestroyBlock() {
destroyDelay = 0; destroyDelay = 0;
} }
void CreativeMode::initAbilities( Abilities& abilities ) { void CreativeMode::initAbilities( Abilities& abilities ) {
abilities.mayfly = true; abilities.mayfly = true;
abilities.instabuild = true; abilities.instabuild = true;
abilities.invulnerable = true; abilities.invulnerable = true;
} }
bool CreativeMode::isCreativeType() { bool CreativeMode::isCreativeType() {
return true; return true;
} }
void CreativeMode::releaseUsingItem( Player* player ) {
if(player->getCarriedItem() != NULL) {
int oldItemId = player->getCarriedItem()->id;
int oldAux = player->getAuxData();
super::releaseUsingItem(player);
if(player->getCarriedItem() != NULL && player->getCarriedItem()->id == oldItemId) {
player->getCarriedItem()->setAuxValue(oldAux);
}
} else {
super::releaseUsingItem(player);
}
}

View File

@@ -1,27 +1,26 @@
#ifndef NET_MINECRAFT_CLIENT_GAMEMODE__CreativeMode_H__ #ifndef NET_MINECRAFT_CLIENT_GAMEMODE__CreativeMode_H__
#define NET_MINECRAFT_CLIENT_GAMEMODE__CreativeMode_H__ #define NET_MINECRAFT_CLIENT_GAMEMODE__CreativeMode_H__
//package net.minecraft.client.gamemode; //package net.minecraft.client.gamemode;
#include "GameMode.h" #include "GameMode.h"
class CreativeMode: public GameMode class CreativeMode: public GameMode
{ {
typedef GameMode super; typedef GameMode super;
public: public:
CreativeMode(Minecraft* minecraft); CreativeMode(Minecraft* minecraft);
void startDestroyBlock(int x, int y, int z, int face); void startDestroyBlock(int x, int y, int z, int face);
void continueDestroyBlock(int x, int y, int z, int face); void continueDestroyBlock(int x, int y, int z, int face);
void stopDestroyBlock(); void stopDestroyBlock();
bool isCreativeType(); bool isCreativeType();
void initAbilities(Abilities& abilities); void initAbilities(Abilities& abilities);
void releaseUsingItem(Player* player); private:
private: void creativeDestroyBlock(int x, int y, int z, int face);
void creativeDestroyBlock(int x, int y, int z, int face); };
};
#endif /*NET_MINECRAFT_CLIENT_GAMEMODE__CreativeMode_H__*/
#endif /*NET_MINECRAFT_CLIENT_GAMEMODE__CreativeMode_H__*/

View File

@@ -1,115 +1,102 @@
#include "CreatorMode.h" #include "CreatorMode.h"
#include "../Minecraft.h" #include "../Minecraft.h"
#include "../particle/ParticleEngine.h" #include "../particle/ParticleEngine.h"
#include "../player/LocalPlayer.h" #include "../player/LocalPlayer.h"
#include "../renderer/LevelRenderer.h" #include "../renderer/LevelRenderer.h"
#include "../sound/SoundEngine.h" #include "../sound/SoundEngine.h"
#include "../../world/level/Level.h" #include "../../world/level/Level.h"
//#include "../../network/Packet.h" //#include "../../network/Packet.h"
#include "../../network/packet/RemoveBlockPacket.h" #include "../../network/packet/RemoveBlockPacket.h"
#include "../../world/entity/player/Abilities.h" #include "../../world/entity/player/Abilities.h"
static const int DestructionTickDelay = 5; static const int DestructionTickDelay = 5;
class Creator: public ICreator { class Creator: public ICreator {
//virtual void getEvents(); //virtual void getEvents();
public: public:
Creator(/*int eventLifeTime*/) Creator(/*int eventLifeTime*/)
: _tileEvents(32), : _tileEvents(32),
_tickId(0) _tickId(0)
{ {
} }
void setTick(int tick) { void setTick(int tick) {
_tickId = tick; _tickId = tick;
} }
EventList<TileEvent>& getTileEvents() { return _tileEvents; } EventList<TileEvent>& getTileEvents() { return _tileEvents; }
void addevent_blockUse(int entityId, int x, int y, int z, int face) { void addevent_blockUse(int entityId, int x, int y, int z, int face) {
TileEvent t = { TileEvent t = {
entityId, entityId,
x,y,z, x,y,z,
face face
}; };
_tileEvents.add(t, _tickId); _tileEvents.add(t, _tickId);
} }
private: private:
EventList<TileEvent> _tileEvents; EventList<TileEvent> _tileEvents;
int _tickId; int _tickId;
}; };
CreatorMode::CreatorMode(Minecraft* minecraft) CreatorMode::CreatorMode(Minecraft* minecraft)
: super(minecraft) : super(minecraft)
{ {
_creator = new Creator(); _creator = new Creator();
} }
CreatorMode::~CreatorMode() { CreatorMode::~CreatorMode() {
delete _creator; delete _creator;
} }
void CreatorMode::startDestroyBlock(int x, int y, int z, int face) { void CreatorMode::startDestroyBlock(int x, int y, int z, int face) {
if(minecraft->player->getCarriedItem() != NULL && minecraft->player->getCarriedItem()->id == Item::bow->id) if(minecraft->player->getCarriedItem() != NULL && minecraft->player->getCarriedItem()->id == Item::bow->id)
return; return;
CreatorDestroyBlock(x, y, z, face); CreatorDestroyBlock(x, y, z, face);
destroyDelay = DestructionTickDelay; destroyDelay = DestructionTickDelay;
} }
void CreatorMode::CreatorDestroyBlock(int x, int y, int z, int face) { void CreatorMode::CreatorDestroyBlock(int x, int y, int z, int face) {
minecraft->level->extinguishFire(x, y, z, face); minecraft->level->extinguishFire(x, y, z, face);
destroyBlock(x, y, z, face); destroyBlock(x, y, z, face);
} }
void CreatorMode::continueDestroyBlock(int x, int y, int z, int face) { void CreatorMode::continueDestroyBlock(int x, int y, int z, int face) {
destroyDelay--; destroyDelay--;
if (destroyDelay <= 0) { if (destroyDelay <= 0) {
destroyDelay = DestructionTickDelay; destroyDelay = DestructionTickDelay;
CreatorDestroyBlock(x, y, z, face); CreatorDestroyBlock(x, y, z, face);
} }
} }
bool CreatorMode::useItemOn( Player* player, Level* level, ItemInstance* item, int x, int y, int z, int face, const Vec3& hit ) { bool CreatorMode::useItemOn( Player* player, Level* level, ItemInstance* item, int x, int y, int z, int face, const Vec3& hit ) {
if (item && item->id == ((Item*)Item::sword_iron)->id) if (item && item->id == ((Item*)Item::sword_iron)->id)
_creator->addevent_blockUse(player->entityId, x, y, z, face); _creator->addevent_blockUse(player->entityId, x, y, z, face);
return super::useItemOn(player, level, item, x, y, z, face, hit); return super::useItemOn(player, level, item, x, y, z, face, hit);
} }
void CreatorMode::stopDestroyBlock() { void CreatorMode::stopDestroyBlock() {
destroyDelay = 0; destroyDelay = 0;
} }
void CreatorMode::initAbilities( Abilities& abilities ) { void CreatorMode::initAbilities( Abilities& abilities ) {
abilities.mayfly = true; abilities.mayfly = true;
abilities.instabuild = true; abilities.instabuild = true;
abilities.invulnerable = true; abilities.invulnerable = true;
} }
bool CreatorMode::isCreativeType() { bool CreatorMode::isCreativeType() {
return true; return true;
} }
void CreatorMode::releaseUsingItem( Player* player ) { ICreator* CreatorMode::getCreator() {
if(player->getCarriedItem() != NULL) { return _creator;
int oldItemId = player->getCarriedItem()->id; }
int oldAux = player->getAuxData();
super::releaseUsingItem(player); void CreatorMode::tick() {
if(player->getCarriedItem() != NULL && player->getCarriedItem()->id == oldItemId) { _creator->setTick(minecraft->level->getTime());
player->getCarriedItem()->setAuxValue(oldAux); super::tick();
} }
} else {
super::releaseUsingItem(player);
}
}
ICreator* CreatorMode::getCreator() {
return _creator;
}
void CreatorMode::tick() {
_creator->setTick(minecraft->level->getTime());
super::tick();
}

View File

@@ -1,61 +1,61 @@
#ifndef NET_MINECRAFT_CLIENT_GAMEMODE__CreatorMode_H__ #ifndef NET_MINECRAFT_CLIENT_GAMEMODE__CreatorMode_H__
#define NET_MINECRAFT_CLIENT_GAMEMODE__CreatorMode_H__ #define NET_MINECRAFT_CLIENT_GAMEMODE__CreatorMode_H__
//package net.minecraft.client.gamemode; //package net.minecraft.client.gamemode;
#include "GameMode.h" #include "GameMode.h"
#include "../../world/PosTranslator.h" #include "../../world/PosTranslator.h"
class ICreator { class ICreator {
public: public:
virtual ~ICreator() {} virtual ~ICreator() {}
struct TileEvent { struct TileEvent {
int entityId; int entityId;
int x, y, z; int x, y, z;
int face; int face;
void write(std::stringstream& ss, IPosTranslator& t) const { void write(std::stringstream& ss, IPosTranslator& t) const {
int xx = x, yy = y, zz = z; int xx = x, yy = y, zz = z;
t.to(xx, yy, zz); t.to(xx, yy, zz);
ss << xx << "," << yy << "," << zz << "," << face << "," << entityId; ss << xx << "," << yy << "," << zz << "," << face << "," << entityId;
} }
}; };
template <class T> template <class T>
class EventList { class EventList {
public: public:
EventList(int size) { EventList(int size) {
_events.reserve(size); _events.reserve(size);
_maxSize = (int)size; _maxSize = (int)size;
clear(); clear();
} }
void clear() { void clear() {
_index = -1; _index = -1;
_size = 0; _size = 0;
} }
void add(const T& item, int tick) { void add(const T& item, int tick) {
if (_size < _maxSize) { if (_size < _maxSize) {
_events.push_back(Item()); _events.push_back(Item());
++_size; ++_size;
} }
Item& e = _events[_nextIndex()]; Item& e = _events[_nextIndex()];
e.item = item; e.item = item;
e.timestamp = tick; e.timestamp = tick;
} }
int size() const { int size() const {
return _size; return _size;
} }
const T& operator[](int i) const { const T& operator[](int i) const {
return _events[_getIndex(i)].item; return _events[_getIndex(i)].item;
} }
T& operator[](int i) { T& operator[](int i) {
return _events[_getIndex(i)].item; return _events[_getIndex(i)].item;
} }
void write(std::stringstream& ss, IPosTranslator& t, int minTimetamp) const { void write(std::stringstream& ss, IPosTranslator& t, int minTimetamp) const {
int i = _getFirstNewerIndex(minTimetamp); int i = _getFirstNewerIndex(minTimetamp);
if (i < 0) if (i < 0)
return; return;
@@ -66,63 +66,62 @@ public:
ss << "|"; ss << "|";
if (++i == _size) i = 0; if (++i == _size) i = 0;
} }
} }
private: private:
int _getIndex(int i) const { return (1 + _index + i) % _size; } int _getIndex(int i) const { return (1 + _index + i) % _size; }
int _nextIndex() { int _nextIndex() {
if (++_index == _size) _index = 0; if (++_index == _size) _index = 0;
return _index; return _index;
} }
int _getFirstNewerIndex(int timestamp) const { int _getFirstNewerIndex(int timestamp) const {
for (int i = _index + 1, j = 0; j < _size; ++i, ++j) { for (int i = _index + 1, j = 0; j < _size; ++i, ++j) {
if (i == _size) i = 0; if (i == _size) i = 0;
if (_events[i].timestamp >= timestamp) return i; if (_events[i].timestamp >= timestamp) return i;
} }
return -1; return -1;
} }
struct Item { struct Item {
int timestamp; int timestamp;
T item; T item;
}; };
int _index; int _index;
int _size; int _size;
int _maxSize; int _maxSize;
std::vector<Item> _events; std::vector<Item> _events;
}; };
virtual EventList<TileEvent>& getTileEvents() = 0; virtual EventList<TileEvent>& getTileEvents() = 0;
}; };
class Creator; class Creator;
class CreatorMode: public GameMode class CreatorMode: public GameMode
{ {
typedef GameMode super; typedef GameMode super;
public: public:
CreatorMode(Minecraft* minecraft); CreatorMode(Minecraft* minecraft);
~CreatorMode(); ~CreatorMode();
void startDestroyBlock(int x, int y, int z, int face); void startDestroyBlock(int x, int y, int z, int face);
void continueDestroyBlock(int x, int y, int z, int face); void continueDestroyBlock(int x, int y, int z, int face);
void stopDestroyBlock(); void stopDestroyBlock();
bool useItemOn(Player* player, Level* level, ItemInstance* item, int x, int y, int z, int face, const Vec3& hit); bool useItemOn(Player* player, Level* level, ItemInstance* item, int x, int y, int z, int face, const Vec3& hit);
void tick(); void tick();
ICreator* getCreator(); ICreator* getCreator();
bool isCreativeType(); bool isCreativeType();
void initAbilities(Abilities& abilities); void initAbilities(Abilities& abilities);
void releaseUsingItem(Player* player); private:
private: void CreatorDestroyBlock(int x, int y, int z, int face);
void CreatorDestroyBlock(int x, int y, int z, int face);
Creator* _creator;
Creator* _creator; };
};
#endif /*NET_MINECRAFT_CLIENT_GAMEMODE__CreatorMode_H__*/
#endif /*NET_MINECRAFT_CLIENT_GAMEMODE__CreatorMode_H__*/

View File

@@ -1,174 +1,179 @@
#include "GameMode.h" #include "GameMode.h"
#include "../Minecraft.h" #include "../Minecraft.h"
#include "../../network/packet/UseItemPacket.h" #include "../../network/packet/UseItemPacket.h"
#include "../../network/packet/PlayerActionPacket.h" #include "../../network/packet/PlayerActionPacket.h"
#include "../../world/level/Level.h" #include "../../world/level/Level.h"
#include "../../world/item/ItemInstance.h" #include "../../world/item/ItemInstance.h"
#include "../player/LocalPlayer.h" #include "../player/LocalPlayer.h"
#include "client/Options.h" #include "client/Options.h"
#ifndef STANDALONE_SERVER #ifndef STANDALONE_SERVER
#include "../sound/SoundEngine.h" #include "../sound/SoundEngine.h"
#include "../particle/ParticleEngine.h" #include "../particle/ParticleEngine.h"
#endif #endif
#include "../../network/RakNetInstance.h" #include "../../network/RakNetInstance.h"
#include "../../network/packet/RemoveBlockPacket.h" #include "../../network/packet/RemoveBlockPacket.h"
#ifndef STANDALONE_SERVER #ifndef STANDALONE_SERVER
#include "../renderer/LevelRenderer.h" #include "../renderer/LevelRenderer.h"
#endif #endif
#include "../../world/level/material/Material.h" #include "../../world/level/material/Material.h"
GameMode::GameMode( Minecraft* minecraft) GameMode::GameMode( Minecraft* minecraft)
: minecraft(minecraft), : minecraft(minecraft),
destroyProgress(0), destroyProgress(0),
oDestroyProgress(0), oDestroyProgress(0),
destroyTicks(0), destroyTicks(0),
destroyDelay(0) destroyDelay(0)
{ {
} }
/*virtual*/ /*virtual*/
Player* GameMode::createPlayer(Level* level) { Player* GameMode::createPlayer(Level* level) {
return new LocalPlayer(minecraft, level, minecraft->options.getStringValue(OPTIONS_USERNAME), level->dimension->id, isCreativeType()); return new LocalPlayer(minecraft, level, minecraft->options.getStringValue(OPTIONS_USERNAME), level->dimension->id, isCreativeType());
} }
/*virtual*/ /*virtual*/
void GameMode::interact(Player* player, Entity* entity) { void GameMode::interact(Player* player, Entity* entity) {
player->interact(entity); player->interact(entity);
} }
/*virtual*/ /*virtual*/
void GameMode::attack(Player* player, Entity* entity) { void GameMode::attack(Player* player, Entity* entity) {
if (minecraft->level->adventureSettings.noPvP && entity->isPlayer()) if (minecraft->level->adventureSettings.noPvP && entity->isPlayer())
return; return;
if (minecraft->level->adventureSettings.noPvM && entity->isMob()) if (minecraft->level->adventureSettings.noPvM && entity->isMob())
return; return;
player->attack(entity); player->attack(entity);
} }
/* virtual */ /* virtual */
void GameMode::startDestroyBlock( int x, int y, int z, int face ) { void GameMode::startDestroyBlock( int x, int y, int z, int face ) {
if(minecraft->player->getCarriedItem() != NULL && minecraft->player->getCarriedItem()->id == Item::bow->id) if(minecraft->player->getCarriedItem() != NULL && minecraft->player->getCarriedItem()->id == Item::bow->id)
return; return;
destroyBlock(x, y, z, face); destroyBlock(x, y, z, face);
} }
/*virtual*/ /*virtual*/
bool GameMode::destroyBlock(int x, int y, int z, int face) { bool GameMode::destroyBlock(int x, int y, int z, int face) {
Level* level = minecraft->level; Level* level = minecraft->level;
Tile* oldTile = Tile::tiles[level->getTile(x, y, z)]; Tile* oldTile = Tile::tiles[level->getTile(x, y, z)];
if (!oldTile) if (!oldTile)
return false; return false;
if (level->adventureSettings.immutableWorld) { if (level->adventureSettings.immutableWorld) {
if (oldTile != (Tile*)Tile::leaves if (oldTile != (Tile*)Tile::leaves
&& oldTile->material != Material::plant) { && oldTile->material != Material::plant) {
return false; return false;
} }
} }
#ifndef STANDALONE_SERVER #ifndef STANDALONE_SERVER
minecraft->particleEngine->destroy(x, y, z); minecraft->particleEngine->destroy(x, y, z);
#endif #endif
int data = level->getData(x, y, z); int data = level->getData(x, y, z);
bool changed = level->setTile(x, y, z, 0); bool changed = level->setTile(x, y, z, 0);
if (changed) { if (changed) {
#ifndef STANDALONE_SERVER #ifndef STANDALONE_SERVER
minecraft->soundEngine->play(oldTile->soundType->getBreakSound(), x + 0.5f, y + 0.5f, z + 0.5f, (oldTile->soundType->getVolume() + 1) / 2, oldTile->soundType->getPitch() * 0.8f); minecraft->soundEngine->play(oldTile->soundType->getBreakSound(), x + 0.5f, y + 0.5f, z + 0.5f, (oldTile->soundType->getVolume() + 1) / 2, oldTile->soundType->getPitch() * 0.8f);
#endif #endif
oldTile->destroy(level, x, y, z, data); oldTile->destroy(level, x, y, z, data);
if (minecraft->options.getBooleanValue(OPTIONS_DESTROY_VIBRATION)) minecraft->platform()->vibrate(24); if (minecraft->options.getBooleanValue(OPTIONS_DESTROY_VIBRATION)) minecraft->platform()->vibrate(24);
if (minecraft->isOnline()) { if (minecraft->isOnline()) {
RemoveBlockPacket packet(minecraft->player, x, y, z); RemoveBlockPacket packet(minecraft->player, x, y, z);
minecraft->raknetInstance->send(packet); minecraft->raknetInstance->send(packet);
} }
} }
return changed; return changed;
} }
/*virtual*/ /*virtual*/
bool GameMode::useItemOn(Player* player, Level* level, ItemInstance* item, int x, int y, int z, int face, const Vec3& hit) { bool GameMode::useItemOn(Player* player, Level* level, ItemInstance* item, int x, int y, int z, int face, const Vec3& hit) {
float clickX = hit.x - x; float clickX = hit.x - x;
float clickY = hit.y - y; float clickY = hit.y - y;
float clickZ = hit.z - z; float clickZ = hit.z - z;
item = player->inventory->getSelected(); if (level->isClientSide) {
if(level->isClientSide) { LOGI("%f %f %f \n", player->x, player->y, player->z);
UseItemPacket packet(x, y, z, face, item, player->entityId, clickX, clickY, clickZ);
minecraft->raknetInstance->send(packet); item = player->inventory->getSelected();
} UseItemPacket packet(x, y, z, face, item, player->entityId, clickX, clickY, clickZ, player->x, player->y, player->z,
int t = level->getTile(x, y, z); player->bb.x0, player->bb.y0, player->bb.z0, player->bb.x1, player->bb.y1, player->bb.z1);
if (t == Tile::invisible_bedrock->id) return false;
if (t > 0 && Tile::tiles[t]->use(level, x, y, z, player)) minecraft->raknetInstance->send(packet);
return true; }
int t = level->getTile(x, y, z);
if (item == NULL) return false; if (t == Tile::invisible_bedrock->id) return false;
if(isCreativeType()) { if (t > 0 && Tile::tiles[t]->use(level, x, y, z, player))
int aux = item->getAuxValue(); return true;
int count = item->count;
bool success = item->useOn(player, level, x, y, z, face, clickX, clickY, clickZ); if (item == NULL) return false;
item->setAuxValue(aux); if (isCreativeType()) {
item->count = count; int aux = item->getAuxValue();
return success; int count = item->count;
} else { bool success = item->useOn(player, level, x, y, z, face, clickX, clickY, clickZ);
return item->useOn(player, level, x, y, z, face, clickX, clickY, clickZ); item->setAuxValue(aux);
} item->count = count;
} return success;
} else {
bool GameMode::useItem( Player* player, Level* level, ItemInstance* item ) { return item->useOn(player, level, x, y, z, face, clickX, clickY, clickZ);
int oldCount = item->count; }
}
ItemInstance* itemInstance = item->use(level, player);
if(level->isClientSide) { bool GameMode::useItem( Player* player, Level* level, ItemInstance* item ) {
UseItemPacket packet(item, player->entityId, player->aimDirection); int oldCount = item->count;
minecraft->raknetInstance->send(packet);
} ItemInstance* itemInstance = item->use(level, player);
if (itemInstance != item || (itemInstance != NULL && itemInstance->count != oldCount)) { if(level->isClientSide) {
//player.inventory.items[player.inventory.selected] = itemInstance; UseItemPacket packet(item, player->entityId, player->aimDirection, player->x, player->y, player->z,
//if (itemInstance.count == 0) { player->bb.x0, player->bb.y0, player->bb.z0, player->bb.x1, player->bb.y1, player->bb.z1);
// player.inventory.items[player.inventory.selected] = NULL; minecraft->raknetInstance->send(packet);
//} }
return true; if (itemInstance != item || (itemInstance != NULL && itemInstance->count != oldCount)) {
} //player.inventory.items[player.inventory.selected] = itemInstance;
return false; //if (itemInstance.count == 0) {
} // player.inventory.items[player.inventory.selected] = NULL;
//}
ItemInstance* GameMode::handleInventoryMouseClick( int containerId, int slotNum, int buttonNum, Player* player ) { return true;
//return player.containerMenu.clicked(slotNum, buttonNum, player); }
return NULL; return false;
} }
void GameMode::handleCloseInventory( int containerId, Player* player ) { ItemInstance* GameMode::handleInventoryMouseClick( int containerId, int slotNum, int buttonNum, Player* player ) {
//player.containerMenu.removed(player); //return player.containerMenu.clicked(slotNum, buttonNum, player);
//player.containerMenu = player.inventoryMenu; return NULL;
} }
float GameMode::getPickRange() { void GameMode::handleCloseInventory( int containerId, Player* player ) {
return 5.0f; //player.containerMenu.removed(player);
} //player.containerMenu = player.inventoryMenu;
}
void GameMode::initPlayer( Player* player ) {
initAbilities(player->abilities); float GameMode::getPickRange() {
} return 5.0f;
}
void GameMode::releaseUsingItem(Player* player){
if(minecraft->level->isClientSide) { void GameMode::initPlayer( Player* player ) {
PlayerActionPacket packet(PlayerActionPacket::RELEASE_USE_ITEM, 0, 0, 0, 0, player->entityId); initAbilities(player->abilities);
minecraft->raknetInstance->send(packet); }
}
player->releaseUsingItem(); void GameMode::releaseUsingItem(Player* player){
} if (minecraft->level->isClientSide && player->isUsingItem()) {
PlayerActionPacket packet(PlayerActionPacket::RELEASE_USE_ITEM, 0, 0, 0, 0, player->entityId);
void GameMode::tick() { minecraft->raknetInstance->send(packet);
oDestroyProgress = destroyProgress; }
} player->releaseUsingItem();
}
void GameMode::render( float a ) {
#ifndef STANDALONE_SERVER void GameMode::tick() {
if (destroyProgress <= 0) { oDestroyProgress = destroyProgress;
minecraft->gui.progress = 0; }
minecraft->levelRenderer->destroyProgress = 0;
} else { void GameMode::render( float a ) {
float dp = oDestroyProgress + (destroyProgress - oDestroyProgress) * a; #ifndef STANDALONE_SERVER
minecraft->gui.progress = dp; if (destroyProgress <= 0) {
minecraft->levelRenderer->destroyProgress = dp; minecraft->gui.progress = 0;
} minecraft->levelRenderer->destroyProgress = 0;
#endif } else {
} float dp = oDestroyProgress + (destroyProgress - oDestroyProgress) * a;
minecraft->gui.progress = dp;
minecraft->levelRenderer->destroyProgress = dp;
}
#endif
}

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); minecraft->player->inventory->clearSlot(minecraft->player->inventory->selected);
} }
} }
if (changed && couldDestroy) { if (changed && couldDestroy) {
ItemInstance instance(t, 1, data); ItemInstance instance(t, 1, data);
Tile::tiles[t]->playerDestroy(minecraft->level, minecraft->player, x, y, z, data); Tile::tiles[t]->playerDestroy(minecraft->level, minecraft->player, x, y, z, data);

View File

@@ -186,7 +186,7 @@ void Font::draw( const std::string& str, float x, float y, int color, bool darke
glPushMatrix2(); glPushMatrix2();
glTranslatef2((GLfloat)x, (GLfloat)y, 0.0f); glTranslatef2((GLfloat)x, (GLfloat)y, 0.0f);
for (unsigned int i = 0; i < str.length(); i++) { for (unsigned int i = 0; i < str.length(); i++) {
while (str.length() > i + 1 && str[i] == '§') { while (str.length() > i + 1 && str[i] == '\xa7') {
int cc = hex.find((char)tolower(str[i + 1])); int cc = hex.find((char)tolower(str[i + 1]));
if (cc < 0 || cc > 15) cc = 15; if (cc < 0 || cc > 15) cc = 15;
lists[index++] = listPos + 256 + cc + (darken ? 16 : 0); lists[index++] = listPos + 256 + cc + (darken ? 16 : 0);
@@ -235,7 +235,7 @@ int Font::width( const std::string& str )
int len = 0; int len = 0;
for (unsigned int i = 0; i < str.length(); i++) { for (unsigned int i = 0; i < str.length(); i++) {
if (str[i] == '§') { if (str[i] == '\xa7') {
i++; i++;
} else { } else {
//int ch = SharedConstants.acceptableLetters.indexOf(str.charAt(i)); //int ch = SharedConstants.acceptableLetters.indexOf(str.charAt(i));
@@ -274,7 +274,7 @@ std::string Font::sanitize( const std::string& str )
int j = 0; int j = 0;
for (unsigned int i = 0; i < str.length(); i++) { for (unsigned int i = 0; i < str.length(); i++) {
if (str[i] == '§') { if (str[i] == '\xa7') {
i++; i++;
//} else if (SharedConstants.acceptableLetters.indexOf(str.charAt(i)) >= 0) { //} else if (SharedConstants.acceptableLetters.indexOf(str.charAt(i)) >= 0) {
} else { } else {

View File

@@ -7,6 +7,7 @@
#include "screens/ConsoleScreen.h" #include "screens/ConsoleScreen.h"
#include "../Minecraft.h" #include "../Minecraft.h"
#include "../player/LocalPlayer.h" #include "../player/LocalPlayer.h"
#include "../renderer/Chunk.h"
#include "../renderer/Tesselator.h" #include "../renderer/Tesselator.h"
#include "../renderer/TileRenderer.h" #include "../renderer/TileRenderer.h"
#include "../renderer/LevelRenderer.h" #include "../renderer/LevelRenderer.h"
@@ -36,7 +37,7 @@ const float Gui::DropTicks = 40.0f;
//#include <android/log.h> //#include <android/log.h>
Gui::Gui(Minecraft* minecraft) Gui::Gui(Minecraft* minecraft)
: minecraft(minecraft), : minecraft(minecraft),
tickCount(0), tickCount(0),
progress(0), progress(0),
overlayMessageTime(0), overlayMessageTime(0),
@@ -51,7 +52,8 @@ Gui::Gui(Minecraft* minecraft)
_currentDropTicks(-1), _currentDropTicks(-1),
_currentDropSlot(-1), _currentDropSlot(-1),
MAX_MESSAGE_WIDTH(240), MAX_MESSAGE_WIDTH(240),
itemNameOverlayTime(2) itemNameOverlayTime(2),
_openInventorySlot(minecraft->useTouchscreen())
{ {
glGenBuffers2(1, &_inventoryRc.vboId); glGenBuffers2(1, &_inventoryRc.vboId);
glGenBuffers2(1, &rcFeedbackInner.vboId); glGenBuffers2(1, &rcFeedbackInner.vboId);
@@ -75,11 +77,8 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
//minecraft->gameRenderer->setupGuiScreen(); //minecraft->gameRenderer->setupGuiScreen();
Font* font = minecraft->font; Font* font = minecraft->font;
#ifdef PLATFORM_DESKTOP
const bool isTouchInterface = false;
#else
const bool isTouchInterface = minecraft->useTouchscreen(); const bool isTouchInterface = minecraft->useTouchscreen();
#endif
const int screenWidth = (int)(minecraft->width * InvGuiScale); const int screenWidth = (int)(minecraft->width * InvGuiScale);
const int screenHeight = (int)(minecraft->height * InvGuiScale); const int screenHeight = (int)(minecraft->height * InvGuiScale);
blitOffset = -90; blitOffset = -90;
@@ -88,9 +87,9 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
glColor4f2(1, 1, 1, 1); glColor4f2(1, 1, 1, 1);
// H: 4 // H: 4
// T: 7 // T: 7
// L: 6 // L: 6
// F: 3 // F: 3
int ySlot = screenHeight - 16 - 3; int ySlot = screenHeight - 16 - 3;
if (!minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) { if (!minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
@@ -105,6 +104,12 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
} }
} }
// viginette has been fixed, was due to gl_blend not being enabled, my bad
if (minecraft->options.getBooleanValue(OPTIONS_FANCY_GRAPHICS) && minecraft->options.getBooleanValue(OPTIONS_VIGNETTE)){
renderVignette(this->minecraft->player->getBrightness(a), screenWidth, screenHeight);
}
// shredder end
if(minecraft->player->getSleepTimer() > 0) { if(minecraft->player->getSleepTimer() > 0) {
glDisable(GL_DEPTH_TEST); glDisable(GL_DEPTH_TEST);
glDisable(GL_ALPHA_TEST); glDisable(GL_ALPHA_TEST);
@@ -115,38 +120,41 @@ void Gui::render(float a, bool mouseFree, int xMouse, int yMouse) {
glEnable(GL_DEPTH_TEST); glEnable(GL_DEPTH_TEST);
} }
if (!minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) { if (!minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) {
renderToolBar(a, ySlot, screenWidth); renderToolBar(a, ySlot, screenWidth);
glEnable(GL_BLEND); // font->drawShadow("Minecraft - Pocket Edition ", 2, 2, 0xffffffff);
bool isChatting = (minecraft->screen && (dynamic_cast<ChatScreen*>(minecraft->screen) || dynamic_cast<ConsoleScreen*>(minecraft->screen))); // font->drawShadow("This is a demo, not the finished product", 2, 10 + 2, 0xffffffff);
unsigned int max = 10;
if (isChatting) { glEnable(GL_BLEND);
int lineHeight = 9; bool isChatting = (minecraft->screen && (dynamic_cast<ChatScreen*>(minecraft->screen) || dynamic_cast<ConsoleScreen*>(minecraft->screen)));
max = (screenHeight - 48) / lineHeight; unsigned int max = 10;
if (max < 1) max = 1; if (isChatting) {
int maxScroll = (int)guiMessages.size() - (int)max; int lineHeight = 9;
if (maxScroll < 0) maxScroll = 0; max = (screenHeight - 48) / lineHeight;
if (chatScrollOffset > maxScroll) chatScrollOffset = maxScroll; if (max < 1) max = 1;
} else { int maxScroll = (int)guiMessages.size() - (int)max;
chatScrollOffset = 0; if (maxScroll < 0) maxScroll = 0;
} if (chatScrollOffset > maxScroll) chatScrollOffset = maxScroll;
renderChatMessages(screenHeight, max, isChatting, font); } else {
chatScrollOffset = 0;
}
renderChatMessages(screenHeight, max, isChatting, font);
#if !defined(RPI) #if !defined(RPI)
renderOnSelectItemNameText(screenWidth, font, ySlot); renderOnSelectItemNameText(screenWidth, font, ySlot);
#endif #endif
#if defined(RPI) #if defined(RPI)
renderDebugInfo(); renderDebugInfo();
#endif #endif
if (Keyboard::isKeyDown(Keyboard::KEY_TAB)) { if (Keyboard::isKeyDown(Keyboard::KEY_TAB)) {
renderPlayerList(font, screenWidth, screenHeight); renderPlayerList(font, screenWidth, screenHeight);
}
if (minecraft->options.getBooleanValue(OPTIONS_RENDER_DEBUG))
renderDebugInfo();
} }
if (minecraft->options.getBooleanValue(OPTIONS_RENDER_DEBUG)) glDisable(GL_BLEND);
renderDebugInfo();
}
glDisable(GL_BLEND);
glEnable2(GL_ALPHA_TEST); glEnable2(GL_ALPHA_TEST);
} }
@@ -185,7 +193,7 @@ void Gui::getSlotPos(int slot, int& posX, int& posY) {
int screenWidth = (int)(minecraft->width * InvGuiScale); int screenWidth = (int)(minecraft->width * InvGuiScale);
int screenHeight = (int)(minecraft->height * InvGuiScale); int screenHeight = (int)(minecraft->height * InvGuiScale);
posX = screenWidth / 2 - getNumSlots() * 10 + slot * 20, posX = screenWidth / 2 - getNumSlots() * 10 + slot * 20,
posY = screenHeight - 22; posY = screenHeight - 22;
} }
RectangleArea Gui::getRectangleArea(int extendSide) { RectangleArea Gui::getRectangleArea(int extendSide) {
@@ -198,7 +206,7 @@ RectangleArea Gui::getRectangleArea(int extendSide) {
return RectangleArea(0, (float)minecraft->height-pHeight, pCenterX+pHalfWidth+2, (float)minecraft->height); return RectangleArea(0, (float)minecraft->height-pHeight, pCenterX+pHalfWidth+2, (float)minecraft->height);
if (extendSide > 0) 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, (float)minecraft->width, (float)minecraft->height);
return RectangleArea(pCenterX-pHalfWidth, (float)minecraft->height-pHeight, pCenterX+pHalfWidth+2, (float)minecraft->height); return RectangleArea(pCenterX-pHalfWidth, (float)minecraft->height-pHeight, pCenterX+pHalfWidth+2, (float)minecraft->height);
} }
@@ -206,74 +214,68 @@ void Gui::handleClick(int button, int x, int y) {
if (button != MouseAction::ACTION_LEFT) return; if (button != MouseAction::ACTION_LEFT) return;
int slot = getSlotIdAt(x, y); int slot = getSlotIdAt(x, y);
if (slot != -1) if (slot != -1) {
{ if (_openInventorySlot && slot == (getNumSlots()-1)) {
#ifndef PLATFORM_DESKTOP
if (slot == (getNumSlots()-1))
{
minecraft->screenChooser.setScreen(SCREEN_BLOCKSELECTION); minecraft->screenChooser.setScreen(SCREEN_BLOCKSELECTION);
} } else {
else
#endif
{
minecraft->player->inventory->selectSlot(slot); minecraft->player->inventory->selectSlot(slot);
itemNameOverlayTime = 0; itemNameOverlayTime = 0;
} }
} }
} }
void Gui::handleKeyPressed(int key) void Gui::handleKeyPressed(int key)
{ {
bool isChatting = (minecraft->screen && (dynamic_cast<ChatScreen*>(minecraft->screen) || dynamic_cast<ConsoleScreen*>(minecraft->screen))); bool isChatting = (minecraft->screen && (dynamic_cast<ChatScreen*>(minecraft->screen) || dynamic_cast<ConsoleScreen*>(minecraft->screen)));
if (isChatting) { if (isChatting) {
// Allow scrolling the chat history with the mouse/keyboard when chat is open // Allow scrolling the chat history with the mouse/keyboard when chat is open
if (key == 38) { // VK_UP if (key == 38) { // VK_UP
scrollChat(1); scrollChat(1);
return; return;
} else if (key == 40) { // VK_DOWN } else if (key == 40) { // VK_DOWN
scrollChat(-1); scrollChat(-1);
return; return;
} else if (key == 33) { // VK_PRIOR (Page Up) } else if (key == 33) { // VK_PRIOR (Page Up)
// Scroll by a page // Scroll by a page
int screenHeight = (int)(minecraft->height * InvGuiScale); int screenHeight = (int)(minecraft->height * InvGuiScale);
int maxVisible = (screenHeight - 48) / 9; int maxVisible = (screenHeight - 48) / 9;
scrollChat(maxVisible); scrollChat(maxVisible);
return; return;
} else if (key == 34) { // VK_NEXT (Page Down) } else if (key == 34) { // VK_NEXT (Page Down)
int screenHeight = (int)(minecraft->height * InvGuiScale); int screenHeight = (int)(minecraft->height * InvGuiScale);
int maxVisible = (screenHeight - 48) / 9; int maxVisible = (screenHeight - 48) / 9;
scrollChat(-maxVisible); scrollChat(-maxVisible);
return; return;
}
} }
}
if (key == Keyboard::KEY_F1) { if (key == Keyboard::KEY_F1) {
minecraft->options.toggle(OPTIONS_HIDEGUI); minecraft->options.toggle(OPTIONS_HIDEGUI);
} }
if (key == 99) if (key == 99)
{
if (minecraft->player->inventory->selected > 0)
{ {
minecraft->player->inventory->selected--; if (minecraft->player->inventory->selected > 0)
{
minecraft->player->inventory->selected--;
}
}
else if (key == 4)
{
if (minecraft->player->inventory->selected < (getNumSlots() - 2))
{
minecraft->player->inventory->selected++;
}
}
else if (key == 100)
{
minecraft->screenChooser.setScreen(SCREEN_BLOCKSELECTION);
}
else if (key == minecraft->options.getIntValue(OPTIONS_KEY_DROP))
{
minecraft->player->inventory->dropSlot(minecraft->player->inventory->selected, false);
} }
} }
else if (key == 4)
{
if (minecraft->player->inventory->selected < (getNumSlots() - 2))
{
minecraft->player->inventory->selected++;
}
}
else if (key == 100)
{
minecraft->screenChooser.setScreen(SCREEN_BLOCKSELECTION);
}
else if (key == minecraft->options.getIntValue(OPTIONS_KEY_DROP))
{
minecraft->player->inventory->dropSlot(minecraft->player->inventory->selected, false);
}
}
void Gui::scrollChat(int delta) { void Gui::scrollChat(int delta) {
if (delta == 0) if (delta == 0)
@@ -298,11 +300,11 @@ void Gui::tick() {
if(itemNameOverlayTime < 2) if(itemNameOverlayTime < 2)
itemNameOverlayTime += 1.0f / SharedConstants::TicksPerSecond; itemNameOverlayTime += 1.0f / SharedConstants::TicksPerSecond;
for (unsigned int i = 0; i < guiMessages.size(); i++) { for (unsigned int i = 0; i < guiMessages.size(); i++) {
guiMessages.at(i).ticks++; guiMessages.at(i).ticks++;
} }
if (!minecraft->isCreativeMode()) if (!minecraft->isCreativeMode())
tickItemDrop(); tickItemDrop();
} }
void Gui::addMessage(const std::string& _string) { void Gui::addMessage(const std::string& _string) {
@@ -349,9 +351,11 @@ void Gui::setNowPlaying(const std::string& string) {
void Gui::displayClientMessage(const std::string& messageId) { void Gui::displayClientMessage(const std::string& messageId) {
//Language language = Language.getInstance(); //Language language = Language.getInstance();
//std::string languageString = language.getElement(messageId); //std::string languageString = language.getElement(messageId);
addMessage(std::string("Client message: ") + 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) { void Gui::renderVignette(float br, int w, int h) {
br = 1 - br; br = 1 - br;
if (br < 0) br = 0; if (br < 0) br = 0;
@@ -360,9 +364,13 @@ void Gui::renderVignette(float br, int w, int h) {
glDisable(GL_DEPTH_TEST); glDisable(GL_DEPTH_TEST);
glDepthMask(false); glDepthMask(false);
glEnable(GL_BLEND);
glBlendFunc2(GL_ZERO, GL_ONE_MINUS_SRC_COLOR); glBlendFunc2(GL_ZERO, GL_ONE_MINUS_SRC_COLOR);
glColor4f2(tbr, tbr, tbr, 1); glColor4f2(tbr, tbr, tbr, 1);
minecraft->textures->loadAndBindTexture("misc/vignette.png"); 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; Tesselator& t = Tesselator::instance;
t.begin(); t.begin();
@@ -373,6 +381,7 @@ void Gui::renderVignette(float br, int w, int h) {
t.draw(); t.draw();
glDepthMask(true); glDepthMask(true);
glEnable(GL_DEPTH_TEST); glEnable(GL_DEPTH_TEST);
glDisable(GL_BLEND);
glColor4f2(1, 1, 1, 1); glColor4f2(1, 1, 1, 1);
glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
} }
@@ -415,7 +424,7 @@ void Gui::inventoryUpdated() {
} }
void Gui::onGraphicsReset() { void Gui::onGraphicsReset() {
inventoryUpdated(); inventoryUpdated();
} }
void Gui::texturesLoaded( Textures* textures ) { void Gui::texturesLoaded( Textures* textures ) {
@@ -537,11 +546,7 @@ void Gui::tickItemDrop()
static bool isCurrentlyActive = false; static bool isCurrentlyActive = false;
isCurrentlyActive = false; isCurrentlyActive = false;
int slots = getNumSlots(); int slots = getNumSlots() - _openInventorySlot;
#ifndef PLATFORM_DESKTOP
slots--;
#endif
if (Mouse::isButtonDown(MouseAction::ACTION_LEFT)) { if (Mouse::isButtonDown(MouseAction::ACTION_LEFT)) {
int slot = getSlotIdAt(Mouse::getX(), Mouse::getY()); int slot = getSlotIdAt(Mouse::getX(), Mouse::getY());
@@ -597,12 +602,13 @@ void Gui::renderProgressIndicator( const bool isTouchInterface, const int screen
bool bowEquipped = currentItem != NULL ? currentItem->getItem() == Item::bow : false; bool bowEquipped = currentItem != NULL ? currentItem->getItem() == Item::bow : false;
bool itemInUse = currentItem != NULL ? currentItem->getItem() == minecraft->player->getUseItem()->getItem() : false; bool itemInUse = currentItem != NULL ? currentItem->getItem() == minecraft->player->getUseItem()->getItem() : false;
if ((!isTouchInterface || minecraft->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA) if ((!isTouchInterface || minecraft->options.getBooleanValue(OPTIONS_IS_JOY_TOUCH_AREA)
|| (bowEquipped && itemInUse)) && !minecraft->options.getBooleanValue(OPTIONS_HIDEGUI)) { || (bowEquipped && itemInUse)) && !minecraft->options.getBooleanValue(OPTIONS_HIDEGUI))
minecraft->textures->loadAndBindTexture("gui/icons.png"); {
glEnable(GL_BLEND); minecraft->textures->loadAndBindTexture("gui/icons.png");
glBlendFunc2(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR); glEnable(GL_BLEND);
blit(screenWidth/2 - 8, screenHeight/2 - 8, 0, 0, 16, 16); glBlendFunc2(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);
glDisable(GL_BLEND); blit(screenWidth/2 - 8, screenHeight/2 - 8, 0, 0, 16, 16);
glDisable(GL_BLEND);
} else if(!bowEquipped) { } else if(!bowEquipped) {
const float tprogress = minecraft->gameMode->destroyProgress; const float tprogress = minecraft->gameMode->destroyProgress;
const float alpha = Mth::clamp(minecraft->inputHolder->alpha, 0.0f, 1.0f); const float alpha = Mth::clamp(minecraft->inputHolder->alpha, 0.0f, 1.0f);
@@ -621,7 +627,7 @@ void Gui::renderProgressIndicator( const bool isTouchInterface, const int screen
const float x = InvGuiScale * minecraft->inputHolder->mousex; const float x = InvGuiScale * minecraft->inputHolder->mousex;
const float y = InvGuiScale * minecraft->inputHolder->mousey; const float y = InvGuiScale * minecraft->inputHolder->mousey;
glTranslatef2(x, y, 0); glTranslatef2(x, y, 0);
drawArrayVT(rcFeedbackOuter.vboId, rcFeedbackOuter.vertexCount, 24); drawArrayVT(rcFeedbackOuter.vboId, rcFeedbackOuter.vertexCount, 36);
glTranslatef2(-x, -y, 0); glTranslatef2(-x, -y, 0);
glEnable2(GL_TEXTURE_2D); glEnable2(GL_TEXTURE_2D);
@@ -642,12 +648,12 @@ void Gui::renderProgressIndicator( const bool isTouchInterface, const int screen
const float y = InvGuiScale * minecraft->inputHolder->mousey; const float y = InvGuiScale * minecraft->inputHolder->mousey;
glPushMatrix2(); glPushMatrix2();
glTranslatef2(x, y, 0); glTranslatef2(x, y, 0);
drawArrayVT(rcFeedbackOuter.vboId, rcFeedbackOuter.vertexCount, 24); drawArrayVT(rcFeedbackOuter.vboId, rcFeedbackOuter.vertexCount, 36);
glScalef2(0.5f + progress, 0.5f + progress, 1); glScalef2(0.5f + progress, 0.5f + progress, 1);
//glDisable2(GL_CULL_FACE); //glDisable2(GL_CULL_FACE);
glColor4f2(1, 1, 1, 1); glColor4f2(1, 1, 1, 1);
glBlendFunc2(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR); glBlendFunc2(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);
drawArrayVT(rcFeedbackInner.vboId, rcFeedbackInner.vertexCount, 24, GL_TRIANGLE_FAN); drawArrayVT(rcFeedbackInner.vboId, rcFeedbackInner.vertexCount, 36, GL_TRIANGLE_FAN);
glPopMatrix2(); glPopMatrix2();
glDisable(GL_BLEND); glDisable(GL_BLEND);
@@ -677,10 +683,10 @@ void Gui::renderHearts() {
int ip2 = i + i + 1; int ip2 = i + i + 1;
if (armor > 0) { if (armor > 0) {
int xo = xx + 80 + i * 8 + 4; int xo = xx + 80 + i * 8 + 4;
if (ip2 < armor) blit(xo, yo, 16 + 2 * 9, 9 * 1, 9, 9); 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 + 4 * 9, 9 * 1, 9, 9);
else if (ip2 > armor) blit(xo, yo, 16 + 0 * 9, 9 * 1, 9, 9); else if (ip2 > armor) blit(xo, yo, 16 + 0 * 9, 9 * 1, 9, 9);
} }
int bg = 0; int bg = 0;
@@ -703,7 +709,7 @@ void Gui::renderBubbles() {
if (minecraft->player->isUnderLiquid(Material::water)) { if (minecraft->player->isUnderLiquid(Material::water)) {
int screenWidth = (int)(minecraft->width * InvGuiScale); int screenWidth = (int)(minecraft->width * InvGuiScale);
int screenHeight = (int)(minecraft->height * InvGuiScale); int screenHeight = (int)(minecraft->height * InvGuiScale);
int xx = (minecraft->options.getBooleanValue(OPTIONS_BAR_ON_TOP)) ? screenWidth / 2 - getNumSlots() * 10 - 1 : 2; 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 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); int count = (int) std::ceil((minecraft->player->airSupply - 2) * 10.0f / Player::TOTAL_AIR_SUPPLY);
@@ -726,13 +732,20 @@ void Gui::onLevelGenerated() {
void Gui::renderDebugInfo() { void Gui::renderDebugInfo() {
// FPS counter (updates once per second) // FPS counter (updates once per second)
static float fps = 0.0f; static int fps = 0;
static float fpsLastTime = 0.0f; static int fpsLastTime = 0;
static int fpsFrames = 0; static int fpsFrames = 0;
static int displayChunkUpdates = 0;
float now = getTimeS(); float now = getTimeS();
fpsFrames++; fpsFrames++;
if (now - fpsLastTime >= 1.0f) { if (now - fpsLastTime >= 1) {
fps = fpsFrames / (now - fpsLastTime); fps = fpsFrames / (now - fpsLastTime);
displayChunkUpdates = Chunk::updates;
// 3. RESET the actual game counter to 0 for the next second
Chunk::updates = 0;
fpsFrames = 0; fpsFrames = 0;
fpsLastTime = now; fpsLastTime = now;
} }
@@ -742,7 +755,6 @@ void Gui::renderDebugInfo() {
// Position // Position
float px = p->x, py = p->y - p->heightOffset, pz = p->z; float px = p->x, py = p->y - p->heightOffset, pz = p->z;
posTranslator.to(px, py, pz);
int bx = (int)floorf(px), by = (int)floorf(py), bz = (int)floorf(pz); int bx = (int)floorf(px), by = (int)floorf(py), bz = (int)floorf(pz);
int cx = bx >> 4, cz = bz >> 4; int cx = bx >> 4, cz = bz >> 4;
@@ -769,7 +781,70 @@ void Gui::renderDebugInfo() {
long day = worldTime / Level::TICKS_PER_DAY; long day = worldTime / Level::TICKS_PER_DAY;
long seed = lvl ? lvl->getSeed() : 0; long seed = lvl ? lvl->getSeed() : 0;
// Block looking at
std::string CurrentTile = "Air";
if (minecraft->hitResult.type == TILE) {
int LookingX = minecraft->hitResult.x;
int LookingY = minecraft->hitResult.y;
int LookingZ = minecraft->hitResult.z;
int tileID = minecraft->level->getTile(LookingX, LookingY, LookingZ);
if (tileID > 0 && tileID < 256){
Tile* LookingTile = Tile::tiles[tileID];
if (LookingTile != NULL) {
CurrentTile = LookingTile->getDescriptionId();
} else {
CurrentTile = "Unknown Tile";
}
} else {
CurrentTile = "Air";
}
}
// Build lines (NULL entry = blank gap) // Build lines (NULL entry = blank gap)
Font* font = minecraft->font;
// @todo - add our own debug screen as an option alongside the restored java one, why does renderdebug have to be so jank - shredder
// if java beta's restored debug menu is enabled
if (minecraft->options.getIntValue(OPTIONS_DEBUG_STYLE) == 0){
char buf[128];
sprintf(buf, "Minecraft - Pocket Edition (%d fps, %d chunk updates)", (int)fps, displayChunkUpdates);
font->drawShadow(buf, 2, 2, 0xffffff);
font->drawShadow(minecraft->gatherStats1(), 2, 12, 0xFFFFFF);
font->drawShadow(minecraft->gatherStats2(), 2, 22, 0xFFFFFF);
font->drawShadow(minecraft->gatherStats3(), 2, 32, 0xFFFFFF);
font->drawShadow(minecraft->gatherStats4(), 2, 42, 0xFFFFFF);
sprintf(buf, "x: %.8f", minecraft->player->x);
drawString(font, buf, 2, 64, 0xE0E0E0);
sprintf(buf, "y: %.8f", minecraft->player->y);
drawString(font, buf, 2, 72, 0xE0E0E0);
sprintf(buf, "z: %.8f", minecraft->player->z);
drawString(font, buf, 2, 80, 0xE0E0E0);
sprintf(buf, "f: %d",Mth::floor(minecraft->player->yRot * 4.0f / 360.0f + 0.5) & 0x3);
drawString(font, buf, 2, 88, 0xE0E0E0);
sprintf(buf, "Seed: %.ld", lvl->getSeed());
drawString(font, buf, 2, 104, 0xE0E0E0);
sprintf(buf, "Dimension: %d (%s)", lvl->dimension->id, lvl->dimension->getDimension().c_str());
drawString(font, buf, 2, 114, 0xE0E0E0);
sprintf(buf, "Biome: %s", biomeName);
drawString(font, buf, 2, 124, 0xE0E0E0);
sprintf(buf, "Looking at: %s", CurrentTile.c_str());
drawString(font, buf, 2, 134, 0xE0E0E0);
}
else if (minecraft->options.getIntValue(OPTIONS_DEBUG_STYLE) == 1){
static char ln[8][96]; static char ln[8][96];
sprintf(ln[0], "Minecraft PE 0.6.1 alpha (mcpe64)"); sprintf(ln[0], "Minecraft PE 0.6.1 alpha (mcpe64)");
sprintf(ln[1], "%.1f fps", fps); sprintf(ln[1], "%.1f fps", fps);
@@ -784,8 +859,8 @@ void Gui::renderDebugInfo() {
const float LH = (float)Font::DefaultLineHeight; // 10 font-pixels const float LH = (float)Font::DefaultLineHeight; // 10 font-pixels
const float MGN = 2.0f; // left/top margin in font-pixels const float MGN = 2.0f; // left/top margin in font-pixels
const float PAD = 2.0f; // horizontal padding for background const float PAD = 2.0f; // horizontal padding for background
Font* font = minecraft->font; // Font* font = minecraft->font;
// 1) Draw semi-transparent background boxes behind each line // 1) Draw semi-transparent background boxes behind each line
for (int i = 0; i < N; i++) { for (int i = 0; i < N; i++) {
if (ln[i][0] == '\0') continue; if (ln[i][0] == '\0') continue;
@@ -807,6 +882,7 @@ void Gui::renderDebugInfo() {
font->draw(ln[i], MGN, y, col); font->draw(ln[i], MGN, y, col);
} }
t.endOverrideAndDraw(); t.endOverrideAndDraw();
}
} }
void Gui::renderPlayerList(Font* font, int screenWidth, int screenHeight) { void Gui::renderPlayerList(Font* font, int screenWidth, int screenHeight) {
@@ -922,64 +998,64 @@ void Gui::renderOnSelectItemNameText( const int screenWidth, Font* font, int ySl
// helper structure used by drawColoredString // helper structure used by drawColoredString
struct ColorSegment { struct ColorSegment {
std::string text; std::string text;
uint32_t color; uint32_t color;
}; };
// parse [tag] and [/tag] markers; tags may contain a color name (gold, green, etc.) // 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) { static void parseColorTags(const std::string& in, std::vector<ColorSegment>& out) {
uint32_t curColor = 0xffffff; uint32_t curColor = 0xffffff;
size_t pos = 0; size_t pos = 0;
while (pos < in.size()) { while (pos < in.size()) {
size_t open = in.find('[', pos); size_t open = in.find('[', pos);
if (open == std::string::npos) { if (open == std::string::npos) {
out.push_back({in.substr(pos), curColor}); out.push_back({in.substr(pos), curColor});
break; break;
} }
if (open > pos) { if (open > pos) {
out.push_back({in.substr(pos, open - pos), curColor}); out.push_back({in.substr(pos, open - pos), curColor});
} }
size_t close = in.find(']', open); size_t close = in.find(']', open);
if (close == std::string::npos) { if (close == std::string::npos) {
out.push_back({in.substr(open), curColor}); out.push_back({in.substr(open), curColor});
break; break;
} }
std::string tag = in.substr(open + 1, close - open - 1); std::string tag = in.substr(open + 1, close - open - 1);
if (!tag.empty() && tag[0] == '/') { if (!tag.empty() && tag[0] == '/') {
curColor = 0xffffff; curColor = 0xffffff;
} else { } else {
std::string lower; std::string lower;
lower.resize(tag.size()); lower.resize(tag.size());
std::transform(tag.begin(), tag.end(), lower.begin(), ::tolower); std::transform(tag.begin(), tag.end(), lower.begin(), ::tolower);
if (lower.find("gold") != std::string::npos) curColor = 0xffd700; if (lower.find("gold") != std::string::npos) curColor = 0xffd700;
else if (lower.find("green") != std::string::npos) curColor = 0x00ff00; else if (lower.find("green") != std::string::npos) curColor = 0x00ff00;
else if (lower.find("yellow") != std::string::npos) curColor = 0xffff00; else if (lower.find("yellow") != std::string::npos) curColor = 0xffff00;
else if (lower.find("red") != std::string::npos) curColor = 0xff0000; else if (lower.find("red") != std::string::npos) curColor = 0xff0000;
else if (lower.find("blue") != std::string::npos) curColor = 0x0000ff; else if (lower.find("blue") != std::string::npos) curColor = 0x0000ff;
} }
pos = close + 1; pos = close + 1;
} }
} }
void Gui::drawColoredString(Font* font, const std::string& text, float x, float y, int alpha) { void Gui::drawColoredString(Font* font, const std::string& text, float x, float y, int alpha) {
std::vector<ColorSegment> segs; std::vector<ColorSegment> segs;
parseColorTags(text, segs); parseColorTags(text, segs);
float cx = x; float cx = x;
for (auto &s : segs) { for (auto &s : segs) {
int color = s.color + (alpha << 24); int color = s.color + (alpha << 24);
font->drawShadow(s.text, cx, y, color); font->drawShadow(s.text, cx, y, color);
cx += font->width(s.text); cx += font->width(s.text);
} }
} }
float Gui::getColoredWidth(Font* font, const std::string& text) { float Gui::getColoredWidth(Font* font, const std::string& text) {
std::vector<ColorSegment> segs; std::vector<ColorSegment> segs;
parseColorTags(text, segs); parseColorTags(text, segs);
float w = 0; float w = 0;
for (auto &s : segs) { for (auto &s : segs) {
w += font->width(s.text); w += font->width(s.text);
} }
return w; return w;
} }
void Gui::renderChatMessages( const int screenHeight, unsigned int max, bool isChatting, Font* font ) { void Gui::renderChatMessages( const int screenHeight, unsigned int max, bool isChatting, Font* font ) {
@@ -1023,20 +1099,23 @@ void Gui::renderChatMessages( const int screenHeight, unsigned int max, bool isC
glEnable(GL_BLEND); glEnable(GL_BLEND);
// special-case join/leave announcements // special-case join/leave announcements
int baseColor = 0xffffff; int baseColor = 0xffffff;
if (msg.find(" joined the game") != std::string::npos || if (msg.find(" joined the game") != std::string::npos ||
msg.find(" left the game") != std::string::npos) { msg.find(" left the game") != std::string::npos) {
baseColor = 0xffff00; // yellow baseColor = 0xffff00; // yellow
} }
// replace previous logic; allow full colour tags now // replace previous logic; allow full colour tags now
Gui::drawColoredString(font, msg, x, y, alpha); Gui::drawColoredString(font, msg, x, y, alpha);
} }
} }
} }
} }
void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) { void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
glColor4f2(1, 1, 1, .5); glColor4f2(1, 1, 1, 1);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
minecraft->textures->loadAndBindTexture("gui/gui.png"); minecraft->textures->loadAndBindTexture("gui/gui.png");
Inventory* inventory = minecraft->player->inventory; Inventory* inventory = minecraft->player->inventory;
@@ -1083,13 +1162,7 @@ void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
float x = baseItemX; float x = baseItemX;
int slots = getNumSlots(); int slots = getNumSlots() - _openInventorySlot;
// TODO: if using touchscreen
#ifndef PLATFORM_DESKTOP
slots--;
#endif
for (int i = 0; i < slots; i++) { for (int i = 0; i < slots; i++) {
renderSlot(i, (int)x, ySlot, a); renderSlot(i, (int)x, ySlot, a);
@@ -1097,9 +1170,10 @@ void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
} }
_inventoryNeedsUpdate = false; _inventoryNeedsUpdate = false;
#ifndef PLATFORM_DESKTOP
blit(screenWidth / 2 + 10 * getNumSlots() - 20 + 4, ySlot + 6, 242, 252, 14, 4, 14, 4); if (_openInventorySlot) {
#endif blit(screenWidth / 2 + 10 * getNumSlots() - 20 + 4, ySlot + 6, 242, 252, 14, 4, 14, 4);
}
minecraft->textures->loadAndBindTexture("gui/gui_blocks.png"); minecraft->textures->loadAndBindTexture("gui/gui_blocks.png");
t.endOverrideAndDraw(); t.endOverrideAndDraw();
@@ -1122,22 +1196,41 @@ void Gui::renderToolBar( float a, int ySlot, const int screenWidth ) {
// Draw count // Draw count
//Tesselator& t = Tesselator::instance; //Tesselator& t = Tesselator::instance;
glPushMatrix2();
glScalef2(InvGuiScale + InvGuiScale, InvGuiScale + InvGuiScale, 1);
const float k = 0.5f * GuiScale; 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()) { t.beginOverride();
x = baseItemX; if (minecraft->gameMode->isSurvivalType()) {
for (int i = 0; i < slots; i++) { x = baseItemX;
ItemInstance* item = minecraft->player->inventory->getItem(i); for (int i = 0; i < slots; i++) {
if (item && item->count >= 0) ItemInstance* item = minecraft->player->inventory->getItem(i);
renderSlotText(item, k*x, k*ySlot + 1, true, true); if (item && item->count >= 0)
x += 20; ItemRenderer::renderGuiItemDecorations(minecraft->font, minecraft->textures, minecraft->player->inventory->getItem(i), x, (float)ySlot);
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

@@ -127,6 +127,8 @@ private:
static const float DropTicks; static const float DropTicks;
float _currentDropTicks; float _currentDropTicks;
int _currentDropSlot; int _currentDropSlot;
bool _openInventorySlot;
}; };
#endif /*NET_MINECRAFT_CLIENT_GUI__Gui_H__*/ #endif /*NET_MINECRAFT_CLIENT_GUI__Gui_H__*/

View File

@@ -177,9 +177,11 @@ void Screen::keyPressed( int eventKey )
textbox->keyPressed(minecraft, eventKey); textbox->keyPressed(minecraft, eventKey);
} }
#ifdef TABBING
if (minecraft->useTouchscreen()) if (minecraft->useTouchscreen())
return; return;
// "Tabbing" the buttons (walking with keys) // "Tabbing" the buttons (walking with keys)
const int tabButtonCount = tabButtons.size(); const int tabButtonCount = tabButtons.size();
if (!tabButtonCount) if (!tabButtonCount)
@@ -199,6 +201,7 @@ void Screen::keyPressed( int eventKey )
} }
updateTabButtonSelection(); updateTabButtonSelection();
#endif
} }
void Screen::charPressed(char inputChar) { void Screen::charPressed(char inputChar) {
@@ -209,11 +212,13 @@ void Screen::charPressed(char inputChar) {
void Screen::updateTabButtonSelection() void Screen::updateTabButtonSelection()
{ {
#ifdef TABBING
if (minecraft->useTouchscreen()) if (minecraft->useTouchscreen())
return; return;
for (unsigned int i = 0; i < tabButtons.size(); ++i) for (unsigned int i = 0; i < tabButtons.size(); ++i)
tabButtons[i]->selected = (i == tabButtonIndex); tabButtons[i]->selected = (i == tabButtonIndex);
#endif
} }
void Screen::mouseClicked( int x, int y, int buttonNum ) void Screen::mouseClicked( int x, int y, int buttonNum )

View File

@@ -95,7 +95,7 @@ void Button::renderBg( Minecraft* minecraft, int xm, int ym )
} }
bool Button::hovered(Minecraft* minecraft, int xm , int ym) { bool Button::hovered(Minecraft* minecraft, int xm , int ym) {
return minecraft->useTouchscreen()? (_currentlyDown && isInside(xm, ym)) : false; return minecraft->useTouchscreen()? (_currentlyDown && isInside(xm, ym)) : isInside(xm, ym);
} }
bool Button::isInside( int xm, int ym ) { bool Button::isInside( int xm, int ym ) {
@@ -143,7 +143,8 @@ TButton::TButton( int id, int x, int y, int w, int h, const std::string& msg )
void TButton::renderBg( Minecraft* minecraft, int xm, int ym ) void TButton::renderBg( Minecraft* minecraft, int xm, int ym )
{ {
bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false); bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
// bool hovered = active && (_currentlyDown && isInside(xm, ym));
minecraft->textures->loadAndBindTexture("gui/touchgui.png"); minecraft->textures->loadAndBindTexture("gui/touchgui.png");

View File

@@ -35,6 +35,17 @@ void GuiElementContainer::removeChild( GuiElement* element ) {
children.erase(it); children.erase(it);
} }
bool GuiElementContainer::containsPointInChildren(int x, int y) const {
for (auto it = children.begin(); it != children.end(); ++it) {
GuiElement* child = *it;
if (child == NULL || !child->visible) continue;
if (child->pointInside(x, y)) return true;
const GuiElementContainer* container = dynamic_cast<const GuiElementContainer*>(child);
if (container != NULL && container->containsPointInChildren(x, y)) return true;
}
return false;
}
void GuiElementContainer::tick( Minecraft* minecraft ) { void GuiElementContainer::tick( Minecraft* minecraft ) {
for(std::vector<GuiElement*>::iterator it = children.begin(); it != children.end(); ++it) { for(std::vector<GuiElement*>::iterator it = children.begin(); it != children.end(); ++it) {
(*it)->tick(minecraft); (*it)->tick(minecraft);

View File

@@ -5,16 +5,17 @@
class Tesselator; class Tesselator;
class Minecraft; class Minecraft;
class GuiElementContainer : public GuiElement { class GuiElementContainer : public GuiElement {
public: public:
GuiElementContainer(bool active=false, bool visible=true, int x = 0, int y = 0, int width=24, int height=24); GuiElementContainer(bool active=false, bool visible=true, int x = 0, int y = 0, int width=24, int height=24);
virtual ~GuiElementContainer(); virtual ~GuiElementContainer();
virtual void render(Minecraft* minecraft, int xm, int ym); virtual void render(Minecraft* minecraft, int xm, int ym);
virtual void setupPositions(); virtual void setupPositions();
virtual void addChild(GuiElement* element); virtual void addChild(GuiElement* element);
virtual void removeChild(GuiElement* element); virtual void removeChild(GuiElement* element);
bool containsPointInChildren(int x, int y) const;
virtual void tick( Minecraft* minecraft );
virtual void tick( Minecraft* minecraft );
virtual void mouseClicked( Minecraft* minecraft, int x, int y, int buttonNum ); virtual void mouseClicked( Minecraft* minecraft, int x, int y, int buttonNum );
virtual void mouseReleased( Minecraft* minecraft, int x, int y, int buttonNum ); virtual void mouseReleased( Minecraft* minecraft, int x, int y, int buttonNum );

View File

@@ -42,7 +42,7 @@ void ImageButton::render(Minecraft* minecraft, int xm, int ym) {
//minecraft->textures->loadAndBindTexture("gui/gui.png"); //minecraft->textures->loadAndBindTexture("gui/gui.png");
glColor4f2(1, 1, 1, 1); glColor4f2(1, 1, 1, 1);
bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false); bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
bool IsSecondImage = isSecondImage(hovered); bool IsSecondImage = isSecondImage(hovered);
//printf("ButtonId: %d - Hovered? %d (cause: %d, %d, %d, %d, <> %d, %d)\n", id, hovered, x, y, x+w, y+h, xm, ym); //printf("ButtonId: %d - Hovered? %d (cause: %d, %d, %d, %d, <> %d, %d)\n", id, hovered, x, y, x+w, y+h, xm, ym);

View File

@@ -33,7 +33,7 @@ void LargeImageButton::render(Minecraft* minecraft, int xm, int ym) {
//minecraft->textures->loadAndBindTexture("gui/gui.png"); //minecraft->textures->loadAndBindTexture("gui/gui.png");
glColor4f2(1, 1, 1, 1); glColor4f2(1, 1, 1, 1);
bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false); bool hovered = active && (minecraft->useTouchscreen()? (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
//printf("ButtonId: %d - Hovered? %d (cause: %d, %d, %d, %d, <> %d, %d)\n", id, hovered, x, y, x+w, y+h, xm, ym); //printf("ButtonId: %d - Hovered? %d (cause: %d, %d, %d, %d, <> %d, %d)\n", id, hovered, x, y, x+w, y+h, xm, ym);
//int yImage = getYImage(hovered || selected); //int yImage = getYImage(hovered || selected);

View File

@@ -1,115 +1,219 @@
#include "OptionsGroup.h" #include "OptionsGroup.h"
#include "../../Minecraft.h" #include "../../Minecraft.h"
#include "ImageButton.h" #include "ImageButton.h"
#include "OptionsItem.h" #include "OptionsItem.h"
#include "Slider.h" #include "Slider.h"
#include "../../../locale/I18n.h" #include "../../../locale/I18n.h"
#include "TextOption.h" #include "TextOption.h"
#include "KeyOption.h" #include "KeyOption.h"
#include <algorithm>
OptionsGroup::OptionsGroup( std::string labelID ) { #include "../Gui.h"
label = I18n::get(labelID); #include "../Screen.h"
} #include "../../../platform/input/Mouse.h"
#include "../../../util/Mth.h"
void OptionsGroup::setupPositions() {
// First we write the header and then we add the items OptionsGroup::OptionsGroup( std::string labelID ) {
int curY = y + 18; label = I18n::get(labelID);
for(std::vector<GuiElement*>::iterator it = children.begin(); it != children.end(); ++it) { }
(*it)->width = width - 5;
void OptionsGroup::setupPositions() {
(*it)->y = curY; const int labelHeight = 18;
(*it)->x = x + 10; const int bottomPadding = 36;
(*it)->setupPositions(); const float requestedScroll = scrollOffsetY;
curY += (*it)->height + 3; const int scrollOffset = (int)requestedScroll;
} int curY = y + labelHeight - scrollOffset;
height = curY; const int contentStartY = y + labelHeight;
}
// First we write the header and then we add the items
void OptionsGroup::render( Minecraft* minecraft, int xm, int ym ) { for(auto it = children.begin(); it != children.end(); ++it) {
float padX = 10.0f; (*it)->width = width - 5;
float padY = 5.0f;
(*it)->y = curY;
minecraft->font->draw(label, (float)x + padX, (float)y + padY, 0xffffffff, false); (*it)->x = x + 10;
(*it)->setupPositions();
super::render(minecraft, xm, ym); curY += (*it)->height + 3;
} }
curY += bottomPadding;
OptionsGroup& OptionsGroup::addOptionItem(OptionId optId, Minecraft* minecraft ) { contentHeight = std::max(0, curY - contentStartY + scrollOffset);
auto option = minecraft->options.getOpt(optId); maxScrollOffsetY = std::max(0, contentHeight - (height - labelHeight));
const float clampedScroll = Mth::clamp(requestedScroll, 0.0f, maxScrollOffsetY);
if (option == nullptr) return *this; if (clampedScroll != requestedScroll) {
scrollOffsetY = clampedScroll;
// TODO: do a options key class to check it faster via dynamic_cast setupPositions();
if (option->getStringId().find("options.key") != std::string::npos) createKey(optId, minecraft); }
else if (dynamic_cast<OptionBool*>(option)) createToggle(optId, minecraft); }
else if (dynamic_cast<OptionFloat*>(option)) createProgressSlider(optId, minecraft);
else if (dynamic_cast<OptionInt*>(option)) createStepSlider(optId, minecraft); void OptionsGroup::render( Minecraft* minecraft, int xm, int ym ) {
else if (dynamic_cast<OptionString*>(option)) createTextbox(optId, minecraft); float padX = 10.0f;
float padY = 5.0f;
return *this; const int labelHeight = 18;
}
minecraft->font->draw(label, (float)x + padX, (float)y + padY, 0xffffffff, false);
// TODO: wrap this copypaste shit into templates
glEnable2(GL_SCISSOR_TEST);
void OptionsGroup::createToggle(OptionId optId, Minecraft* minecraft ) { glScissor(
ImageDef def; Gui::GuiScale * x,
minecraft->height - Gui::GuiScale * (y + height),
def.setSrc(IntRectangle(160, 206, 39, 20)); Gui::GuiScale * width,
def.name = "gui/touchgui.png"; Gui::GuiScale * (height - labelHeight)
def.width = 39 * 0.7f; );
def.height = 20 * 0.7f;
super::render(minecraft, xm, ym);
OptionButton* element = new OptionButton(optId); glDisable2(GL_SCISSOR_TEST);
element->setImageDef(def, true); }
element->updateImage(&minecraft->options);
void OptionsGroup::tick(Minecraft* minecraft) {
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId()); int xm = Mouse::getX();
int ym = Mouse::getY();
OptionsItem* item = new OptionsItem(itemLabel, element); if (minecraft->screen != NULL) {
minecraft->screen->toGUICoordinate(xm, ym);
addChild(item); }
setupPositions();
} bool leftDown = Mouse::isButtonDown(MouseAction::ACTION_LEFT);
void OptionsGroup::createProgressSlider(OptionId optId, Minecraft* minecraft ) { if (trackingScrollGesture && leftDown) {
Slider* element = new SliderFloat(minecraft, optId); int dy = ym - lastDragY;
element->width = 100; int dx = xm - dragStartX;
element->height = 20; if (!scrollingGesture) {
int totalDx = xm - dragStartX;
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId()); int totalDy = ym - dragStartY;
OptionsItem* item = new OptionsItem(itemLabel, element); if (std::abs(totalDx) >= ScrollStartThreshold || std::abs(totalDy) >= ScrollStartThreshold) {
addChild(item); if (std::abs(totalDy) >= std::abs(totalDx)) {
setupPositions(); scrollingGesture = true;
} } else if (!touchDispatched) {
super::mouseClicked(minecraft, touchStartX, touchStartY, MouseAction::ACTION_LEFT);
void OptionsGroup::createStepSlider(OptionId optId, Minecraft* minecraft ) { touchDispatched = true;
Slider* element = new SliderInt(minecraft, optId); }
element->width = 100; }
element->height = 20; }
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId()); if (scrollingGesture && dy != 0) {
OptionsItem* item = new OptionsItem(itemLabel, element); scrollByPixels((float)dy);
addChild(item); }
setupPositions(); lastDragY = ym;
} }
super::tick(minecraft);
void OptionsGroup::createTextbox(OptionId optId, Minecraft* minecraft) { }
TextBox* element = new TextOption(minecraft, optId);
element->width = 100; void OptionsGroup::mouseClicked(Minecraft* minecraft, int x, int y, int buttonNum) {
element->height = 20; trackingScrollGesture = false;
scrollingGesture = false;
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId()); touchDispatched = false;
OptionsItem* item = new OptionsItem(itemLabel, element);
addChild(item); if (buttonNum == MouseAction::ACTION_LEFT && pointInside(x, y)) {
setupPositions(); trackingScrollGesture = true;
} dragStartX = x;
dragStartY = y;
void OptionsGroup::createKey(OptionId optId, Minecraft* minecraft) { lastDragY = y;
KeyOption* element = new KeyOption(minecraft, optId); touchStartX = x;
element->width = 50; touchStartY = y;
element->height = 20; return;
}
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
OptionsItem* item = new OptionsItem(itemLabel, element); super::mouseClicked(minecraft, x, y, buttonNum);
addChild(item); }
setupPositions();
} void OptionsGroup::mouseReleased(Minecraft* minecraft, int x, int y, int buttonNum) {
bool wasScrolling = scrollingGesture;
bool wasTracking = trackingScrollGesture;
trackingScrollGesture = false;
scrollingGesture = false;
if (buttonNum == MouseAction::ACTION_LEFT && wasTracking && !touchDispatched && pointInside(touchStartX, touchStartY)) {
super::mouseClicked(minecraft, touchStartX, touchStartY, buttonNum);
touchDispatched = true;
}
if (!wasScrolling) {
super::mouseReleased(minecraft, x, y, buttonNum);
}
}
void OptionsGroup::scrollByPixels(float deltaY) {
if (deltaY == 0.0f || maxScrollOffsetY <= 0.0f) return;
scrollOffsetY = Mth::clamp(scrollOffsetY - deltaY, 0.0f, maxScrollOffsetY);
setupPositions();
}
bool OptionsGroup::isScrollingGestureActive() const {
return trackingScrollGesture || scrollingGesture;
}
OptionsGroup& OptionsGroup::addOptionItem(OptionId optId, Minecraft* minecraft ) {
auto option = minecraft->options.getOpt(optId);
if (option == nullptr) return *this;
// TODO: do a options key class to check it faster via dynamic_cast
if (option->getStringId().find("options.key") != std::string::npos) createKey(optId, minecraft);
else if (dynamic_cast<OptionBool*>(option)) createToggle(optId, minecraft);
else if (dynamic_cast<OptionFloat*>(option)) createProgressSlider(optId, minecraft);
else if (dynamic_cast<OptionInt*>(option)) createStepSlider(optId, minecraft);
else if (dynamic_cast<OptionString*>(option)) createTextbox(optId, minecraft);
return *this;
}
// TODO: wrap this copypaste shit into templates
void OptionsGroup::createToggle(OptionId optId, Minecraft* minecraft ) {
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(optId);
element->setImageDef(def, true);
element->updateImage(&minecraft->options);
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
OptionsItem* item = new OptionsItem(optId, itemLabel, element);
addChild(item);
setupPositions();
}
void OptionsGroup::createProgressSlider(OptionId optId, Minecraft* minecraft ) {
Slider* element = new SliderFloat(minecraft, optId);
element->width = 100;
element->height = 20;
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
OptionsItem* item = new OptionsItem(optId, itemLabel, element);
addChild(item);
setupPositions();
}
void OptionsGroup::createStepSlider(OptionId optId, Minecraft* minecraft ) {
Slider* element = new SliderInt(minecraft, optId);
element->width = 100;
element->height = 20;
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
OptionsItem* item = new OptionsItem(optId, itemLabel, element);
addChild(item);
setupPositions();
}
void OptionsGroup::createTextbox(OptionId optId, Minecraft* minecraft) {
TextBox* element = new TextOption(minecraft, optId);
element->width = 100;
element->height = 20;
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
OptionsItem* item = new OptionsItem(optId, itemLabel, element);
addChild(item);
setupPositions();
}
void OptionsGroup::createKey(OptionId optId, Minecraft* minecraft) {
KeyOption* element = new KeyOption(minecraft, optId);
element->width = 50;
element->height = 20;
std::string itemLabel = I18n::get(minecraft->options.getOpt(optId)->getStringId());
OptionsItem* item = new OptionsItem(optId, itemLabel, element);
addChild(item);
setupPositions();
}

View File

@@ -1,32 +1,49 @@
#ifndef NET_MINECRAFT_CLIENT_GUI_COMPONENTS__OptionsGroup_H__ #ifndef NET_MINECRAFT_CLIENT_GUI_COMPONENTS__OptionsGroup_H__
#define NET_MINECRAFT_CLIENT_GUI_COMPONENTS__OptionsGroup_H__ #define NET_MINECRAFT_CLIENT_GUI_COMPONENTS__OptionsGroup_H__
//package net.minecraft.client.gui; //package net.minecraft.client.gui;
#include <string> #include <string>
#include "GuiElementContainer.h" #include "GuiElementContainer.h"
#include "ScrollingPane.h" #include "ScrollingPane.h"
#include "../../Options.h" #include "../../Options.h"
class Font; class Font;
class Minecraft; class Minecraft;
class OptionsGroup: public GuiElementContainer { class OptionsGroup: public GuiElementContainer {
typedef GuiElementContainer super; typedef GuiElementContainer super;
public: public:
OptionsGroup(std::string labelID); OptionsGroup(std::string labelID);
virtual void setupPositions(); virtual void setupPositions();
virtual void render(Minecraft* minecraft, int xm, int ym); virtual void render(Minecraft* minecraft, int xm, int ym);
OptionsGroup& addOptionItem(OptionId optId, Minecraft* minecraft); virtual void tick(Minecraft* minecraft);
protected: virtual void mouseClicked(Minecraft* minecraft, int x, int y, int buttonNum);
virtual void mouseReleased(Minecraft* minecraft, int x, int y, int buttonNum);
void createToggle(OptionId optId, Minecraft* minecraft); OptionsGroup& addOptionItem(OptionId optId, Minecraft* minecraft);
void createProgressSlider(OptionId optId, Minecraft* minecraft); void scrollByPixels(float deltaY);
void createStepSlider(OptionId optId, Minecraft* minecraft); bool isScrollingGestureActive() const;
void createTextbox(OptionId optId, Minecraft* minecraft); protected:
void createKey(OptionId optId, Minecraft* minecraft);
void createToggle(OptionId optId, Minecraft* minecraft);
std::string label; void createProgressSlider(OptionId optId, Minecraft* minecraft);
}; void createStepSlider(OptionId optId, Minecraft* minecraft);
void createTextbox(OptionId optId, Minecraft* minecraft);
#endif /*NET_MINECRAFT_CLIENT_GUI_COMPONENTS__OptionsGroup_H__*/ void createKey(OptionId optId, Minecraft* minecraft);
std::string label;
int contentHeight = 0;
float scrollOffsetY = 0.f;
float maxScrollOffsetY = 0.f;
bool trackingScrollGesture = false;
bool scrollingGesture = false;
bool touchDispatched = false;
int dragStartX = 0;
int dragStartY = 0;
int lastDragY = 0;
int touchStartX = 0;
int touchStartY = 0;
static const int ScrollStartThreshold = 5;
};
#endif /*NET_MINECRAFT_CLIENT_GUI_COMPONENTS__OptionsGroup_H__*/

View File

@@ -1,9 +1,11 @@
#include "OptionsItem.h" #include "OptionsItem.h"
#include "../../Minecraft.h" #include "../../Minecraft.h"
#include "../../../locale/I18n.h"
#include "../../../util/Mth.h" #include "../../../util/Mth.h"
OptionsItem::OptionsItem( std::string label, GuiElement* element ) OptionsItem::OptionsItem( OptionId optionId, std::string label, GuiElement* element )
: GuiElementContainer(false, true, 0, 0, 24, 12), : GuiElementContainer(false, true, 0, 0, 24, 12),
label(label) { m_optionId(optionId),
m_label(label) {
addChild(element); addChild(element);
} }
@@ -19,6 +21,64 @@ void OptionsItem::setupPositions() {
void OptionsItem::render( Minecraft* minecraft, int xm, int ym ) { void OptionsItem::render( Minecraft* minecraft, int xm, int ym ) {
int yOffset = (height - 8) / 2; int yOffset = (height - 8) / 2;
minecraft->font->draw(label, (float)x, (float)y + yOffset, 0x909090, false); std::string text = m_label;
if (m_optionId == OPTIONS_GUI_SCALE) {
int value = minecraft->options.getIntValue(OPTIONS_GUI_SCALE);
std::string scaleText;
switch (value) {
case 0: scaleText = I18n::get("options.guiScale.auto"); break;
case 1: scaleText = I18n::get("options.guiScale.small"); break;
case 2: scaleText = I18n::get("options.guiScale.medium"); break;
case 3: scaleText = I18n::get("options.guiScale.large"); break;
case 4: scaleText = I18n::get("options.guiScale.larger"); break;
case 5: scaleText = I18n::get("options.guiScale.largest"); break;
default: scaleText = I18n::get("options.guiScale.auto"); break;
}
text += ": " + scaleText;
}
if (m_optionId == OPTIONS_FOG_TYPE) {
int value = minecraft->options.getIntValue(OPTIONS_FOG_TYPE);
std::string scaleText;
switch (value) {
case 0: scaleText = I18n::get("options.fogType.vanilla"); break;
case 1: scaleText = I18n::get("options.fogType.java"); break;
case 2: scaleText = I18n::get("options.fogType.unused"); break;
}
text += ": " + scaleText;
}
if (m_optionId == OPTIONS_DEBUG_STYLE) {
int value = minecraft->options.getIntValue(OPTIONS_DEBUG_STYLE);
std::string scaleText;
switch (value) {
case 0: scaleText = I18n::get("options.debugStyle.javaBeta"); break;
case 1: scaleText = I18n::get("options.debugStyle.custom"); break;
case 2: scaleText = I18n::get("options.fogType.unused"); break;
}
text += ": " + scaleText;
}
if (m_optionId == OPTIONS_MENU_STYLE) {
int value = minecraft->options.getIntValue(OPTIONS_MENU_STYLE);
std::string scaleText;
switch (value) {
case 0: scaleText = I18n::get("options.menuStyle.pocket"); break;
case 1: scaleText = I18n::get("options.menuStyle.xperia"); break;
case 2: scaleText = I18n::get("options.menuStyle.java"); break;
}
text += ": " + scaleText;
}
if (m_optionId == OPTIONS_VIEW_DISTANCE) {
int value = minecraft->options.getIntValue(OPTIONS_VIEW_DISTANCE);
std::string scaleText;
switch (value) {
case 0: scaleText = I18n::get("options.renderDistance.far"); break;
case 1: scaleText = I18n::get("options.renderDistance.normal"); break;
case 2: scaleText = I18n::get("options.renderDistance.short"); break;
case 3: scaleText = I18n::get("options.renderDistance.tiny"); break;
default: scaleText = "Debug"; break;
}
text += ": " + scaleText;
}
minecraft->font->draw(text, (float)x, (float)y + yOffset, 0x909090, false);
super::render(minecraft, xm, ym); super::render(minecraft, xm, ym);
} }

View File

@@ -15,12 +15,13 @@ class OptionsItem: public GuiElementContainer
{ {
typedef GuiElementContainer super; typedef GuiElementContainer super;
public: public:
OptionsItem(std::string label, GuiElement* element); OptionsItem(OptionId optionId, std::string label, GuiElement* element);
virtual void render(Minecraft* minecraft, int xm, int ym); virtual void render(Minecraft* minecraft, int xm, int ym);
void setupPositions(); void setupPositions();
private: private:
std::string label; OptionId m_optionId;
std::string m_label;
}; };
#endif /*NET_MINECRAFT_CLIENT_GUI_COMPONENTS__OptionsItem_H__*/ #endif /*NET_MINECRAFT_CLIENT_GUI_COMPONENTS__OptionsItem_H__*/

View File

@@ -0,0 +1,64 @@
#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

@@ -0,0 +1,30 @@
#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

@@ -20,6 +20,9 @@ static const float kMinimumTrackingForDrag = 5;
static const float kMinIndicatorLength = 34.0f / 3; static const float kMinIndicatorLength = 34.0f / 3;
static const float PKScrollIndicatorEndSize = 3; static const float PKScrollIndicatorEndSize = 3;
static const float PKScrollIndicatorThickness = 7.0f /3; static const float PKScrollIndicatorThickness = 7.0f /3;
static const float kWheelOverscrollMax = 80.0f;
static const float kWheelOverscrollDamping = 0.6f;
static const float kWheelOverscrollRestoreAlpha = 0.18f;
ScrollingPane::ScrollingPane( ScrollingPane::ScrollingPane(
int optionFlags, int optionFlags,
@@ -70,13 +73,19 @@ ScrollingPane::ScrollingPane(
} }
//LOGI("%d, %d :: %d\n", bbox.w, itemBbox.w, this->columns); //LOGI("%d, %d :: %d\n", bbox.w, itemBbox.w, this->columns);
rows = 1 + (numItems-1) / this->columns, rows = 1 + (numItems-1) / this->columns;
/* /*
if (columns * itemBbox.w <= bbox.w) flags |= SF_LockX; if (columns * itemBbox.w <= bbox.w) flags |= SF_LockX;
if (rows * itemBbox.h <= bbox.h) flags |= SF_LockY; if (rows * itemBbox.h <= bbox.h) flags |= SF_LockY;
*/ */
// initialize content bounds immediately
adjustContentSize();
minPoint.set((float)(this->size.w - this->adjustedContentSize.w), (float)(this->size.h - this->adjustedContentSize.h), 0);
this->snapContentOffsetToBounds(false);
dragDeltas.reserve(128); dragDeltas.reserve(128);
te_moved = 0; te_moved = 0;
@@ -114,6 +123,34 @@ void ScrollingPane::tick() {
updateScrollFade(vScroll); updateScrollFade(vScroll);
updateScrollFade(hScroll); updateScrollFade(hScroll);
} }
if (isNotSet(SF_HardLimits) && !Mouse::isButtonDown(MouseAction::ACTION_LEFT) && !dragging && !tracking && !decelerating) {
float targetX = _contentOffset.x;
float targetY = _contentOffset.y;
bool corrected = false;
if (targetX > 0.0f) {
targetX = Mth::lerp(targetX, 0.0f, kWheelOverscrollRestoreAlpha);
corrected = true;
} else if (targetX < minPoint.x) {
targetX = Mth::lerp(targetX, minPoint.x, kWheelOverscrollRestoreAlpha);
corrected = true;
}
if (targetY > 0.0f) {
targetY = Mth::lerp(targetY, 0.0f, kWheelOverscrollRestoreAlpha);
corrected = true;
} else if (targetY < minPoint.y) {
targetY = Mth::lerp(targetY, minPoint.y, kWheelOverscrollRestoreAlpha);
corrected = true;
}
if (corrected) {
if (Mth::abs(targetX - _contentOffset.x) < 0.25f) targetX = (targetX > 0.0f ? 0.0f : (targetX < minPoint.x ? minPoint.x : targetX));
if (Mth::abs(targetY - _contentOffset.y) < 0.25f) targetY = (targetY > 0.0f ? 0.0f : (targetY < minPoint.y ? minPoint.y : targetY));
setContentOffset(Vec3(targetX, targetY, 0));
}
}
} }
bool ScrollingPane::getGridItemFor_slow(int itemIndex, GridItem& out) { bool ScrollingPane::getGridItemFor_slow(int itemIndex, GridItem& out) {
@@ -549,11 +586,39 @@ void ScrollingPane::stepThroughDecelerationAnimation(bool noAnimation) {
} }
void ScrollingPane::scrollBy(float dx, float dy) { void ScrollingPane::scrollBy(float dx, float dy) {
// adjust the translation offsets fpx/fpy by the requested amount // compute target content offset from wheel delta (in screen-space w/ opposite sign)
float nfpx = fpx + dx; float targetX = _contentOffset.x - dx;
float nfpy = fpy + dy; float targetY = _contentOffset.y - dy;
// convert back to content offset (fpx = -contentOffset.x)
setContentOffset(Vec3(-nfpx, -nfpy, 0)); if (isSet(SF_LockX)) targetX = _contentOffset.x;
if (isSet(SF_LockY)) targetY = _contentOffset.y;
if (isSet(SF_HardLimits)) {
targetX = Mth::clamp(targetX, minPoint.x, 0.0f);
targetY = Mth::clamp(targetY, minPoint.y, 0.0f);
} else {
if (targetX > 0.0f) {
float overshoot = targetX;
overshoot = Mth::Min(overshoot, kWheelOverscrollMax);
targetX = overshoot * kWheelOverscrollDamping;
} else if (targetX < minPoint.x) {
float overshoot = targetX - minPoint.x;
overshoot = Mth::Max(overshoot, -kWheelOverscrollMax);
targetX = minPoint.x + overshoot * kWheelOverscrollDamping;
}
if (targetY > 0.0f) {
float overshoot = targetY;
overshoot = Mth::Min(overshoot, kWheelOverscrollMax);
targetY = overshoot * kWheelOverscrollDamping;
} else if (targetY < minPoint.y) {
float overshoot = targetY - minPoint.y;
overshoot = Mth::Max(overshoot, -kWheelOverscrollMax);
targetY = minPoint.y + overshoot * kWheelOverscrollDamping;
}
}
setContentOffset(Vec3(targetX, targetY, 0));
} }
void ScrollingPane::setContentOffset(float x, float y) { void ScrollingPane::setContentOffset(float x, float y) {

View File

@@ -2,6 +2,7 @@
#include "../../Minecraft.h" #include "../../Minecraft.h"
#include "../../renderer/Textures.h" #include "../../renderer/Textures.h"
#include "../Screen.h" #include "../Screen.h"
#include "../../../locale/I18n.h"
#include "../../../util/Mth.h" #include "../../../util/Mth.h"
#include <algorithm> #include <algorithm>
#include <assert.h> #include <assert.h>
@@ -21,7 +22,7 @@ void Slider::render( Minecraft* minecraft, int xm, int ym ) {
if (m_numSteps > 2) { if (m_numSteps > 2) {
int stepDistance = barWidth / (m_numSteps-1); int stepDistance = barWidth / (m_numSteps-1);
for(int a = 0; a <= m_numSteps; ++a) { for(int a = 0; a < m_numSteps; ++a) {
int renderSliderStepPosX = xSliderStart + a * stepDistance + 1; int renderSliderStepPosX = xSliderStart + a * stepDistance + 1;
fill(renderSliderStepPosX - 1, ySliderStart - 2, renderSliderStepPosX + 1, ySliderEnd + 2, 0xff606060); fill(renderSliderStepPosX - 1, ySliderStart - 2, renderSliderStepPosX + 1, ySliderEnd + 2, 0xff606060);
} }
@@ -64,15 +65,20 @@ SliderFloat::SliderFloat(Minecraft* minecraft, OptionId option)
SliderInt::SliderInt(Minecraft* minecraft, OptionId option) SliderInt::SliderInt(Minecraft* minecraft, OptionId option)
: Slider(option), m_option(dynamic_cast<OptionInt*>(minecraft->options.getOpt(option))) : Slider(option), m_option(dynamic_cast<OptionInt*>(minecraft->options.getOpt(option)))
{ {
m_numSteps = m_option->getMax() - m_option->getMin(); m_numSteps = m_option->getMax() - m_option->getMin() + 1;
m_percentage = float(m_option->get() - m_option->getMin()) / (m_numSteps-1); m_percentage = float(m_option->get() - m_option->getMin()) / (m_numSteps-1);
} }
void SliderInt::render( Minecraft* minecraft, int xm, int ym ) {
Slider::render(minecraft, xm, ym);
}
void SliderInt::mouseReleased( Minecraft* minecraft, int x, int y, int buttonNum ) { void SliderInt::mouseReleased( Minecraft* minecraft, int x, int y, int buttonNum ) {
Slider::mouseReleased(minecraft, x, y, buttonNum); Slider::mouseReleased(minecraft, x, y, buttonNum);
if (pointInside(x, y)) { if (pointInside(x, y)) {
int curStep = Mth::floor(m_percentage * (m_numSteps-1)); int curStep = int(m_percentage * (m_numSteps-1) + 0.5f);
curStep = Mth::clamp(curStep + m_option->getMin(), m_option->getMin(), m_option->getMax());
m_percentage = float(curStep - m_option->getMin()) / (m_numSteps-1); m_percentage = float(curStep - m_option->getMin()) / (m_numSteps-1);
minecraft->options.set(m_optId, curStep); minecraft->options.set(m_optId, curStep);

View File

@@ -3,7 +3,6 @@
#include "GuiElement.h" #include "GuiElement.h"
#include "../../../client/Options.h" #include "../../../client/Options.h"
#include <client/Option.h>
class Slider : public GuiElement { class Slider : public GuiElement {
typedef GuiElement super; typedef GuiElement super;
@@ -38,6 +37,7 @@ class SliderInt : public Slider {
public: public:
SliderInt(Minecraft* minecraft, OptionId option); SliderInt(Minecraft* minecraft, OptionId option);
virtual void render( Minecraft* minecraft, int xm, int ym ) override;
virtual void mouseReleased( Minecraft* minecraft, int x, int y, int buttonNum ) override; virtual void mouseReleased( Minecraft* minecraft, int x, int y, int buttonNum ) override;
protected: protected:

View File

@@ -0,0 +1,24 @@
#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

@@ -0,0 +1,23 @@
#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

@@ -0,0 +1,26 @@
#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

@@ -31,7 +31,7 @@ ConfirmScreen::~ConfirmScreen() {
void ConfirmScreen::init() void ConfirmScreen::init()
{ {
if (minecraft->useTouchscreen()) { if (/* minecraft->useTouchscreen() */ true) {
yesButton = new Touch::TButton(0, 0, 0, yesButtonText), yesButton = new Touch::TButton(0, 0, 0, yesButtonText),
noButton = new Touch::TButton(1, 0, 0, noButtonText); noButton = new Touch::TButton(1, 0, 0, noButtonText);
} else { } else {

View File

@@ -8,6 +8,7 @@
#include "../../../network/ServerSideNetworkHandler.h" #include "../../../network/ServerSideNetworkHandler.h"
#include "../../../network/packet/ChatPacket.h" #include "../../../network/packet/ChatPacket.h"
#include "../../../platform/log.h" #include "../../../platform/log.h"
#include "util/StringUtils.h"
#include <sstream> #include <sstream>
#include <cstdlib> #include <cstdlib>
@@ -54,141 +55,37 @@ void ConsoleScreen::charPressed(char inputChar)
_input += inputChar; _input += inputChar;
} }
// ---------------------------------------------------------------------------
// execute: run _input as a command, print result, close screen
// ---------------------------------------------------------------------------
void ConsoleScreen::execute() void ConsoleScreen::execute()
{ {
if (!minecraft->level) return;
if (_input.empty()) { if (_input.empty()) {
minecraft->setScreen(NULL); return minecraft->setScreen(NULL);
return;
} }
if (_input[0] == '/') { if (_input[0] == '/') {
// Command // Command
std::string result = processCommand(_input); _input = Util::stringTrim(_input.substr(1));
if (!result.empty())
minecraft->gui.addMessage(result); std::istringstream iss(minecraft->commandManager().execute(*minecraft, *minecraft->player, _input));
for (std::string line; std::getline(iss, line); ) {
minecraft->gui.addMessage(line);
}
} else { } else {
// Chat message: <name> message // @ai @rewrite
std::string msg = std::string("<") + minecraft->player->name + "> " + _input;
if (minecraft->netCallback && minecraft->raknetInstance->isServer()) { if (minecraft->netCallback && minecraft->raknetInstance->isServer()) {
// Hosting a LAN game: displayGameMessage shows locally + broadcasts MessagePacket to clients static_cast<ServerSideNetworkHandler*>(minecraft->netCallback)->displayGameMessage(_input);
static_cast<ServerSideNetworkHandler*>(minecraft->netCallback)->displayGameMessage(msg);
} else if (minecraft->netCallback) { } else if (minecraft->netCallback) {
// Connected client: send ChatPacket to server; server echoes it back as MessagePacket ChatPacket chatPkt(_input);
ChatPacket chatPkt(msg);
minecraft->raknetInstance->send(chatPkt); minecraft->raknetInstance->send(chatPkt);
} else { } else {
// Singleplayer: show locally only minecraft->gui.addMessage("<" + minecraft->player->name + "> " + _input);
minecraft->gui.addMessage(msg);
} }
} }
minecraft->setScreen(NULL); minecraft->setScreen(NULL);
} }
// ---------------------------------------------------------------------------
// processCommand
// ---------------------------------------------------------------------------
static std::string trim(const std::string& s) {
size_t a = s.find_first_not_of(" \t");
if (a == std::string::npos) return "";
size_t b = s.find_last_not_of(" \t");
return s.substr(a, b - a + 1);
}
std::string ConsoleScreen::processCommand(const std::string& raw)
{
// strip leading '/'
std::string line = raw;
if (!line.empty() && line[0] == '/') line = line.substr(1);
line = trim(line);
// tokenise
std::vector<std::string> args;
{
std::istringstream ss(line);
std::string tok;
while (ss >> tok) args.push_back(tok);
}
if (args.empty()) return "";
Level* level = minecraft->level;
if (!level) return "No level loaded.";
// -----------------------------------------------------------------------
// /time ...
// -----------------------------------------------------------------------
if (args[0] == "time") {
if (args.size() < 2)
return "Usage: /time <add|set|query> ...";
const std::string& sub = args[1];
// -- time add <value> -----------------------------------------------
if (sub == "add") {
if (args.size() < 3) return "Usage: /time add <value>";
long delta = std::atol(args[2].c_str());
long newTime = level->getTime() + delta;
level->setTime(newTime);
std::ostringstream out;
out << "Set the time to " << (newTime % Level::TICKS_PER_DAY);
return out.str();
}
// -- time set <value|day|night|noon|midnight> -----------------------
if (sub == "set") {
if (args.size() < 3) return "Usage: /time set <value|day|night|noon|midnight>";
const std::string& val = args[2];
long t = -1;
if (val == "day") t = 1000;
else if (val == "noon") t = 6000;
else if (val == "night") t = 13000;
else if (val == "midnight") t = 18000;
else {
// numeric — accept positive integers only
bool numeric = true;
for (char c : val)
if (!std::isdigit((unsigned char)c)) { numeric = false; break; }
if (!numeric) return std::string("Unknown value: ") + val;
t = std::atol(val.c_str());
}
// Preserve the total day count so only the time-of-day changes
long dayCount = level->getTime() / Level::TICKS_PER_DAY;
long newTime = dayCount * Level::TICKS_PER_DAY + (t % Level::TICKS_PER_DAY);
level->setTime(newTime);
std::ostringstream out;
out << "Set the time to " << t;
return out.str();
}
// -- time query <daytime|gametime|day> ------------------------------
if (sub == "query") {
if (args.size() < 3) return "Usage: /time query <daytime|gametime|day>";
const std::string& what = args[2];
long total = level->getTime();
long daytime = total % Level::TICKS_PER_DAY;
long day = total / Level::TICKS_PER_DAY;
std::ostringstream out;
if (what == "daytime") { out << "The time of day is " << daytime; }
else if (what == "gametime") { out << "The game time is " << total; }
else if (what == "day") { out << "The day is " << day; }
else return std::string("Unknown query: ") + what;
return out.str();
}
return "Unknown sub-command. Usage: /time <add|set|query> ...";
}
return std::string("Unknown command: /") + args[0];
}
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// render // render
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
@@ -216,8 +113,5 @@ void ConsoleScreen::render(int /*xm*/, int /*ym*/, float /*a*/)
displayed += '_'; displayed += '_';
// Placeholder hint when empty // Placeholder hint when empty
if (_input.empty() && (_cursorBlink / 10) % 2 != 0) font->drawShadow(displayed, (float)(boxX0 + 2), (float)(boxY + 2), 0xffffffff);
font->drawShadow("Type a message or /command", (float)(boxX0 + 2), (float)(boxY + 2), 0xff606060);
else
font->drawShadow(displayed, (float)(boxX0 + 2), (float)(boxY + 2), 0xffffffff);
} }

View File

@@ -25,7 +25,6 @@ public:
private: private:
void execute(); void execute();
std::string processCommand(const std::string& cmd);
std::string _input; std::string _input;
int _cursorBlink; // tick counter for cursor blink int _cursorBlink; // tick counter for cursor blink

View File

@@ -28,6 +28,7 @@ void CreditsScreen::init() {
buttons.push_back(bHeader); buttons.push_back(bHeader);
buttons.push_back(btnBack); buttons.push_back(btnBack);
// TODO: rewrite it
// prepare text lines // prepare text lines
_lines.clear(); _lines.clear();
_lines.push_back("Minecraft: Pocket Edition"); _lines.push_back("Minecraft: Pocket Edition");
@@ -39,6 +40,8 @@ void CreditsScreen::init() {
_lines.push_back("Kolyah35"); _lines.push_back("Kolyah35");
_lines.push_back("karson"); _lines.push_back("karson");
_lines.push_back("deepfriedwaffles"); _lines.push_back("deepfriedwaffles");
_lines.push_back("EpikIzCool");
_lines.push_back("fileshredder");
_lines.push_back(""); _lines.push_back("");
// avoid color tags around the URL so it isn't mangled by the parser please // avoid color tags around the URL so it isn't mangled by the parser please
_lines.push_back("Join our Discord server: https://discord.gg/c58YesBxve"); _lines.push_back("Join our Discord server: https://discord.gg/c58YesBxve");

View File

@@ -23,12 +23,15 @@ DeathScreen::~DeathScreen()
void DeathScreen::init() void DeathScreen::init()
{ {
if (minecraft->useTouchscreen()) { if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 0) {
bRespawn = new Touch::TButton(1, "Respawn!"); bRespawn = new Touch::TButton(1, "Respawn!");
bTitle = new Touch::TButton(2, "Main menu"); bTitle = new Touch::TButton(2, "Main menu");
} else { } else if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 1) {
bRespawn = new Button(1, "Respawn!"); bRespawn = new Button(1, "Respawn!");
bTitle = new Button(2, "Main menu"); bTitle = new Button(2, "Main menu");
} else {
bRespawn = new Button(1, 0, 0, 200, 20, "Respawn");
bTitle = new Button(2, 0, 0, 200, 20, "Title menu");
} }
buttons.push_back(bRespawn); buttons.push_back(bRespawn);
buttons.push_back(bTitle); buttons.push_back(bTitle);
@@ -39,13 +42,23 @@ void DeathScreen::init()
void DeathScreen::setupPositions() void DeathScreen::setupPositions()
{ {
bRespawn->width = bTitle->width = width / 4; if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
bRespawn->width = 200;
bTitle->width = 200;
int centerX = (width / 2) - (bRespawn->width / 2);
bRespawn->x = centerX;
bTitle->x = centerX;
bRespawn->y = (height / 2);
bTitle->y = bRespawn->y + 24;
} else {
bRespawn->width = bTitle->width = width / 4;
bRespawn->y = bTitle->y = height / 2; bRespawn->y = bTitle->y = height / 2;
bRespawn->x = width/2 - bRespawn->width - 10; bRespawn->x = width/2 - bRespawn->width - 10;
bTitle->x = width/2 + 10; bTitle->x = width/2 + 10;
}
LOGI("xyz: %d, %d (%d, %d)\n", bTitle->x, bTitle->y, width, height); // LOGI("xyz: %d, %d (%d, %d)\n", bTitle->x, bTitle->y, width, height);
} }
void DeathScreen::tick() { void DeathScreen::tick() {
@@ -56,10 +69,20 @@ void DeathScreen::render( int xm, int ym, float a )
{ {
fillGradient(0, 0, width, height, 0x60500000, 0xa0803030); fillGradient(0, 0, width, height, 0x60500000, 0xa0803030);
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
glPushMatrix2();
glScalef2(2, 2, 2);
drawCenteredString(font, "Game over!", width / 2 / 2, height / 8, 0xffffff);
glPopMatrix2();
std::stringstream ss;
ss << "Score: &e" << minecraft->player->getScore();
drawCenteredString(font, ss.str(), width / 2, (height / 4) + 32, 0xffffff);
} else {
glPushMatrix2(); glPushMatrix2();
glScalef2(2, 2, 2); glScalef2(2, 2, 2);
drawCenteredString(font, "You died!", width / 2 / 2, height / 8, 0xffffff); drawCenteredString(font, "You died!", width / 2 / 2, height / 8, 0xffffff);
glPopMatrix2(); glPopMatrix2();
}
if (_tick >= WAIT_TICKS) if (_tick >= WAIT_TICKS)
Screen::render(xm, ym, a); Screen::render(xm, ym, a);

View File

@@ -21,7 +21,7 @@ public:
} }
void init() { void init() {
if (minecraft->useTouchscreen()) if (/* minecraft->useTouchscreen() */ true)
_back = new Touch::TButton(1, "Ok"); _back = new Touch::TButton(1, "Ok");
else else
_back = new Button(1, "Ok"); _back = new Button(1, "Ok");

View File

@@ -17,7 +17,7 @@ InBedScreen::~InBedScreen() {
} }
void InBedScreen::init() { void InBedScreen::init() {
if (minecraft->useTouchscreen()) { if (/* minecraft->useTouchscreen() */ true) {
bWakeUp = new Touch::TButton(1, "Leave Bed"); bWakeUp = new Touch::TButton(1, "Leave Bed");
} else { } else {
bWakeUp = new Button(1, "Leave Bed"); bWakeUp = new Button(1, "Leave Bed");

View File

@@ -1,5 +1,6 @@
#include "IngameBlockSelectionScreen.h" #include "IngameBlockSelectionScreen.h"
#include "../../renderer/TileRenderer.h" #include "../../renderer/TileRenderer.h"
#include "../../renderer/Lighting.h"
#include "../../player/LocalPlayer.h" #include "../../player/LocalPlayer.h"
#include "../../renderer/gles.h" #include "../../renderer/gles.h"
#include "../../Minecraft.h" #include "../../Minecraft.h"
@@ -11,6 +12,7 @@
#include "../../renderer/Textures.h" #include "../../renderer/Textures.h"
#include "../../gamemode/GameMode.h" #include "../../gamemode/GameMode.h"
#include "ArmorScreen.h" #include "ArmorScreen.h"
#include "crafting/WorkbenchScreen.h"
#include "../components/Button.h" #include "../components/Button.h"
#if defined(__APPLE__) #if defined(__APPLE__)
@@ -26,7 +28,8 @@ IngameBlockSelectionScreen::IngameBlockSelectionScreen()
InventoryRows(1), InventoryRows(1),
InventoryCols(1), InventoryCols(1),
InventorySize(1), InventorySize(1),
bArmor(1, "Armor") bArmor(1, "Armor"),
bCrafting(1, "Crafting")
{ {
} }
@@ -41,6 +44,19 @@ void IngameBlockSelectionScreen::init()
(float)getSlotPosY(0) - 4, (float)getSlotPosY(0) - 4,
(float)getSlotPosX(InventoryCols) + 4, (float)getSlotPosX(InventoryCols) + 4,
(float)getSlotPosY(InventoryRows) + 4); (float)getSlotPosY(InventoryRows) + 4);
if (!minecraft->isCreativeMode()) {
bArmor.width = 42;
bCrafting.width = 42;
bArmor.x = 0;
bArmor.y = height - bArmor.height;
bCrafting.x = 0;
bCrafting.y = height - bCrafting.height - 30;
buttons.push_back(&bArmor);
buttons.push_back(&bCrafting);
}
ItemInstance* selected = inventory->getSelected(); ItemInstance* selected = inventory->getSelected();
if (!selected || selected->isNull()) { if (!selected || selected->isNull()) {
@@ -57,13 +73,6 @@ void IngameBlockSelectionScreen::init()
} }
if (!isAllowed(selectedItem)) if (!isAllowed(selectedItem))
selectedItem = 0; selectedItem = 0;
if (!minecraft->isCreativeMode()) {
bArmor.width = 42;
bArmor.x = 0;
bArmor.y = height - bArmor.height;
buttons.push_back(&bArmor);
}
} }
void IngameBlockSelectionScreen::removed() void IngameBlockSelectionScreen::removed()
@@ -80,10 +89,10 @@ void IngameBlockSelectionScreen::renderSlots()
blitOffset = -90; blitOffset = -90;
//glEnable2(GL_RESCALE_NORMAL); glEnable2(GL_RESCALE_NORMAL);
//glPushMatrix2(); //glPushMatrix2();
//glRotatef2(180, 1, 0, 0); //glRotatef2(180, 1, 0, 0);
//Lighting::turnOn(); Lighting::turnOn(minecraft);
//glPopMatrix2(); //glPopMatrix2();
minecraft->textures->loadAndBindTexture("gui/gui.png"); minecraft->textures->loadAndBindTexture("gui/gui.png");
@@ -122,8 +131,8 @@ void IngameBlockSelectionScreen::renderSlots()
//w.stop(); //w.stop();
//w.printEvery(1000, "render-blocksel"); //w.printEvery(1000, "render-blocksel");
//glDisable2(GL_RESCALE_NORMAL); glDisable2(GL_RESCALE_NORMAL);
//Lighting::turnOn(); Lighting::turnOff();
} }
int IngameBlockSelectionScreen::getSlotPosX(int slotX) { int IngameBlockSelectionScreen::getSlotPosX(int slotX) {
@@ -248,7 +257,7 @@ void IngameBlockSelectionScreen::mouseClicked(int x, int y, int buttonNum)
//minecraft->soundEngine->playUI("random.click", 1, 1); //minecraft->soundEngine->playUI("random.click", 1, 1);
} else { } else {
_pendingQuit = !_area.isInside((float)x, (float)y) _pendingQuit = !_area.isInside((float)x, (float)y)
&& !bArmor.isInside(x, y); && !bArmor.isInside(x, y) && !bCrafting.isInside(x, y);
} }
} }
if (!_pendingQuit) if (!_pendingQuit)
@@ -337,5 +346,8 @@ void IngameBlockSelectionScreen::buttonClicked( Button* button )
if (button == &bArmor) { if (button == &bArmor) {
minecraft->setScreen(new ArmorScreen()); minecraft->setScreen(new ArmorScreen());
} }
if (button == &bCrafting) {
minecraft->setScreen(new WorkbenchScreen(Recipe::SIZE_2X2));
}
super::buttonClicked(button); super::buttonClicked(button);
} }

View File

@@ -52,6 +52,7 @@ private:
bool _pendingQuit; bool _pendingQuit;
Button bArmor; Button bArmor;
Button bCrafting;
RectangleArea _area; RectangleArea _area;
}; };

View File

@@ -0,0 +1,107 @@
#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 "../Screen.h"
#include "../components/Button.h" #include "../components/Button.h"
#include "../../Minecraft.h" #include "../../Minecraft.h"
#include "client/gui/components/ImageButton.h" #include "../components/ImageButton.h"
#include "client/gui/components/TextBox.h" #include "../components/TextBox.h"
class JoinByIPScreen: public Screen class JoinByIPScreen: public Screen
{ {
@@ -25,4 +25,4 @@ private:
Touch::THeader bHeader; Touch::THeader bHeader;
Touch::TButton bJoin; Touch::TButton bJoin;
ImageButton bBack; ImageButton bBack;
}; };

View File

@@ -19,7 +19,6 @@ OptionsScreen::OptionsScreen()
} }
OptionsScreen::~OptionsScreen() { OptionsScreen::~OptionsScreen() {
if (btnClose != NULL) { if (btnClose != NULL) {
delete btnClose; delete btnClose;
btnClose = NULL; btnClose = NULL;
@@ -53,7 +52,6 @@ OptionsScreen::~OptionsScreen() {
} }
void OptionsScreen::init() { void OptionsScreen::init() {
bHeader = new Touch::THeader(0, "Options"); bHeader = new Touch::THeader(0, "Options");
btnClose = new ImageButton(1, ""); btnClose = new ImageButton(1, "");
@@ -89,7 +87,6 @@ void OptionsScreen::init() {
} }
void OptionsScreen::setupPositions() { void OptionsScreen::setupPositions() {
int buttonHeight = btnClose->height; int buttonHeight = btnClose->height;
btnClose->x = width - btnClose->width; btnClose->x = width - btnClose->width;
@@ -124,6 +121,7 @@ void OptionsScreen::setupPositions() {
(*it)->x = categoryButtons[0]->width; (*it)->x = categoryButtons[0]->width;
(*it)->y = bHeader->height; (*it)->y = bHeader->height;
(*it)->width = width - categoryButtons[0]->width; (*it)->width = width - categoryButtons[0]->width;
(*it)->height = height - bHeader->height;
(*it)->setupPositions(); (*it)->setupPositions();
} }
@@ -134,7 +132,6 @@ void OptionsScreen::setupPositions() {
void OptionsScreen::render(int xm, int ym, float a) { void OptionsScreen::render(int xm, int ym, float a) {
renderBackground(); renderBackground();
int xmm = xm * width / minecraft->width; int xmm = xm * width / minecraft->width;
@@ -142,7 +139,7 @@ void OptionsScreen::render(int xm, int ym, float a) {
if (currentOptionsGroup != NULL) if (currentOptionsGroup != NULL)
currentOptionsGroup->render(minecraft, xmm, ymm); currentOptionsGroup->render(minecraft, xmm, ymm);
super::render(xm, ym, a); super::render(xm, ym, a);
} }
@@ -150,10 +147,13 @@ void OptionsScreen::removed() {
} }
void OptionsScreen::buttonClicked(Button* button) { void OptionsScreen::buttonClicked(Button* button) {
if (button == btnClose) { if (button == btnClose) {
minecraft->options.save(); minecraft->options.save();
minecraft->screenChooser.setScreen(SCREEN_STARTMENU); if (minecraft->screen != NULL) {
minecraft->setScreen(NULL);
} else {
minecraft->screenChooser.setScreen(SCREEN_STARTMENU);
}
} }
else if (button->id > 1 && button->id < 7) { else if (button->id > 1 && button->id < 7) {
int categoryButton = button->id - categoryButtons[0]->id; int categoryButton = button->id - categoryButtons[0]->id;
@@ -165,7 +165,6 @@ void OptionsScreen::buttonClicked(Button* button) {
} }
void OptionsScreen::selectCategory(int index) { void OptionsScreen::selectCategory(int index) {
int currentIndex = 0; int currentIndex = 0;
for (std::vector<Touch::TButton*>::iterator it = categoryButtons.begin(); it != categoryButtons.end(); ++it) { for (std::vector<Touch::TButton*>::iterator it = categoryButtons.begin(); it != categoryButtons.end(); ++it) {
@@ -199,6 +198,7 @@ void OptionsScreen::generateOptionScreens() {
optionPanes[1]->addOptionItem(OPTIONS_DIFFICULTY, minecraft) optionPanes[1]->addOptionItem(OPTIONS_DIFFICULTY, minecraft)
.addOptionItem(OPTIONS_SERVER_VISIBLE, minecraft) .addOptionItem(OPTIONS_SERVER_VISIBLE, minecraft)
.addOptionItem(OPTIONS_THIRD_PERSON_VIEW, minecraft) .addOptionItem(OPTIONS_THIRD_PERSON_VIEW, minecraft)
.addOptionItem(OPTIONS_WINDOW_SCALE, minecraft)
.addOptionItem(OPTIONS_GUI_SCALE, minecraft) .addOptionItem(OPTIONS_GUI_SCALE, minecraft)
.addOptionItem(OPTIONS_SENSITIVITY, minecraft) .addOptionItem(OPTIONS_SENSITIVITY, minecraft)
.addOptionItem(OPTIONS_MUSIC_VOLUME, minecraft) .addOptionItem(OPTIONS_MUSIC_VOLUME, minecraft)
@@ -209,7 +209,10 @@ void OptionsScreen::generateOptionScreens() {
// // Controls Pane // // Controls Pane
optionPanes[2]->addOptionItem(OPTIONS_INVERT_Y_MOUSE, minecraft) optionPanes[2]->addOptionItem(OPTIONS_INVERT_Y_MOUSE, minecraft)
.addOptionItem(OPTIONS_USE_TOUCHSCREEN, minecraft); .addOptionItem(OPTIONS_USE_TOUCHSCREEN, minecraft)
.addOptionItem(OPTIONS_AUTOJUMP, minecraft)
.addOptionItem(OPTIONS_BLOCK_OUTLINE, minecraft)
.addOptionItem(OPTIONS_IS_JOY_TOUCH_AREA, minecraft);
for (int i = OPTIONS_KEY_FORWARD; i <= OPTIONS_KEY_USE; i++) { for (int i = OPTIONS_KEY_FORWARD; i <= OPTIONS_KEY_USE; i++) {
optionPanes[2]->addOptionItem((OptionId)i, minecraft); optionPanes[2]->addOptionItem((OptionId)i, minecraft);
@@ -217,19 +220,37 @@ void OptionsScreen::generateOptionScreens() {
// // Graphics Pane // // Graphics Pane
optionPanes[3]->addOptionItem(OPTIONS_FANCY_GRAPHICS, minecraft) 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_LIMIT_FRAMERATE, minecraft)
.addOptionItem(OPTIONS_VSYNC, minecraft) .addOptionItem(OPTIONS_VSYNC, minecraft)
.addOptionItem(OPTIONS_VIEW_DISTANCE, minecraft)
.addOptionItem(OPTIONS_RENDER_DEBUG, minecraft) .addOptionItem(OPTIONS_RENDER_DEBUG, minecraft)
.addOptionItem(OPTIONS_ANAGLYPH_3D, minecraft) .addOptionItem(OPTIONS_ANAGLYPH_3D, minecraft)
.addOptionItem(OPTIONS_VIEW_BOBBING, minecraft) .addOptionItem(OPTIONS_VIEW_BOBBING, minecraft)
.addOptionItem(OPTIONS_AMBIENT_OCCLUSION, minecraft); .addOptionItem(OPTIONS_AMBIENT_OCCLUSION, minecraft)
.addOptionItem(OPTIONS_NORMAL_LIGHTING, minecraft)
.addOptionItem(OPTIONS_BEAUTIFUL_SKY, minecraft)
.addOptionItem(OPTIONS_VIGNETTE, minecraft);
optionPanes[4]->addOptionItem(OPTIONS_ALLOW_SPRINT, minecraft) optionPanes[4]->addOptionItem(OPTIONS_ALLOW_SPRINT, minecraft)
.addOptionItem(OPTIONS_BAR_ON_TOP, minecraft); .addOptionItem(OPTIONS_BAR_ON_TOP, minecraft)
.addOptionItem(OPTIONS_MENU_STYLE, minecraft)
.addOptionItem(OPTIONS_RPI_CURSOR, minecraft)
#ifdef __APPLE__
.addOptionItem(OPTIONS_FOLIAGE_TINT, minecraft)
.addOptionItem(OPTIONS_TINTED_SIDE, minecraft)
#endif
.addOptionItem(OPTIONS_JAVA_HUD, minecraft)
.addOptionItem(OPTIONS_FOG_TYPE, minecraft)
.addOptionItem(OPTIONS_BETA_SKY, minecraft)
.addOptionItem(OPTIONS_RESTORED_ANIMS, minecraft)
.addOptionItem(OPTIONS_DEBUG_STYLE, minecraft);
} }
void OptionsScreen::mouseClicked(int x, int y, int buttonNum) { void OptionsScreen::mouseClicked(int x, int y, int buttonNum) {
if (currentOptionsGroup != NULL) if (currentOptionsGroup != NULL)
currentOptionsGroup->mouseClicked(minecraft, x, y, buttonNum); currentOptionsGroup->mouseClicked(minecraft, x, y, buttonNum);
@@ -237,19 +258,24 @@ void OptionsScreen::mouseClicked(int x, int y, int buttonNum) {
} }
void OptionsScreen::mouseReleased(int x, int y, int buttonNum) { void OptionsScreen::mouseReleased(int x, int y, int buttonNum) {
if (currentOptionsGroup != NULL) if (currentOptionsGroup != NULL)
currentOptionsGroup->mouseReleased(minecraft, x, y, buttonNum); currentOptionsGroup->mouseReleased(minecraft, x, y, buttonNum);
super::mouseReleased(x, y, buttonNum); super::mouseReleased(x, y, buttonNum);
} }
void OptionsScreen::mouseWheel(int dx, int dy, int xm, int ym) {
if (currentOptionsGroup != NULL && currentOptionsGroup->pointInside(xm, ym) && dy != 0) {
currentOptionsGroup->scrollByPixels((float)dy * 18.0f);
}
}
void OptionsScreen::keyPressed(int eventKey) { void OptionsScreen::keyPressed(int eventKey) {
if (currentOptionsGroup != NULL) if (currentOptionsGroup != NULL)
currentOptionsGroup->keyPressed(minecraft, eventKey); currentOptionsGroup->keyPressed(minecraft, eventKey);
if (eventKey == Keyboard::KEY_ESCAPE) if (eventKey == Keyboard::KEY_ESCAPE)
minecraft->options.save(); minecraft->options.save();
super::keyPressed(eventKey); super::keyPressed(eventKey);
} }

View File

@@ -27,6 +27,7 @@ public:
virtual void mouseClicked(int x, int y, int buttonNum); virtual void mouseClicked(int x, int y, int buttonNum);
virtual void mouseReleased(int x, int y, int buttonNum); virtual void mouseReleased(int x, int y, int buttonNum);
virtual void mouseWheel(int dx, int dy, int xm, int ym);
virtual void keyPressed(int eventKey); virtual void keyPressed(int eventKey);
virtual void charPressed(char inputChar); virtual void charPressed(char inputChar);

View File

@@ -5,19 +5,23 @@
#include "../../../util/Mth.h" #include "../../../util/Mth.h"
#include "../../../network/RakNetInstance.h" #include "../../../network/RakNetInstance.h"
#include "../../../network/ServerSideNetworkHandler.h" #include "../../../network/ServerSideNetworkHandler.h"
#include "client/Options.h"
#include "client/gui/components/Button.h"
#include "client/gui/screens/OptionsScreen.h"
PauseScreen::PauseScreen(bool wasBackPaused) PauseScreen::PauseScreen(bool wasBackPaused)
: saveStep(0), : saveStep(0),
visibleTime(0), visibleTime(0),
bContinue(0), bContinue(0),
bQuit(0), bQuit(0),
bOptions(0),
bQuitAndSaveLocally(0), bQuitAndSaveLocally(0),
bServerVisibility(0), bServerVisibility(0),
// bThirdPerson(0), // bThirdPerson(0),
wasBackPaused(wasBackPaused), wasBackPaused(wasBackPaused),
// bSound(OPTIONS_SOUND_VOLUME, 1, 0), // bSound(OPTIONS_SOUND_VOLUME, 1, 0),
bThirdPerson(OPTIONS_THIRD_PERSON_VIEW), bThirdPerson(OPTIONS_THIRD_PERSON_VIEW),
bHideGui(OPTIONS_HIDEGUI) bHideGui(OPTIONS_HIDEGUI)
{ {
ImageDef def; ImageDef def;
def.setSrc(IntRectangle(160, 144, 39, 31)); def.setSrc(IntRectangle(160, 144, 39, 31));
@@ -30,7 +34,7 @@ PauseScreen::PauseScreen(bool wasBackPaused)
// bSound.setImageDef(def, true); // bSound.setImageDef(def, true);
defSrc.y += defSrc.h; defSrc.y += defSrc.h;
bThirdPerson.setImageDef(def, true); bThirdPerson.setImageDef(def, true);
bHideGui.setImageDef(def, true); bHideGui.setImageDef(def, true);
//void setImageDef(ImageDef& imageDef, bool setButtonSize); //void setImageDef(ImageDef& imageDef, bool setButtonSize);
} }
@@ -39,38 +43,48 @@ PauseScreen::~PauseScreen() {
delete bQuit; delete bQuit;
delete bQuitAndSaveLocally; delete bQuitAndSaveLocally;
delete bServerVisibility; delete bServerVisibility;
// delete bThirdPerson; delete bOptions;
// delete bThirdPerson;
} }
void PauseScreen::init() { void PauseScreen::init() {
if (minecraft->useTouchscreen()) { if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 0) {
bContinue = new Touch::TButton(1, "Back to game"); bContinue = new Touch::TButton(1, "Back to game");
bOptions = new Touch::TButton(5, "Options");
bQuit = new Touch::TButton(2, "Quit to title"); bQuit = new Touch::TButton(2, "Quit to title");
bQuitAndSaveLocally = new Touch::TButton(3, "Quit and copy map"); bQuitAndSaveLocally = new Touch::TButton(3, "Quit and copy map");
bServerVisibility = new Touch::TButton(4, ""); bServerVisibility = new Touch::TButton(4, "");
// bThirdPerson = new Touch::TButton(5, "Toggle 3:rd person view"); // bThirdPerson = new Touch::TButton(5, "Toggle 3:rd person view");
} else { } else if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 1) {
bContinue = new Button(1, "Back to game"); bContinue = new Button(1, "Back to game");
bOptions = new Button(5, "Options");
bQuit = new Button(2, "Quit to title"); bQuit = new Button(2, "Quit to title");
bQuitAndSaveLocally = new Button(3, "Quit and copy map"); bQuitAndSaveLocally = new Button(3, "Quit and copy map");
bServerVisibility = new Button(4, ""); bServerVisibility = new Button(4, "");
// bThirdPerson = new Button(5, "Toggle 3:rd person view"); // bThirdPerson = new Button(5, "Toggle 3:rd person view");
} else {
bContinue = new Button(1, 0, 0, 200, 20, "Back to game");
bServerVisibility = new Button(4, 0, 0, 200, 20, "");
bOptions = new Button(5, 0, 0, 200, 20, "Options...");
bQuit = new Button(2, 0, 0, 200, 20, "Save and quit to title");
bQuitAndSaveLocally = new Button(3, 0, 0, 200, 20, "Copy and quit map");
// bThirdPerson = new Button(5, "Toggle 3:rd person view");
} }
buttons.push_back(bContinue); buttons.push_back(bContinue);
buttons.push_back(bQuit); buttons.push_back(bQuit);
buttons.push_back(bOptions);
// bSound.updateImage(&minecraft->options); // bSound.updateImage(&minecraft->options);
bThirdPerson.updateImage(&minecraft->options); bThirdPerson.updateImage(&minecraft->options);
bHideGui.updateImage(&minecraft->options); bHideGui.updateImage(&minecraft->options);
// buttons.push_back(&bSound); // buttons.push_back(&bSound);
buttons.push_back(&bThirdPerson); buttons.push_back(&bThirdPerson);
//buttons.push_back(&bHideGui); //buttons.push_back(&bHideGui);
// If Back wasn't pressed, set up additional items (more than Quit to menu // If Back wasn't pressed, set up additional items (more than Quit to menu
// and Back to game) here // and Back to game) here
#if !defined(APPLE_DEMO_PROMOTION) && !defined(RPI) #if !defined(APPLE_DEMO_PROMOTION) && !defined(RPI)
if (true || !wasBackPaused) { if (true || !wasBackPaused) {
if (minecraft->raknetInstance) { if (minecraft->raknetInstance) {
if (minecraft->raknetInstance->isServer()) { if (minecraft->raknetInstance->isServer()) {
@@ -78,14 +92,14 @@ void PauseScreen::init() {
buttons.push_back(bServerVisibility); buttons.push_back(bServerVisibility);
} }
else { else {
#if !defined(DEMO_MODE) #if !defined(DEMO_MODE)
buttons.push_back(bQuitAndSaveLocally); buttons.push_back(bQuitAndSaveLocally);
#endif #endif
} }
} }
} }
#endif #endif
// buttons.push_back(bThirdPerson); // buttons.push_back(bThirdPerson);
for (unsigned int i = 0; i < buttons.size(); ++i) { for (unsigned int i = 0; i < buttons.size(); ++i) {
// if (buttons[i] == &bSound) continue; // if (buttons[i] == &bSound) continue;
@@ -96,24 +110,48 @@ void PauseScreen::init() {
} }
void PauseScreen::setupPositions() { void PauseScreen::setupPositions() {
saveStep = 0; saveStep = 0;
int yBase = 16; int yBase = 16;
if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
yBase = 50;
bContinue->width = bQuit->width = /*bThirdPerson->w =*/ 160; bContinue->width = bOptions->width = bQuit->width = /*bThirdPerson->w =*/ 200;
bQuitAndSaveLocally->width = bServerVisibility->width = 160; bQuitAndSaveLocally->width = bServerVisibility->width = 200;
bContinue->x = (width - bContinue->width) / 2; bContinue->x = (width - bContinue->width) / 2;
bContinue->y = yBase + 32 * 1; bContinue->y = yBase + 24 * 1;
bQuit->x = (width - bQuit->width) / 2; bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
bQuit->y = yBase + 32 * 2; bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 24 * 2;
bOptions->x = (width - bOptions->width) / 2;
bOptions->y = yBase + 24 * 3 + 24;
bQuit->x = (width - bQuit->width) / 2;
bQuit->y = yBase + 24 * 4 + 24;
} else {
bContinue->width = bOptions->width = bQuit->width = /*bThirdPerson->w =*/ 160;
bQuitAndSaveLocally->width = bServerVisibility->width = 160;
bContinue->x = (width - bContinue->width) / 2;
bContinue->y = yBase + 32 * 1;
bOptions->x = (width - bOptions->width) / 2;
bOptions->y = yBase + 32 * 2;
bQuit->x = (width - bQuit->width) / 2;
bQuit->y = yBase + 32 * 3;
#if APPLE_DEMO_PROMOTION #if APPLE_DEMO_PROMOTION
bQuit->y += 16; bQuit->y += 16;
#endif #endif
bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2; bQuitAndSaveLocally->x = bServerVisibility->x = (width - bQuitAndSaveLocally->width) / 2;
bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 32 * 3; bQuitAndSaveLocally->y = bServerVisibility->y = yBase + 32 * 4;
}
// bSound.y = bThirdPerson.y = 8; // bSound.y = bThirdPerson.y = 8;
// bSound.x = 4; // bSound.x = 4;
@@ -151,13 +189,15 @@ void PauseScreen::buttonClicked(Button* button) {
minecraft->setScreen(NULL); minecraft->setScreen(NULL);
//minecraft->grabMouse(); //minecraft->grabMouse();
} }
if (button->id == bQuit->id) { if (button->id == bQuit->id) {
minecraft->leaveGame(); minecraft->leaveGame();
} }
if (button->id == bQuitAndSaveLocally->id) { if (button->id == bQuitAndSaveLocally->id) {
minecraft->leaveGame(true); minecraft->leaveGame(true);
} }
if (button->id == bOptions->id) {
minecraft->setScreen(new OptionsScreen());
}
if (button->id == bServerVisibility->id) { if (button->id == bServerVisibility->id) {
if (minecraft->raknetInstance && minecraft->netCallback && minecraft->raknetInstance->isServer()) { if (minecraft->raknetInstance && minecraft->netCallback && minecraft->raknetInstance->isServer()) {
ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) minecraft->netCallback; ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) minecraft->netCallback;
@@ -185,5 +225,5 @@ void PauseScreen::updateServerVisibilityText()
ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) minecraft->netCallback; ServerSideNetworkHandler* ss = (ServerSideNetworkHandler*) minecraft->netCallback;
bServerVisibility->msg = ss->allowsIncomingConnections()? bServerVisibility->msg = ss->allowsIncomingConnections()?
"Server is visible" "Server is visible"
: "Server is invisible"; : "Server is invisible";
} }

View File

@@ -33,7 +33,9 @@ private:
Button* bQuit; Button* bQuit;
Button* bQuitAndSaveLocally; Button* bQuitAndSaveLocally;
Button* bServerVisibility; Button* bServerVisibility;
// Button* bThirdPerson; Button* bOptions;
// Button* bThirdPerson;
// OptionButton bSound; // OptionButton bSound;
OptionButton bThirdPerson; OptionButton bThirdPerson;

View File

@@ -11,6 +11,8 @@ public:
void render(int xm, int ym, float a); void render(int xm, int ym, float a);
bool isInGameScreen(); bool isInGameScreen();
virtual void keyPressed(int eventKey) {}
void tick(); void tick();
private: private:
int ticks; int ticks;

View File

@@ -4,6 +4,7 @@
#include "JoinGameScreen.h" #include "JoinGameScreen.h"
#include "PauseScreen.h" #include "PauseScreen.h"
#include "RenameMPLevelScreen.h" #include "RenameMPLevelScreen.h"
#include "ConsoleScreen.h"
#include "IngameBlockSelectionScreen.h" #include "IngameBlockSelectionScreen.h"
#include "JoinByIPScreen.h" #include "JoinByIPScreen.h"
#include "touch/TouchStartMenuScreen.h" #include "touch/TouchStartMenuScreen.h"
@@ -13,13 +14,14 @@
#include "../../Minecraft.h" #include "../../Minecraft.h"
#include <client/gui/screens/UsernameScreen.h> #include "UsernameScreen.h"
Screen* ScreenChooser::createScreen( ScreenId id ) Screen* ScreenChooser::createScreen( ScreenId id )
{ {
Screen* screen = NULL; Screen* screen = NULL;
if (_mc->useTouchscreen()) { // :sob:
if (_mc->options.getIntValue(OPTIONS_MENU_STYLE) == 0) {
switch (id) { switch (id) {
case SCREEN_STARTMENU: screen = new Touch::StartMenuScreen(); break; case SCREEN_STARTMENU: screen = new Touch::StartMenuScreen(); break;
case SCREEN_SELECTWORLD: screen = new Touch::SelectWorldScreen();break; case SCREEN_SELECTWORLD: screen = new Touch::SelectWorldScreen();break;
@@ -28,6 +30,7 @@ Screen* ScreenChooser::createScreen( ScreenId id )
case SCREEN_PAUSEPREV: screen = new PauseScreen(true); break; case SCREEN_PAUSEPREV: screen = new PauseScreen(true); break;
case SCREEN_BLOCKSELECTION: screen = new Touch::IngameBlockSelectionScreen(); break; case SCREEN_BLOCKSELECTION: screen = new Touch::IngameBlockSelectionScreen(); break;
case SCREEN_JOINBYIP: screen = new JoinByIPScreen(); break; case SCREEN_JOINBYIP: screen = new JoinByIPScreen(); break;
case SCREEN_CONSOLE: screen = new ConsoleScreen(); break;
case SCREEN_NONE: case SCREEN_NONE:
default: default:
// Do nothing // Do nothing
@@ -42,7 +45,7 @@ Screen* ScreenChooser::createScreen( ScreenId id )
case SCREEN_PAUSEPREV: screen = new PauseScreen(true); break; case SCREEN_PAUSEPREV: screen = new PauseScreen(true); break;
case SCREEN_BLOCKSELECTION: screen = new IngameBlockSelectionScreen(); break; case SCREEN_BLOCKSELECTION: screen = new IngameBlockSelectionScreen(); break;
case SCREEN_JOINBYIP: screen = new JoinByIPScreen(); break; case SCREEN_JOINBYIP: screen = new JoinByIPScreen(); break;
case SCREEN_CONSOLE: screen = new ConsoleScreen(); break;
case SCREEN_NONE: case SCREEN_NONE:
default: default:
// Do nothing // Do nothing

View File

@@ -9,7 +9,8 @@ enum ScreenId {
SCREEN_PAUSEPREV, SCREEN_PAUSEPREV,
SCREEN_SELECTWORLD, SCREEN_SELECTWORLD,
SCREEN_BLOCKSELECTION, SCREEN_BLOCKSELECTION,
SCREEN_JOINBYIP SCREEN_JOINBYIP,
SCREEN_CONSOLE
}; };
class Screen; class Screen;

View File

@@ -56,7 +56,7 @@ void SimpleChooseLevelScreen::init()
def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height)); def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height));
bBack->setImageDef(def, true); bBack->setImageDef(def, true);
} }
if (minecraft->useTouchscreen()) { if (/* minecraft->useTouchscreen() */ true) {
bGamemode = new Touch::TButton(1, "Survival mode"); bGamemode = new Touch::TButton(1, "Survival mode");
bCheats = new Touch::TButton(4, "Cheats: Off"); bCheats = new Touch::TButton(4, "Cheats: Off");
bCreate = new Touch::TButton(3, "Create"); bCreate = new Touch::TButton(3, "Create");

View File

@@ -23,49 +23,62 @@
// Some kind of default settings, might be overridden in ::init // Some kind of default settings, might be overridden in ::init
StartMenuScreen::StartMenuScreen() StartMenuScreen::StartMenuScreen()
: bHost( 2, 0, 0, 160, 24, "Start Game"),
bJoin( 3, 0, 0, 160, 24, "Join Game"),
bOptions( 4, 0, 0, 160, 24, "Options"),
bQuit( 5, "")
{ {
} }
StartMenuScreen::~StartMenuScreen() StartMenuScreen::~StartMenuScreen()
{ {
delete bHost;
delete bJoin;
delete bOptions;
delete bQuit;
} }
void StartMenuScreen::init() void StartMenuScreen::init()
{ {
bJoin.active = bHost.active = bOptions.active = true; if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
bHost = new Button( 2, 0, 0, 200, 20, "Singleplayer");
bJoin = new Button( 3, 0, 0, 200, 20, "Multiplayer");
bOptions = new Button( 4, 0, 0, 200, 20, "Options...");
bQuit = new Button( 5, 0, 0, 200, 20, "Ouit Game");
} else {
bHost = new Button( 2, 0, 0, 160, 24, "Start Game");
bJoin = new Button( 3, 0, 0, 160, 24, "Join Game");
bOptions = new Button( 4, 0, 0, 160, 24, "Options");
bQuit = new Button( 5, 0, 0, 160, 24, "Ouit Game");
}
bJoin->active = bHost->active = bOptions->active = true;
if (minecraft->options.getStringValue(OPTIONS_USERNAME).empty()) { if (minecraft->options.getStringValue(OPTIONS_USERNAME).empty()) {
return; // tick() will redirect to UsernameScreen return; // tick() will redirect to UsernameScreen
} }
buttons.push_back(&bHost); buttons.push_back(bHost);
buttons.push_back(&bJoin); buttons.push_back(bJoin);
//buttons.push_back(&bTest); //buttons.push_back(&bTest);
buttons.push_back(bQuit);
tabButtons.push_back(&bHost); tabButtons.push_back(bHost);
tabButtons.push_back(&bJoin); tabButtons.push_back(bJoin);
tabButtons.push_back(bQuit);
#ifndef RPI #ifndef RPI
buttons.push_back(&bOptions); buttons.push_back(bOptions);
tabButtons.push_back(&bOptions); tabButtons.push_back(bOptions);
#endif #endif
// add quit button (top right X icon) match OptionsScreen style //// add quit button (top right X icon) match OptionsScreen style
{ //{
ImageDef def; // ImageDef def;
def.name = "gui/touchgui.png"; // def.name = "gui/touchgui.png";
def.width = 34; // def.width = 34;
def.height = 26; // def.height = 26;
def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height)); // def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height));
bQuit.setImageDef(def, true); // bQuit.setImageDef(def, true);
bQuit.scaleWhenPressed = false; // bQuit.scaleWhenPressed = false;
buttons.push_back(&bQuit); // buttons.push_back(&bQuit);
// don't include in tab navigation // // don't include in tab navigation
} //}
copyright = "\xffMojang AB";//. Do not distribute!"; copyright = "\xffMojang AB";//. Do not distribute!";
@@ -93,20 +106,30 @@ void StartMenuScreen::init()
} }
void StartMenuScreen::setupPositions() { void StartMenuScreen::setupPositions() {
int yBase = height / 2; if (minecraft->options.getIntValue(OPTIONS_MENU_STYLE) == 2){
int yBase = (height / 2) - 20;
bHost.y = yBase; bHost->y = yBase;
bJoin.y = bHost.y + 24 + 4; bJoin->y = bHost->y + 24;
bOptions.y = bJoin.y + 24 + 4; bOptions->y = bJoin->y + 24;
bQuit->y = bOptions->y + 24;
} else {
int yBase = height / 2;
bHost->y = yBase;
bJoin->y = bHost->y + 24 + 4;
bOptions->y = bJoin->y + 24 + 4;
bQuit->y = bOptions->y + 24 + 4;
}
// Center buttons // Center buttons
bHost.x = (width - bHost.width) / 2; bHost->x = (width - bHost->width) / 2;
bJoin.x = (width - bJoin.width) / 2; bJoin->x = (width - bJoin->width) / 2;
bOptions.x = (width - bOptions.width) / 2; bOptions->x = (width - bOptions->width) / 2;
bQuit->x = (width - bQuit->width) / 2;
// position quit icon at top-right (use image-defined size) //// position quit icon at top-right (use image-defined size)
bQuit.x = width - bQuit.width; //bQuit.x = width - bQuit.width;
bQuit.y = 0; //bQuit.y = 0;
} }
void StartMenuScreen::tick() { void StartMenuScreen::tick() {
@@ -114,7 +137,7 @@ void StartMenuScreen::tick() {
void StartMenuScreen::buttonClicked(Button* button) { void StartMenuScreen::buttonClicked(Button* button) {
if (button->id == bHost.id) if (button->id == bHost->id)
{ {
#if defined(DEMO_MODE) || defined(APPLE_DEMO_PROMOTION) #if defined(DEMO_MODE) || defined(APPLE_DEMO_PROMOTION)
minecraft->setScreen( new SimpleChooseLevelScreen("_DemoLevel") ); minecraft->setScreen( new SimpleChooseLevelScreen("_DemoLevel") );
@@ -122,16 +145,16 @@ void StartMenuScreen::buttonClicked(Button* button) {
minecraft->screenChooser.setScreen(SCREEN_SELECTWORLD); minecraft->screenChooser.setScreen(SCREEN_SELECTWORLD);
#endif #endif
} }
if (button->id == bJoin.id) if (button->id == bJoin->id)
{ {
minecraft->locateMultiplayer(); minecraft->locateMultiplayer();
minecraft->screenChooser.setScreen(SCREEN_JOINGAME); minecraft->screenChooser.setScreen(SCREEN_JOINGAME);
} }
if (button->id == bOptions.id) if (button->id == bOptions->id)
{ {
minecraft->setScreen(new OptionsScreen()); minecraft->setScreen(new OptionsScreen());
} }
if (button == &bQuit) if (button->id == bQuit->id)
{ {
minecraft->quit(); minecraft->quit();
} }

View File

@@ -23,10 +23,10 @@ public:
bool isInGameScreen(); bool isInGameScreen();
private: private:
Button bHost; Button* bHost;
Button bJoin; Button* bJoin;
Button bOptions; Button* bOptions;
ImageButton bQuit; // X button in top-right corner Button* bQuit;
std::string copyright; std::string copyright;
int copyrightPosX; int copyrightPosX;

View File

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

View File

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

View File

@@ -16,7 +16,12 @@
#include "../../../../world/level/Level.h" #include "../../../../world/level/Level.h"
#include "../../../../world/item/DyePowderItem.h" #include "../../../../world/item/DyePowderItem.h"
#include "../../../../world/item/crafting/Recipe.h" #include "../../../../world/item/crafting/Recipe.h"
#include "network/RakNetInstance.h"
#include "network/packet/WantCreatePacket.h"
#include "platform/input/Keyboard.h" #include "platform/input/Keyboard.h"
#include <cstdint>
#include <iostream>
#include <string>
static NinePatchLayer* guiPaneFrame = NULL; static NinePatchLayer* guiPaneFrame = NULL;
@@ -41,7 +46,7 @@ public:
//fill(x+1, y+1, x+w-1, y+h-1, 0xff999999); //fill(x+1, y+1, x+w-1, y+h-1, 0xff999999);
bool hovered = active && (minecraft->useTouchscreen()? bool hovered = active && (minecraft->useTouchscreen()?
(_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false); (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
if (hovered || *selectedPtr == this) if (hovered || *selectedPtr == this)
statePressed->draw(Tesselator::instance, (float)x, (float)y); statePressed->draw(Tesselator::instance, (float)x, (float)y);
@@ -193,6 +198,26 @@ void PaneCraftingScreen::setupPositions() {
} }
void PaneCraftingScreen::tick() { 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(); if (pane) pane->tick();
} }
@@ -439,25 +464,29 @@ void PaneCraftingScreen::craftSelectedItem()
ItemInstance resultItem = currentItem->item; ItemInstance resultItem = currentItem->item;
if (minecraft->player) { 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 ... // Remove all items required for the recipe and ...
for (unsigned int i = 0; i < currentItem->neededItems.size(); ++i) { for (unsigned int i = 0; i < currentItem->neededItems.size(); ++i) {
CItem::ReqItem& req = currentItem->neededItems[i]; CItem::ReqItem& req = currentItem->neededItems[i];
// If the recipe allows any aux-value as ingredients, first deplete // If the recipe allows any aux-value as ingredients, first deplete
// aux == 0 from inventory. Since I'm not sure if this always is // aux == 0 from inventory. Since I'm not sure if this always is
// correct, let's only do it for ingredient sandstone for now. // correct, let's only do it for ingredient sandstone for now.
ItemInstance toRemove = req.item; ItemInstance toRemove = req.item;
if (Tile::sandStone->id == req.item.id if (Tile::sandStone->id == req.item.id
&& Recipe::ANY_AUX_VALUE == req.item.getAuxValue()) { && Recipe::ANY_AUX_VALUE == req.item.getAuxValue()) {
toRemove.setAuxValue(0); toRemove.setAuxValue(0);
toRemove.count = minecraft->player->inventory->removeResource(toRemove, true); toRemove.count = minecraft->player->inventory->removeResource(toRemove, true);
toRemove.setAuxValue(Recipe::ANY_AUX_VALUE); toRemove.setAuxValue(Recipe::ANY_AUX_VALUE);
} }
if (toRemove.count > 0) { if (toRemove.count > 0) {
minecraft->player->inventory->removeResource(toRemove); minecraft->player->inventory->removeResource(toRemove);
} }
} }
// ... add the new one! (in this order, to fill empty slots better) // ... add the new one! (in this order, to fill empty slots better)
// if it doesn't fit, throw it on the ground! // if it doesn't fit, throw it on the ground!
@@ -547,7 +576,7 @@ void CraftButton::renderBg(Minecraft* minecraft, int xm, int ym) {
//fill(x+1, y+1, x+w-1, y+h-1, 0xff999999); //fill(x+1, y+1, x+w-1, y+h-1, 0xff999999);
bool hovered = active && (minecraft->useTouchscreen()? bool hovered = active && (minecraft->useTouchscreen()?
(_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : false); (_currentlyDown && xm >= x && ym >= y && xm < x + width && ym < y + height) : isInside(xm, ym));
if (hovered || selected) if (hovered || selected)
bgSelected->draw(Tesselator::instance, (float)x, (float)y); bgSelected->draw(Tesselator::instance, (float)x, (float)y);

View File

@@ -1,291 +1,293 @@
#include "TouchIngameBlockSelectionScreen.h" #include "TouchIngameBlockSelectionScreen.h"
#include "../crafting/WorkbenchScreen.h" #include "../crafting/WorkbenchScreen.h"
#include "../../Screen.h" #include "../../Screen.h"
#include "../../components/ImageButton.h" #include "../../components/ImageButton.h"
#include "../../components/InventoryPane.h" #include "../../components/InventoryPane.h"
#include "../../../gamemode/GameMode.h" #include "../../../gamemode/GameMode.h"
#include "../../../renderer/TileRenderer.h" #include "../../../renderer/TileRenderer.h"
#include "../../../player/LocalPlayer.h" #include "../../../player/LocalPlayer.h"
#include "../../../renderer/gles.h" #include "../../../renderer/gles.h"
#include "../../../renderer/entity/ItemRenderer.h" #include "../../../renderer/entity/ItemRenderer.h"
#include "../../../renderer/Tesselator.h" #include "../../../renderer/Tesselator.h"
#include "../../../renderer/Textures.h" #include "../../../renderer/Textures.h"
#include "../../../Minecraft.h" #include "../../../Minecraft.h"
#include "../../../sound/SoundEngine.h" #include "../../../sound/SoundEngine.h"
#include "../../../../world/entity/player/Inventory.h" #include "../../../../world/entity/player/Inventory.h"
#include "../../../../platform/input/Mouse.h" #include "../../../../platform/input/Mouse.h"
#include "../../../../util/Mth.h" #include "../../../../util/Mth.h"
#include "../../../../world/item/ItemInstance.h" #include "../../../../world/item/ItemInstance.h"
#include "../../../../world/entity/player/Player.h" #include "../../../../world/entity/player/Player.h"
#include "../../../../world/item/crafting/Recipe.h" #include "../../../../world/item/crafting/Recipe.h"
#include "../../../player/input/touchscreen/TouchAreaModel.h" #include "../../../player/input/touchscreen/TouchAreaModel.h"
#include "../ArmorScreen.h" #include "../ArmorScreen.h"
namespace Touch { namespace Touch {
#if defined(__APPLE__) #if defined(__APPLE__)
static const std::string demoVersionString("Not available in the Lite version"); static const std::string demoVersionString("Not available in the Lite version");
#else #else
static const std::string demoVersionString("Not available in the demo version"); static const std::string demoVersionString("Not available in the demo version");
#endif #endif
#ifdef __APPLE__ #ifdef __APPLE__
static const float BorderPixels = 4; static const float BorderPixels = 4;
#ifdef DEMO_MODE #ifdef DEMO_MODE
static const float BlockPixels = 22; static const float BlockPixels = 22;
#else #else
static const float BlockPixels = 22; static const float BlockPixels = 22;
#endif #endif
#else #else
static const float BorderPixels = 4; static const float BorderPixels = 4;
static const float BlockPixels = 24; static const float BlockPixels = 24;
#endif #endif
static const int ItemSize = (int)(BlockPixels + 2*BorderPixels); static const int ItemSize = (int)(BlockPixels + 2*BorderPixels);
static const int Bx = 10; // Border Frame width static const int Bx = 10; // Border Frame width
static const int By = 6; // Border Frame height static const int By = 6; // Border Frame height
// //
// Block selection screen // Block selection screen
// //
IngameBlockSelectionScreen::IngameBlockSelectionScreen() IngameBlockSelectionScreen::IngameBlockSelectionScreen()
: selectedItem(0), : selectedItem(0),
_blockList(NULL), _blockList(NULL),
_pendingClose(false), _pendingClose(false),
bArmor (4, "Armor"), bArmor (4, "Armor"),
bDone (3, ""), bDone (3, ""),
//bDone (3, "Done"), //bDone (3, "Done"),
bMenu (2, "Menu"), bMenu (2, "Menu"),
bCraft (1, "Craft"), bCraft (1, "Craft"),
bHeader (0, "Select blocks") bHeader (0, "Select blocks")
{ {
} }
IngameBlockSelectionScreen::~IngameBlockSelectionScreen() IngameBlockSelectionScreen::~IngameBlockSelectionScreen()
{ {
delete _blockList; delete _blockList;
} }
void IngameBlockSelectionScreen::init() void IngameBlockSelectionScreen::init()
{ {
Inventory* inventory = minecraft->player->inventory; Inventory* inventory = minecraft->player->inventory;
//const int itemWidth = 2 * BorderPixels + //const int itemWidth = 2 * BorderPixels +
int maxWidth = width - Bx - Bx; int maxWidth = width - Bx - Bx;
InventoryColumns = maxWidth / ItemSize; InventoryColumns = maxWidth / ItemSize;
const int realWidth = InventoryColumns * ItemSize; const int realWidth = InventoryColumns * ItemSize;
const int realBx = (width - realWidth) / 2; const int realBx = (width - realWidth) / 2;
IntRectangle rect(realBx, IntRectangle rect(realBx,
#ifdef __APPLE__ #ifdef __APPLE__
24 + By - ((width==240)?1:0), realWidth, ((width==240)?1:0) + height-By-By-20-24); 24 + By - ((width==240)?1:0), realWidth, ((width==240)?1:0) + height-By-By-20-24);
#else #else
24 + By, realWidth, height-By-By-20-24); 24 + By, realWidth, height-By-By-20-24);
#endif #endif
_blockList = new InventoryPane(this, minecraft, rect, width, BorderPixels, inventory->getContainerSize() - Inventory::MAX_SELECTION_SIZE, ItemSize, (int)BorderPixels); _blockList = new InventoryPane(this, minecraft, rect, width, BorderPixels, inventory->getContainerSize() - Inventory::MAX_SELECTION_SIZE, ItemSize, (int)BorderPixels);
_blockList->fillMarginX = realBx; _blockList->fillMarginX = realBx;
//for (int i = 0; i < inventory->getContainerSize(); ++i) //for (int i = 0; i < inventory->getContainerSize(); ++i)
//LOGI("> %d - %s\n", i, inventory->getItem(i)? inventory->getItem(i)->getDescriptionId().c_str() : "<-->\n"); //LOGI("> %d - %s\n", i, inventory->getItem(i)? inventory->getItem(i)->getDescriptionId().c_str() : "<-->\n");
InventorySize = inventory->getContainerSize(); // Grid indices are 0..N-1 for main inventory only; slots 0..MAX_SELECTION_SIZE-1 are hotbar links.
InventoryRows = 1 + (InventorySize-1) / InventoryColumns; InventorySize = inventory->getContainerSize() - Inventory::MAX_SELECTION_SIZE;
InventoryRows = 1 + (InventorySize-1) / InventoryColumns;
//
// Buttons //
// // Buttons
ImageDef def; //
def.name = "gui/spritesheet.png"; ImageDef def;
def.x = 0; def.name = "gui/spritesheet.png";
def.y = 1; def.x = 0;
def.width = def.height = 18; def.y = 1;
def.setSrc(IntRectangle(60, 0, 18, 18)); def.width = def.height = 18;
bDone.setImageDef(def, true); def.setSrc(IntRectangle(60, 0, 18, 18));
bDone.width = bDone.height = 19; bDone.setImageDef(def, true);
bDone.width = bDone.height = 19;
bDone.scaleWhenPressed = false;
bDone.scaleWhenPressed = false;
buttons.push_back(&bHeader);
buttons.push_back(&bDone); buttons.push_back(&bHeader);
if (!minecraft->isCreativeMode()) { buttons.push_back(&bDone);
buttons.push_back(&bCraft); if (!minecraft->isCreativeMode()) {
buttons.push_back(&bArmor); buttons.push_back(&bCraft);
} buttons.push_back(&bArmor);
} }
}
void IngameBlockSelectionScreen::setupPositions() {
bHeader.y = bDone.y = bCraft.y = 0; void IngameBlockSelectionScreen::setupPositions() {
bDone.x = width - bDone.width; bHeader.y = bDone.y = bCraft.y = 0;
bCraft.x = 0;//width - bDone.w - bCraft.w; bDone.x = width - bDone.width;
bCraft.width = bArmor.width = 48; bCraft.x = 0;//width - bDone.w - bCraft.w;
bArmor.x = bCraft.width; bCraft.width = bArmor.width = 48;
bArmor.x = bCraft.width;
if (minecraft->isCreativeMode()) {
bHeader.x = 0; if (minecraft->isCreativeMode()) {
bHeader.width = width;// - bDone.w; bHeader.x = 0;
bHeader.xText = width/2; // Center of the screen bHeader.width = width;// - bDone.w;
} else { bHeader.xText = width/2; // Center of the screen
bHeader.x = bCraft.width + bArmor.width; } else {
bHeader.width = width - bCraft.width - bArmor.width;// - bDone.w; bHeader.x = bCraft.width + bArmor.width;
bHeader.xText = bHeader.x + (bHeader.width - bDone.width) /2; bHeader.width = width - bCraft.width - bArmor.width;// - bDone.w;
} bHeader.xText = bHeader.x + (bHeader.width - bDone.width) /2;
}
clippingArea.x = 0;
clippingArea.w = minecraft->width; clippingArea.x = 0;
clippingArea.y = 0; clippingArea.w = minecraft->width;
clippingArea.h = (int)(Gui::GuiScale * 24); clippingArea.y = 0;
} clippingArea.h = (int)(Gui::GuiScale * 24);
}
void IngameBlockSelectionScreen::removed()
{ void IngameBlockSelectionScreen::removed()
minecraft->gui.inventoryUpdated(); {
} minecraft->gui.inventoryUpdated();
}
int IngameBlockSelectionScreen::getSlotPosX(int slotX) {
// @todo: Number of columns int IngameBlockSelectionScreen::getSlotPosX(int slotX) {
return width / 2 - InventoryColumns * 10 + slotX * 20 + 2; // @todo: Number of columns
} return width / 2 - InventoryColumns * 10 + slotX * 20 + 2;
}
int IngameBlockSelectionScreen::getSlotPosY(int slotY) {
return height - 16 - 3 - 22 * 2 - 22 * slotY; int IngameBlockSelectionScreen::getSlotPosY(int slotY) {
} return height - 16 - 3 - 22 * 2 - 22 * slotY;
}
int IngameBlockSelectionScreen::getSlotHeight() {
// same as non-touch implementation int IngameBlockSelectionScreen::getSlotHeight() {
return 22; // same as non-touch implementation
} return 22;
}
void IngameBlockSelectionScreen::mouseClicked(int x, int y, int buttonNum) {
_pendingClose = _blockList->_clickArea->isInside((float)x, (float)y); void IngameBlockSelectionScreen::mouseClicked(int x, int y, int buttonNum) {
if (!_pendingClose) _pendingClose = _blockList->_clickArea->isInside((float)x, (float)y);
super::mouseClicked(x, y, buttonNum); if (!_pendingClose)
} super::mouseClicked(x, y, buttonNum);
}
void IngameBlockSelectionScreen::mouseReleased(int x, int y, int buttonNum) {
if (_pendingClose && _blockList->_clickArea->isInside((float)x, (float)y)) void IngameBlockSelectionScreen::mouseReleased(int x, int y, int buttonNum) {
minecraft->setScreen(NULL); if (_pendingClose && _blockList->_clickArea->isInside((float)x, (float)y))
else minecraft->setScreen(NULL);
super::mouseReleased(x, y, buttonNum); else
} super::mouseReleased(x, y, buttonNum);
}
void IngameBlockSelectionScreen::mouseWheel(int dx, int dy, int xm, int ym)
{ void IngameBlockSelectionScreen::mouseWheel(int dx, int dy, int xm, int ym)
if (dy == 0) return; {
if (_blockList) { if (dy == 0) return;
float amount = -dy * getSlotHeight(); if (_blockList) {
_blockList->scrollBy(0, amount); float amount = -dy * getSlotHeight();
} _blockList->scrollBy(0, amount);
int cols = InventoryColumns; }
int maxIndex = InventorySize - 1; int cols = InventoryColumns;
int idx = selectedItem; int maxIndex = InventorySize - 1;
if (dy > 0) { int idx = selectedItem;
if (idx >= cols) idx -= cols; if (dy > 0) {
} else { if (idx >= cols) idx -= cols;
if (idx + cols <= maxIndex) idx += cols; } else {
} if (idx + cols <= maxIndex) idx += cols;
selectedItem = idx; }
} selectedItem = idx;
}
bool IngameBlockSelectionScreen::addItem(const InventoryPane* pane, int itemId)
{ bool IngameBlockSelectionScreen::addItem(const InventoryPane* pane, int itemId)
Inventory* inventory = minecraft->player->inventory; {
itemId += Inventory::MAX_SELECTION_SIZE; Inventory* inventory = minecraft->player->inventory;
itemId += Inventory::MAX_SELECTION_SIZE;
if (!inventory->getItem(itemId))
return false; if (!inventory->getItem(itemId))
return false;
inventory->moveToSelectionSlot(0, itemId, true);
inventory->moveToSelectionSlot(0, itemId, true);
inventory->selectSlot(0);
#ifdef __APPLE__ inventory->selectSlot(0);
minecraft->soundEngine->playUI("random.pop", 0.3f, 0.3f);//1.0f + 0.2f*(Mth::random()-Mth::random())); #ifdef __APPLE__
#else minecraft->soundEngine->playUI("random.pop", 0.3f, 0.3f);//1.0f + 0.2f*(Mth::random()-Mth::random()));
minecraft->soundEngine->playUI("random.pop2", 1.0f, 0.3f);//1.0f + 0.2f*(Mth::random()-Mth::random())); #else
#endif minecraft->soundEngine->playUI("random.pop2", 1.0f, 0.3f);//1.0f + 0.2f*(Mth::random()-Mth::random()));
#endif
// Flash the selected gui item
minecraft->gui.flashSlot(inventory->selected); // Flash the selected gui item
return true; minecraft->gui.flashSlot(inventory->selected);
} return true;
}
void IngameBlockSelectionScreen::tick()
{ void IngameBlockSelectionScreen::tick()
_blockList->tick(); {
super::tick(); _blockList->tick();
} super::tick();
}
void IngameBlockSelectionScreen::render( int xm, int ym, float a )
{ void IngameBlockSelectionScreen::render( int xm, int ym, float a )
glDisable2(GL_DEPTH_TEST); {
glEnable2(GL_BLEND); glDisable2(GL_DEPTH_TEST);
glEnable2(GL_BLEND);
Screen::render(xm, ym, a);
_blockList->render(xm, ym, a); Screen::render(xm, ym, a);
_blockList->render(xm, ym, a);
// render frame
IntRectangle& bbox = _blockList->rect; // render frame
Tesselator::instance.colorABGR(0xffffffff); IntRectangle& bbox = _blockList->rect;
minecraft->textures->loadAndBindTexture("gui/itemframe.png"); Tesselator::instance.colorABGR(0xffffffff);
glEnable2(GL_BLEND); minecraft->textures->loadAndBindTexture("gui/itemframe.png");
glColor4f2(1, 1, 1, 1); glEnable2(GL_BLEND);
glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4f2(1, 1, 1, 1);
blit(0, bbox.y-By, 0, 0, width, bbox.h+By+By, 215, 256); // why bbox.h + 1*B? glBlendFunc2(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable2(GL_BLEND); blit(0, bbox.y-By, 0, 0, width, bbox.h+By+By, 215, 256); // why bbox.h + 1*B?
glDisable2(GL_BLEND);
glEnable2(GL_DEPTH_TEST);
} glEnable2(GL_DEPTH_TEST);
}
void IngameBlockSelectionScreen::renderDemoOverlay() {
#ifdef DEMO_MODE void IngameBlockSelectionScreen::renderDemoOverlay() {
fill( getSlotPosX(0) - 3, getSlotPosY(1) - 3, #ifdef DEMO_MODE
getSlotPosX(9) - 3, getSlotPosY(-1) - 3, 0xa0 << 24); fill( getSlotPosX(0) - 3, getSlotPosY(1) - 3,
getSlotPosX(9) - 3, getSlotPosY(-1) - 3, 0xa0 << 24);
const int centerX = (getSlotPosX(4) + getSlotPosX(5)) / 2;
const int centerY = (getSlotPosY(0) + getSlotPosY(1)) / 2 + 5; const int centerX = (getSlotPosX(4) + getSlotPosX(5)) / 2;
drawCenteredString(minecraft->font, demoVersionString, centerX, centerY, 0xffffffff); const int centerY = (getSlotPosY(0) + getSlotPosY(1)) / 2 + 5;
#endif /*DEMO_MODE*/ drawCenteredString(minecraft->font, demoVersionString, centerX, centerY, 0xffffffff);
} #endif /*DEMO_MODE*/
}
void IngameBlockSelectionScreen::buttonClicked(Button* button) {
if (button->id == bDone.id) void IngameBlockSelectionScreen::buttonClicked(Button* button) {
minecraft->setScreen(NULL); if (button->id == bDone.id)
minecraft->setScreen(NULL);
if (button->id == bMenu.id)
minecraft->screenChooser.setScreen(SCREEN_PAUSE); if (button->id == bMenu.id)
minecraft->screenChooser.setScreen(SCREEN_PAUSE);
if (button->id == bCraft.id)
minecraft->setScreen(new WorkbenchScreen(Recipe::SIZE_2X2)); if (button->id == bCraft.id)
minecraft->setScreen(new WorkbenchScreen(Recipe::SIZE_2X2));
if (button == &bArmor)
minecraft->setScreen(new ArmorScreen()); if (button == &bArmor)
} minecraft->setScreen(new ArmorScreen());
}
bool IngameBlockSelectionScreen::isAllowed( int slot )
{ bool IngameBlockSelectionScreen::isAllowed( int slot )
if (slot < 0 || slot >= minecraft->player->inventory->getContainerSize()) {
return false; const int gridCount = minecraft->player->inventory->getContainerSize() - Inventory::MAX_SELECTION_SIZE;
if (slot < 0 || slot >= gridCount)
#ifdef DEMO_MODE return false;
if (slot >= (minecraft->isCreativeMode()? 28 : 27)) return false;
#endif #ifdef DEMO_MODE
return true; if (slot >= (minecraft->isCreativeMode()? 28 : 27)) return false;
} #endif
return true;
bool IngameBlockSelectionScreen::hasClippingArea( IntRectangle& out ) }
{
out = clippingArea; bool IngameBlockSelectionScreen::hasClippingArea( IntRectangle& out )
return true; {
} out = clippingArea;
return true;
std::vector<const ItemInstance*> IngameBlockSelectionScreen::getItems( const InventoryPane* forPane ) }
{
std::vector<const ItemInstance*> out; std::vector<const ItemInstance*> IngameBlockSelectionScreen::getItems( const InventoryPane* forPane )
for (int i = Inventory::MAX_SELECTION_SIZE; i < minecraft->player->inventory->getContainerSize(); ++i) {
out.push_back(minecraft->player->inventory->getItem(i)); std::vector<const ItemInstance*> out;
return out; for (int i = Inventory::MAX_SELECTION_SIZE; i < minecraft->player->inventory->getContainerSize(); ++i)
} out.push_back(minecraft->player->inventory->getItem(i));
return out;
} }
}

View File

@@ -40,10 +40,9 @@ HumanoidModel::HumanoidModel( float g /*= 0*/, float yOffset /*= 0*/, int texW /
head.addBox(-4, -8, -4, 8, 8, 8, g); // Head head.addBox(-4, -8, -4, 8, 8, 8, g); // Head
head.setPos(0, 0 + yOffset, 0); head.setPos(0, 0 + yOffset, 0);
if (modernSkin) { hair.addBox(-4, -8, -4, 8, 8, 8, g + 0.5f); // Outer head layer (hat)
hair.addBox(-4, -8, -4, 8, 8, 8, g + 0.5f); // Outer head layer (hat) hair.setPos(0, 0 + yOffset, 0);
hair.setPos(0, 0 + yOffset, 0);
}
body.addBox(-4, 0, -2, 8, 12, 4, g); // Body body.addBox(-4, 0, -2, 8, 12, 4, g); // Body
body.setPos(0, 0 + yOffset, 0); body.setPos(0, 0 + yOffset, 0);
@@ -99,17 +98,17 @@ void HumanoidModel::render(Entity* e, float time, float r, float bob, float yRot
setupAnim(time, r, bob, yRot, xRot, scale); setupAnim(time, r, bob, yRot, xRot, scale);
// Sync overlay with head rotation/position // Sync overlay with head rotation/position
if (texWidth == 64 && texHeight == 64) {
hair.xRot = head.xRot; hair.xRot = head.xRot;
hair.yRot = head.yRot; hair.yRot = head.yRot;
hair.zRot = head.zRot; hair.zRot = head.zRot;
hair.y = head.y; hair.y = head.y;
}
head.render(scale); head.render(scale);
if (texWidth == 64 && texHeight == 64) {
hair.render(scale); hair.render(scale);
}
body.render(scale); body.render(scale);
arm0.render(scale); arm0.render(scale);
arm1.render(scale); arm1.render(scale);
@@ -123,12 +122,12 @@ void HumanoidModel::render( HumanoidModel* model, float scale )
head.yRot = model->head.yRot; head.yRot = model->head.yRot;
head.y = model->head.y; head.y = model->head.y;
head.xRot = model->head.xRot; head.xRot = model->head.xRot;
if (texWidth == 64 && texHeight == 64) {
hair.yRot = head.yRot; hair.yRot = head.yRot;
hair.xRot = head.xRot; hair.xRot = head.xRot;
hair.zRot = head.zRot; hair.zRot = head.zRot;
hair.y = head.y; hair.y = head.y;
}
arm0.xRot = model->arm0.xRot; arm0.xRot = model->arm0.xRot;
arm0.zRot = model->arm0.zRot; arm0.zRot = model->arm0.zRot;
@@ -273,7 +272,7 @@ void HumanoidModel::onGraphicsReset()
arm1.onGraphicsReset(); arm1.onGraphicsReset();
leg0.onGraphicsReset(); leg0.onGraphicsReset();
leg1.onGraphicsReset(); leg1.onGraphicsReset();
//hair.onGraphicsReset(); hair.onGraphicsReset();
} }
//void renderHair(float scale) { //void renderHair(float scale) {

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