buckets
This commit is contained in:
parent
81aac33dbe
commit
ee7c6d72ab
Binary file not shown.
After Width: | Height: | Size: 329 B |
Binary file not shown.
After Width: | Height: | Size: 363 B |
Binary file not shown.
After Width: | Height: | Size: 369 B |
Binary file not shown.
Before Width: | Height: | Size: 854 B After Width: | Height: | Size: 461 B |
Binary file not shown.
After Width: | Height: | Size: 445 B |
|
@ -256,6 +256,7 @@ collisionMoveResult collisionMoveSimple(Map *map,
|
|||
node_positions.push_back(p);
|
||||
is_object.push_back(false);
|
||||
}
|
||||
nodeboxes.clear();
|
||||
}
|
||||
catch(InvalidPositionException &e)
|
||||
{
|
||||
|
|
|
@ -107,7 +107,7 @@ struct CraftDef {
|
|||
*/
|
||||
InventoryItem *craft_get_result(InventoryItem **items)
|
||||
{
|
||||
static CraftDef defs[112];
|
||||
static CraftDef defs[113];
|
||||
static int defs_init = 0;
|
||||
|
||||
// only initialise (and hence allocate) these once
|
||||
|
@ -1201,6 +1201,17 @@ InventoryItem *craft_get_result(InventoryItem **items)
|
|||
defs[defs_init].item = new ToolItem("WBucket", 0);
|
||||
defs_init++;
|
||||
}
|
||||
|
||||
// Steel bucket
|
||||
{
|
||||
defs[defs_init].specs[3] = ItemSpec(ITEM_CRAFT, "steel_ingot");
|
||||
defs[defs_init].specs[5] = ItemSpec(ITEM_CRAFT, "steel_ingot");
|
||||
defs[defs_init].specs[6] = ItemSpec(ITEM_CRAFT, "steel_ingot");
|
||||
defs[defs_init].specs[7] = ItemSpec(ITEM_CRAFT, "steel_ingot");
|
||||
defs[defs_init].specs[8] = ItemSpec(ITEM_CRAFT, "steel_ingot");
|
||||
defs[defs_init].item = new ToolItem("SteelBucket", 0);
|
||||
defs_init++;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i=0; i<defs_init; i++) {
|
||||
|
|
|
@ -37,6 +37,7 @@ void setStoneLikeDiggingProperties(DiggingPropertiesList &list, float toughness)
|
|||
void setDirtLikeDiggingProperties(DiggingPropertiesList &list, float toughness);
|
||||
void setWoodLikeDiggingProperties(DiggingPropertiesList &list, float toughness);
|
||||
void setLeafLikeDiggingProperties(DiggingPropertiesList &list, float toughness);
|
||||
void setWaterLikeDiggingProperties(DiggingPropertiesList &list, float toughness);
|
||||
|
||||
static void content_mapnode_nodebox_stair(ContentFeatures *f)
|
||||
{
|
||||
|
@ -1080,7 +1081,7 @@ void content_mapnode_init()
|
|||
f->light_propagates = true;
|
||||
f->walkable = false;
|
||||
f->pointable = false;
|
||||
f->diggable = false;
|
||||
//f->diggable = false;
|
||||
f->buildable_to = true;
|
||||
f->liquid_type = LIQUID_SOURCE;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
|
||||
|
@ -1106,6 +1107,7 @@ void content_mapnode_init()
|
|||
f->special_atlas = pa_water1;
|
||||
}
|
||||
#endif
|
||||
setWaterLikeDiggingProperties(f->digging_properties, 0.5);
|
||||
|
||||
i = CONTENT_LAVA;
|
||||
f = &content_features(i);
|
||||
|
@ -1182,7 +1184,7 @@ void content_mapnode_init()
|
|||
f->light_source = LIGHT_MAX-1;
|
||||
f->walkable = false;
|
||||
f->pointable = false;
|
||||
f->diggable = false;
|
||||
//f->diggable = false;
|
||||
f->buildable_to = true;
|
||||
f->liquid_type = LIQUID_SOURCE;
|
||||
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
|
||||
|
@ -1209,6 +1211,7 @@ void content_mapnode_init()
|
|||
f->special_atlas = pa_lava1;
|
||||
}
|
||||
#endif
|
||||
setWaterLikeDiggingProperties(f->digging_properties, 0.5);
|
||||
|
||||
i = CONTENT_TORCH;
|
||||
f = &content_features(i);
|
||||
|
@ -2766,4 +2769,14 @@ void setLeafLikeDiggingProperties(DiggingPropertiesList &list, float toughness)
|
|||
DiggingProperties(true, 0.5*toughness, 65535./333.*toughness));
|
||||
}
|
||||
|
||||
void setWaterLikeDiggingProperties(DiggingPropertiesList &list, float toughness)
|
||||
{
|
||||
list.set("",
|
||||
DiggingProperties(true, 150000.0*toughness, 0));
|
||||
|
||||
list.set("WBucket",
|
||||
DiggingProperties(true, 0.0, 65535./30.*toughness));
|
||||
|
||||
list.set("SteelBucket",
|
||||
DiggingProperties(true, 0.0, 65535./80.*toughness));
|
||||
}
|
||||
|
|
|
@ -113,5 +113,6 @@ void set_default_settings(Settings *settings)
|
|||
settings->setDefault("server_map_save_interval", "1.238");
|
||||
settings->setDefault("full_block_send_enable_min_time_from_building", "2.0");
|
||||
settings->setDefault("enable_experimental", "false");
|
||||
settings->setDefault("enable_lavabuckets", "false");
|
||||
}
|
||||
|
||||
|
|
19
src/game.cpp
19
src/game.cpp
|
@ -322,8 +322,23 @@ void getPointedNode(Client *client, v3f player_position,
|
|||
try
|
||||
{
|
||||
n = client->getNode(v3s16(x,y,z));
|
||||
if(content_pointable(n.getContent()) == false)
|
||||
continue;
|
||||
if(content_pointable(n.getContent()) == false) {
|
||||
if (content_liquid_source(n.getContent()) == false)
|
||||
continue;
|
||||
const InventoryItem *wield = client->getLocalPlayer()->getWieldItem();
|
||||
std::string wieldname;
|
||||
if (
|
||||
!wield
|
||||
|| wield->getName() != std::string("ToolItem")
|
||||
|| (wieldname = ((ToolItem*)wield)->getToolName()) == std::string("")
|
||||
|| (
|
||||
wieldname != std::string("SteelBucket")
|
||||
&& wieldname != std::string("WBucket")
|
||||
)
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(InvalidPositionException &e)
|
||||
{
|
||||
|
|
|
@ -316,38 +316,47 @@ public:
|
|||
}
|
||||
#ifndef SERVER
|
||||
std::string getBasename() const {
|
||||
if(m_toolname == "WPick")
|
||||
if (m_toolname == "WPick") {
|
||||
return "tool_woodpick.png";
|
||||
else if(m_toolname == "STPick")
|
||||
}else if (m_toolname == "STPick") {
|
||||
return "tool_stonepick.png";
|
||||
else if(m_toolname == "SteelPick")
|
||||
}else if (m_toolname == "SteelPick") {
|
||||
return "tool_steelpick.png";
|
||||
else if(m_toolname == "MesePick")
|
||||
}else if (m_toolname == "MesePick") {
|
||||
return "tool_mesepick.png";
|
||||
else if(m_toolname == "WShovel")
|
||||
}else if (m_toolname == "WShovel") {
|
||||
return "tool_woodshovel.png";
|
||||
else if(m_toolname == "STShovel")
|
||||
}else if (m_toolname == "STShovel") {
|
||||
return "tool_stoneshovel.png";
|
||||
else if(m_toolname == "SteelShovel")
|
||||
}else if (m_toolname == "SteelShovel") {
|
||||
return "tool_steelshovel.png";
|
||||
else if(m_toolname == "WAxe")
|
||||
}else if (m_toolname == "WAxe") {
|
||||
return "tool_woodaxe.png";
|
||||
else if(m_toolname == "STAxe")
|
||||
}else if (m_toolname == "STAxe") {
|
||||
return "tool_stoneaxe.png";
|
||||
else if(m_toolname == "SteelAxe")
|
||||
}else if (m_toolname == "SteelAxe") {
|
||||
return "tool_steelaxe.png";
|
||||
else if(m_toolname == "WSword")
|
||||
}else if (m_toolname == "WSword") {
|
||||
return "tool_woodsword.png";
|
||||
else if(m_toolname == "STSword")
|
||||
}else if (m_toolname == "STSword") {
|
||||
return "tool_stonesword.png";
|
||||
else if(m_toolname == "SteelSword")
|
||||
}else if (m_toolname == "SteelSword") {
|
||||
return "tool_steelsword.png";
|
||||
else if(m_toolname == "Shears")
|
||||
}else if (m_toolname == "Shears") {
|
||||
return "tool_shears.png";
|
||||
else if(m_toolname == "WBucket")
|
||||
}else if (m_toolname == "WBucket") {
|
||||
return "tool_woodbucket.png";
|
||||
else
|
||||
}else if (m_toolname == "WBucket_water") {
|
||||
return "tool_woodbucket_water.png";
|
||||
}else if(m_toolname == "SteelBucket") {
|
||||
return "tool_steelbucket.png";
|
||||
}else if(m_toolname == "SteelBucket_water") {
|
||||
return "tool_steelbucket_water.png";
|
||||
}else if(m_toolname == "SteelBucket_lava") {
|
||||
return "tool_steelbucket_lava.png";
|
||||
}else{
|
||||
return "cotton.png";
|
||||
}
|
||||
}
|
||||
|
||||
video::ITexture * getImage() const
|
||||
|
@ -410,6 +419,14 @@ public:
|
|||
return "Shears";
|
||||
}else if(m_toolname == "WBucket") {
|
||||
return "Wooden Bucket";
|
||||
}else if(m_toolname == "WBucket_water") {
|
||||
return "Wooden Bucket of Water";
|
||||
}else if(m_toolname == "SteelBucket") {
|
||||
return "Steel Bucket";
|
||||
}else if(m_toolname == "SteelBucket_water") {
|
||||
return "Steel Bucket of Water";
|
||||
}else if(m_toolname == "SteelBucket_lava") {
|
||||
return "Steel Bucket of Lava";
|
||||
}
|
||||
|
||||
return "";
|
||||
|
|
143
src/server.cpp
143
src/server.cpp
|
@ -2582,7 +2582,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||
}
|
||||
|
||||
wield = player->getWieldItem();
|
||||
std::string wieldname;
|
||||
std::string wieldname("");
|
||||
bool is_farm_swap = false;
|
||||
// This is pretty much the entirety of farming
|
||||
if (
|
||||
|
@ -2751,6 +2751,45 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||
std::string dug_s = std::string("MaterialItem2 ")+itos(CONTENT_TRIMMED_LEAVES)+" 1";;
|
||||
std::istringstream is(dug_s, std::ios::binary);
|
||||
item = InventoryItem::deSerialize(is);
|
||||
}else if (
|
||||
material == CONTENT_WATERSOURCE
|
||||
&& wield
|
||||
&& wield->getName() == std::string("ToolItem")
|
||||
&& (wieldname = ((ToolItem*)wield)->getToolName()) != std::string("")
|
||||
&& (
|
||||
wieldname == std::string("WBucket")
|
||||
|| wieldname == std::string("SteelBucket")
|
||||
)
|
||||
) {
|
||||
std::string dug_s = std::string("ToolItem ") + wieldname + "_water 1";
|
||||
std::istringstream is(dug_s, std::ios::binary);
|
||||
item = InventoryItem::deSerialize(is);
|
||||
mlist->changeItem(item_i,item);
|
||||
item = NULL;
|
||||
UpdateCrafting(player->peer_id);
|
||||
SendInventory(player->peer_id);
|
||||
}else if (
|
||||
material == CONTENT_LAVASOURCE
|
||||
&& wield
|
||||
&& wield->getName() == std::string("ToolItem")
|
||||
&& (wieldname = ((ToolItem*)wield)->getToolName()) != std::string("")
|
||||
&& (
|
||||
wieldname == std::string("WBucket")
|
||||
|| wieldname == std::string("SteelBucket")
|
||||
)
|
||||
) {
|
||||
if (g_settings->getBool("enable_lavabuckets") == false || wieldname == std::string("WBucket")) {
|
||||
mlist->deleteItem(item_i);
|
||||
HandlePlayerHP(player,4);
|
||||
}else{
|
||||
std::string dug_s = std::string("ToolItem ") + wieldname + "_lava 1";
|
||||
std::istringstream is(dug_s, std::ios::binary);
|
||||
item = InventoryItem::deSerialize(is);
|
||||
mlist->changeItem(item_i,item);
|
||||
item = NULL;
|
||||
}
|
||||
UpdateCrafting(player->peer_id);
|
||||
SendInventory(player->peer_id);
|
||||
}else{
|
||||
std::string &dug_s = content_features(material).dug_item;
|
||||
if(dug_s != "")
|
||||
|
@ -3076,6 +3115,108 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
|
|||
|
||||
}
|
||||
}*/
|
||||
}else if (
|
||||
item->getName() == std::string("ToolItem")
|
||||
&& (
|
||||
((ToolItem*)item)->getToolName() == std::string("WBucket_water")
|
||||
|| ((ToolItem*)item)->getToolName() == std::string("SteelBucket_water")
|
||||
|| ((ToolItem*)item)->getToolName() == std::string("SteelBucket_lava")
|
||||
)
|
||||
) {
|
||||
MapNode n = m_env.getMap().getNodeNoEx(p_over);
|
||||
std::string wieldname = ((ToolItem*)item)->getToolName();
|
||||
if (
|
||||
wieldname == std::string("WBucket_water")
|
||||
|| wieldname == std::string("SteelBucket_water")
|
||||
) {
|
||||
if (ilist != NULL) {
|
||||
std::string dug_s = std::string("ToolItem ");
|
||||
if (wieldname == std::string("WBucket_water")) {
|
||||
dug_s += "WBucket 1";
|
||||
}else{
|
||||
dug_s += "SteelBucket 1";
|
||||
}
|
||||
std::istringstream is(dug_s, std::ios::binary);
|
||||
InventoryItem *item = InventoryItem::deSerialize(is);
|
||||
ilist->changeItem(item_i,item);
|
||||
UpdateCrafting(player->peer_id);
|
||||
SendInventory(player->peer_id);
|
||||
n.setContent(CONTENT_WATERSOURCE);
|
||||
core::list<u16> far_players;
|
||||
sendAddNode(p_over, n, 0, &far_players, 30);
|
||||
|
||||
/*
|
||||
Add node.
|
||||
|
||||
This takes some time so it is done after the quick stuff
|
||||
*/
|
||||
core::map<v3s16, MapBlock*> modified_blocks;
|
||||
{
|
||||
MapEditEventIgnorer ign(&m_ignore_map_edit_events);
|
||||
|
||||
std::string p_name = std::string(player->getName());
|
||||
m_env.getMap().addNodeAndUpdate(p_over, n, modified_blocks, p_name);
|
||||
}
|
||||
/*
|
||||
Set blocks not sent to far players
|
||||
*/
|
||||
for(core::list<u16>::Iterator
|
||||
i = far_players.begin();
|
||||
i != far_players.end(); i++)
|
||||
{
|
||||
u16 peer_id = *i;
|
||||
RemoteClient *client = getClient(peer_id);
|
||||
if(client==NULL)
|
||||
continue;
|
||||
client->SetBlocksNotSent(modified_blocks);
|
||||
}
|
||||
}
|
||||
}else if (wieldname == std::string("SteelBucket_lava")) {
|
||||
if (ilist != NULL) {
|
||||
if (g_settings->getBool("enable_lavabuckets")) {
|
||||
std::string dug_s = std::string("ToolItem SteelBucket 1");
|
||||
std::istringstream is(dug_s, std::ios::binary);
|
||||
InventoryItem *item = InventoryItem::deSerialize(is);
|
||||
ilist->changeItem(item_i,item);
|
||||
UpdateCrafting(player->peer_id);
|
||||
SendInventory(player->peer_id);
|
||||
n.setContent(CONTENT_LAVASOURCE);
|
||||
core::list<u16> far_players;
|
||||
sendAddNode(p_over, n, 0, &far_players, 30);
|
||||
|
||||
/*
|
||||
Add node.
|
||||
|
||||
This takes some time so it is done after the quick stuff
|
||||
*/
|
||||
core::map<v3s16, MapBlock*> modified_blocks;
|
||||
{
|
||||
MapEditEventIgnorer ign(&m_ignore_map_edit_events);
|
||||
|
||||
std::string p_name = std::string(player->getName());
|
||||
m_env.getMap().addNodeAndUpdate(p_over, n, modified_blocks, p_name);
|
||||
}
|
||||
/*
|
||||
Set blocks not sent to far players
|
||||
*/
|
||||
for(core::list<u16>::Iterator
|
||||
i = far_players.begin();
|
||||
i != far_players.end(); i++)
|
||||
{
|
||||
u16 peer_id = *i;
|
||||
RemoteClient *client = getClient(peer_id);
|
||||
if(client==NULL)
|
||||
continue;
|
||||
client->SetBlocksNotSent(modified_blocks);
|
||||
}
|
||||
}else{
|
||||
ilist->deleteItem(item_i);
|
||||
HandlePlayerHP(player,4);
|
||||
UpdateCrafting(player->peer_id);
|
||||
SendInventory(player->peer_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
Place other item (not a block)
|
||||
|
|
22
src/tile.cpp
22
src/tile.cpp
|
@ -117,6 +117,17 @@ std::string getTexturePath(const std::string &filename)
|
|||
return fullpath;
|
||||
|
||||
std::string rel_path = std::string("textures")+DIR_DELIM+filename;
|
||||
|
||||
/*
|
||||
Check from user data directory
|
||||
*/
|
||||
if(fullpath == "")
|
||||
{
|
||||
std::string testpath = porting::path_userdata + DIR_DELIM + rel_path;
|
||||
// Check all filename extensions. Returns "" if not found.
|
||||
fullpath = getImagePath(testpath);
|
||||
}
|
||||
|
||||
/*
|
||||
Check from data_path /textures
|
||||
*/
|
||||
|
@ -166,6 +177,17 @@ std::string getModelPath(const std::string &filename)
|
|||
return fullpath;
|
||||
|
||||
std::string rel_path = std::string("models")+DIR_DELIM+filename;
|
||||
|
||||
/*
|
||||
Check from user data directory
|
||||
*/
|
||||
if(fullpath == "")
|
||||
{
|
||||
std::string testpath = porting::path_userdata + DIR_DELIM + rel_path;
|
||||
// Check all filename extensions. Returns "" if not found.
|
||||
fullpath = getImagePath(testpath);
|
||||
}
|
||||
|
||||
/*
|
||||
Check from data_path /models
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue