function core.item_drop(itemstack, dropper, pos)
if dropper and dropper:is_player() then
- local v = dropper:get_look_dir()
- local p = {x=pos.x, y=pos.y+1.2, z=pos.z}
- local cs = itemstack:get_count()
- if dropper:get_player_control().sneak then
- cs = 1
- end
- local item = itemstack:take_item(cs)
+ local dir = dropper:get_look_dir()
+ local p = {x = pos.x, y = pos.y + 1.2, z = pos.z}
+ local cnt = itemstack:get_count()
+ local item = itemstack:take_item(cnt)
local obj = core.add_item(p, item)
if obj then
- v.x = v.x*2
- v.y = v.y*2 + 2
- v.z = v.z*2
- obj:setvelocity(v)
+ dir.x = dir.x * 2
+ dir.y = dir.y * 2 + 2
+ dir.z = dir.z * 2
+ obj:set_velocity(dir)
obj:get_luaentity().dropped_by = dropper:get_player_name()
return itemstack
end
void processKeyInput();
void processItemSelection(u16 *new_playeritem);
- void dropSelectedItem();
+ void dropSelectedItem(bool single_item = false);
void openInventory();
void openConsole(float scale, const wchar_t *line=NULL);
void toggleFreeMove();
void Game::processKeyInput()
{
if (wasKeyDown(KeyType::DROP)) {
- dropSelectedItem();
+ dropSelectedItem(isKeyDown(KeyType::SNEAK));
} else if (wasKeyDown(KeyType::AUTOFORWARD)) {
toggleAutoforward();
} else if (wasKeyDown(KeyType::INVENTORY)) {
}
-void Game::dropSelectedItem()
+void Game::dropSelectedItem(bool single_item)
{
IDropAction *a = new IDropAction();
- a->count = 0;
+ a->count = single_item ? 1 : 0;
a->from_inv.setCurrentPlayer();
a->from_list = "main";
a->from_i = client->getPlayerItem();