summaryrefslogtreecommitdiffstats
path: root/src/Items
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/Items/ItemFood.h2
-rw-r--r--src/Items/ItemGoldenApple.h1
-rw-r--r--src/Items/ItemHandler.cpp12
-rw-r--r--src/Items/ItemHoe.h9
-rw-r--r--src/Items/ItemMilk.h8
-rw-r--r--src/Items/ItemMushroomSoup.h53
-rw-r--r--src/Items/ItemPickaxe.h1
-rw-r--r--src/Items/ItemPotion.h8
-rw-r--r--src/Items/ItemSpawnEgg.h56
9 files changed, 112 insertions, 38 deletions
diff --git a/src/Items/ItemFood.h b/src/Items/ItemFood.h
index 886c5e4a3..e7c718c77 100644
--- a/src/Items/ItemFood.h
+++ b/src/Items/ItemFood.h
@@ -1,3 +1,4 @@
+
#pragma once
#include "ItemHandler.h"
@@ -41,7 +42,6 @@ public:
// Golden apple handled in ItemGoldenApple
case E_ITEM_GOLDEN_CARROT: return FoodInfo(6, 14.4);
case E_ITEM_MELON_SLICE: return FoodInfo(2, 1.2);
- case E_ITEM_MUSHROOM_SOUP: return FoodInfo(6, 7.2);
case E_ITEM_POISONOUS_POTATO: return FoodInfo(2, 1.2);
// Potatoes handled in ItemSeeds
case E_ITEM_PUMPKIN_PIE: return FoodInfo(8, 4.8);
diff --git a/src/Items/ItemGoldenApple.h b/src/Items/ItemGoldenApple.h
index 02ac0202c..5f6f1de6c 100644
--- a/src/Items/ItemGoldenApple.h
+++ b/src/Items/ItemGoldenApple.h
@@ -36,6 +36,7 @@ public:
a_Player->AddEntityEffect(cEntityEffect::effFireResistance, 6000, 0);
}
+ a_Player->GetInventory().RemoveOneEquippedItem();
return true;
}
diff --git a/src/Items/ItemHandler.cpp b/src/Items/ItemHandler.cpp
index ec5283774..caa623abc 100644
--- a/src/Items/ItemHandler.cpp
+++ b/src/Items/ItemHandler.cpp
@@ -33,6 +33,7 @@
#include "ItemLilypad.h"
#include "ItemMap.h"
#include "ItemMinecart.h"
+#include "ItemMushroomSoup.h"
#include "ItemNetherWart.h"
#include "ItemPainting.h"
#include "ItemPickaxe.h"
@@ -125,6 +126,7 @@ cItemHandler *cItemHandler::CreateItemHandler(int a_ItemType)
case E_BLOCK_LILY_PAD: return new cItemLilypadHandler(a_ItemType);
case E_ITEM_MAP: return new cItemMapHandler();
case E_ITEM_MILK: return new cItemMilkHandler();
+ case E_ITEM_MUSHROOM_SOUP: return new cItemMushroomSoupHandler(a_ItemType);
case E_ITEM_ITEM_FRAME: return new cItemItemFrameHandler(a_ItemType);
case E_ITEM_NETHER_WART: return new cItemNetherWartHandler(a_ItemType);
case E_ITEM_PAINTING: return new cItemPaintingHandler(a_ItemType);
@@ -223,7 +225,6 @@ cItemHandler *cItemHandler::CreateItemHandler(int a_ItemType)
case E_ITEM_COOKIE:
case E_ITEM_GOLDEN_CARROT:
case E_ITEM_MELON_SLICE:
- case E_ITEM_MUSHROOM_SOUP:
case E_ITEM_POISONOUS_POTATO:
case E_ITEM_PUMPKIN_PIE:
case E_ITEM_RABBIT_STEW:
@@ -341,7 +342,7 @@ void cItemHandler::OnBlockDestroyed(cWorld * a_World, cPlayer * a_Player, const
{
cChunkInterface ChunkInterface(a_World->GetChunkMap());
cBlockInServerPluginInterface PluginInterface(*a_World);
- Handler->DropBlock(ChunkInterface, *a_World, PluginInterface, a_Player, a_BlockX, a_BlockY, a_BlockZ, CanHarvestBlock(Block), a_Player->GetEquippedItem().m_Enchantments.GetLevel(cEnchantments::enchSilkTouch) > 0);
+ Handler->DropBlock(ChunkInterface, *a_World, PluginInterface, a_Player, a_BlockX, a_BlockY, a_BlockZ, CanHarvestBlock(Block));
}
if (!cBlockInfo::IsOneHitDig(Block))
@@ -593,7 +594,6 @@ bool cItemHandler::CanHarvestBlock(BLOCKTYPE a_BlockType)
case E_BLOCK_NETHERRACK:
case E_BLOCK_NEW_STONE_SLAB:
case E_BLOCK_OBSIDIAN:
- case E_BLOCK_PACKED_ICE:
case E_BLOCK_PRISMARINE_BLOCK:
case E_BLOCK_RED_SANDSTONE:
case E_BLOCK_RED_SANDSTONE_STAIRS:
@@ -608,6 +608,8 @@ bool cItemHandler::CanHarvestBlock(BLOCKTYPE a_BlockType)
case E_BLOCK_STONE_PRESSURE_PLATE:
case E_BLOCK_STONE_SLAB:
case E_BLOCK_VINES:
+ case E_BLOCK_PACKED_ICE:
+ case E_BLOCK_MOB_SPAWNER:
{
return false;
}
@@ -660,6 +662,10 @@ bool cItemHandler::GetEatEffect(cEntityEffect::eType & a_EffectType, int & a_Eff
bool cItemHandler::EatItem(cPlayer * a_Player, cItem * a_Item)
{
UNUSED(a_Item);
+ if (!a_Player->IsGameModeCreative())
+ {
+ a_Player->GetInventory().RemoveOneEquippedItem();
+ }
FoodInfo Info = GetFoodInfo();
if ((Info.FoodLevel > 0) || (Info.Saturation > 0.f))
diff --git a/src/Items/ItemHoe.h b/src/Items/ItemHoe.h
index 8d0b71478..de8b9a061 100644
--- a/src/Items/ItemHoe.h
+++ b/src/Items/ItemHoe.h
@@ -20,11 +20,17 @@ public:
virtual bool OnItemUse(cWorld *a_World, cPlayer *a_Player, const cItem & a_Item, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_Dir) override
{
+ if ((a_Dir == BLOCK_FACE_NONE) || (a_BlockY >= cChunkDef::Height))
+ {
+ return false;
+ }
BLOCKTYPE Block = a_World->GetBlock(a_BlockX, a_BlockY, a_BlockZ);
+ BLOCKTYPE UpperBlock = a_World->GetBlock(a_BlockX, a_BlockY + 1, a_BlockZ);
- if ((Block == E_BLOCK_DIRT) || (Block == E_BLOCK_GRASS))
+ if (((Block == E_BLOCK_DIRT) || (Block == E_BLOCK_GRASS)) && (UpperBlock == E_BLOCK_AIR))
{
a_World->FastSetBlock(a_BlockX, a_BlockY, a_BlockZ, E_BLOCK_FARMLAND, 0);
+ a_World->BroadcastSoundEffect("dig.gravel", a_BlockX + 0.5, a_BlockY + 0.5, a_BlockZ + 0.5, 1.0f, 0.8f);
a_Player->UseEquippedItem();
return true;
}
@@ -41,4 +47,3 @@ public:
-
diff --git a/src/Items/ItemMilk.h b/src/Items/ItemMilk.h
index db7bc13be..c9a90865a 100644
--- a/src/Items/ItemMilk.h
+++ b/src/Items/ItemMilk.h
@@ -21,8 +21,12 @@ public:
{
UNUSED(a_Item);
a_Player->ClearEntityEffects();
- a_Player->GetInventory().RemoveOneEquippedItem();
- a_Player->GetInventory().AddItem(E_ITEM_BUCKET);
+
+ if (!a_Player->IsGameModeCreative())
+ {
+ a_Player->GetInventory().RemoveOneEquippedItem();
+ a_Player->GetInventory().AddItem(E_ITEM_BUCKET);
+ }
return true;
}
};
diff --git a/src/Items/ItemMushroomSoup.h b/src/Items/ItemMushroomSoup.h
new file mode 100644
index 000000000..dba313ec5
--- /dev/null
+++ b/src/Items/ItemMushroomSoup.h
@@ -0,0 +1,53 @@
+
+#pragma once
+
+#include "ItemHandler.h"
+
+
+
+
+
+class cItemMushroomSoupHandler :
+ public cItemHandler
+{
+ typedef cItemHandler super;
+
+public:
+ cItemMushroomSoupHandler(int a_ItemType)
+ : super(a_ItemType)
+ {
+ }
+
+
+ virtual bool IsFood(void) override
+ {
+ return true;
+ }
+
+
+ virtual FoodInfo GetFoodInfo(void) override
+ {
+ return FoodInfo(6, 7.2);
+ }
+
+
+ virtual bool EatItem(cPlayer * a_Player, cItem * a_Item) override
+ {
+ if (!super::EatItem(a_Player, a_Item))
+ {
+ return false;
+ }
+
+ // Return a bowl to the inventory
+ if (!a_Player->IsGameModeCreative())
+ {
+ a_Player->GetInventory().AddItem(cItem(E_ITEM_BOWL), true, true);
+ }
+ return true;
+ }
+
+};
+
+
+
+
diff --git a/src/Items/ItemPickaxe.h b/src/Items/ItemPickaxe.h
index 17fd96822..e0cf5d711 100644
--- a/src/Items/ItemPickaxe.h
+++ b/src/Items/ItemPickaxe.h
@@ -81,6 +81,7 @@ public:
case E_BLOCK_STONE_BRICK_STAIRS:
case E_BLOCK_NETHER_BRICK_STAIRS:
case E_BLOCK_CAULDRON:
+ case E_BLOCK_MOB_SPAWNER:
{
return PickaxeLevel() >= 1;
}
diff --git a/src/Items/ItemPotion.h b/src/Items/ItemPotion.h
index 24614cd8a..398ef6805 100644
--- a/src/Items/ItemPotion.h
+++ b/src/Items/ItemPotion.h
@@ -68,8 +68,12 @@ public:
cEntityEffect::GetPotionEffectDuration(PotionDamage),
cEntityEffect::GetPotionEffectIntensity(PotionDamage)
);
- a_Player->GetInventory().RemoveOneEquippedItem();
- a_Player->GetInventory().AddItem(E_ITEM_GLASS_BOTTLE);
+
+ if (!a_Player->IsGameModeCreative())
+ {
+ a_Player->GetInventory().RemoveOneEquippedItem();
+ a_Player->GetInventory().AddItem(E_ITEM_GLASS_BOTTLE);
+ }
return true;
}
};
diff --git a/src/Items/ItemSpawnEgg.h b/src/Items/ItemSpawnEgg.h
index bba97afa1..617ecd808 100644
--- a/src/Items/ItemSpawnEgg.h
+++ b/src/Items/ItemSpawnEgg.h
@@ -33,9 +33,9 @@ public:
a_BlockY--;
}
- cMonster::eType MonsterType = ItemDamageToMonsterType(a_Item.m_ItemDamage);
+ eMonsterType MonsterType = ItemDamageToMonsterType(a_Item.m_ItemDamage);
if (
- (MonsterType != cMonster::mtInvalidType) && // Valid monster type
+ (MonsterType != mtInvalidType) && // Valid monster type
(a_World->SpawnMob(a_BlockX + 0.5, a_BlockY, a_BlockZ + 0.5, MonsterType) >= 0)) // Spawning succeeded
{
if (!a_Player->IsGameModeCreative())
@@ -52,36 +52,36 @@ public:
/** Converts the Spawn egg item damage to the monster type to spawn.
Returns mtInvalidType for invalid damage values. */
- static cMonster::eType ItemDamageToMonsterType(short a_ItemDamage)
+ static eMonsterType ItemDamageToMonsterType(short a_ItemDamage)
{
switch (a_ItemDamage)
{
- case E_META_SPAWN_EGG_BAT: return cMonster::mtBat;
- case E_META_SPAWN_EGG_BLAZE: return cMonster::mtBlaze;
- case E_META_SPAWN_EGG_CAVE_SPIDER: return cMonster::mtCaveSpider;
- case E_META_SPAWN_EGG_CHICKEN: return cMonster::mtChicken;
- case E_META_SPAWN_EGG_COW: return cMonster::mtCow;
- case E_META_SPAWN_EGG_CREEPER: return cMonster::mtCreeper;
- case E_META_SPAWN_EGG_ENDERMAN: return cMonster::mtEnderman;
- case E_META_SPAWN_EGG_GHAST: return cMonster::mtGhast;
- case E_META_SPAWN_EGG_HORSE: return cMonster::mtHorse;
- case E_META_SPAWN_EGG_MAGMA_CUBE: return cMonster::mtMagmaCube;
- case E_META_SPAWN_EGG_MOOSHROOM: return cMonster::mtMooshroom;
- case E_META_SPAWN_EGG_OCELOT: return cMonster::mtOcelot;
- case E_META_SPAWN_EGG_PIG: return cMonster::mtPig;
- case E_META_SPAWN_EGG_SHEEP: return cMonster::mtSheep;
- case E_META_SPAWN_EGG_SILVERFISH: return cMonster::mtSilverfish;
- case E_META_SPAWN_EGG_SKELETON: return cMonster::mtSkeleton;
- case E_META_SPAWN_EGG_SLIME: return cMonster::mtSlime;
- case E_META_SPAWN_EGG_SPIDER: return cMonster::mtSpider;
- case E_META_SPAWN_EGG_SQUID: return cMonster::mtSquid;
- case E_META_SPAWN_EGG_VILLAGER: return cMonster::mtVillager;
- case E_META_SPAWN_EGG_WITCH: return cMonster::mtWitch;
- case E_META_SPAWN_EGG_WOLF: return cMonster::mtWolf;
- case E_META_SPAWN_EGG_ZOMBIE: return cMonster::mtZombie;
- case E_META_SPAWN_EGG_ZOMBIE_PIGMAN: return cMonster::mtZombiePigman;
+ case E_META_SPAWN_EGG_BAT: return mtBat;
+ case E_META_SPAWN_EGG_BLAZE: return mtBlaze;
+ case E_META_SPAWN_EGG_CAVE_SPIDER: return mtCaveSpider;
+ case E_META_SPAWN_EGG_CHICKEN: return mtChicken;
+ case E_META_SPAWN_EGG_COW: return mtCow;
+ case E_META_SPAWN_EGG_CREEPER: return mtCreeper;
+ case E_META_SPAWN_EGG_ENDERMAN: return mtEnderman;
+ case E_META_SPAWN_EGG_GHAST: return mtGhast;
+ case E_META_SPAWN_EGG_HORSE: return mtHorse;
+ case E_META_SPAWN_EGG_MAGMA_CUBE: return mtMagmaCube;
+ case E_META_SPAWN_EGG_MOOSHROOM: return mtMooshroom;
+ case E_META_SPAWN_EGG_OCELOT: return mtOcelot;
+ case E_META_SPAWN_EGG_PIG: return mtPig;
+ case E_META_SPAWN_EGG_SHEEP: return mtSheep;
+ case E_META_SPAWN_EGG_SILVERFISH: return mtSilverfish;
+ case E_META_SPAWN_EGG_SKELETON: return mtSkeleton;
+ case E_META_SPAWN_EGG_SLIME: return mtSlime;
+ case E_META_SPAWN_EGG_SPIDER: return mtSpider;
+ case E_META_SPAWN_EGG_SQUID: return mtSquid;
+ case E_META_SPAWN_EGG_VILLAGER: return mtVillager;
+ case E_META_SPAWN_EGG_WITCH: return mtWitch;
+ case E_META_SPAWN_EGG_WOLF: return mtWolf;
+ case E_META_SPAWN_EGG_ZOMBIE: return mtZombie;
+ case E_META_SPAWN_EGG_ZOMBIE_PIGMAN: return mtZombiePigman;
}
- return cMonster::mtInvalidType;
+ return mtInvalidType;
}
} ;