Brand the fork as Hellion Chat with independent plugin state

Switch the assembly name to HellionChat so Dalamud uses
pluginConfigs/HellionChat for our config file and database
directory, instead of sharing those locations with the upstream
Chat 2 plugin. Code namespace stays ChatTwo.* so upstream
cherry-picks apply cleanly.

Rename the DalamudPackager manifest to HellionChat.yaml with
fork-specific name, author, repo URL, description, tags and
changelog. Plugin.PluginName becomes "Hellion Chat".

Add a one-shot migration in the plugin constructor that runs
before GetPluginConfig: if pluginConfigs/ChatTwo.json or the
ChatTwo/ directory exist and our equivalents don't, move them
into the HellionChat layout. Idempotent: only fires on the first
load where legacy paths are present and ours are not.
This commit is contained in:
2026-05-01 18:26:11 +02:00
parent 1ad5cb3164
commit 465aadbb1a
4 changed files with 80 additions and 55 deletions
+7
View File
@@ -2,6 +2,13 @@
<PropertyGroup>
<Version>1.35.3</Version>
<ImplicitUsings>enable</ImplicitUsings>
<!-- HellionChat fork: assembly is renamed so Dalamud uses
pluginConfigs/HellionChat instead of pluginConfigs/ChatTwo,
keeping our state independent from the upstream plugin.
Code namespace stays ChatTwo.* so upstream cherry-picks
apply cleanly. -->
<AssemblyName>HellionChat</AssemblyName>
<RootNamespace>ChatTwo</RootNamespace>
</PropertyGroup>
<ItemGroup>
-54
View File
@@ -1,54 +0,0 @@
name: Chat 2
author: Infi, Anna
punchline: Electric Boogaloo - ♪ A whole new chat, a new fantastic chat window ♪
description: |-
Chat 2 is a complete rewrite of the in-game chat window as a plugin.
It supports:
- Unlimited tabs
- Tabs that always send to a certain channel
- More flexible filtering
- RGB channel colouring
- Completely variable font size
- Sidebar tabs
- Unread counts
- Emotes
- Screenshot mode (obfuscate names)
repo_url: https://github.com/Infiziert90/ChatTwo
accepts_feedback: true
tags:
- Social
- UI
- Chat
- Replacement
changelog: |-
**New Feature Added~**
- A web interface has been added
- *This will not function if your game client is offline or you are logged out of the game*
**Main Features**
- View in-game chat on any device that has a web browser functionality
- Can send chat messages through the web interface directly into the game itself
- Easily copy & paste messages
- Option for automatic starting the web interface feature
- Log lines render limit for faster loading performance [Default 1000]
**Security**
- This feature is not intended to be used outside of your local, private network
- Do not forward ports that are described inside the chat2 options panel
- Never share your authentication code under any circumstances
- Multi-box support is not provided, the web interface will track only the first client
**Additional Features soon to be Added**
- Display errors as small notifications inside the web interface
**Planned Features**
- Multiple Tabs support
- Browser specific settings
- Stylization support
**Additional Permissions Note**
- Users that wish to expand this to apps or other platforms are welcome to do so
*Note: An FAQ will be provided in the chat2 thread on the dalamud discord, linked in the About section*
+36
View File
@@ -0,0 +1,36 @@
name: Hellion Chat
author: JonKazama-Hellion
punchline: GDPR-compliant, Linux-aware fork of Chat 2
description: |-
Hellion Chat is a privacy-focused, Linux-aware fork of Chat 2.
Same chat replacement you know from upstream, with extra controls
for what actually gets stored:
- Channel whitelist for database persistence (GDPR Art. 25)
- Privacy-First defaults: only your own conversations are kept
- Failsafe for unknown ChatTypes (default OFF)
- Independent plugin state (own config + database directory)
Based on Chat 2 by Infi and Anna, licensed under EUPL-1.2.
repo_url: https://github.com/JonKazama-Hellion/HellionChat
accepts_feedback: true
tags:
- Social
- UI
- Chat
- Replacement
- Privacy
changelog: |-
**Hellion Chat 1.35.3 — Initial fork release**
- Channel whitelist filter in MessageStore.UpsertMessage
- Configuration version bump 6 → 7 with one-shot Privacy-First seed
- Settings → Privacy tab with grouped channel checkboxes and presets
- Failsafe toggle for unknown ChatTypes
- One-shot migration from ChatTwo plugin layout (config + database
directory move into pluginConfigs/HellionChat)
- Migrate3 idempotency fix: recovers from partial application where
ALTER TABLE ran but user_version was never bumped
Based on Chat 2 1.35.3 (upstream Infiziert90/ChatTwo).
+37 -1
View File
@@ -19,7 +19,7 @@ namespace ChatTwo;
// ReSharper disable once ClassNeverInstantiated.Global
public sealed class Plugin : IDalamudPlugin
{
public const string PluginName = "Chat 2";
public const string PluginName = "Hellion Chat";
[PluginService] public static IPluginLog Log { get; private set; } = null!;
[PluginService] public static IDalamudPluginInterface Interface { get; private set; } = null!;
@@ -86,6 +86,11 @@ public sealed class Plugin : IDalamudPlugin
{
GameStarted = Process.GetCurrentProcess().StartTime.ToUniversalTime();
// Hellion Chat: take over config + database from upstream ChatTwo
// before Dalamud loads our plugin config. Idempotent: only acts on
// the first start where the legacy paths exist and ours don't.
MigrateFromChatTwoLayout();
Config = Interface.GetPluginConfig() as Configuration ?? new Configuration();
#pragma warning disable CS0618 // Type or member is obsolete
@@ -241,6 +246,37 @@ public sealed class Plugin : IDalamudPlugin
ServerCore?.DisposeAsync().AsTask().Wait();
}
private static void MigrateFromChatTwoLayout()
{
try
{
var pluginConfigsDir = Interface.ConfigDirectory.Parent?.FullName;
if (pluginConfigsDir is null)
return;
var legacyConfigFile = Path.Combine(pluginConfigsDir, "ChatTwo.json");
var legacyConfigDir = Path.Combine(pluginConfigsDir, "ChatTwo");
var ourConfigFile = Path.Combine(pluginConfigsDir, "HellionChat.json");
var ourConfigDir = Interface.ConfigDirectory.FullName;
if (!File.Exists(ourConfigFile) && File.Exists(legacyConfigFile))
{
File.Move(legacyConfigFile, ourConfigFile);
Log.Information($"HellionChat: migrated config file {legacyConfigFile} → {ourConfigFile}");
}
if (!Directory.Exists(ourConfigDir) && Directory.Exists(legacyConfigDir))
{
Directory.Move(legacyConfigDir, ourConfigDir);
Log.Information($"HellionChat: migrated config dir {legacyConfigDir} → {ourConfigDir}");
}
}
catch (Exception e)
{
Log.Error(e, "HellionChat: layout migration failed, continuing with whatever exists");
}
}
private void Draw()
{
ChatLogWindow.BeginFrame();