Client *m_client;
};
-class NodeDugEvent: public MtEvent
+class NodeDugEvent : public MtEvent
{
public:
v3s16 p;
p(p),
n(n)
{}
- MtEvent::Type getType() const
- {
- return MtEvent::NODE_DUG;
- }
+ Type getType() const { return NODE_DUG; }
};
class SoundMaker
{
ISoundManager *m_sound;
const NodeDefManager *m_ndef;
+
public:
bool makes_footstep_sound;
float m_player_step_timer;
// See also: serverpackethandle.cpp, action == 2
LocalPlayer *player = client->getEnv().getLocalPlayer();
ClientMap &map = client->getEnv().getClientMap();
- MapNode n = client->getEnv().getClientMap().getNode(nodepos);
+ MapNode n = map.getNode(nodepos);
+ const auto &features = nodedef_manager->get(n);
// NOTE: Similar piece of code exists on the server side for
// cheat detection.
// Get digging parameters
- DigParams params = getDigParams(nodedef_manager->get(n).groups,
+ DigParams params = getDigParams(features.groups,
&selected_item.getToolCapabilities(itemdef_manager),
selected_item.wear);
// If can't dig, try hand
if (!params.diggable) {
- params = getDigParams(nodedef_manager->get(n).groups,
+ params = getDigParams(features.groups,
&hand_item.getToolCapabilities(itemdef_manager));
}
runData.dig_time_complete = params.time;
if (m_cache_enable_particles) {
- const ContentFeatures &features = client->getNodeDefManager()->get(n);
client->getParticleManager()->addNodeParticle(client,
player, nodepos, n, features);
}
runData.dig_instantly = runData.dig_time_complete == 0;
if (client->modsLoaded() && client->getScript()->on_punchnode(nodepos, n))
return;
+
client->interact(INTERACT_START_DIGGING, pointed);
runData.digging = true;
runData.btn_down_for_dig = true;
runData.dig_index = crack_animation_length;
}
- SimpleSoundSpec sound_dig = nodedef_manager->get(n).sound_dig;
+ const auto &sound_dig = features.sound_dig;
if (sound_dig.exists() && params.diggable) {
if (sound_dig.name == "__group") {
// Don't show cracks if not diggable
if (runData.dig_time_complete >= 100000.0) {
} else if (runData.dig_index < crack_animation_length) {
- //TimeTaker timer("client.setTempMod");
- //infostream<<"dig_index="<<dig_index<<std::endl;
client->setCrack(runData.dig_index, nodepos);
} else {
infostream << "Digging completed" << std::endl;
else if (runData.dig_instantly)
runData.nodig_delay_timer = 0.15;
- bool is_valid_position;
- MapNode wasnode = map.getNode(nodepos, &is_valid_position);
- if (is_valid_position) {
- if (client->modsLoaded() &&
- client->getScript()->on_dignode(nodepos, wasnode)) {
- return;
- }
+ if (client->modsLoaded() &&
+ client->getScript()->on_dignode(nodepos, n)) {
+ return;
+ }
- const ContentFeatures &f = client->ndef()->get(wasnode);
- if (f.node_dig_prediction == "air") {
- client->removeNode(nodepos);
- } else if (!f.node_dig_prediction.empty()) {
- content_t id;
- bool found = client->ndef()->getId(f.node_dig_prediction, id);
- if (found)
- client->addNode(nodepos, id, true);
- }
- // implicit else: no prediction
+ if (features.node_dig_prediction == "air") {
+ client->removeNode(nodepos);
+ } else if (!features.node_dig_prediction.empty()) {
+ content_t id;
+ bool found = nodedef_manager->getId(features.node_dig_prediction, id);
+ if (found)
+ client->addNode(nodepos, id, true);
}
+ // implicit else: no prediction
client->interact(INTERACT_DIGGING_COMPLETED, pointed);
if (m_cache_enable_particles) {
- const ContentFeatures &features =
- client->getNodeDefManager()->get(wasnode);
client->getParticleManager()->addDiggingParticles(client,
- player, nodepos, wasnode, features);
+ player, nodepos, n, features);
}
// Send event to trigger sound
- client->getEventManager()->put(new NodeDugEvent(nodepos, wasnode));
+ client->getEventManager()->put(new NodeDugEvent(nodepos, n));
}
if (runData.dig_time_complete < 100000.0) {
// Returns the string used for inventory
std::string getItemString(bool include_meta = true) const;
// Returns the tooltip
- std::string getDescription(IItemDefManager *itemdef) const;
- std::string getShortDescription(IItemDefManager *itemdef) const;
+ std::string getDescription(const IItemDefManager *itemdef) const;
+ std::string getShortDescription(const IItemDefManager *itemdef) const;
/*
Quantity methods
}
// Maximum size of a stack
- u16 getStackMax(IItemDefManager *itemdef) const
+ u16 getStackMax(const IItemDefManager *itemdef) const
{
return itemdef->get(name).stack_max;
}
// Number of items that can be added to this stack
- u16 freeSpace(IItemDefManager *itemdef) const
+ u16 freeSpace(const IItemDefManager *itemdef) const
{
u16 max = getStackMax(itemdef);
if (count >= max)
}
// Returns false if item is not known and cannot be used
- bool isKnown(IItemDefManager *itemdef) const
+ bool isKnown(const IItemDefManager *itemdef) const
{
return itemdef->isKnown(name);
}
// Returns a pointer to the item definition struct,
// or a fallback one (name="unknown") if the item is unknown.
const ItemDefinition& getDefinition(
- IItemDefManager *itemdef) const
+ const IItemDefManager *itemdef) const
{
return itemdef->get(name);
}
// Get tool digging properties, or those of the hand if not a tool
const ToolCapabilities& getToolCapabilities(
- IItemDefManager *itemdef) const
+ const IItemDefManager *itemdef) const
{
const ToolCapabilities *item_cap =
itemdef->get(name).tool_capabilities;
// Wear out (only tools)
// Returns true if the item is (was) a tool
- bool addWear(s32 amount, IItemDefManager *itemdef)
+ bool addWear(s32 amount, const IItemDefManager *itemdef)
{
if(getDefinition(itemdef).type == ITEM_TOOL)
{