From 84da8a2353a75f6f95ab375fac13b035bb14b71f Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Thu, 18 Oct 2012 09:36:30 +0000 Subject: Added basic spawn eggs (patch contributed by Luksor) git-svn-id: http://mc-server.googlecode.com/svn/trunk@973 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/Items/ItemHandler.cpp | 20 ++++++------- source/Items/ItemSpawnEgg.h | 69 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 11 deletions(-) create mode 100644 source/Items/ItemSpawnEgg.h (limited to 'source') diff --git a/source/Items/ItemHandler.cpp b/source/Items/ItemHandler.cpp index 44177760a..af050eabd 100644 --- a/source/Items/ItemHandler.cpp +++ b/source/Items/ItemHandler.cpp @@ -27,6 +27,7 @@ #include "ItemFood.h" #include "ItemSign.h" #include "ItemBed.h" +#include "ItemSpawnEgg.h" #include "../Blocks/BlockHandler.h" @@ -66,15 +67,18 @@ cItemHandler *cItemHandler::CreateItemHandler(int a_ItemID) { default: return new cItemHandler(a_ItemID); - // Single item per handler: - case E_ITEM_SHEARS: return new cItemShearsHandler(a_ItemID); - case E_ITEM_LEAVES: return new cItemLeavesHandler(a_ItemID); - case E_ITEM_SAPLING: return new cItemSaplingHandler(a_ItemID); + // Single item per handler, alphabetically sorted: + case E_ITEM_BED: return new cItemBedHandler(a_ItemID); case E_ITEM_DYE: return new cItemDyeHandler(a_ItemID); - case E_ITEM_SUGARCANE: return new cItemSugarcaneHandler(a_ItemID); case E_ITEM_FLINT_AND_STEEL: return new cItemLighterHandler(a_ItemID); + case E_ITEM_LEAVES: return new cItemLeavesHandler(a_ItemID); case E_ITEM_REDSTONE_DUST: return new cItemRedstoneDustHandler(a_ItemID); case E_ITEM_REDSTONE_REPEATER: return new cItemRedstoneRepeaterHandler(a_ItemID); + case E_ITEM_SAPLING: return new cItemSaplingHandler(a_ItemID); + case E_ITEM_SHEARS: return new cItemShearsHandler(a_ItemID); + case E_ITEM_SIGN: return new cItemSignHandler(a_ItemID); + case E_ITEM_SPAWN_EGG: return new cItemSpawnEggHandler(a_ItemID); + case E_ITEM_SUGARCANE: return new cItemSugarcaneHandler(a_ItemID); case E_ITEM_WOOL: return new cItemClothHandler(a_ItemID); case E_ITEM_WOODEN_HOE: @@ -164,12 +168,6 @@ cItemHandler *cItemHandler::CreateItemHandler(int a_ItemID) { return new cItemFoodHandler(a_ItemID); } - - case E_ITEM_SIGN: - return new cItemSignHandler(a_ItemID); - - case E_ITEM_BED: - return new cItemBedHandler(a_ItemID); } } diff --git a/source/Items/ItemSpawnEgg.h b/source/Items/ItemSpawnEgg.h new file mode 100644 index 000000000..76b742328 --- /dev/null +++ b/source/Items/ItemSpawnEgg.h @@ -0,0 +1,69 @@ + +#pragma once + +#include "ItemHandler.h" +#include "../World.h" +#include "../Player.h" + +// Mobs: +#include "../Mobs/Chicken.h" +#include "../Mobs/Spider.h" +#include "../Mobs/Cow.h" +#include "../Mobs/Squid.h" +#include "../Mobs/Wolf.h" +#include "../Mobs/Slime.h" +#include "../Mobs/Skeleton.h" +#include "../Mobs/Silverfish.h" +#include "../Mobs/Pig.h" +#include "../Mobs/Sheep.h" +#include "../Mobs/Zombie.h" +#include "../Mobs/Enderman.h" +#include "../Mobs/Creeper.h" +#include "../Mobs/Cavespider.h" +#include "../Mobs/Ghast.h" +#include "../Mobs/Zombiepigman.h" + + + + + +class cItemSpawnEggHandler : public cItemHandler +{ +public: + cItemSpawnEggHandler(int a_ItemID) : + cItemHandler(a_ItemID) + { + + } + + + virtual bool OnItemUse(cWorld * a_World, cPlayer * a_Player, cItem * a_Item, int a_X, int a_Y, int a_Z, char a_Dir) override + { + if (a_Dir < 0) + { + return false; + } + + AddDirection(a_X, a_Y, a_Z, a_Dir); + + if (a_Dir == BLOCK_FACE_BOTTOM) + { + a_Y--; + } + + cMonster * Monster = NULL; + + Monster = new cZombie(); + + Monster->Initialize(a_World); + Monster->TeleportTo(a_X + 0.5, a_Y, a_Z + 0.5); + a_World->BroadcastSpawn(*Monster); + + a_Player->UseEquippedItem(); + return true; + } +} ; + + + + -- cgit v1.2.3