the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 74 lines 2.2 kB view raw
1#include "stdafx.h" 2#include "net.minecraft.world.level.h" 3#include "net.minecraft.world.level.tile.h" 4#include "net.minecraft.world.level.tile.entity.h" 5#include "net.minecraft.h" 6#include "net.minecraft.world.h" 7#include "net.minecraft.core.h" 8#include "DropperTile.h" 9 10DropperTile::DropperTile(int id) : DispenserTile(id) 11{ 12 DISPENSE_BEHAVIOUR = new DefaultDispenseItemBehavior(); 13} 14 15void DropperTile::registerIcons(IconRegister *iconRegister) 16{ 17 icon = iconRegister->registerIcon(L"furnace_side"); 18 iconTop = iconRegister->registerIcon(L"furnace_top"); 19 iconFront = iconRegister->registerIcon(getIconName() + L"_front_horizontal"); 20 iconFrontVertical = iconRegister->registerIcon(getIconName() + L"_front_vertical"); 21} 22 23DispenseItemBehavior *DropperTile::getDispenseMethod(shared_ptr<ItemInstance> item) 24{ 25 return DISPENSE_BEHAVIOUR; 26} 27 28shared_ptr<TileEntity> DropperTile::newTileEntity(Level *level) 29{ 30 return shared_ptr<DropperTileEntity>( new DropperTileEntity() ); 31} 32 33void DropperTile::dispenseFrom(Level *level, int x, int y, int z) 34{ 35 BlockSourceImpl source(level, x, y, z); 36 shared_ptr<DispenserTileEntity> trap = dynamic_pointer_cast<DispenserTileEntity>( source.getEntity() ); 37 if (trap == NULL) return; 38 39 int slot = trap->getRandomSlot(); 40 if (slot < 0) 41 { 42 level->levelEvent(LevelEvent::SOUND_CLICK_FAIL, x, y, z, 0); 43 } 44 else 45 { 46 shared_ptr<ItemInstance> item = trap->getItem(slot); 47 int face = level->getData(x, y, z) & DispenserTile::FACING_MASK; 48 shared_ptr<Container> into = HopperTileEntity::getContainerAt(level, x + Facing::STEP_X[face], y + Facing::STEP_Y[face], z + Facing::STEP_Z[face]); 49 shared_ptr<ItemInstance> remaining = nullptr; 50 51 if (into != NULL) 52 { 53 remaining = HopperTileEntity::addItem(into.get(), item->copy()->remove(1), Facing::OPPOSITE_FACING[face]); 54 55 if (remaining == NULL) 56 { 57 remaining = item->copy(); 58 if (--remaining->count == 0) remaining = nullptr; 59 } 60 else 61 { 62 // placing one item failed, so restore original count 63 remaining = item->copy(); 64 } 65 } 66 else 67 { 68 remaining = DISPENSE_BEHAVIOUR->dispense(&source, item); 69 if (remaining != NULL && remaining->count == 0) remaining = nullptr; 70 } 71 72 trap->setItem(slot, remaining); 73 } 74}