diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
index 8275735a2..75b69d48c 100644
--- a/.github/FUNDING.yml
+++ b/.github/FUNDING.yml
@@ -1,2 +1,2 @@
# These are supported funding model platforms
-github: [SignatureBeef, hakusaro, Stealownz, QuiCM]
+github: [SignatureBeef, QuiCM]
diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml
new file mode 100644
index 000000000..deb811a2b
--- /dev/null
+++ b/.github/workflows/ci-docker.yml
@@ -0,0 +1,25 @@
+name: CI (Docker image)
+
+on: [push, pull_request]
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ submodules: 'recursive'
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v3
+ - name: Set up buildx
+ uses: docker/setup-buildx-action@v3
+ - name: Build image
+ uses: docker/build-push-action@v5
+ with:
+ context: .
+ platforms: linux/amd64,linux/arm64,linux/arm/v7,windows/amd64
+ push: false
+ pull: true
+ cache-from: type=gha, scope=${{ github.workflow }}
+ cache-to: type=gha, scope=${{ github.workflow }}
diff --git a/Dockerfile b/Dockerfile
index 186bee70e..87024fb9e 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,10 +1,8 @@
-ARG TARGETPLATFORM=linux/amd64
-ARG BUILDPLATFORM=${TARGETPLATFORM}
+# TARGETPLATFORM and BUILDPLATFORM are automatically filled in by Docker buildx.
+# They should not be set in the global scope manually.
FROM --platform=${BUILDPLATFORM} mcr.microsoft.com/dotnet/sdk:6.0 AS builder
-ARG TARGETPLATFORM
-
# Copy build context
WORKDIR /TShock
COPY . ./
@@ -12,6 +10,10 @@ COPY . ./
# Build and package release based on target architecture
RUN dotnet build -v m
WORKDIR /TShock/TShockLauncher
+
+# Make TARGETPLATFORM available to the container.
+ARG TARGETPLATFORM
+
RUN \
case "${TARGETPLATFORM}" in \
"linux/amd64") export ARCH="linux-x64" \
diff --git a/README.md b/README.md
index b5559b37f..0369df531 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
- ![TShock for Terraria](https://tshock.co/newlogo.png)
+ ![TShock for Terraria](https://tshock.s3.us-west-001.backblazeb2.com/newlogo.png)
diff --git a/README_cn.md b/README_cn.md
index e038817e4..65c5eba61 100644
--- a/README_cn.md
+++ b/README_cn.md
@@ -1,5 +1,5 @@
- ![TShock for Terraria](https://tshock.co/newlogo.png)
+ ![TShock for Terraria](https://tshock.s3.us-west-001.backblazeb2.com/newlogo.png)
diff --git a/TShockAPI/Configuration/TShockConfig.cs b/TShockAPI/Configuration/TShockConfig.cs
index 79c374b25..c91466fec 100644
--- a/TShockAPI/Configuration/TShockConfig.cs
+++ b/TShockAPI/Configuration/TShockConfig.cs
@@ -320,8 +320,8 @@ public class TShockSettings
[Description("The reason given if banning a mediumcore player on death.")]
public string MediumcoreBanReason = GetString("Death results in a ban");
- /// Disbales IP bans by default, if no arguments are passed to the ban command.
- [Description("Disbales IP bans by default, if no arguments are passed to the ban command.")]
+ /// Disables IP bans by default, if no arguments are passed to the ban command.
+ [Description("Disables IP bans by default, if no arguments are passed to the ban command.")]
public bool DisableDefaultIPBan;
/// Enable or disable the whitelist based on IP addresses in the whitelist.txt file.
diff --git a/TShockAPI/Permissions.cs b/TShockAPI/Permissions.cs
index d7ec7166d..99ac5d7d2 100644
--- a/TShockAPI/Permissions.cs
+++ b/TShockAPI/Permissions.cs
@@ -529,18 +529,9 @@ public static void DumpDescriptions()
field.GetCustomAttributes(false).FirstOrDefault(o => o is DescriptionAttribute) as DescriptionAttribute;
var desc = descattr != null && !string.IsNullOrWhiteSpace(descattr.Description) ? descattr.Description : GetString("No description available.");
- var commands = GetCommands(name);
- foreach (var c in commands)
- {
- for (var i = 0; i < c.Names.Count; i++)
- {
- c.Names[i] = "/" + c.Names[i];
- }
- }
- var strs =
- commands.Select(
- c =>
- c.Name + (c.Names.Count > 1 ? " ({0})".SFormat(string.Join(" ", c.Names.ToArray(), 1, c.Names.Count - 1)) : ""));
+ var strs = GetCommands(name).Select(c => c.Names.Count > 1
+ ? $"/{c.Name} (/{string.Join(" /", c.Names.Skip(1))})"
+ : $"/{c.Name}");
sb.AppendLine($"## {name}");
sb.AppendLine($"{desc}");
diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs
index 054e31dfa..bcd72aa36 100644
--- a/TShockAPI/TShock.cs
+++ b/TShockAPI/TShock.cs
@@ -428,6 +428,8 @@ public override void Initialize()
Hooks.AccountHooks.AccountDelete += OnAccountDelete;
Hooks.AccountHooks.AccountCreate += OnAccountCreate;
+ On.Terraria.RemoteClient.Reset += RemoteClient_Reset;
+
GetDataHandlers.InitGetDataHandler();
Commands.InitCommands();
@@ -496,6 +498,12 @@ void SafeError(string message)
}
}
+ private static void RemoteClient_Reset(On.Terraria.RemoteClient.orig_Reset orig, RemoteClient client)
+ {
+ client.ClientUUID = null;
+ orig(client);
+ }
+
private static void OnAchievementInitializerLoad(ILContext il)
{
// Modify AchievementInitializer.Load to remove the Main.netMode == 2 check (occupies the first 4 IL instructions)
diff --git a/TShockAPI/TShockAPI.csproj b/TShockAPI/TShockAPI.csproj
index a37317092..9da8cd085 100644
--- a/TShockAPI/TShockAPI.csproj
+++ b/TShockAPI/TShockAPI.csproj
@@ -18,7 +18,7 @@
Also, be sure to release on github with the exact assembly version tag as below
so that the update manager works correctly (via the Github releases api and mimic)
-->
- 5.2.0
+ 5.2.1
TShock for Terraria
Pryaxis & TShock Contributors
TShockAPI
diff --git a/TShockAPI/TextLog.cs b/TShockAPI/TextLog.cs
index 070c6c888..ae3bb29e5 100644
--- a/TShockAPI/TextLog.cs
+++ b/TShockAPI/TextLog.cs
@@ -29,7 +29,8 @@ namespace TShockAPI
///
public class TextLog : ILog, IDisposable
{
- private readonly StreamWriter _logWriter;
+ private readonly bool ClearFile;
+ private StreamWriter _logWriter;
///
/// File name of the Text log
@@ -44,7 +45,7 @@ public class TextLog : ILog, IDisposable
public TextLog(string filename, bool clear)
{
FileName = filename;
- _logWriter = new StreamWriter(filename, !clear);
+ ClearFile = clear;
}
public bool MayWriteType(TraceLevel type)
@@ -247,6 +248,10 @@ public void Write(string message, TraceLevel level)
{
if (!MayWriteType(level))
return;
+ if (_logWriter is null)
+ {
+ _logWriter = new StreamWriter(FileName, !ClearFile);
+ }
var caller = "TShock";
@@ -278,7 +283,10 @@ public void Write(string message, TraceLevel level)
public void Dispose()
{
- _logWriter.Dispose();
+ if (_logWriter != null)
+ {
+ _logWriter.Dispose();
+ }
}
}
}
diff --git a/TShockInstaller/TShockInstaller.csproj b/TShockInstaller/TShockInstaller.csproj
index 9b73d66a1..ac3bfff40 100644
--- a/TShockInstaller/TShockInstaller.csproj
+++ b/TShockInstaller/TShockInstaller.csproj
@@ -12,6 +12,6 @@
-
+
diff --git a/TShockPluginManager/TShockPluginManager.csproj b/TShockPluginManager/TShockPluginManager.csproj
index 33c503fde..1d53f320b 100644
--- a/TShockPluginManager/TShockPluginManager.csproj
+++ b/TShockPluginManager/TShockPluginManager.csproj
@@ -7,8 +7,8 @@
-
-
+
+
diff --git a/docs/changelog.md b/docs/changelog.md
index 2a4fbfcde..b904bb1ee 100644
--- a/docs/changelog.md
+++ b/docs/changelog.md
@@ -78,6 +78,11 @@ Use past tense when adding new entries; sign your name off when you add or chang
* If there is no section called "Upcoming changes" below this line, please add one with `## Upcoming changes` as the first line, and then a bulleted item directly after with the first change. -->
## Upcoming changes
+* Fixed `/dump-reference-data` mutate the command names. (#2943, @sgkoishi)
+* Added `ParryDamageBuff` (Striking Moment with Brand of the Inferno and shield) for player, updated `CursedInferno` buff for NPC (@sgkoishi, #3005)
+* Fix typo in config for IP bans. (@redchess64)
+
+## TShock 5.2.1
* Updated `TSPlayer.GodMode`. (@AgaSpace)
* Previously the field was used as some kind of dataset changed by /godmode command, but now it is a property that receives/changes data in journey mode.
* Added the `TSPlayer.Client` property. It allows the developer to get the `RemoteClient` player, without an additional call to `Terraria.Netplay.Clients`. (@AgaSpace)
@@ -88,9 +93,9 @@ Use past tense when adding new entries; sign your name off when you add or chang
* Added a method `TSPlayer.UpdateSection` with arguments `rectangle` and `isLoaded`, which will load some area from the server to the player. (@AgaSpace)
* Added a method `TSPlayer.GiveItem`, which has `TShockAPI.NetItem` structure in its arguments. (@AgaSpace)
* Added a property `TSPlayer.Hostile`, which gets pvp player mode. (@AgaSpace)
+* Fixed bug where when the `UseSqlLogs` config property is true, an empty log file would still get created. (@ZakFahey)
* Fixed typo in `/gbuff`. (@sgkoishi, #2955)
* Rewrote the `.dockerignore` file into a denylist. (@timschumi)
-* Added `ParryDamageBuff` (Striking Moment with Brand of the Inferno and shield) for player, updated `CursedInferno` buff for NPC (@sgkoishi, #3005)
## TShock 5.2
* An additional option `pvpwithnoteam` is added at `PvPMode` to enable PVP with no team. (@CelestialAnarchy, #2617, @ATFGK)
diff --git a/docs/docker.md b/docs/docker.md
index 0b89681bb..ca0185103 100644
--- a/docs/docker.md
+++ b/docs/docker.md
@@ -14,15 +14,15 @@ Open ports can also be passed through using `-p :`.
For Example:
```bash
-# Building the image
-docker build -t tshock:linux-amd64 --build-arg TARGETPLATFORM=linux/amd64 .
+# Building the image using buildx and loading it into docker
+docker buildx build -t tshock:latest --load .
# Running the image
docker run -p 7777:7777 -p 7878:7878 \
-v /home/cider/tshock/:/tshock \
-v /home/cider/.local/share/Terraria/Worlds:/worlds \
-v /home/cider/tshock/plugins:/plugins \
- --rm -it tshock:linux-amd64 \
+ --rm -it tshock:latest \
-world /worlds/backflip.wld -motd "OMFG DOCKER"
```
@@ -33,7 +33,7 @@ Using `docker buildx`, you could build [multi-platform images](https://docs.dock
For Example:
```bash
# Building the image using buildx and loading it into docker
-sudo docker buildx build -t tshock:linux-arm64 --platform linux/arm64 --load .
+docker buildx build -t tshock:linux-arm64 --platform linux/arm64 --load .
# Running the image
docker run -p 7777:7777 -p 7878:7878 \