Skip to content

Commit

Permalink
added help messages, bump version
Browse files Browse the repository at this point in the history
  • Loading branch information
Hadron67 committed Aug 3, 2020
1 parent 4f22284 commit 3c5cfed
Show file tree
Hide file tree
Showing 18 changed files with 289 additions and 122 deletions.
27 changes: 10 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,13 @@ Server-side recording mod for [ReplayMod](https://github.com/ReplayMod/ReplayMod
* Display recorded time, recorded file size, etc. in tab list.
* Can be set to pause automatically when no players are near by.
* Allow players to download recording files via an embedded http server.
* Variable view distance, but not chunk loading distance.
* Lock day time or weather in recording.

Tested in Minecraft 1.14.4, should also work in later versions with only trivial modifications on the code (minecraft version and yarn mapping version of fabric-loom).

## Use
* `/sreplay player <player name> spawn [<recording file name>]` Spawn a recording bot and start recording. This is similiar to a client side player recording session. If no file name specified, file name will be based on current time and date. Player name must satisfies the regular expression`playerNamePattern` in the configuration;
* `/sreplay player <player name> kill` Kick a recording bot and save recording files (`.mcpr`);
* `/sreplay player <player name> tp` Teleport a bot to your position;
* `/sreplay player <player name> respawn [<recording file name>]` Stop the current recording session of the specified bot, save recording file, and start a new recording session on the same bot;
* `/sreplay player <player name> set sizeLimit <size limit>` Set recording file size limit for the specified bot, in MB. Set to `-1` for unlimited size.
* `/sreplay player <player name> set timeLimit <time limit>` Set recording time limit for the specified bot, in seconds. Set to `-1` for unlimited time length.
* `/sreplay player <player name> set autoRestart <auto restart>` Set auto restart flag. When size limit or time limit exceeds a new recording session will be started if this flag is on.
* `/sreplay player <player name> set autoPause <auto pause>` Set auto pause flag. If this flag is on, recording will be paused while no players near by.
* `/sreplay player <player name> pause|resume` Pause/resume recording of the designated bot.
* `/sreplay player <player name> marker <marker name>` Add a marker on the time line.
* `/sreplay list` List all saved replay file;
* `/sreplay delete <recording file name>` Delete a recording file. Needs confirming using `/sreplay confirm <code>`;
* `/sreplay reload` Reload configuration.
* `/sreplay get <recording file>` Generate a temporary downloading URL for the given recording file. This URL will be invalidated after first request, or a configurable time out is expired.
* `/sreplay server start|stop` Start/stop the http server for downloading recording file.
Use `/sreplay help` to get general usage, and `/sreplay help set <parametre name>` to get help with the specified recording parametre.

## Configuration
Cnofiguration file is `config/sreplay.json`, it will be created each time start the mod if not exist.
Expand All @@ -34,5 +22,10 @@ Cnofiguration file is `config/sreplay.json`, it will be created each time start
* `serverName` Server name stored in Replay file;
* `sizeLimit` Default recording size limit for each recording bot, in MB;
* `autoReconnect` Default auto restart flag;
* `playerNamePattern` Pattern that every bot name must match (Hint: change this to `.*` if you want any player name to be valid);
* `formats` Message formats, each format entry is **raw JSON text**. See the configuration file for more detail.
* `playerNamePattern` Pattern that every bot name must match, attempting to spawn a bot with invalid name would result in an `invalidName` error. (Hint: change this to `.*` if you want any player name to be valid);
* `formats` Message formats, each format entry is **raw JSON text**. See the configuration file for more detail.
### Configurations for embeded http server
* `serverListenAddress` Server listen address. `0.0.0.0` would be fine most of the time.
* `serverPort` Server port.
* `serverHostName` Server domain name in the downloading Links.
* `downloadTimeout` Link expiring time out, in milliseconds.
27 changes: 10 additions & 17 deletions README_zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,14 @@ ReplayMod服务端录制mod,通过使用类似于carpet的假人来录制。

* 在玩家列表栏里面显示假人已录制的时长、文件大小等;
* 可以设置成当附近没有玩家时暂停录像;
* 允许玩家通过一个内置的http服务器下载录像文件。
* 允许玩家通过一个内置的http服务器下载录像文件;
* 在不改变玩家区块加载范围的情况下更改录像视距;
* 可锁定时间/天气。

目前支持1.14.4,对于新版本应该只需要修改gradle文件中的Minecraft版本和yarn mapping版本。

## 使用
* `/sreplay player <玩家名> spawn [<录像文件名>]` 召唤一个录像假人并开始录制,此时假人相当于一个使用ReplayMod录制的真玩家。如果文件名未指定那么文件名将会根据当前日期和时间生成;
* `/sreplay player <玩家名> kill` 删除一个假人并停止录制,保存录像文件;
* `/sreplay player <玩家名> tp` 将一个假人传送至你的位置;
* `/sreplay player <玩家名> respawn [<录像文件名>]` 停止并保存当前的录制,然后在原地开始新一轮的录制;
* `/sreplay player <玩家名> set sizeLimit <文件上限大小>` 设置指定假人的录像文件大小上限,单位是MB。`-1`为无上限;
* `/sreplay player <玩家名> set timeLimit <时间上限>` 设置指定假人的录像时间上限,单位是秒。`-1`为无上限;
* `/sreplay player <玩家名> set autoRestart <auto restart>` 设置自动续录标志。如果该标志为`true`那么当文件或时间上限超过之后就会自动停止录制并重新开始新的录制;
* `/sreplay player <玩家名> set autoPause <auto pause>` 设置自动暂停标志。如果为`true`那么当周围没有玩家的时候就会自动暂停,并在有玩家之后继续录制;
* `/sreplay player <玩家名> pause|resume` 暂停/继续录制;
* `/sreplay player <玩家名> marker <标记名>` 添加一个标记;
* `/sreplay list` 列表所有已保存的录像文件;
* `/sreplay delete <录像文件名>` 删除指定的录像文件,需要用`/sreplay confirm <确认码>`确认;
* `/sreplay reload` 重新加载配置文件。
* `/sreplay get <录像文件名>` 生成一个用于下载给定录像文件的临时URL。当第一个请求或者超时之后这个链接就会自动失效。
* `/sreplay server start|stop` 启动/停止用于下载录像文件的http服务器。
使用`/sreplay help`来获取一般用法帮助,`/sreplay help set <参数名>`来获取不同录像参数的说明。

## Configuration
配置文件在`config/sreplay.json`,每次启动时如果文件不存在就会被创建。
Expand All @@ -32,4 +20,9 @@ ReplayMod服务端录制mod,通过使用类似于carpet的假人来录制。
* `sizeLimit` 默认录像文件大小上限,单位:MB;
* `autoReconnect` 默认自动续录标志;
* `playerNamePattern` 假人玩家名需要符合的正则表达式,试图召唤玩家名不符的假人时将会出现`非法玩家名`的错误。(提示:如果不想有此限制可以将该项设置成`.*`);
* `formats` 各种消息的格式,每个格式都是**原始JSON文本**。具体的格式配置请查看配置文件。
* `formats` 各种消息的格式,每个格式都是**原始JSON文本**。具体的格式配置请查看配置文件。
### 内置http服务器配置
* `serverListenAddress` 服务器监听地址。大多数时候可以设置成`0.0.0.0`.
* `serverPort` 服务器监听的端口。
* `serverHostName` 下载链接中显示的服务器域名。
* `downloadTimeout` 下载链接失效时限,单位是毫秒。
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ org.gradle.jvmargs=-Xmx1G
loader_version=0.8.2+build.194

# Mod Properties
mod_version = 0.1
mod_version = 0.2
maven_group = test
archives_base_name = sreplay

Expand Down
34 changes: 34 additions & 0 deletions src/main/java/com/hadroncfy/sreplay/Lang.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.hadroncfy.sreplay;

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.HashMap;
import java.util.Map;

import com.google.gson.Gson;

public class Lang {
private static Map<String, String> language;
private static String selectedLang = "";
private static final Gson GSON = new Gson();

public static void load(String lang) throws IOException {
if (!selectedLang.equals(lang)){
try(Reader reader = new InputStreamReader(Lang.class.getClassLoader().getResourceAsStream(String.format("lang/%s.json", lang)))){
language = GSON.fromJson(reader, HashMap.class);
selectedLang = lang;
}
}
}
public static String getString(String key){
String val = key;
if (language != null){
val = language.get(key);
if (val == null){
val = key;
}
}
return val;
}
}
7 changes: 4 additions & 3 deletions src/main/java/com/hadroncfy/sreplay/SReplayMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,11 @@ public static Formats getFormats(){
public void onInitialize() {
try {
SReplayMod.loadConfig();
LOGGER.info("SReplay: Loaded config");
Lang.load("zh_cn");
LOGGER.info("SReplay: Initialzed");
}
catch(IOException | JsonParseException e) {
LOGGER.error("Failed to load config: " + e);
catch(Throwable e) {
LOGGER.error("Exception initializing mod: " + e);
e.printStackTrace();
config = new Config();
}
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/com/hadroncfy/sreplay/Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,15 @@ public class Util {
// Stolen from fabric-carpet
@FunctionalInterface
public interface SupplierWithCommandSyntaxException<T> {
T get() throws CommandSyntaxException;
T get() throws IllegalArgumentException;
}

@FunctionalInterface
public interface Replacer<T> {
T get(T a);
}

public static <T> T tryGetArg(SupplierWithCommandSyntaxException<T> a, SupplierWithCommandSyntaxException<T> b) throws CommandSyntaxException {
public static <T> T tryGetArg(SupplierWithCommandSyntaxException<T> a, SupplierWithCommandSyntaxException<T> b) {
try {
return a.get();
}
Expand Down
Loading

0 comments on commit 3c5cfed

Please sign in to comment.