commit before some more radical changes
parent
06eb0ad4d0
commit
01c2b003e1
|
@ -50,6 +50,7 @@ configure_file(
|
||||||
)
|
)
|
||||||
|
|
||||||
set(common_SRCS
|
set(common_SRCS
|
||||||
|
nodemetadata.cpp
|
||||||
serverobject.cpp
|
serverobject.cpp
|
||||||
noise.cpp
|
noise.cpp
|
||||||
mineral.cpp
|
mineral.cpp
|
||||||
|
|
|
@ -36,7 +36,7 @@ void * ClientUpdateThread::Thread()
|
||||||
|
|
||||||
while(getRun())
|
while(getRun())
|
||||||
{
|
{
|
||||||
m_client->asyncStep();
|
//m_client->asyncStep();
|
||||||
|
|
||||||
//m_client->updateSomeExpiredMeshes();
|
//m_client->updateSomeExpiredMeshes();
|
||||||
|
|
||||||
|
@ -357,6 +357,7 @@ void Client::step(float dtime)
|
||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
float Client::asyncStep()
|
float Client::asyncStep()
|
||||||
{
|
{
|
||||||
DSTACK(__FUNCTION_NAME);
|
DSTACK(__FUNCTION_NAME);
|
||||||
|
@ -374,6 +375,7 @@ float Client::asyncStep()
|
||||||
return dtime;*/
|
return dtime;*/
|
||||||
return 0.0;
|
return 0.0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Virtual methods from con::PeerHandler
|
// Virtual methods from con::PeerHandler
|
||||||
void Client::peerAdded(con::Peer *peer)
|
void Client::peerAdded(con::Peer *peer)
|
||||||
|
@ -1182,8 +1184,6 @@ bool Client::AsyncProcessPacket()
|
||||||
// Ignore too small packet
|
// Ignore too small packet
|
||||||
if(datasize < 8)
|
if(datasize < 8)
|
||||||
return true;
|
return true;
|
||||||
/*if(datasize < 8 + MapBlock::serializedLength(ser_version))
|
|
||||||
goto getdata;*/
|
|
||||||
|
|
||||||
v3s16 p;
|
v3s16 p;
|
||||||
p.X = readS16(&data[2]);
|
p.X = readS16(&data[2]);
|
||||||
|
@ -1238,35 +1238,6 @@ bool Client::AsyncProcessPacket()
|
||||||
block->deSerialize(istr, ser_version);
|
block->deSerialize(istr, ser_version);
|
||||||
sector->insertBlock(block);
|
sector->insertBlock(block);
|
||||||
//block->setChangedFlag();
|
//block->setChangedFlag();
|
||||||
|
|
||||||
//DEBUG
|
|
||||||
/*NodeMod mod;
|
|
||||||
mod.type = NODEMOD_CHANGECONTENT;
|
|
||||||
mod.param = CONTENT_MESE;
|
|
||||||
block->setTempMod(v3s16(8,10,8), mod);
|
|
||||||
block->setTempMod(v3s16(8,9,8), mod);
|
|
||||||
block->setTempMod(v3s16(8,8,8), mod);
|
|
||||||
block->setTempMod(v3s16(8,7,8), mod);
|
|
||||||
block->setTempMod(v3s16(8,6,8), mod);*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
Add some coulds
|
|
||||||
Well, this is a dumb way to do it, they should just
|
|
||||||
be drawn as separate objects.
|
|
||||||
*/
|
|
||||||
/*if(p.Y == 3)
|
|
||||||
{
|
|
||||||
NodeMod mod;
|
|
||||||
mod.type = NODEMOD_CHANGECONTENT;
|
|
||||||
mod.param = CONTENT_CLOUD;
|
|
||||||
v3s16 p2;
|
|
||||||
p2.Y = 8;
|
|
||||||
for(p2.X=3; p2.X<=13; p2.X++)
|
|
||||||
for(p2.Z=3; p2.Z<=13; p2.Z++)
|
|
||||||
{
|
|
||||||
block->setTempMod(p2, mod);
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
} //envlock
|
} //envlock
|
||||||
|
|
||||||
|
@ -1605,6 +1576,12 @@ MapNode Client::getNode(v3s16 p)
|
||||||
return m_env.getMap().getNode(p);
|
return m_env.getMap().getNode(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NodeMetadata* Client::getNodeMetadataClone(v3s16 p)
|
||||||
|
{
|
||||||
|
JMutexAutoLock envlock(m_env_mutex);
|
||||||
|
return m_env.getMap().getNodeMetadataClone(p);
|
||||||
|
}
|
||||||
|
|
||||||
v3f Client::getPlayerPosition()
|
v3f Client::getPlayerPosition()
|
||||||
{
|
{
|
||||||
JMutexAutoLock envlock(m_env_mutex);
|
JMutexAutoLock envlock(m_env_mutex);
|
||||||
|
|
|
@ -138,7 +138,7 @@ public:
|
||||||
|
|
||||||
// Called from updater thread
|
// Called from updater thread
|
||||||
// Returns dtime
|
// Returns dtime
|
||||||
float asyncStep();
|
//float asyncStep();
|
||||||
|
|
||||||
void ProcessData(u8 *data, u32 datasize, u16 sender_peer_id);
|
void ProcessData(u8 *data, u32 datasize, u16 sender_peer_id);
|
||||||
// Returns true if something was received
|
// Returns true if something was received
|
||||||
|
@ -166,6 +166,8 @@ public:
|
||||||
|
|
||||||
// Returns InvalidPositionException if not found
|
// Returns InvalidPositionException if not found
|
||||||
MapNode getNode(v3s16 p);
|
MapNode getNode(v3s16 p);
|
||||||
|
// Wrapper to Map
|
||||||
|
NodeMetadata* getNodeMetadataClone(v3s16 p);
|
||||||
|
|
||||||
v3f getPlayerPosition();
|
v3f getPlayerPosition();
|
||||||
|
|
||||||
|
|
62
src/main.cpp
62
src/main.cpp
|
@ -2701,6 +2701,55 @@ int main(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(n.d == CONTENT_SIGN_WALL)
|
||||||
|
{
|
||||||
|
v3s16 dir = unpackDir(n.dir);
|
||||||
|
v3f dir_f = v3f(dir.X, dir.Y, dir.Z);
|
||||||
|
dir_f *= BS/2 - BS/6 - BS/20;
|
||||||
|
v3f cpf = npf + dir_f;
|
||||||
|
f32 distance = (cpf - camera_position).getLength();
|
||||||
|
|
||||||
|
v3f vertices[4] =
|
||||||
|
{
|
||||||
|
v3f(BS*0.42,-BS*0.35,-BS*0.4),
|
||||||
|
v3f(BS*0.49, BS*0.35, BS*0.4),
|
||||||
|
};
|
||||||
|
|
||||||
|
for(s32 i=0; i<2; i++)
|
||||||
|
{
|
||||||
|
if(dir == v3s16(1,0,0))
|
||||||
|
vertices[i].rotateXZBy(0);
|
||||||
|
if(dir == v3s16(-1,0,0))
|
||||||
|
vertices[i].rotateXZBy(180);
|
||||||
|
if(dir == v3s16(0,0,1))
|
||||||
|
vertices[i].rotateXZBy(90);
|
||||||
|
if(dir == v3s16(0,0,-1))
|
||||||
|
vertices[i].rotateXZBy(-90);
|
||||||
|
if(dir == v3s16(0,-1,0))
|
||||||
|
vertices[i].rotateXYBy(-90);
|
||||||
|
if(dir == v3s16(0,1,0))
|
||||||
|
vertices[i].rotateXYBy(90);
|
||||||
|
|
||||||
|
vertices[i] += npf;
|
||||||
|
}
|
||||||
|
|
||||||
|
core::aabbox3d<f32> box;
|
||||||
|
|
||||||
|
box = core::aabbox3d<f32>(vertices[0]);
|
||||||
|
box.addInternalPoint(vertices[1]);
|
||||||
|
|
||||||
|
if(distance < mindistance)
|
||||||
|
{
|
||||||
|
if(box.intersectsWithLine(shootline))
|
||||||
|
{
|
||||||
|
nodefound = true;
|
||||||
|
nodepos = np;
|
||||||
|
neighbourpos = np;
|
||||||
|
mindistance = distance;
|
||||||
|
nodehilightbox = box;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
Regular blocks
|
Regular blocks
|
||||||
*/
|
*/
|
||||||
|
@ -2765,11 +2814,20 @@ int main(int argc, char *argv[])
|
||||||
static float dig_time = 0.0;
|
static float dig_time = 0.0;
|
||||||
static u16 dig_index = 0;
|
static u16 dig_index = 0;
|
||||||
|
|
||||||
// Visualize selection
|
/*
|
||||||
|
Visualize selection
|
||||||
|
*/
|
||||||
|
|
||||||
hilightboxes.push_back(nodehilightbox);
|
hilightboxes.push_back(nodehilightbox);
|
||||||
|
|
||||||
// Handle digging
|
/*
|
||||||
|
TODO:
|
||||||
|
Check information text of node
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Handle digging
|
||||||
|
*/
|
||||||
|
|
||||||
if(g_input->getLeftReleased())
|
if(g_input->getLeftReleased())
|
||||||
{
|
{
|
||||||
|
|
28
src/map.cpp
28
src/map.cpp
|
@ -940,6 +940,15 @@ void Map::addNodeAndUpdate(v3s16 p, MapNode n,
|
||||||
n.setLight(bank, 0);
|
n.setLight(bank, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
If node lets sunlight through and is under sunlight, it has
|
||||||
|
sunlight too.
|
||||||
|
*/
|
||||||
|
if(node_under_sunlight && content_features(n.d).sunlight_propagates)
|
||||||
|
{
|
||||||
|
n.setLight(LIGHTBANK_DAY, LIGHT_SUN);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Set the node on the map
|
Set the node on the map
|
||||||
*/
|
*/
|
||||||
|
@ -947,13 +956,13 @@ void Map::addNodeAndUpdate(v3s16 p, MapNode n,
|
||||||
setNode(p, n);
|
setNode(p, n);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If node is under sunlight, take all sunlighted nodes under
|
If node is under sunlight and doesn't let sunlight through,
|
||||||
it and clear light from them and from where the light has
|
take all sunlighted nodes under it and clear light from them
|
||||||
been spread.
|
and from where the light has been spread.
|
||||||
TODO: This could be optimized by mass-unlighting instead
|
TODO: This could be optimized by mass-unlighting instead
|
||||||
of looping
|
of looping
|
||||||
*/
|
*/
|
||||||
if(node_under_sunlight)
|
if(node_under_sunlight && !content_features(n.d).sunlight_propagates)
|
||||||
{
|
{
|
||||||
s16 y = p.Y - 1;
|
s16 y = p.Y - 1;
|
||||||
for(;; y--){
|
for(;; y--){
|
||||||
|
@ -1687,6 +1696,17 @@ void Map::transformLiquids(core::map<v3s16, MapBlock*> & modified_blocks)
|
||||||
//dstream<<"Map::transformLiquids(): loopcount="<<loopcount<<std::endl;
|
//dstream<<"Map::transformLiquids(): loopcount="<<loopcount<<std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NodeMetadata* Map::getNodeMetadataClone(v3s16 p)
|
||||||
|
{
|
||||||
|
v3s16 blockpos = getNodeBlockPos(p);
|
||||||
|
v3s16 p_rel = p - blockpos*MAP_BLOCKSIZE;
|
||||||
|
MapBlock *block = getBlockNoCreateNoEx(blockpos);
|
||||||
|
if(block == NULL)
|
||||||
|
return NULL;
|
||||||
|
NodeMetadata *meta = block->m_node_metadata.getClone(p_rel);
|
||||||
|
return meta;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
ServerMap
|
ServerMap
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -39,6 +39,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
#include "constants.h"
|
#include "constants.h"
|
||||||
#include "voxel.h"
|
#include "voxel.h"
|
||||||
#include "mapchunk.h"
|
#include "mapchunk.h"
|
||||||
|
#include "nodemetadata.h"
|
||||||
|
|
||||||
#define MAPTYPE_BASE 0
|
#define MAPTYPE_BASE 0
|
||||||
#define MAPTYPE_SERVER 1
|
#define MAPTYPE_SERVER 1
|
||||||
|
@ -276,6 +277,13 @@ public:
|
||||||
|
|
||||||
void transformLiquids(core::map<v3s16, MapBlock*> & modified_blocks);
|
void transformLiquids(core::map<v3s16, MapBlock*> & modified_blocks);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Node metadata
|
||||||
|
These are basically coordinate wrappers to MapBlock
|
||||||
|
*/
|
||||||
|
|
||||||
|
NodeMetadata* getNodeMetadataClone(v3s16 p);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Variables
|
Variables
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -799,6 +799,7 @@ void MapBlock::updateMesh(u32 daynight_ratio)
|
||||||
{
|
{
|
||||||
video::SColor c(255,255,255,255);
|
video::SColor c(255,255,255,255);
|
||||||
|
|
||||||
|
// Wall at X+ of node
|
||||||
video::S3DVertex vertices[4] =
|
video::S3DVertex vertices[4] =
|
||||||
{
|
{
|
||||||
video::S3DVertex(-BS/2,-BS/2,0, 0,0,0, c, 0,1),
|
video::S3DVertex(-BS/2,-BS/2,0, 0,0,0, c, 0,1),
|
||||||
|
@ -854,6 +855,61 @@ void MapBlock::updateMesh(u32 daynight_ratio)
|
||||||
// Add to mesh collector
|
// Add to mesh collector
|
||||||
collector.append(material, vertices, 4, indices, 6);
|
collector.append(material, vertices, 4, indices, 6);
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
Signs on walls
|
||||||
|
*/
|
||||||
|
if(n.d == CONTENT_SIGN_WALL)
|
||||||
|
{
|
||||||
|
u8 l = decode_light(n.getLightBlend(daynight_ratio));
|
||||||
|
video::SColor c(255,l,l,l);
|
||||||
|
|
||||||
|
float d = (float)BS/16;
|
||||||
|
// Wall at X+ of node
|
||||||
|
video::S3DVertex vertices[4] =
|
||||||
|
{
|
||||||
|
video::S3DVertex(BS/2-d,-BS/2,-BS/2, 0,0,0, c, 0,1),
|
||||||
|
video::S3DVertex(BS/2-d,-BS/2,BS/2, 0,0,0, c, 1,1),
|
||||||
|
video::S3DVertex(BS/2-d,BS/2,BS/2, 0,0,0, c, 1,0),
|
||||||
|
video::S3DVertex(BS/2-d,BS/2,-BS/2, 0,0,0, c, 0,0),
|
||||||
|
};
|
||||||
|
|
||||||
|
v3s16 dir = unpackDir(n.dir);
|
||||||
|
|
||||||
|
for(s32 i=0; i<4; i++)
|
||||||
|
{
|
||||||
|
if(dir == v3s16(1,0,0))
|
||||||
|
vertices[i].Pos.rotateXZBy(0);
|
||||||
|
if(dir == v3s16(-1,0,0))
|
||||||
|
vertices[i].Pos.rotateXZBy(180);
|
||||||
|
if(dir == v3s16(0,0,1))
|
||||||
|
vertices[i].Pos.rotateXZBy(90);
|
||||||
|
if(dir == v3s16(0,0,-1))
|
||||||
|
vertices[i].Pos.rotateXZBy(-90);
|
||||||
|
if(dir == v3s16(0,-1,0))
|
||||||
|
vertices[i].Pos.rotateXYBy(-90);
|
||||||
|
if(dir == v3s16(0,1,0))
|
||||||
|
vertices[i].Pos.rotateXYBy(90);
|
||||||
|
|
||||||
|
vertices[i].Pos += intToFloat(p + getPosRelative(), BS);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set material
|
||||||
|
video::SMaterial material;
|
||||||
|
material.setFlag(video::EMF_LIGHTING, false);
|
||||||
|
material.setFlag(video::EMF_BACK_FACE_CULLING, false);
|
||||||
|
material.setFlag(video::EMF_BILINEAR_FILTER, false);
|
||||||
|
material.setFlag(video::EMF_FOG_ENABLE, true);
|
||||||
|
//material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
|
||||||
|
material.MaterialType
|
||||||
|
= video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
|
||||||
|
|
||||||
|
material.setTexture(0,
|
||||||
|
g_texturesource->getTextureRaw("sign_wall.png"));
|
||||||
|
|
||||||
|
u16 indices[] = {0,1,2,2,3,0};
|
||||||
|
// Add to mesh collector
|
||||||
|
collector.append(material, vertices, 4, indices, 6);
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
Add flowing water to mesh
|
Add flowing water to mesh
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -31,6 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
#include "constants.h"
|
#include "constants.h"
|
||||||
#include "mapblockobject.h"
|
#include "mapblockobject.h"
|
||||||
#include "voxel.h"
|
#include "voxel.h"
|
||||||
|
#include "nodemetadata.h"
|
||||||
|
|
||||||
// Named by looking towards z+
|
// Named by looking towards z+
|
||||||
enum{
|
enum{
|
||||||
|
@ -619,6 +620,8 @@ public:
|
||||||
JMutex mesh_mutex;
|
JMutex mesh_mutex;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
NodeMetadataList m_node_metadata;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/*
|
/*
|
||||||
Private member variables
|
Private member variables
|
||||||
|
@ -665,22 +668,6 @@ private:
|
||||||
// Whether day and night lighting differs
|
// Whether day and night lighting differs
|
||||||
bool m_day_night_differs;
|
bool m_day_night_differs;
|
||||||
|
|
||||||
/*
|
|
||||||
Whether everything that is mainly located on this block has
|
|
||||||
been added to the world.
|
|
||||||
|
|
||||||
While this is false, a block can still be changed a bit when
|
|
||||||
stuff is added to the neighboring blocks that extends to this
|
|
||||||
one.
|
|
||||||
|
|
||||||
When this is false on every one of a 3x3x3 chunk of blocks, the
|
|
||||||
central one will not be changed by the map generator in the
|
|
||||||
future.
|
|
||||||
|
|
||||||
TODO: Save in file
|
|
||||||
*/
|
|
||||||
//bool m_not_fully_generated;
|
|
||||||
|
|
||||||
MapBlockObjectList m_objects;
|
MapBlockObjectList m_objects;
|
||||||
|
|
||||||
// Object spawning stuff
|
// Object spawning stuff
|
||||||
|
|
|
@ -201,6 +201,7 @@ void init_mapnode()
|
||||||
}
|
}
|
||||||
f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
|
f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
|
||||||
|
|
||||||
|
// Deprecated
|
||||||
i = CONTENT_COALSTONE;
|
i = CONTENT_COALSTONE;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
//f->translate_to = new MapNode(CONTENT_STONE, MINERAL_COAL);
|
//f->translate_to = new MapNode(CONTENT_STONE, MINERAL_COAL);
|
||||||
|
@ -287,6 +288,25 @@ void init_mapnode()
|
||||||
f->wall_mounted = true;
|
f->wall_mounted = true;
|
||||||
f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
|
f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
|
||||||
|
|
||||||
|
i = CONTENT_FURNACE;
|
||||||
|
f = &g_content_features[i];
|
||||||
|
f->setAllTextures("furnace_side.png");
|
||||||
|
f->setTexture(2, "furnace_front.png");
|
||||||
|
f->setInventoryTexture("furnace_front.png");
|
||||||
|
f->param_type = CPT_NONE;
|
||||||
|
f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
|
||||||
|
|
||||||
|
i = CONTENT_SIGN_WALL;
|
||||||
|
f = &g_content_features[i];
|
||||||
|
f->setInventoryTexture("sign_wall.png");
|
||||||
|
f->param_type = CPT_LIGHT;
|
||||||
|
f->light_propagates = true;
|
||||||
|
f->sunlight_propagates = true;
|
||||||
|
f->solidness = 0; // drawn separately, makes no faces
|
||||||
|
f->walkable = false;
|
||||||
|
f->wall_mounted = true;
|
||||||
|
f->dug_item = std::string("MaterialItem ")+itos(i)+" 1";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TileSpec MapNode::getTile(v3s16 dir)
|
TileSpec MapNode::getTile(v3s16 dir)
|
||||||
|
|
|
@ -94,12 +94,8 @@ void init_content_inventory_texture_paths();
|
||||||
#define CONTENT_COALSTONE 11
|
#define CONTENT_COALSTONE 11
|
||||||
#define CONTENT_WOOD 12
|
#define CONTENT_WOOD 12
|
||||||
#define CONTENT_SAND 13
|
#define CONTENT_SAND 13
|
||||||
|
#define CONTENT_FURNACE 14
|
||||||
/*
|
#define CONTENT_SIGN_WALL 15
|
||||||
This is used by all kinds of things to allocate memory for all
|
|
||||||
contents except CONTENT_AIR and CONTENT_IGNORE
|
|
||||||
*/
|
|
||||||
#define USEFUL_CONTENT_COUNT 14
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Content feature list
|
Content feature list
|
||||||
|
|
|
@ -60,6 +60,8 @@ void initializeMaterialProperties()
|
||||||
g_material_properties[CONTENT_SAND].setDiggingProperties("",
|
g_material_properties[CONTENT_SAND].setDiggingProperties("",
|
||||||
DiggingProperties(true, 0.4, 0));
|
DiggingProperties(true, 0.4, 0));
|
||||||
|
|
||||||
|
setStoneLikeDiggingProperties(CONTENT_FURNACE, 1.0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Add MesePick to everything
|
Add MesePick to everything
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -3327,6 +3327,36 @@ void setCreativeInventory(Player *player)
|
||||||
/*
|
/*
|
||||||
Give materials
|
Give materials
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// CONTENT_IGNORE-terminated list
|
||||||
|
u8 material_items[] = {
|
||||||
|
CONTENT_TORCH,
|
||||||
|
CONTENT_MUD,
|
||||||
|
CONTENT_STONE,
|
||||||
|
CONTENT_SAND,
|
||||||
|
CONTENT_TREE,
|
||||||
|
CONTENT_LEAVES,
|
||||||
|
CONTENT_MESE,
|
||||||
|
CONTENT_WATERSOURCE,
|
||||||
|
CONTENT_CLOUD,
|
||||||
|
CONTENT_FURNACE,
|
||||||
|
CONTENT_SIGN_WALL,
|
||||||
|
CONTENT_IGNORE
|
||||||
|
};
|
||||||
|
|
||||||
|
u8 *mip = material_items;
|
||||||
|
for(u16 i=0; i<PLAYER_INVENTORY_SIZE; i++)
|
||||||
|
{
|
||||||
|
if(*mip == CONTENT_IGNORE)
|
||||||
|
break;
|
||||||
|
|
||||||
|
InventoryItem *item = new MaterialItem(*mip, 1);
|
||||||
|
player->inventory.addItem("main", item);
|
||||||
|
|
||||||
|
mip++;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
assert(USEFUL_CONTENT_COUNT <= PLAYER_INVENTORY_SIZE);
|
assert(USEFUL_CONTENT_COUNT <= PLAYER_INVENTORY_SIZE);
|
||||||
|
|
||||||
// add torch first
|
// add torch first
|
||||||
|
@ -3344,6 +3374,8 @@ void setCreativeInventory(Player *player)
|
||||||
InventoryItem *item = new MaterialItem(i, 1);
|
InventoryItem *item = new MaterialItem(i, 1);
|
||||||
player->inventory.addItem("main", item);
|
player->inventory.addItem("main", item);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Sign
|
// Sign
|
||||||
{
|
{
|
||||||
InventoryItem *item = new MapBlockObjectItem("Sign Example text");
|
InventoryItem *item = new MapBlockObjectItem("Sign Example text");
|
||||||
|
|
Loading…
Reference in New Issue