├── EntityEditor_v1.0.0.phar ├── README.md ├── plugin.yml └── src └── skh6075 └── entityeditor ├── Loader.php └── command └── EntityEditorCommand.php /EntityEditor_v1.0.0.phar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PMMPPluginsRepository/EntityEditor/9ba3492ebb51633ffba2ea5070fc5e22ce2e35ef/EntityEditor_v1.0.0.phar -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # EntityEditor 2 | [PMMP][Tool] A Plugin implement Entity Editor. 3 | -------------------------------------------------------------------------------- /plugin.yml: -------------------------------------------------------------------------------- 1 | name: EntityEditor 2 | main: skh6075\entityeditor\Loader 3 | version: 1.0.0 4 | api: 4.0.0 5 | website: https://github.com/skh6075 6 | 7 | permissions: 8 | entity.editor.permission: 9 | default: op -------------------------------------------------------------------------------- /src/skh6075/entityeditor/Loader.php: -------------------------------------------------------------------------------- 1 | 23 | * @var Closure[] 24 | */ 25 | public static array $queue = []; 26 | 27 | protected function onLoad() : void{ 28 | self::$instance = $this; 29 | } 30 | 31 | protected function onEnable() : void{ 32 | $this->getServer()->getCommandMap()->register(strtolower($this->getName()), new EntityEditorCommand($this)); 33 | $this->getServer()->getPluginManager()->registerEvent(DataPacketReceiveEvent::class, function(DataPacketReceiveEvent $event): void{ 34 | $packet = $event->getPacket(); 35 | $player = $event->getOrigin()->getPlayer(); 36 | if( 37 | $player !== null && 38 | $packet instanceof InventoryTransactionPacket && 39 | $packet->trData instanceof UseItemOnEntityTransactionData 40 | ){ 41 | $rawID = $player->getUniqueId()->getBytes(); 42 | $entity = $player->getWorld()->getEntity($packet->trData->getActorRuntimeId()); 43 | if(!isset(self::$queue[$rawID]) || $entity === null){ 44 | return; 45 | } 46 | (self::$queue[$rawID])($player, $entity); 47 | } 48 | }, EventPriority::MONITOR, $this, false); 49 | } 50 | } -------------------------------------------------------------------------------- /src/skh6075/entityeditor/command/EntityEditorCommand.php: -------------------------------------------------------------------------------- 1 | setPermission("entity.editor.permission"); 22 | $this->owningPlugin = $loader; 23 | } 24 | 25 | public function execute(CommandSender $sender, string $commandLabel, array $args): bool{ 26 | if(!$sender instanceof Player || !$this->testPermission($sender)){ 27 | return false; 28 | } 29 | switch(array_shift($args) ?? ''){ 30 | case 'id': 31 | $func = static function(Player $player, Entity $entity): void{ 32 | $player->sendMessage(TextFormat::AQUA . "EntityID: {$entity->getId()}"); 33 | }; 34 | Loader::$queue[$sender->getUniqueId()->getBytes()] = $func; 35 | $sender->sendMessage(TextFormat::YELLOW . "Click on the entity whose id you want to check"); 36 | break; 37 | case 'look': 38 | $func = static function(Player $player, Entity $entity): void{ 39 | $entity->setRotation($player->getLocation()->yaw, $player->getLocation()->pitch); 40 | }; 41 | Loader::$queue[$sender->getUniqueId()->getBytes()] = $func; 42 | $sender->sendMessage(TextFormat::YELLOW . "Click on the entity you want to look at"); 43 | break; 44 | case 'pos': 45 | $x = array_shift($args) ?? ''; 46 | $y = array_shift($args) ?? ''; 47 | $z = array_shift($args) ?? ''; 48 | if(!is_numeric($x) || !is_numeric($y) || !is_numeric($z)){ 49 | $sender->sendMessage(TextFormat::RED . "/" . $this->getName() . " pos [x:float] [y:float] [z:float]"); 50 | return false; 51 | } 52 | $offset = array_map('floatval', [$x, $y, $z]); 53 | $func = static function(Player $player, Entity $entity) use ($offset): void{ 54 | $entity->teleport($entity->getPosition()->add(...$offset)); 55 | }; 56 | Loader::$queue[$sender->getUniqueId()->getBytes()] = $func; 57 | $sender->sendMessage(TextFormat::YELLOW . "Click on the entity you want to reposition"); 58 | break; 59 | case 'scale': 60 | $scale = array_shift($args) ?? ''; 61 | if(!is_numeric($scale)){ 62 | $sender->sendMessage(TextFormat::RED . "/" . $this->getName() . " scale [scale:float]"); 63 | return false; 64 | } 65 | $scale = (float)$scale; 66 | $func = static function(Player $player, Entity $entity) use ($scale): void{ 67 | $entity->setScale(min(30, max(0.1, $scale))); 68 | }; 69 | Loader::$queue[$sender->getUniqueId()->getBytes()] = $func; 70 | $sender->sendMessage(TextFormat::YELLOW . "Click the entity whose scale you want to change"); 71 | break; 72 | default: 73 | foreach([ 74 | ["id", "check entity id"], 75 | ["look", "entity look at me"], 76 | ["pos", "Changed entity position"], 77 | ["scale", "Changed entity scale"] 78 | ] as $value){ 79 | $sender->sendMessage(TextFormat::YELLOW . "/" . $this->getName() . " " . $value[0] . " - " . $value[1]); 80 | } 81 | break; 82 | } 83 | return true; 84 | } 85 | } --------------------------------------------------------------------------------