the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 132 lines 3.0 kB view raw
1#include "stdafx.h" 2#include "net.minecraft.h" 3#include "net.minecraft.world.item.h" 4#include "net.minecraft.world.level.h" 5#include "net.minecraft.world.level.redstone.h" 6#include "RepeaterTile.h" 7 8const double RepeaterTile::DELAY_RENDER_OFFSETS[4] = {-1.0f / 16.0f, 1.0f / 16.0f, 3.0f / 16.0f, 5.0f / 16.0f}; 9const int RepeaterTile::DELAYS[4]= {1, 2, 3, 4}; 10 11RepeaterTile::RepeaterTile(int id, bool on) : DiodeTile(id, on) 12{ 13} 14 15bool RepeaterTile::use(Level *level, int x, int y, int z, shared_ptr<Player> player, int clickedFace, float clickX, float clickY, float clickZ, bool soundOnly) 16{ 17 if (soundOnly) return false; 18 19 int data = level->getData(x, y, z); 20 int delay = (data & DELAY_MASK) >> DELAY_SHIFT; 21 delay = ((delay + 1) << DELAY_SHIFT) & DELAY_MASK; 22 23 level->setData(x, y, z, delay | (data & DIRECTION_MASK), Tile::UPDATE_ALL); 24 return true; 25} 26 27int RepeaterTile::getTurnOnDelay(int data) 28{ 29 return DELAYS[(data & DELAY_MASK) >> DELAY_SHIFT] * 2; 30} 31 32DiodeTile *RepeaterTile::getOnTile() 33{ 34 return Tile::diode_on; 35} 36 37DiodeTile *RepeaterTile::getOffTile() 38{ 39 return Tile::diode_off; 40} 41 42int RepeaterTile::getResource(int data, Random *random, int playerBonusLevel) 43{ 44 return Item::repeater_Id; 45} 46 47int RepeaterTile::cloneTileId(Level *level, int x, int y, int z) 48{ 49 return Item::repeater_Id; 50} 51 52int RepeaterTile::getRenderShape() 53{ 54 return SHAPE_REPEATER; 55} 56 57bool RepeaterTile::isLocked(LevelSource *level, int x, int y, int z, int data) 58{ 59 return getAlternateSignal(level, x, y, z, data) > Redstone::SIGNAL_NONE; 60} 61 62bool RepeaterTile::isAlternateInput(int tile) 63{ 64 return isDiode(tile); 65} 66 67void RepeaterTile::animateTick(Level *level, int xt, int yt, int zt, Random *random) 68{ 69 if (!on) return; 70 int data = level->getData(xt, yt, zt); 71 int dir = getDirection(data); 72 73 double x = xt + 0.5f + (random->nextFloat() - 0.5f) * 0.2; 74 double y = yt + 0.4f + (random->nextFloat() - 0.5f) * 0.2; 75 double z = zt + 0.5f + (random->nextFloat() - 0.5f) * 0.2; 76 77 double xo = 0; 78 double zo = 0; 79 80 if (random->nextInt(2) == 0) 81 { 82 // spawn on receiver 83 switch (dir) 84 { 85 case Direction::SOUTH: 86 zo = -5.0f / 16.0f; 87 break; 88 case Direction::NORTH: 89 zo = 5.0f / 16.0f; 90 break; 91 case Direction::EAST: 92 xo = -5.0f / 16.0f; 93 break; 94 case Direction::WEST: 95 xo = 5.0f / 16.0f; 96 break; 97 } 98 } 99 else 100 { 101 // spawn on transmitter 102 int delay = (data & DELAY_MASK) >> DELAY_SHIFT; 103 switch (dir) 104 { 105 case Direction::SOUTH: 106 zo = DELAY_RENDER_OFFSETS[delay]; 107 break; 108 case Direction::NORTH: 109 zo = -DELAY_RENDER_OFFSETS[delay]; 110 break; 111 case Direction::EAST: 112 xo = DELAY_RENDER_OFFSETS[delay]; 113 break; 114 case Direction::WEST: 115 xo = -DELAY_RENDER_OFFSETS[delay]; 116 break; 117 } 118 } 119 120 level->addParticle(eParticleType_reddust, x + xo, y, z + zo, 0, 0, 0); 121} 122 123void RepeaterTile::onRemove(Level *level, int x, int y, int z, int id, int data) 124{ 125 DiodeTile::onRemove(level, x, y, z, id, data); 126 updateNeighborsInFront(level, x, y, z); 127} 128 129bool RepeaterTile::TestUse() 130{ 131 return true; 132}