1
0
Fork 0
Commit Graph

37 Commits

Author SHA1 Message Date
Tobias Wilken 36eab1b323
Introduce recipe book functionality (#4493)
* Introduce recipe book functionality

The recipe book helps especially new players. Missing it gives the
impression that cuberite is not as advanced as it is.

The handling of the recipe book uses the following functions:

- Unlock Recipes
(https://wiki.vg/index.php?title=Protocol&oldid=14204#Unlock_Recipes) to
make recipes available and show the notification for new recipes.
Initialization is done on player login for known ones, the update is done
when new items are discovered.
- Craft Recipe Request
(https://wiki.vg/index.php?title=Protocol&oldid=14204#Craft_Recipe_Request)
when the user selects a recipe from the recipe book to fill the slots.

Known recipes are initialized on player login via `Unlock Recipes` with
`Action` 0.
As soon as a new recipe is discovered this is added via `Unlock Recipes`
with `Action` 1.

To be able to know and recognize new recipes the player class is
extended with `KnownItems` and `KnownRecipes`. As soon as a player
touches an item this is compared to the list of `KnownItems`, if the
item is unknown the recipes are checked for this item and the other
ingredients are checked with the list of `KnownItems`. If a full match
is discovered the recipe is unlocked with the client and stored in the
`KnownRecipes`.

To unlock recipes the recipe ID is sent to the client. A mapping file
(for protocol 1.12.2) translated the minecraft recipe names to ids. The
crafting.txt is extended with and minecraft recipe names is possible.

Limitations:
Only a single recipe is added to the crafting area. Multiple clicks or
shift click does not increase the number of builds.

Co-authored-by: peterbell10 <peterbell10@live.co.uk>

* Address first issues mentioned by @peterbell10

- Some linting
- Extract loading of recipe specific protocol mapping into a function
- Build `RecipeNameMap` only once
- Use `std::optional`
- Extract `LoadRecipe` from `Window`

* Start to implement new suggestions

* Update with suggestions from @peterbell10

* Some minor cleanup

* Update protocol packet IDs
* Remove unused include
* Include header in cmake
* Change a vector to integer counter

* Change dromedaryCase method names to PascalCase

* Address suggestions from @madmaxoft

* Read Protocol subdirectories to load recipe books

To load all recipebooks iterate over the `Protocol` subdirectories
to find mapping files.

Co-authored-by: peterbell10 <peterbell10@live.co.uk>
2020-07-14 17:56:42 +01:00
Alexander Harkness cdc452916e
Replace buckets to the selected hotbar slot, rather than the first available. (#4580)
* Replace buckets to the selected hotbar slot, rather than the first available.

Replicates vanilla behaviour, as well as being more logical.

* Refactor cInventory::AddItem. Behaviour is now documented

* Add new cInventory::ReplaceOneEquippedItem and ::SetEquippedItem methods

* Return empty potion to the same slot after drinking

* Replace buckets correctly in other situations, not simply water and lava

Uses the new ReplaceOneEquippedItem method

* Correct collecting water from source block with bottle

* Add cPlayer::ReplaceOneEquippedItemTossRest method

* Handle stacked filled buckets (in theory)

Use new cPlayer::ReplaceOneEquippedItemTossRest method
2020-04-02 12:42:15 +00:00
peterbell10 950aeffff8
CheckBasicStyle: Check number of empty lines between functions (#4267)
Add check for number of empty lines between functions and fix the corresponding failures
2018-07-26 22:24:36 +01:00
Alexander Lyons Harkness a9c8ad9ce2 Fix typo in #4095.
The build was being broken.
2017-12-21 16:01:24 +00:00
peterbell10 e0ff5f5639 cInventory: Add listener to shield slot. (#4095) 2017-12-21 11:55:23 +00:00
Pablo Beltrán 84bdba345d Off-hand/shield slot functional, save and load slot, bow + arrow functional (#3725)
Fixes #3714.
2017-05-24 08:09:58 +02:00
LogicParrot 83459d0d89 Proper entity destruction in non-ticking chunks 2016-02-19 07:05:22 +02:00
LogicParrot ca6ef58b1e Bulk clearing of whitespace 2016-02-05 23:50:18 +02:00
Matti Hänninen b20294604c Fix old style casts and implicit conversions 2015-08-12 16:51:38 +03:00
Samuel Barney 804805d35a Silenced and fixed many warning messages across multiple files. 2015-07-29 09:49:30 -06:00
Tiger Wang 8656e149c8 Improved maps 2015-07-14 21:46:30 +01:00
tycho e19693e529 Merge branch 'master' into PreventNewWarnings
Conflicts:
	src/Inventory.cpp
2015-05-28 11:05:41 +01:00
tycho 77f1f58c0a Make -Werror disabling file only
Ad fix a load of warnings
2015-05-19 19:32:10 +01:00
Tiger Wang 0dbba305b6 Fixes #2052 2015-05-18 14:30:16 +01:00
Mattes D 846d16315a CheckBasicStyle: checks spaces around * and &. 2015-05-09 12:58:55 +02:00
Mattes D 44644ae025 Fixed reported parentheses around comparisons. 2014-12-05 12:58:47 +01:00
Tiger Wang a26541a7c3 En masse NULL -> nullptr replace 2014-10-22 20:12:49 -07:00
Mattes D bf16c5ed92 Type warning fixes. 2014-08-25 18:25:39 +03:00
Mattes D 0814a977f8 Merge pull request #1236 from Howaner/Inventory2
Fix item durability.
2014-07-27 21:39:39 +02:00
Howaner ef4d68adfd Merge branch 'master' into Inventory 2014-07-26 13:27:27 +02:00
Howaner 396739cc0f Fix item durability.
Fixes #1181
2014-07-23 16:32:09 +02:00
madmaxoft 93d29555e5 Style: Normalized to no spaces before closing parenthesis. 2014-07-21 17:40:43 +02:00
madmaxoft 6be79575fd Style: Normalized spaces after if, for and while. 2014-07-21 17:38:50 +02:00
Howaner 897d68dc35 Add armor items directly to the armor slots. 2014-07-20 01:22:58 +02:00
Howaner 51b91befbd Added RemoveItem() function to the player inventory. 2014-07-18 23:11:59 +02:00
Howaner 2e9aed793a Fixed the armor slot in creative mode. Also removed that armor get directly to the armor slot. It is extremely buggy and unnecessary. 2014-07-18 01:16:49 +02:00
madmaxoft 7fff12bfac Fixed spaces around single-line comments.
There should be at least two spaces in front and one space after //-style comments.
2014-07-17 19:13:23 +02:00
Howaner c8631d9a9b Add DIG_STATUS_CANCELLED packet and add item resend, when a block can't place/break. 2014-05-09 23:10:02 +02:00
Howaner 10e3c262db Send item back to the client when the item get damage. 2014-05-07 21:00:21 +02:00
Howaner 99b9e6dce5 Broadcast the Equipped Item, if the Slot is changed. 2014-03-06 11:08:47 +01:00
andrew 3b24bc870b Map item handler; Fixed several bugs 2014-02-17 16:27:12 +02:00
Tiger Wang 74645fdfaa Removed obsoleted functions 2014-01-16 19:00:49 +00:00
Tycho Bickerstaff 3152c72959 fixed warnings in Inventory.cpp 2013-12-31 09:16:42 +01:00
madmaxoft 2113ca3844 Fixed VC2008 compilation, normalized include paths. 2013-11-27 09:17:25 +01:00
Alexander Harkness 770ef8c60b Fixed loads more of them. 2013-11-26 17:14:46 +00:00
Tiger Wang e3db69c4ae Attempt to fix compilation 2013-11-24 18:44:22 +00:00
Alexander Harkness 675b4aa878 Moved source to src 2013-11-24 14:19:41 +00:00