Skip to content

Commit 65c8053

Browse files
committed
大幅にリファクタリング
1 parent 4c81501 commit 65c8053

10 files changed

Lines changed: 203 additions & 227 deletions

File tree

README.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,16 @@
22

33
このプラグインはプレイヤーの設置、破壊ログをすべて記録します。
44

5-
SQLiteを使用し、データーベースに保存される文字も莫大な量になるため必要最低限にしてあります。
5+
SQLiteを使用し、データーベースに保存されるデータを必要最低限にしてあります。
6+
7+
そのため、容量的にはとても軽量なログ記録システムとなっております。
8+
9+
非同期処理ではありませんがこのプラグインが重大な負荷になることは少ないと思います。
610

7-
そのため、とても軽量なログ記録システムとなっております。
811
## COMMAND
912

1013
/log : ログ確認モードになります。ブロックを設置or破壊したところのログが確認できます。
1114

12-
/log x y z world : コマンドでログが確認できます。
15+
/log x y z world : コマンドでログが確認できます。
16+
17+
op権限がついてる人しかコマンドを利用することはできません。

plugin.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
name: SimpleLogger
2-
main: yurisi\SimpleLogger
3-
version: 1.1
2+
main: space\yurisi\SimpleLogger
3+
version: 1.2
44
api: [3.0.0]
5-
author: yurisi twitter@Dev_yrs
5+
author: yurisi
6+
website: homepage.yurisi.space
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
namespace space\yurisi\Command;
4+
5+
use pocketmine\command\defaults\VanillaCommand;
6+
use pocketmine\Player;
7+
8+
use pocketmine\command\CommandSender;
9+
10+
use space\yurisi\DB\DataBase;
11+
use space\yurisi\SimpleLogger;
12+
13+
class LogCommand extends VanillaCommand {
14+
15+
public function __construct() {
16+
parent::__construct("log", "ログの確認のオンオフ", "/log [x] [y] [z] [world]");
17+
}
18+
19+
public function execute(CommandSender $sender, string $label, array $args) {
20+
if ($sender instanceof Player) {
21+
if ($sender->isOp()) {
22+
if (!isset($args[0])) {
23+
$tag = $sender->namedtag;
24+
$msg = ["OFF", "ON"];
25+
SimpleLogger::getInstance()->isOn($sender) ? $flag = 0 : $flag = 1;
26+
$tag->setInt(SimpleLogger::getInstance()->getName(), $flag);
27+
$sender->sendMessage("[" . SimpleLogger::getInstance()->getName() . "]§a{$msg[$flag]}にしました。");
28+
return true;
29+
}
30+
31+
if (isset($args[0]) && isset($args[1]) && isset($args[2]) && isset($args[3])) {
32+
if (is_numeric($args[0]) && is_numeric($args[1]) && is_numeric($args[2])) {
33+
$cls = new DataBase();
34+
$cls->checklog($args[0], $args[1], $args[2], $args[3], $sender);
35+
return true;
36+
}
37+
}
38+
$sender->sendMessage("/log [x] [y] [z] [world]");
39+
}
40+
}
41+
return true;
42+
}
43+
}

src/space/yurisi/DB/DataBase.php

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
namespace space\yurisi\DB;
4+
5+
use space\yurisi\SimpleLogger;
6+
7+
use pocketmine\Player;
8+
use pocketmine\item\Item;
9+
10+
class DataBase extends \SQLite3 {
11+
12+
public function __construct() {
13+
parent::__construct(SimpleLogger::getInstance()->getDataFolder()."log.db",SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE);
14+
$sql="CREATE TABLE IF NOT EXISTS logdata (xyz TEXT PRIMARY KEY, who TEXT , action TEXT, time TEXT, id INT,meta INT)";
15+
$this->query($sql);
16+
}
17+
18+
public function registerLog(int $x,int $y,int $z,String $level,Int $id,Int $meta,Player $player,String $eventType){
19+
$xyz =""."x"."$x"."y"."$y"."z"."$z"."w"."$level"."";
20+
$who = $player->getName();
21+
$time = date("Y/m/d-H:i:s");
22+
SimpleLogger::getInstance()->getDB()->query("INSERT OR REPLACE INTO logdata VALUES(\"$xyz\", \"$who\", \"$eventType\", \"$time\", \"$id\",\"$meta\")");
23+
}
24+
25+
public function checkLog(int $x,int $y,int $z,String $level,Player $player){
26+
$xyz =""."x"."$x"."y"."$y"."z"."$z"."w"."$level"."";
27+
$result = SimpleLogger::getInstance()->getDB()->query("SELECT who , action, id,meta, time FROM logdata WHERE xyz = \"$xyz\"");
28+
$results = $result->fetchArray(SQLITE3_ASSOC);
29+
if($results['who'] == null){
30+
$player->sendPopup("[".SimpleLogger::getInstance()->getName()."]".$x.",".$y.",".$z.",".$level." ここにログは存在していません");
31+
}else{
32+
if($result){
33+
if($results['action']==="b"){
34+
$pb="破壊";
35+
}else{
36+
$pb="設置";
37+
}
38+
$itemname=Item::get($results['id'],$results['meta'],1)->getName();
39+
$player->sendPopup("§c[座標] ".$x.",".$y.",".$z.",".$level."\n[日時] ". $results['time']."\n[行動者] ". $results['who']."\n[行動]". $pb."\n[物] ". $results['id'].":".$results['meta']." ".$itemname);
40+
}
41+
}
42+
}
43+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<?php
2+
3+
namespace space\yurisi\Event;
4+
5+
use pocketmine\event\block\BlockEvent;
6+
use pocketmine\Player;
7+
use pocketmine\event\Listener;
8+
use pocketmine\event\block\BlockBreakEvent;
9+
use pocketmine\event\block\BlockPlaceEvent;
10+
11+
use space\yurisi\DB\DataBase;
12+
use space\yurisi\SimpleLogger;
13+
14+
class PlayerEvent implements Listener {
15+
16+
/**
17+
* @priority MONITOR
18+
* @param BlockBreakEvent $event
19+
* @return bool
20+
*/
21+
public function onBreak(BlockBreakEvent $event) {
22+
$this->checkLog($event, "b");
23+
return true;
24+
}
25+
26+
/**
27+
* @priority MONITOR
28+
* @param BlockPlaceEvent $event
29+
* @return bool
30+
*/
31+
public function onPlace(BlockPlaceEvent $event) {
32+
$this->checkLog($event, "p");
33+
return true;
34+
}
35+
36+
private function checkLog(BlockEvent $event, string $eventType) {
37+
$player = $event->getPlayer();
38+
if ($player instanceof Player) {
39+
$x = $event->getBlock()->getFloorX();
40+
$y = $event->getBlock()->getFloorY();
41+
$z = $event->getBlock()->getFloorZ();
42+
$world = $event->getBlock()->getLevel()->getFolderName();
43+
$cls = new DataBase();
44+
45+
if (SimpleLogger::getInstance()->isOn($player)) {
46+
$cls->checklog($x, $y, $z, $world, $player);
47+
$event->setCancelled();
48+
} else {
49+
$id = $event->getBlock()->getId();
50+
$meta = $event->getBlock()->getDamage();
51+
$cls->registerlog($x, $y, $z, $world, $id, $meta, $player, $eventType);
52+
}
53+
}
54+
return true;
55+
}
56+
}

src/space/yurisi/SimpleLogger.php

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
3+
namespace space\yurisi;
4+
5+
use pocketmine\Player;
6+
use pocketmine\Server;
7+
use pocketmine\plugin\PluginBase;
8+
9+
use space\yurisi\Command\LogCommand;
10+
use space\yurisi\DB\DataBase;
11+
use space\yurisi\Event\PlayerEvent;
12+
13+
class SimpleLogger extends PluginBase{
14+
15+
/**
16+
* @var self
17+
*/
18+
private static $main;
19+
20+
/**
21+
* @var \SQLite3
22+
*/
23+
private $log;
24+
25+
public function onEnable(){
26+
Server::getInstance()->getPluginManager()->registerEvents(new PlayerEvent(),$this);
27+
Server::getInstance()->getCommandMap()->register("log", new LogCommand());
28+
self::$main=$this;
29+
$this->log=new DataBase();
30+
}
31+
32+
public static function getInstance():self {
33+
return self::$main;
34+
}
35+
36+
public function getDB():\SQLite3{
37+
return $this->log;
38+
}
39+
40+
public function isOn(Player $player):bool{
41+
$tag = $player->namedtag;
42+
if ($tag->offsetExists($this->getName())) if ($tag->getInt($this->getName()) !== 0) return true;
43+
return false;
44+
}
45+
46+
public function onDisable() {
47+
$this->getDB()->close();
48+
}
49+
}

src/yurisi/Command/MainCommand.php

Lines changed: 0 additions & 53 deletions
This file was deleted.

src/yurisi/Database/SQliteLogger.php

Lines changed: 0 additions & 43 deletions
This file was deleted.

0 commit comments

Comments
 (0)