Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
111 commits
Select commit Hold shift + click to select a range
bb5d457
Laying groundwork part 1
Paldiu Jul 19, 2026
1eb9c4b
Groundwork establishment part 2
Paldiu Jul 19, 2026
d9da8bf
Repository compaction, addendums
Paldiu Jul 20, 2026
bf5625b
Merge branch 'prod' into scope/sql-config-rewrite
Paldiu Jul 27, 2026
6e023f5
pushign this shit because i need it OFF MY STASH
Paldiu Jul 27, 2026
6492bca
Merge branch 'prod' into scope/sql-config-rewrite
Paldiu Jul 28, 2026
9d3fdb4
Merge branch 'prod' into scope/sql-config-rewrite
Paldiu Jul 30, 2026
b5af338
adjust stuff
Paldiu Jul 30, 2026
2791c3c
Update AdminList.java
Paldiu Jul 30, 2026
b7f84c6
Should be the final push, will run through after work tonight before …
Paldiu Jul 30, 2026
88137cb
Final pass-through before PR can be reviewed
Paldiu Jul 31, 2026
ceebdd4
sqlite fixes
Paldiu Aug 3, 2026
63c96a8
adds sign text + book text to filter
gamingto12 Aug 3, 2026
2decf58
tab completion update
luke560 Aug 4, 2026
4349b01
Fix SQLite login deadlock in findByUsername
luke560 Aug 4, 2026
00b3eb4
Fix rank lookup deadlock and updated_at migration on SQLite
luke560 Aug 4, 2026
03cc2f5
Merge branch 'release/v26.9-sirius' into fix/sqlite-player-login-dead…
Paldiu Aug 4, 2026
16b74c1
Restore SQLiteAdapter and return Optional from findByUsername
luke560 Aug 4, 2026
bd314b0
jesus christ i forgot to commit while working :(
Paldiu Aug 4, 2026
cba736f
Add /signspy command and service
luke560 Aug 1, 2026
5b8ced0
Suppress no-op sign edits and blank placements
luke560 Aug 1, 2026
7a31d11
Rework chat format
luke560 Aug 1, 2026
68f0b2f
remove comments
luke560 Aug 2, 2026
3447e69
Add bookspy, streamline spy modes
luke560 Aug 4, 2026
3a53fda
update wording
Paldiu Aug 4, 2026
6e3d1f6
Update Title.java
Paldiu Aug 4, 2026
81f3ad8
Screen book pages before relaying to admins
luke560 Aug 4, 2026
d2cd1ae
Merge pull request #59 from luke560/feat/bookspy
Paldiu Aug 4, 2026
b758c81
Merge pull request #60 from luke560/fix/sqlite-player-login-deadlock
Paldiu Aug 5, 2026
71bb8c9
Convert JDA to Discord4J
Paldiu Aug 5, 2026
e212930
Merge branch 'prod' into scope/discord-rewrite
Paldiu Aug 5, 2026
d3d3044
add table for signspy
Paldiu Aug 5, 2026
7a8d4ef
Merge branch 'release/v26.9-sirius' into scope/discord-rewrite
Paldiu Aug 5, 2026
6c7ff89
Merge pull request #63 from tfreedomorg/scope/discord-rewrite
Paldiu Aug 5, 2026
95ee36e
permission fixes, reconciliation fixes, prevent use of disciplinary c…
Paldiu Aug 5, 2026
d824c6c
Import Formatting Plugin
Paldiu Aug 5, 2026
f34d425
Update rewrite.yml
Paldiu Aug 5, 2026
874b1f4
Update rewrite.yml
Paldiu Aug 5, 2026
0c9aad2
Complete import reorganization and pruning
Paldiu Aug 5, 2026
ff3b0c9
Merge branch 'pr-58' into release/v26.9-sirius
Paldiu Aug 5, 2026
208a17b
reconcile with pr
Paldiu Aug 5, 2026
1fe700d
literally git is such a fucking ballsack
Paldiu Aug 5, 2026
7b54bc7
Merge branch 'tfreedomorg:prod' into prod
gamingto12 Aug 5, 2026
d550f05
Merge pull request #65 from gamingto12/prod
Paldiu Aug 5, 2026
dcb2198
Persist /jlm toggle and restore its non-op permission
luke560 Aug 6, 2026
d33530b
Merge pull request #66 from luke560/fix/jlm-persistence
luke560 Aug 7, 2026
02e8ee6
Fix json overwriting sql state on every startup
luke560 Aug 6, 2026
f21ad52
Load ranks from SQL and fix role deserialisation
luke560 Aug 6, 2026
b5269f4
Fix rank registration
luke560 Aug 6, 2026
377e079
Fix timestamps
luke560 Aug 6, 2026
f48689e
I'm ready to be a single mother
luke560 Aug 6, 2026
d263f0f
Write THEN prune in strike/saved-flag reconciles
luke560 Aug 6, 2026
6b8fec6
Stop rewriting the whole bans table on every change
luke560 Aug 7, 2026
13bf233
Match player rows case-insensitively
luke560 Aug 7, 2026
406a916
Give uuidless bans a key so they can be updated
luke560 Aug 7, 2026
c0e6825
Compare snapshot and row timestamps at storage resolution
luke560 Aug 7, 2026
9b5531b
Refresh an empty snapshot from database
luke560 Aug 7, 2026
8c053be
Require a usename on permban rows
luke560 Aug 7, 2026
e7021b9
Re-resolve console bindings when the rank set changes
luke560 Aug 7, 2026
bd148f9
Merge pull request #67 from luke560/fix/json-reconcile-overwrites-sql
Paldiu Aug 7, 2026
af49ffd
Merge branch 'prod' into release/v26.9-sirius
Paldiu Aug 7, 2026
22d6fc8
restrict /opall gamemode switches to admins
luke560 Aug 7, 2026
fd84197
Fix titles never reaching SQL; add title completers and self-grant guard
luke560 Aug 7, 2026
573c7e4
Fix spawn eggs bypassing entity_data checks
luke560 Aug 8, 2026
94e78fe
Remove AutoKick
VideoGameSmash12 Aug 10, 2026
8c63deb
Removes command preprocess logging entirely
VideoGameSmash12 Aug 10, 2026
cea3d65
Merge pull request #69 from videogamesm12/remove-autokick
Paldiu Aug 10, 2026
243a893
fixes cage and playerlist bugs
VideoGameSmash12 Aug 10, 2026
5e8e45e
Merge pull request #70 from videogamesm12/remove-command-preprocessing
Paldiu Aug 10, 2026
8d808a4
Merge pull request #71 from videogamesm12/fix/bugs
Paldiu Aug 10, 2026
0840e5b
Merge branch 'prod' into release/v26.9-sirius
Paldiu Aug 10, 2026
944b7bc
Why is it like that?
VideoGameSmash12 Aug 10, 2026
4d1fa15
Merge pull request #74 from videogamesm12/fix/why-is-rank-file-possib…
Paldiu Aug 10, 2026
00408ef
/crash: use openBook instead of sendMessage
VideoGameSmash12 Aug 10, 2026
87180a9
Extra evil /crash using PacketEvents
VideoGameSmash12 Aug 11, 2026
03f0fa6
feat: let join and leave messages be configurable
khyvie Aug 11, 2026
16dcb16
fix: worldedit blocker regex check
khyvie Aug 11, 2026
bbbbbf1
Merge pull request #77 from khyvie/feat/configurable-join-messages
luke560 Aug 12, 2026
fa5ddbb
Merge branch 'prod' into release/v26.9-sirius
Paldiu Aug 12, 2026
f01d22b
Change Minecraft -> Discord to use player name instead of display name
Paldiu Aug 13, 2026
36a0cc6
fix gcmd
Paldiu Aug 13, 2026
7e47ba3
Merge changes into other branches
Ivanomoly Aug 13, 2026
caa6e85
feeble attempt at a vanish system
Paldiu Aug 14, 2026
f098f60
forgot these
Paldiu Aug 14, 2026
81ad5c2
Merge pull request #75 from videogamesm12/fix/unable-to-send-message-…
luke560 Aug 16, 2026
d286784
fix /jumppads
luke560 Aug 17, 2026
dbf143b
enforce forbidden disguise types
luke560 Aug 17, 2026
14d12f1
fix entity buckets being destroyed as uninspectable
luke560 Aug 17, 2026
829e490
evict contested command labels before brigadier registration
luke560 Aug 18, 2026
04e966a
minor tweaks for bugfixes
VideoGameSmash12 Aug 19, 2026
8074cac
Merge pull request #78 from videogamesm12/feat/extra-evil-crash-command
luke560 Aug 19, 2026
c686677
reworks /crash
VideoGameSmash12 Aug 20, 2026
f1193df
re-introduce admin protection
VideoGameSmash12 Aug 20, 2026
6a5e03d
Fix discord bridge showing 5m for all tbans. also add 24 hours to the…
Paldiu Aug 20, 2026
fcff947
Merge branch 'prod' into release/v26.9-sirius
Paldiu Aug 20, 2026
b535b0f
Remove unused imports, update usage
VideoGameSmash12 Aug 20, 2026
026e709
Merge pull request #80 from videogamesm12/feat/fuck-it-lets-make-cras…
luke560 Aug 21, 2026
d3f8c38
fix compilation against paper-api 26.2 / adventure 5.2.0
luke560 Aug 22, 2026
11a87b3
clamp all cube mobs, not just slimes
luke560 Aug 25, 2026
37d13da
Rework /lockup
luke560 Aug 29, 2026
ade5d63
fix /expel kicking people for moving too fast
luke560 Sep 3, 2026
c5ea9f9
cap /tempban at 24 hours
luke560 Sep 3, 2026
62642df
fix command blocker missing TFM command aliases (fr this time)
luke560 Sep 8, 2026
c178b01
oops!
luke560 Sep 9, 2026
4b5d814
Fix WorldEdit protected area bypass:
luke560 Sep 10, 2026
7e9711e
Restart bridges on /tfm reload and stop leaking the worldedit hook
luke560 Sep 10, 2026
3acd7fc
Check disguises when they are applied rather than from the command line:
luke560 Sep 10, 2026
4738e0c
Fix autoUnmute NPE and unmutes lost for offline players
luke560 Sep 10, 2026
6a3caf9
Block growth, spread, and formation inside protected areas
luke560 Sep 10, 2026
fe4ac5b
fold homoglyphs and leetspeak before text filter matching
luke560 Sep 11, 2026
fecc48f
exempt admins from text filter
luke560 Sep 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# TotalFreedomMod r03
![Release](https://img.shields.io/github/v/release/tfreedomorg/TotalFreedomMod?include_prereleases&style=plastic)
![Version](https://img.shields.io/badge/version-26.7-green?style=plastic)
![Version](https://img.shields.io/badge/version-26.7.1-green?style=plastic)
![License](https://img.shields.io/badge/license-TFGL%20v2.0-orange?style=plastic)
![Code size](https://img.shields.io/github/languages/code-size/tfreedomorg/TotalFreedomMod?style=plastic)

Expand Down
48 changes: 36 additions & 12 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,17 +1,26 @@
plugins {
id 'java'
id 'com.gorylenko.gradle-git-properties' version '2.5.7'
id 'org.openrewrite.rewrite' version '7.38.0'
}

group = 'me.totalfreedom'
version = '26.7.1'
version = '26.9'

java {
toolchain {
languageVersion = JavaLanguageVersion.of(25)
}
}

rewrite {
activeRecipe(
"org.openrewrite.java.RemoveUnusedImports",
"org.openrewrite.java.OrderImports"
)
activeStyle("me.totalfreedom.totalfreedommod.WildcardStyle")
}

repositories {
mavenCentral()
maven {
Expand Down Expand Up @@ -39,28 +48,43 @@ repositories {
}

dependencies {
compileOnly 'io.papermc.paper:paper-api:26.2.build.111-stable'
// deprecated
compileOnly 'org.projectlombok:lombok:1.18.42'
annotationProcessor 'org.projectlombok:lombok:1.18.42'
compileOnly 'org.apache.commons:commons-lang3:3.14.0'
compileOnly 'commons-io:commons-io:2.16.1'
compileOnly 'net.kyori:adventure-text-serializer-ansi:5.2.0'
compileOnly 'net.milkbowl.vault:VaultUnlockedAPI:2.16'

// paper
compileOnly 'io.papermc.paper:paper-api:26.2.build.111-stable'
compileOnly 'net.kyori:adventure-text-serializer-ansi:5.2.0'

// plugins
compileOnly('com.sk89q.worldedit:worldedit-bukkit:7.4.5') { transitive = false }
compileOnly('com.sk89q.worldedit:worldedit-core:7.4.5') { transitive = false }
compileOnly "net.coreprotect:coreprotect:24.0"

compileOnly 'org.apache.sshd:sshd-core:2.17.1'
// packets
compileOnly 'com.github.retrooper:packetevents-spigot:2.13.0'

compileOnly 'org.jline:jline:3.28.0'
compileOnly 'org.apache.logging.log4j:log4j-core:2.24.3'
// discord stuff
compileOnly 'com.discord4j:discord4j-core:3.3.2'

compileOnly 'net.dv8tion:JDA:5.6.1'
// ssh
compileOnly 'org.apache.sshd:sshd-core:2.17.1'

compileOnly 'com.github.retrooper:packetevents-spigot:2.13.0'
// sql
compileOnly 'io.projectreactor:reactor-core:3.8.3'
compileOnly 'org.postgresql:postgresql:42.7.7'
compileOnly 'org.xerial:sqlite-jdbc:3.49.1.0'
compileOnly 'com.mysql:mysql-connector-j:9.3.0'
compileOnly 'com.zaxxer:HikariCP:6.3.0'

compileOnly "net.coreprotect:coreprotect:24.0"
// logging
compileOnly 'org.jline:jline:3.28.0'
compileOnly 'org.apache.logging.log4j:log4j-core:2.24.3'
}

// ... is this really necessary???
configurations.all {
resolutionStrategy {
force 'io.papermc.paper:paper-api:26.2.build.111-stable'
Expand Down Expand Up @@ -136,8 +160,8 @@ processResources {
}

expand(
buildAuthor: project.findProperty('buildAuthor') ?: 'Ivanomoly',
buildCodeName: project.findProperty('buildCodeName') ?: 'Polaris',
buildAuthor: project.findProperty('buildAuthor') ?: 'TotalFreedom', // Collective Effort :)
buildCodeName: project.findProperty('buildCodeName') ?: 'Sirius',
buildNumber: buildNumber,
buildVersion: project.version
)
Expand Down
File renamed without changes.
42 changes: 42 additions & 0 deletions rewrite.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
type: specs.openrewrite.org/v1beta/style
name: me.totalfreedom.totalfreedommod.WildcardStyle
styleConfigs:
- org.openrewrite.java.style.ImportLayoutStyle:
# anything lower than 5 will cause conflicts, 5 or higher is a good standard.
classCountToUseStarImport: 5
nameCountToUseStarImport: 5
layout:
# JDK
- import java.*
- import javax.*
- <blank line>
# server platform
- import com.destroystokyo.*
- import com.mojang.*
- import io.papermc.*
- import org.bukkit.*
- <blank line>
# adventure
- import net.kyori.*
- <blank line>
# third-party plugins
- import com.sk89q.*
- import net.coreprotect.*
- import net.milkbowl.*
- <blank line>
# github imports
- import com.github.*
- <blank line>
# reactive
- import discord4j.*
- import io.netty.*
- import reactor.*
- <blank line>
# project
- import me.totalfreedom.*
- <blank line>
# everything else
- import all other imports
- <blank line>
- import static all other imports
11 changes: 7 additions & 4 deletions src/main/java/me/totalfreedom/totalfreedommod/Announcer.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
package me.totalfreedom.totalfreedommod;

import com.google.common.collect.Lists;
import java.util.Collections;
import java.util.List;
import lombok.Getter;

import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;

import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.util.FTask;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;

import com.google.common.collect.Lists;
import lombok.Getter;

public class Announcer extends FreedomService
{
Expand Down
11 changes: 7 additions & 4 deletions src/main/java/me/totalfreedom/totalfreedommod/AntiDrop.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,7 @@

import java.util.Iterator;
import java.util.List;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.format.NamedTextColor;

import org.bukkit.entity.Item;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
Expand All @@ -14,6 +11,12 @@
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.inventory.ItemStack;

import net.kyori.adventure.text.format.NamedTextColor;

import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.util.FUtil;

public class AntiDrop extends FreedomService
{

Expand Down
10 changes: 6 additions & 4 deletions src/main/java/me/totalfreedom/totalfreedommod/AntiNuke.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
package me.totalfreedom.totalfreedommod;

import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;

import net.kyori.adventure.text.format.NamedTextColor;

import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.util.FUtil;

public class AntiNuke extends FreedomService
{

Expand Down
17 changes: 10 additions & 7 deletions src/main/java/me/totalfreedom/totalfreedommod/AntiSpam.java
Original file line number Diff line number Diff line change
@@ -1,22 +1,25 @@
package me.totalfreedom.totalfreedommod;

import io.papermc.paper.event.player.AsyncChatEvent;
import java.util.Locale;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import io.papermc.paper.event.player.AsyncChatEvent;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;

import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;

import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.ChatSpamData;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.util.AdventureUtil;
import me.totalfreedom.totalfreedommod.util.FSync;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;

public class AntiSpam extends FreedomService
{
Expand Down
11 changes: 7 additions & 4 deletions src/main/java/me/totalfreedom/totalfreedommod/AutoEject.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,17 @@
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.entity.Player;

import net.kyori.adventure.text.format.NamedTextColor;

import me.totalfreedom.totalfreedommod.banning.Ban;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.entity.Player;

public class AutoEject extends FreedomService
{
Expand Down
75 changes: 0 additions & 75 deletions src/main/java/me/totalfreedom/totalfreedommod/AutoKick.java

This file was deleted.

Loading