the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 165 lines 3.1 kB view raw
1#include "stdafx.h" 2#include "net.minecraft.world.entity.h" 3#include "net.minecraft.world.entity.player.h" 4#include "net.minecraft.world.level.h" 5#include "net.minecraft.world.level.tile.h" 6#include "net.minecraft.world.level.tile.entity.h" 7#include "net.minecraft.world.entity.item.h" 8#include "net.minecraft.world.phys.h" 9#include "MinecartHopper.h" 10 11const int MinecartHopper::MOVE_ITEM_SPEED = HopperTileEntity::MOVE_ITEM_SPEED / 2; 12 13void MinecartHopper::_init() 14{ 15 enabled = true; 16 cooldownTime = -1; 17 18 // 4J Stu - This function call had to be moved here from the Entity ctor to ensure that 19 // the derived version of the function is called 20 this->defineSynchedData(); 21} 22 23MinecartHopper::MinecartHopper(Level *level) : MinecartContainer(level) 24{ 25 _init(); 26} 27 28MinecartHopper::MinecartHopper(Level *level, double x, double y, double z) : MinecartContainer(level, x, y, z) 29{ 30 _init(); 31} 32 33int MinecartHopper::getType() 34{ 35 return TYPE_HOPPER; 36} 37 38Tile *MinecartHopper::getDefaultDisplayTile() 39{ 40 return Tile::hopper; 41} 42 43int MinecartHopper::getDefaultDisplayOffset() 44{ 45 return 1; 46} 47 48unsigned int MinecartHopper::getContainerSize() 49{ 50 return 5; 51} 52 53bool MinecartHopper::interact(shared_ptr<Player> player) 54{ 55 if (!level->isClientSide) 56 { 57 player->openHopper(dynamic_pointer_cast<MinecartHopper>(shared_from_this())); 58 } 59 60 return true; 61} 62 63void MinecartHopper::activateMinecart(int xt, int yt, int zt, bool state) 64{ 65 bool newEnabled = !state; 66 67 if (newEnabled != isEnabled()) 68 { 69 setEnabled(newEnabled); 70 } 71} 72 73bool MinecartHopper::isEnabled() 74{ 75 return enabled; 76} 77 78void MinecartHopper::setEnabled(bool enabled) 79{ 80 this->enabled = enabled; 81} 82 83Level *MinecartHopper::getLevel() 84{ 85 return level; 86} 87 88double MinecartHopper::getLevelX() 89{ 90 return x; 91} 92 93double MinecartHopper::getLevelY() 94{ 95 return y; 96} 97 98double MinecartHopper::getLevelZ() 99{ 100 return z; 101} 102 103void MinecartHopper::tick() 104{ 105 MinecartContainer::tick(); 106 107 if (!level->isClientSide && isAlive() && isEnabled()) 108 { 109 cooldownTime--; 110 if (!isOnCooldown()) 111 { 112 setCooldown(0); 113 114 if (suckInItems()) 115 { 116 setCooldown(MOVE_ITEM_SPEED); 117 MinecartContainer::setChanged(); 118 } 119 } 120 } 121} 122 123bool MinecartHopper::suckInItems() 124{ 125 if (HopperTileEntity::suckInItems(this)) return true; 126 127 vector<shared_ptr<Entity> > *items = level->getEntitiesOfClass(typeid(ItemEntity), bb->grow(0.25f, 0, 0.25f), EntitySelector::ENTITY_STILL_ALIVE); 128 129 if (items->size() > 0) 130 { 131 HopperTileEntity::addItem( this, dynamic_pointer_cast<ItemEntity>(items->at(0)) ); 132 } 133 delete items; 134 135 return false; 136} 137 138void MinecartHopper::destroy(DamageSource *source) 139{ 140 MinecartContainer::destroy(source); 141 142 spawnAtLocation(Tile::hopper_Id, 1, 0); 143} 144 145void MinecartHopper::addAdditonalSaveData(CompoundTag *base) 146{ 147 MinecartContainer::addAdditonalSaveData(base); 148 base->putInt(L"TransferCooldown", cooldownTime); 149} 150 151void MinecartHopper::readAdditionalSaveData(CompoundTag *base) 152{ 153 MinecartContainer::readAdditionalSaveData(base); 154 cooldownTime = base->getInt(L"TransferCooldown"); 155} 156 157void MinecartHopper::setCooldown(int time) 158{ 159 cooldownTime = time; 160} 161 162bool MinecartHopper::isOnCooldown() 163{ 164 return cooldownTime > 0; 165}