public function operate(Position $anchor) { if (is_int($this->delta)) { throw new \BadMethodCallException("MacroOperation is of type TRUE (wait) not FALSE (operate) thus cannot be operated"); } $anchor->getLevel()->setBlock($anchor->add($this->delta), $this->block, false, true); // update }
public static function createFromPos_Rot(Position $pos, $yaw, $pitch) { $y = -sin(deg2rad($pitch)); $xz = cos(deg2rad($pitch)); $x = -$xz * sin(deg2rad($yaw)); $z = $xz * cos(deg2rad($yaw)); // CREDIT partially copied from PocketMine Entity.php source because I am too lazy to do those trigo :P $newPos = $pos->add($x, $y, $z); return new CuboidSpace($pos, $newPos); }
private function W_sphere(Position $pos, $blocks, $radiusX, $radiusY, $radiusZ, $filled = true) { $count = 0; $radiusX += 0.5; $radiusY += 0.5; $radiusZ += 0.5; $invRadiusX = 1 / $radiusX; $invRadiusY = 1 / $radiusY; $invRadiusZ = 1 / $radiusZ; $ceilRadiusX = (int) ceil($radiusX); $ceilRadiusY = (int) ceil($radiusY); $ceilRadiusZ = (int) ceil($radiusZ); $bcnt = count($blocks) - 1; $nextXn = 0; $breakX = false; for ($x = 0; $x <= $ceilRadiusX and $breakX === false; ++$x) { $xn = $nextXn; $nextXn = ($x + 1) * $invRadiusX; $nextYn = 0; $breakY = false; for ($y = 0; $y <= $ceilRadiusY and $breakY === false; ++$y) { $yn = $nextYn; $nextYn = ($y + 1) * $invRadiusY; $nextZn = 0; $breakZ = false; for ($z = 0; $z <= $ceilRadiusZ; ++$z) { $zn = $nextZn; $nextZn = ($z + 1) * $invRadiusZ; $distanceSq = WorldEditor::lengthSq($xn, $yn, $zn); if ($distanceSq > 1) { if ($z === 0) { if ($y === 0) { $breakX = true; $breakY = true; break; } $breakY = true; break; } break; } if ($filled === false) { if (WorldEditor::lengthSq($nextXn, $yn, $zn) <= 1 and WorldEditor::lengthSq($xn, $nextYn, $zn) <= 1 and WorldEditor::lengthSq($xn, $yn, $nextZn) <= 1) { continue; } } $count += (int) $pos->getLevel()->setBlock($pos->add($x, $y, $z), $blocks[mt_rand(0, $bcnt)]->getBlock(), false); $count += (int) $pos->getLevel()->setBlock($pos->add(-$x, $y, $z), $blocks[mt_rand(0, $bcnt)]->getBlock(), false); $count += (int) $pos->getLevel()->setBlock($pos->add($x, -$y, $z), $blocks[mt_rand(0, $bcnt)]->getBlock(), false); $count += (int) $pos->getLevel()->setBlock($pos->add($x, $y, -$z), $blocks[mt_rand(0, $bcnt)]->getBlock(), false); $count += (int) $pos->getLevel()->setBlock($pos->add(-$x, -$y, $z), $blocks[mt_rand(0, $bcnt)]->getBlock(), false); $count += (int) $pos->getLevel()->setBlock($pos->add($x, -$y, -$z), $blocks[mt_rand(0, $bcnt)]->getBlock(), false); $count += (int) $pos->getLevel()->setBlock($pos->add(-$x, $y, -$z), $blocks[mt_rand(0, $bcnt)]->getBlock(), false); $count += (int) $pos->getLevel()->setBlock($pos->add(-$x, -$y, -$z), $blocks[mt_rand(0, $bcnt)]->getBlock(), false); } } } return $count . " block(s) have been changed."; }
public function removeBlockWithRange(Position $pos) { $halfRange = (self::RANGE - 1) / 2; for ($x = 0; $x <= self::RANGE; $x++) { for ($z = 0; $z <= self::RANGE; $z++) { $this->removeBlockWithAnim($pos->add($halfRange - $x, 0, $halfRange - $z)); } } }
public function __construct(Position $pos, $fromData, $toData) { $this->pos = $pos; $this->packets = [$this->getTextPacket($pos->add(0.5, 1.25, 0.5), TextFormat::GOLD . $fromData["name"] . "\n" . ExchangeItem::getTranslation("TO") . "\n" . TextFormat::AQUA . $toData["name"])]; $this->spawnToAll(); }