forked from oerkki/voxelands
craft guide v1
This commit is contained in:
parent
5039e6b68c
commit
5ec634f2d1
Binary file not shown.
After Width: | Height: | Size: 878 B |
|
@ -569,8 +569,30 @@ InventoryItem *getResult(InventoryItem **items)
|
|||
}
|
||||
|
||||
// TODO: return recipe from result
|
||||
InventoryItem **getRecipe(InventoryItem *item)
|
||||
content_t *getRecipe(InventoryItem *item)
|
||||
{
|
||||
content_t r = item->getContent();
|
||||
content_t *recipe;
|
||||
for (std::vector<CraftDef>::iterator i=shaped_recipes.begin(); i!=shaped_recipes.end(); i++) {
|
||||
CraftDef d = *i;
|
||||
if (d.result == r) {
|
||||
recipe = new content_t[9];
|
||||
for (int j=0; j<9; j++) {
|
||||
recipe[j] = d.recipe[j];
|
||||
}
|
||||
return recipe;
|
||||
}
|
||||
}
|
||||
for (std::vector<CraftDefShapeless>::iterator i=shapeless_recipes.begin(); i!=shapeless_recipes.end(); i++) {
|
||||
CraftDefShapeless d = *i;
|
||||
if (d.result == r) {
|
||||
recipe = new content_t[9];
|
||||
for (int j=0; j<9; j++) {
|
||||
recipe[j] = d.recipe[j];
|
||||
}
|
||||
return recipe;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -234,7 +234,7 @@ namespace crafting {
|
|||
void setGateRecipe(u16 input1, u16 input2, u16 result);
|
||||
|
||||
InventoryItem *getResult(InventoryItem **items);
|
||||
InventoryItem **getRecipe(InventoryItem *item);
|
||||
content_t *getRecipe(InventoryItem *item);
|
||||
|
||||
void giveCreative(Player *player);
|
||||
void giveInitial(Player *player);
|
||||
|
|
|
@ -0,0 +1,235 @@
|
|||
CONTENT_CRAFTITEM_PAPER,
|
||||
CONTENT_CRAFTITEM_BOOK,
|
||||
CONTENT_CRAFTITEM_CHARCOAL,
|
||||
CONTENT_CRAFTITEM_COAL,
|
||||
CONTENT_CRAFTITEM_IRON,
|
||||
CONTENT_CRAFTITEM_CLAY,
|
||||
CONTENT_CRAFTITEM_TIN,
|
||||
CONTENT_CRAFTITEM_COPPER,
|
||||
CONTENT_CRAFTITEM_SILVER,
|
||||
CONTENT_CRAFTITEM_GOLD,
|
||||
CONTENT_CRAFTITEM_QUARTZ,
|
||||
CONTENT_CRAFTITEM_TIN_INGOT,
|
||||
CONTENT_CRAFTITEM_COPPER_INGOT,
|
||||
CONTENT_CRAFTITEM_SILVER_INGOT,
|
||||
CONTENT_CRAFTITEM_GOLD_INGOT,
|
||||
CONTENT_CRAFTITEM_FLINT,
|
||||
CONTENT_CRAFTITEM_STEEL_INGOT,
|
||||
CONTENT_CRAFTITEM_CLAY_BRICK,
|
||||
CONTENT_CRAFTITEM_RAT,
|
||||
CONTENT_CRAFTITEM_COOKED_RAT,
|
||||
CONTENT_CRAFTITEM_SCORCHED_STUFF,
|
||||
CONTENT_CRAFTITEM_FIREFLY,
|
||||
CONTENT_CRAFTITEM_APPLE,
|
||||
CONTENT_CRAFTITEM_APPLE_IRON,
|
||||
CONTENT_CRAFTITEM_DYE_BLUE,
|
||||
CONTENT_CRAFTITEM_DYE_GREEN,
|
||||
CONTENT_CRAFTITEM_DYE_ORANGE,
|
||||
CONTENT_CRAFTITEM_DYE_PURPLE,
|
||||
CONTENT_CRAFTITEM_DYE_RED,
|
||||
CONTENT_CRAFTITEM_DYE_YELLOW,
|
||||
CONTENT_CRAFTITEM_DYE_WHITE,
|
||||
CONTENT_CRAFTITEM_DYE_BLACK,
|
||||
CONTENT_CRAFTITEM_QUARTZ_DUST,
|
||||
CONTENT_CRAFTITEM_SALTPETER,
|
||||
CONTENT_CRAFTITEM_GUNPOWDER,
|
||||
CONTENT_CRAFTITEM_SNOW_BALL,
|
||||
CONTENT_CRAFTITEM_STICK,
|
||||
CONTENT_CRAFTITEM_PINE_PLANK,
|
||||
CONTENT_CRAFTITEM_WOOD_PLANK,
|
||||
CONTENT_CRAFTITEM_JUNGLE_PLANK,
|
||||
CONTENT_STONE,
|
||||
CONTENT_ICE,
|
||||
CONTENT_COAL,
|
||||
CONTENT_CHARCOAL,
|
||||
CONTENT_STONEBRICK,
|
||||
CONTENT_STONEBLOCK,
|
||||
CONTENT_ROUGHSTONEBRICK,
|
||||
CONTENT_ROUGHSTONEBLOCK,
|
||||
CONTENT_GRASS,
|
||||
CONTENT_FARM_DIRT,
|
||||
CONTENT_SAND,
|
||||
CONTENT_GRAVEL,
|
||||
CONTENT_SANDSTONE,
|
||||
CONTENT_SANDSTONE_BRICK,
|
||||
CONTENT_SANDSTONE_BLOCK,
|
||||
CONTENT_CLAY,
|
||||
CONTENT_CLAY_BLUE,
|
||||
CONTENT_CLAY_GREEN,
|
||||
CONTENT_CLAY_ORANGE,
|
||||
CONTENT_CLAY_PURPLE,
|
||||
CONTENT_CLAY_RED,
|
||||
CONTENT_CLAY_YELLOW,
|
||||
CONTENT_CLAY_BLACK,
|
||||
CONTENT_BRICK,
|
||||
CONTENT_TERRACOTTA,
|
||||
CONTENT_TERRACOTTA_BRICK,
|
||||
CONTENT_TERRACOTTA_BLOCK,
|
||||
CONTENT_TERRACOTTA_TILE,
|
||||
CONTENT_TREE,
|
||||
CONTENT_APPLE_TREE,
|
||||
CONTENT_JUNGLETREE,
|
||||
CONTENT_CONIFER_TREE,
|
||||
CONTENT_JUNGLEGRASS,
|
||||
CONTENT_LEAVES,
|
||||
CONTENT_APPLE_LEAVES,
|
||||
CONTENT_JUNGLELEAVES,
|
||||
CONTENT_CONIFER_LEAVES,
|
||||
CONTENT_TRIMMED_LEAVES,
|
||||
CONTENT_TRIMMED_APPLE_LEAVES,
|
||||
CONTENT_TRIMMED_JUNGLE_LEAVES,
|
||||
CONTENT_TRIMMED_CONIFER_LEAVES,
|
||||
CONTENT_CACTUS,
|
||||
CONTENT_PAPYRUS,
|
||||
CONTENT_BOOKSHELF,
|
||||
CONTENT_GLASS,
|
||||
CONTENT_GLASS_BLUE,
|
||||
CONTENT_GLASS_GREEN,
|
||||
CONTENT_GLASS_ORANGE,
|
||||
CONTENT_GLASS_PURPLE,
|
||||
CONTENT_GLASS_RED,
|
||||
CONTENT_GLASS_YELLOW,
|
||||
CONTENT_GLASS_BLACK,
|
||||
CONTENT_GLASS_PANE,
|
||||
CONTENT_GLASS_PANE_BLUE,
|
||||
CONTENT_GLASS_PANE_GREEN,
|
||||
CONTENT_GLASS_PANE_ORANGE,
|
||||
CONTENT_GLASS_PANE_PURPLE,
|
||||
CONTENT_GLASS_PANE_RED,
|
||||
CONTENT_GLASS_PANE_YELLOW,
|
||||
CONTENT_GLASS_PANE_BLACK,
|
||||
CONTENT_GLASSLIGHT,
|
||||
CONTENT_FENCE,
|
||||
CONTENT_RAIL,
|
||||
CONTENT_LADDER,
|
||||
CONTENT_BORDERSTONE,
|
||||
CONTENT_WOOD,
|
||||
CONTENT_JUNGLEWOOD,
|
||||
CONTENT_WOOD_PINE,
|
||||
CONTENT_MESE,
|
||||
CONTENT_MESE_DIGGING,
|
||||
CONTENT_SPONGE,
|
||||
CONTENT_SPONGE_FULL,
|
||||
CONTENT_HAY,
|
||||
CONTENT_SNOW_BLOCK,
|
||||
CONTENT_SNOW,
|
||||
CONTENT_CRAFT_GUIDE,
|
||||
CONTENT_COTTON,
|
||||
CONTENT_COTTON_BLUE,
|
||||
CONTENT_COTTON_GREEN,
|
||||
CONTENT_COTTON_ORANGE,
|
||||
CONTENT_COTTON_PURPLE,
|
||||
CONTENT_COTTON_RED,
|
||||
CONTENT_COTTON_YELLOW,
|
||||
CONTENT_COTTON_BLACK,
|
||||
CONTENT_CARPET,
|
||||
CONTENT_CARPET_BLUE,
|
||||
CONTENT_CARPET_GREEN,
|
||||
CONTENT_CARPET_ORANGE,
|
||||
CONTENT_CARPET_PURPLE,
|
||||
CONTENT_CARPET_RED,
|
||||
CONTENT_CARPET_YELLOW,
|
||||
CONTENT_CARPET_BLACK,
|
||||
CONTENT_AIR,
|
||||
CONTENT_WATER,
|
||||
CONTENT_WATERSOURCE,
|
||||
CONTENT_LAVA,
|
||||
CONTENT_LAVASOURCE,
|
||||
CONTENT_FIRE,
|
||||
CONTENT_FIRE_SHORTTERM,
|
||||
CONTENT_TORCH,
|
||||
CONTENT_SIGN_WALL,
|
||||
CONTENT_SIGN,
|
||||
CONTENT_CHEST,
|
||||
CONTENT_LOCKABLE_CHEST,
|
||||
CONTENT_FURNACE,
|
||||
CONTENT_INCINERATOR,
|
||||
CONTENT_ROUGHSTONE,
|
||||
CONTENT_COBBLE,
|
||||
CONTENT_MOSSYCOBBLE,
|
||||
CONTENT_STEEL,
|
||||
CONTENT_COPPER,
|
||||
CONTENT_GOLD,
|
||||
CONTENT_SILVER,
|
||||
CONTENT_TIN,
|
||||
CONTENT_QUARTZ,
|
||||
CONTENT_NC,
|
||||
CONTENT_SAPLING,
|
||||
CONTENT_APPLE_SAPLING,
|
||||
CONTENT_JUNGLESAPLING,
|
||||
CONTENT_CONIFER_SAPLING,
|
||||
CONTENT_APPLE,
|
||||
CONTENT_ROUGHSTONE_STAIR,
|
||||
CONTENT_COBBLE_STAIR,
|
||||
CONTENT_MOSSYCOBBLE_STAIR,
|
||||
CONTENT_STONE_STAIR,
|
||||
CONTENT_WOOD_STAIR,
|
||||
CONTENT_JUNGLE_STAIR,
|
||||
CONTENT_BRICK_STAIR,
|
||||
CONTENT_SANDSTONE_STAIR,
|
||||
CONTENT_WOOD_DOOR_LT,
|
||||
CONTENT_STEEL_DOOR_LT,
|
||||
CONTENT_GLASS_DOOR_LT,
|
||||
CONTENT_WOOD_W_DOOR_LT,
|
||||
CONTENT_STEEL_W_DOOR_LT,
|
||||
CONTENT_WOOD_DOOR_RT,
|
||||
CONTENT_GLASS_DOOR_RT,
|
||||
CONTENT_STEEL_DOOR_RT,
|
||||
CONTENT_WOOD_W_DOOR_RT,
|
||||
CONTENT_STEEL_W_DOOR_RT,
|
||||
CONTENT_WOOD_HATCH,
|
||||
CONTENT_STEEL_HATCH,
|
||||
CONTENT_WOOD_W_HATCH,
|
||||
CONTENT_STEEL_W_HATCH,
|
||||
CONTENT_WOOD_GATE,
|
||||
CONTENT_STEEL_GATE,
|
||||
CONTENT_WILDGRASS_SHORT,
|
||||
CONTENT_WILDGRASS_LONG,
|
||||
CONTENT_DEADGRASS,
|
||||
CONTENT_FLOWER_STEM,
|
||||
CONTENT_FLOWER_ROSE,
|
||||
CONTENT_FLOWER_DAFFODIL,
|
||||
CONTENT_FLOWER_TULIP,
|
||||
CONTENT_FLOWER_POT_RAW,
|
||||
CONTENT_FLOWER_POT,
|
||||
CONTENT_COBBLE_WALL,
|
||||
CONTENT_ROUGHSTONE_WALL,
|
||||
CONTENT_MOSSYCOBBLE_WALL,
|
||||
CONTENT_STONE_WALL,
|
||||
CONTENT_SANDSTONE_WALL,
|
||||
CONTENT_TNT,
|
||||
CONTENT_FLASH,
|
||||
CONTENT_STEAM,
|
||||
CONTENT_CHAIR,
|
||||
CONTENT_TABLE,
|
||||
CONTENT_BED_HEAD,
|
||||
CONTENT_BED_BLUE_HEAD,
|
||||
CONTENT_BED_GREEN_HEAD,
|
||||
CONTENT_BED_ORANGE_HEAD,
|
||||
CONTENT_BED_PURPLE_HEAD,
|
||||
CONTENT_BED_RED_HEAD,
|
||||
CONTENT_BED_YELLOW_HEAD,
|
||||
CONTENT_BED_BLACK_HEAD,
|
||||
CONTENT_TOOLITEM_WPICK,
|
||||
CONTENT_TOOLITEM_STPICK,
|
||||
CONTENT_TOOLITEM_STEELPICK,
|
||||
CONTENT_TOOLITEM_MESEPICK,
|
||||
CONTENT_TOOLITEM_WSHOVEL,
|
||||
CONTENT_TOOLITEM_STSHOVEL,
|
||||
CONTENT_TOOLITEM_STEELSHOVEL,
|
||||
CONTENT_TOOLITEM_WAXE,
|
||||
CONTENT_TOOLITEM_STAXE,
|
||||
CONTENT_TOOLITEM_STEELAXE,
|
||||
CONTENT_TOOLITEM_WSWORD,
|
||||
CONTENT_TOOLITEM_STSWORD,
|
||||
CONTENT_TOOLITEM_STEELSWORD,
|
||||
CONTENT_TOOLITEM_STEELSHEARS,
|
||||
CONTENT_TOOLITEM_WBUCKET,
|
||||
CONTENT_TOOLITEM_TINBUCKET,
|
||||
CONTENT_TOOLITEM_WBUCKET_WATER,
|
||||
CONTENT_TOOLITEM_TINBUCKET_WATER,
|
||||
CONTENT_TOOLITEM_STEELBUCKET,
|
||||
CONTENT_TOOLITEM_STEELBUCKET_WATER,
|
||||
CONTENT_TOOLITEM_STEELBUCKET_LAVA,
|
||||
CONTENT_TOOLITEM_FIRESTARTER,
|
||||
CONTENT_TOOLITEM_CROWBAR,
|
|
@ -2356,6 +2356,26 @@ void content_mapnode_init()
|
|||
f->setInventoryTextureNodeBox(i,"snow.png", "snow.png", "snow.png");
|
||||
setDirtLikeDiggingProperties(f->digging_properties, 0.3);
|
||||
|
||||
i = CONTENT_CRAFT_GUIDE;
|
||||
f = &content_features(i);
|
||||
f->description = std::string("Craft Guide");
|
||||
f->setAllTextures("craft_guide.png");
|
||||
f->setInventoryTextureCube("craft_guide.png", "craft_guide.png", "craft_guide.png");
|
||||
f->draw_type = CDT_CUBELIKE;
|
||||
f->is_ground_content = true;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
|
||||
setDirtLikeDiggingProperties(f->digging_properties, 1.0);
|
||||
if (f->initial_metadata == NULL)
|
||||
f->initial_metadata = new CraftGuideNodeMetadata();
|
||||
{
|
||||
content_t r[9] = {
|
||||
CONTENT_CRAFTITEM_STICK, CONTENT_CRAFTITEM_STICK, CONTENT_IGNORE,
|
||||
CONTENT_IGNORE, CONTENT_CRAFTITEM_STICK, CONTENT_IGNORE,
|
||||
CONTENT_CRAFTITEM_STICK, CONTENT_IGNORE, CONTENT_IGNORE
|
||||
};
|
||||
crafting::setRecipe(r,CONTENT_CRAFT_GUIDE,1);
|
||||
}
|
||||
|
||||
i = CONTENT_COTTON;
|
||||
f = &content_features(i);
|
||||
f->description = std::string("Cotton");
|
||||
|
|
|
@ -196,6 +196,9 @@ MapNode mapnode_translate_to_internal(MapNode n_from, u8 version);
|
|||
#define CONTENT_TRIMMED_JUNGLE_LEAVES 0x916
|
||||
#define CONTENT_TRIMMED_CONIFER_LEAVES 0x917
|
||||
|
||||
//bwahaha!
|
||||
#define CONTENT_CRAFT_GUIDE 0x9FF
|
||||
|
||||
// slabs
|
||||
#define CONTENT_ROUGHSTONE_SLAB 0xA00
|
||||
#define CONTENT_MOSSYCOBBLE_SLAB 0xA01
|
||||
|
|
|
@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include "content_nodemeta.h"
|
||||
#include "inventory.h"
|
||||
#include "content_mapnode.h"
|
||||
#include "content_craft.h"
|
||||
#include "log.h"
|
||||
|
||||
/*
|
||||
|
@ -609,3 +610,121 @@ std::string IncineratorNodeMetadata::getInventoryDrawSpecString()
|
|||
"list[current_name;fuel;4,1;1,1;]"
|
||||
"list[current_player;main;0,3;8,4;]";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
CraftGuideNodeMetadata
|
||||
*/
|
||||
static content_t g_contents[] = {
|
||||
#include "content_list.h"
|
||||
CONTENT_IGNORE
|
||||
};
|
||||
|
||||
// Prototype
|
||||
CraftGuideNodeMetadata proto_CraftGuideNodeMetadata;
|
||||
|
||||
CraftGuideNodeMetadata::CraftGuideNodeMetadata()
|
||||
{
|
||||
NodeMetadata::registerType(typeId(), create);
|
||||
|
||||
m_inventory = new Inventory();
|
||||
m_inventory->addList("list", 300);
|
||||
m_inventory->addList("recipe", 9);
|
||||
m_inventory->addList("result", 1);
|
||||
//m_inventory->addList("furnace",1);
|
||||
}
|
||||
CraftGuideNodeMetadata::~CraftGuideNodeMetadata()
|
||||
{
|
||||
delete m_inventory;
|
||||
}
|
||||
u16 CraftGuideNodeMetadata::typeId() const
|
||||
{
|
||||
return CONTENT_CRAFT_GUIDE;
|
||||
}
|
||||
NodeMetadata* CraftGuideNodeMetadata::clone()
|
||||
{
|
||||
CraftGuideNodeMetadata *d = new CraftGuideNodeMetadata();
|
||||
*d->m_inventory = *m_inventory;
|
||||
InventoryList *l = d->m_inventory->getList("list");
|
||||
InventoryItem *t;
|
||||
content_t *r;
|
||||
for (int i=0; g_contents[i] != CONTENT_IGNORE; i++) {
|
||||
if ((g_contents[i]&CONTENT_CRAFTITEM_MASK) == CONTENT_CRAFTITEM_MASK) {
|
||||
t = new CraftItem(g_contents[i],1);
|
||||
}else if ((g_contents[i]&CONTENT_TOOLITEM_MASK) == CONTENT_TOOLITEM_MASK) {
|
||||
t = new ToolItem(g_contents[i],1);
|
||||
}else{
|
||||
t = new MaterialItem(g_contents[i],1);
|
||||
}
|
||||
r = crafting::getRecipe(t);
|
||||
if (!r) {
|
||||
delete t;
|
||||
continue;
|
||||
}
|
||||
l->addItem(t);
|
||||
}
|
||||
return d;
|
||||
}
|
||||
NodeMetadata* CraftGuideNodeMetadata::create(std::istream &is)
|
||||
{
|
||||
CraftGuideNodeMetadata *d = new CraftGuideNodeMetadata();
|
||||
|
||||
d->m_inventory->deSerialize(is);
|
||||
|
||||
return d;
|
||||
}
|
||||
void CraftGuideNodeMetadata::serializeBody(std::ostream &os)
|
||||
{
|
||||
m_inventory->serialize(os);
|
||||
}
|
||||
bool CraftGuideNodeMetadata::nodeRemovalDisabled()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
void CraftGuideNodeMetadata::inventoryModified()
|
||||
{
|
||||
infostream<<"CraftGuide inventory modification callback"<<std::endl;
|
||||
}
|
||||
bool CraftGuideNodeMetadata::step(float dtime)
|
||||
{
|
||||
InventoryList *l = m_inventory->getList("result");
|
||||
InventoryItem *t = l->getItem(0);
|
||||
if (!t || t->getContent() == CONTENT_IGNORE)
|
||||
return false;
|
||||
content_t *r = crafting::getRecipe(t);
|
||||
if (!r)
|
||||
return false;
|
||||
l = m_inventory->getList("recipe");
|
||||
l->clearItems();
|
||||
for (int i=0; i<9; i++) {
|
||||
if (r[i] == CONTENT_IGNORE)
|
||||
continue;
|
||||
if ((r[i]&CONTENT_CRAFTITEM_MASK) == CONTENT_CRAFTITEM_MASK) {
|
||||
t = new CraftItem(r[i],1);
|
||||
}else if ((r[i]&CONTENT_TOOLITEM_MASK) == CONTENT_TOOLITEM_MASK) {
|
||||
t = new ToolItem(r[i],1);
|
||||
}else{
|
||||
t = new MaterialItem(r[i],1);
|
||||
}
|
||||
l->addItem(i,t);
|
||||
}
|
||||
|
||||
delete[] r;
|
||||
|
||||
return true;
|
||||
}
|
||||
std::string CraftGuideNodeMetadata::getInventoryDrawSpecString()
|
||||
{
|
||||
return
|
||||
"invsize[22,15;]"
|
||||
"list[current_name;list;4,1;17,13;]"
|
||||
"list[current_name;recipe;0,3;3,3;]"
|
||||
"list[current_name;result;1,7;1,1;]";
|
||||
//"list[current_name;furnace;1,9;1,1;]";
|
||||
}
|
||||
|
|
|
@ -205,5 +205,25 @@ private:
|
|||
};
|
||||
|
||||
|
||||
class CraftGuideNodeMetadata : public NodeMetadata
|
||||
{
|
||||
public:
|
||||
CraftGuideNodeMetadata();
|
||||
~CraftGuideNodeMetadata();
|
||||
|
||||
virtual u16 typeId() const;
|
||||
NodeMetadata* clone();
|
||||
static NodeMetadata* create(std::istream &is);
|
||||
virtual void serializeBody(std::ostream &os);
|
||||
virtual Inventory* getInventory() {return m_inventory;}
|
||||
virtual bool nodeRemovalDisabled();
|
||||
virtual void inventoryModified();
|
||||
virtual bool step(float dtime);
|
||||
virtual std::string getInventoryDrawSpecString();
|
||||
|
||||
private:
|
||||
Inventory *m_inventory;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in New Issue