From d47ff5520373acb359590fb036b6a761af58cf75 Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Mon, 18 Feb 2013 16:48:50 +0000 Subject: Minecarts can now be placed. No interaction, no physics, though. git-svn-id: http://mc-server.googlecode.com/svn/trunk@1219 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/Items/ItemHandler.cpp | 40 +++++++++++++--------- source/Items/ItemMinecart.h | 79 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+), 16 deletions(-) create mode 100644 source/Items/ItemMinecart.h (limited to 'source/Items') diff --git a/source/Items/ItemHandler.cpp b/source/Items/ItemHandler.cpp index 6cb98706b..2b2d9268b 100644 --- a/source/Items/ItemHandler.cpp +++ b/source/Items/ItemHandler.cpp @@ -5,32 +5,33 @@ #include "../World.h" #include "../Player.h" -//Handler +// Handlers: +#include "ItemBed.h" +#include "ItemBrewingStand.h" +#include "ItemBucket.h" +#include "ItemCauldron.h" #include "ItemCloth.h" +#include "ItemDoor.h" +#include "ItemDye.h" +#include "ItemFlowerPot.h" +#include "ItemFood.h" #include "ItemHoe.h" -#include "ItemSlab.h" -#include "ItemWood.h" -#include "ItemShears.h" #include "ItemLeaves.h" -#include "ItemSapling.h" -#include "ItemBucket.h" #include "ItemLighter.h" +#include "ItemMinecart.h" +#include "ItemPickaxe.h" #include "ItemRedstoneDust.h" #include "ItemRedstoneRepeater.h" +#include "ItemSapling.h" #include "ItemSeeds.h" -#include "ItemDye.h" -#include "ItemSugarcane.h" -#include "ItemPickaxe.h" +#include "ItemShears.h" #include "ItemShovel.h" -#include "ItemSword.h" -#include "ItemDoor.h" -#include "ItemFood.h" #include "ItemSign.h" -#include "ItemBed.h" +#include "ItemSlab.h" #include "ItemSpawnEgg.h" -#include "ItemFlowerPot.h" -#include "ItemBrewingStand.h" -#include "ItemCauldron.h" +#include "ItemSugarcane.h" +#include "ItemSword.h" +#include "ItemWood.h" #include "../Blocks/BlockHandler.h" @@ -155,6 +156,13 @@ cItemHandler *cItemHandler::CreateItemHandler(int a_ItemType) return new cItemDoorHandler(a_ItemType); } + case E_ITEM_MINECART: + case E_ITEM_CHEST_MINECART: + case E_ITEM_FURNACE_MINECART: + { + return new cItemMinecartHandler(a_ItemType); + } + // Food: case E_ITEM_BREAD: case E_ITEM_COOKIE: diff --git a/source/Items/ItemMinecart.h b/source/Items/ItemMinecart.h new file mode 100644 index 000000000..5a2d78774 --- /dev/null +++ b/source/Items/ItemMinecart.h @@ -0,0 +1,79 @@ + +// ItemMinecart.h + +// Declares the various minecart ItemHandlers + + + + + +#pragma once + +// Not needed, we're being included only from ItemHandler.cpp which already has this file: #include "ItemHandler.h" +#include "../Minecart.h" + + + + + +class cItemMinecartHandler : + public cItemHandler +{ + typedef cItemHandler super; + +public: + cItemMinecartHandler(int a_ItemType) : + super(a_ItemType) + { + } + + + + virtual bool OnItemUse(cWorld * a_World, cPlayer * a_Player, cItem * a_Item, int a_BlockX, int a_BlockY, int a_BlockZ, char a_Dir) override + { + if (a_Dir < 0) + { + return false; + } + + // Check that there's rail in there: + BLOCKTYPE Block = a_World->GetBlock(a_BlockX, a_BlockY, a_BlockZ); + switch (Block) + { + case E_BLOCK_MINECART_TRACKS: + case E_BLOCK_POWERED_RAIL: + case E_BLOCK_DETECTOR_RAIL: + { + // These are allowed + break; + } + default: + { + LOGD("Used minecart on an unsuitable block %d (%s)", Block, ItemTypeToString(Block).c_str()); + return false; + } + } + + cMinecart::ePayload Payload = cMinecart::mpNone; + switch (m_ItemType) + { + case E_ITEM_MINECART: Payload = cMinecart::mpNone; break; + case E_ITEM_CHEST_MINECART: Payload = cMinecart::mpChest; break; + case E_ITEM_FURNACE_MINECART: Payload = cMinecart::mpFurnace; break; + default: + { + ASSERT(!"Unhandled minecart item"); + return false; + } + } // switch (m_ItemType) + cMinecart * Minecart = new cMinecart(Payload, (double)a_BlockX + 0.5, a_BlockY, (double)a_BlockZ + 0.5); + a_World->AddEntity(Minecart); + Minecart->Initialize(a_World); + return true; + } + +} ; + + + + -- cgit v1.2.3