Skip to content

Commit 0dc9cdd

Browse files
committed
fix tp: count cd since last SUCCESS teleport. Add tps log repost
1 parent e8af21c commit 0dc9cdd

File tree

1 file changed

+37
-2
lines changed

1 file changed

+37
-2
lines changed

cmdRepost/cmdRepost.py

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import os
33
import time
44
import json
5+
import re
56

67
__all__ = ['CmdReposter']
78

@@ -25,6 +26,7 @@ def __init__(self, logger, core, config_file):
2526

2627
# connect signals and slots
2728
self.core.notifier.sig_input.connect(self.on_player_input)
29+
self.core.sig_server_output.connect(self.on_server_output)
2830

2931
# available commands
3032
self.cmd_available = {
@@ -34,6 +36,8 @@ def __init__(self, logger, core, config_file):
3436
}
3537

3638
self.tp_log = {}
39+
self.tps_asked = 0
40+
self.tps_asker = None
3741

3842
def server_say(self, text):
3943
self.core.write_server('/say {}'.format(text))
@@ -44,6 +48,29 @@ def server_tell(self, player, text):
4448
def server_warn(self, player, text):
4549
self.core.write_server('/tellraw {} {}'.format(player.name, json.dumps({'text': text, 'color': 'red'})))
4650

51+
def check_tp(self, line):
52+
match_obj_1 = re.match(r'[^<>]*?\[Server thread/INFO\] \[minecraft/DedicatedServer\]: (.*)$', line)
53+
text = match_obj_1.group(1) if match_obj_1 else ''
54+
match_obj_2 = re.match(r'^Teleported (\w+)', text)
55+
if match_obj_2:
56+
# someone has been teleported
57+
player = match_obj_2.group(1)
58+
self.logger.debug('CmdReposter.check_tp found player {} was teleported'.format(player))
59+
self.tp_log[player] = time.time() # record latest teleported time
60+
61+
def check_tps(self, line):
62+
if self.tps_asked > 0:
63+
self.logger.debug('CmdReposter.tps_asked = {:d}'.format(self.tps_asked))
64+
match_obj_1 = re.match(r'[^<>]*?\[Server thread/INFO\] \[minecraft/DedicatedServer\]: ([^<>]*)$', line)
65+
if match_obj_1:
66+
self.server_tell(self.tps_asker, match_obj_1.group(1))
67+
self.tps_asked -= 1
68+
69+
def on_server_output(self, lines):
70+
for line in lines:
71+
self.check_tp(line)
72+
self.check_tps(line)
73+
4774
def on_player_input(self, pair):
4875
self.logger.debug('CmdReposter.on_player_input called')
4976
player = pair[0]
@@ -71,6 +98,9 @@ def on_player_input(self, pair):
7198
def tp_request(self, player, text_list):
7299
self.logger.debug('CmdReposter.tp_request called')
73100

101+
if player.is_console():
102+
return
103+
74104
if player.name not in self.tp_log:
75105
self.tp_log[player.name] = 0
76106

@@ -82,10 +112,9 @@ def tp_request(self, player, text_list):
82112
cur_time = time.time()
83113
if cur_time - self.tp_log[player.name] < tp_cd:
84114
remain_sec = tp_cd - (cur_time - self.tp_log[player.name])
115+
self.server_tell(player, 'Command tp is now cooling down!')
85116
self.server_tell(player, 'You cannot use tp again until {:d} seconds later.'.format(int(remain_sec)))
86117
return
87-
else:
88-
self.tp_log[player.name] = cur_time
89118

90119
args = text_list[1:]
91120
tp_cmd = '/execute as {} at {} run tp {} '.format(player.name, player.name, player.name)
@@ -100,10 +129,16 @@ def tp_request(self, player, text_list):
100129

101130
def ask_tps(self, player, text_list):
102131
self.logger.debug('CmdReposter.log_tps called')
132+
133+
if player.is_console():
134+
return
135+
103136
if len(text_list) == 1:
104137
if 'forge' not in self.configs or not self.configs['forge']:
105138
return
106139
else:
107140
self.core.write_server('/forge tps')
141+
self.tps_asked = 4 # repost the next messages to player
142+
self.tps_asker = player
108143
else:
109144
self.server_tell(player, 'Command not acceptable. Please check again.')

0 commit comments

Comments
 (0)