Skip to content

Commit 8c0f492

Browse files
authored
Merge pull request #34 from FTBTeam/1.19/dev
1.19/dev
2 parents c69d24f + e9a24f9 commit 8c0f492

File tree

9 files changed

+83
-42
lines changed

9 files changed

+83
-42
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
[1902.1.13]
8+
9+
### Fixed
10+
* Made rank-based chat text colouring (using `ftbranks.chat_text.*` nodes in `ranks.snbt`) work correctly on Forge and Fabric
11+
* FTB Ranks is no longer incorrectly marked as a server-only mod
12+
* As of the previous release, it is also required on the client (to support Tab-completion for ranks in commands)
13+
714
[1902.1.12]
815

916
### Added

common/src/main/java/dev/ftb/mods/ftbranks/FTBRanks.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package dev.ftb.mods.ftbranks;
22

3-
import dev.architectury.event.events.common.ChatEvent;
43
import dev.architectury.event.events.common.CommandRegistrationEvent;
54
import dev.architectury.event.events.common.LifecycleEvent;
65
import dev.ftb.mods.ftbranks.api.FTBRanksAPI;
@@ -23,6 +22,5 @@ public FTBRanks() {
2322
LifecycleEvent.SERVER_LEVEL_SAVE.register(FTBRanksAPIImpl::worldSaved);
2423
LifecycleEvent.SERVER_STARTING.register(FTBRanksAPIImpl::serverStarting);
2524
CommandRegistrationEvent.EVENT.register(FTBRanksCommands::register);
26-
ChatEvent.RECEIVED.register(FTBRanksAPIImpl::chatReceived);
2725
}
2826
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package dev.ftb.mods.ftbranks;
2+
3+
import dev.ftb.mods.ftbranks.api.FTBRanksAPI;
4+
import net.minecraft.ChatFormatting;
5+
import net.minecraft.network.chat.MutableComponent;
6+
import net.minecraft.server.level.ServerPlayer;
7+
import org.apache.commons.lang3.mutable.MutableBoolean;
8+
9+
public class MessageDecorator {
10+
/**
11+
* Common method called by Forge and Fabric-specific chat decoration event handlers. Note: only message text is
12+
* decorated here; sender name decoration is done via modifying the return value of player.getDisplayName(), via
13+
* Forge event or Fabric mixin.
14+
*
15+
* @param player player sending the message
16+
* @param text the mutable message text (to be mutated in-place if necessary)
17+
* @return true if decoration was applied, false if not
18+
*/
19+
public static boolean decorateMessage(ServerPlayer player, MutableComponent text) {
20+
MutableBoolean changed = new MutableBoolean(false);
21+
22+
ChatFormatting color = ChatFormatting.getByName(FTBRanksAPI.getPermissionValue(player, "ftbranks.chat_text.color").asString().orElse(null));
23+
if (color != null) {
24+
text.setStyle(text.getStyle().applyFormat(color));
25+
changed.setTrue();
26+
}
27+
28+
addStyle(player, text, "ftbranks.chat_text.bold", ChatFormatting.BOLD, changed);
29+
addStyle(player, text, "ftbranks.chat_text.italic", ChatFormatting.ITALIC, changed);
30+
addStyle(player, text, "ftbranks.chat_text.underlined", ChatFormatting.UNDERLINE, changed);
31+
addStyle(player, text, "ftbranks.chat_text.strikethrough", ChatFormatting.STRIKETHROUGH, changed);
32+
addStyle(player, text, "ftbranks.chat_text.obfuscated", ChatFormatting.OBFUSCATED, changed);
33+
34+
return changed.booleanValue();
35+
}
36+
37+
private static void addStyle(ServerPlayer player, MutableComponent component, String node, ChatFormatting modifier, MutableBoolean changed) {
38+
if (FTBRanksAPI.getPermissionValue(player, node).asBooleanOrFalse()) {
39+
component.setStyle(component.getStyle().applyFormat(modifier));
40+
changed.setTrue();
41+
}
42+
}
43+
}

common/src/main/java/dev/ftb/mods/ftbranks/impl/FTBRanksAPIImpl.java

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,10 @@
11
package dev.ftb.mods.ftbranks.impl;
22

3-
import com.mojang.datafixers.types.Type;
4-
import dev.architectury.event.EventResult;
5-
import dev.architectury.event.events.common.ChatEvent;
63
import dev.ftb.mods.ftbranks.api.FTBRanksAPI;
74
import dev.ftb.mods.ftbranks.api.RankManager;
85
import dev.ftb.mods.ftbranks.impl.condition.*;
9-
import net.minecraft.ChatFormatting;
10-
import net.minecraft.network.chat.Component;
11-
import net.minecraft.network.chat.MutableComponent;
126
import net.minecraft.server.MinecraftServer;
137
import net.minecraft.server.level.ServerLevel;
14-
import net.minecraft.server.level.ServerPlayer;
15-
import org.jetbrains.annotations.Nullable;
168

179
/**
1810
* @author LatvianModder
@@ -67,28 +59,4 @@ public static void serverStarting(MinecraftServer server) {
6759
manager.registerCondition("fake_player", (rank, tag) -> new FakePlayerCondition());
6860
manager.registerCondition("creative_mode", (rank, tag) -> new CreativeModeCondition());
6961
}
70-
71-
public static EventResult chatReceived(@Nullable ServerPlayer player, Component component) {
72-
if (component instanceof MutableComponent text) {
73-
// NOTE: only message text is decorated here; see PlayerNameFormatting for decoration of sender names
74-
ChatFormatting color = ChatFormatting.getByName(FTBRanksAPI.getPermissionValue(player, "ftbranks.chat_text.color").asString().orElse(null));
75-
if (color != null) {
76-
text.setStyle(text.getStyle().applyFormat(color));
77-
}
78-
79-
modifyText(player, text, "ftbranks.chat_text.bold", ChatFormatting.BOLD);
80-
modifyText(player, text, "ftbranks.chat_text.italic", ChatFormatting.ITALIC);
81-
modifyText(player, text, "ftbranks.chat_text.underlined", ChatFormatting.UNDERLINE);
82-
modifyText(player, text, "ftbranks.chat_text.strikethrough", ChatFormatting.STRIKETHROUGH);
83-
modifyText(player, text, "ftbranks.chat_text.obfuscated", ChatFormatting.OBFUSCATED);
84-
return EventResult.interruptTrue();
85-
}
86-
return EventResult.pass();
87-
}
88-
89-
private static void modifyText(ServerPlayer player, MutableComponent component, String node, ChatFormatting modifier) {
90-
if (FTBRanksAPI.getPermissionValue(player, node).asBooleanOrFalse()) {
91-
component.setStyle(component.getStyle().applyFormat(modifier));
92-
}
93-
}
9462
}

fabric/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ if (ENV.CURSEFORGE_KEY) {
7171
id = project.curseforge_id_fabric
7272
releaseType = project.curseforge_type
7373
addGameVersion "Fabric"
74-
addGameVersion "1.19"
74+
addGameVersion "1.19.2"
7575
mainArtifact(remapJar.archivePath)
7676
relations {
7777
requiredDependency 'architectury-api'
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,32 @@
11
package dev.ftb.mods.ftbranks.fabric;
22

33
import dev.ftb.mods.ftbranks.FTBRanks;
4+
import dev.ftb.mods.ftbranks.MessageDecorator;
45
import dev.ftb.mods.ftbranks.RankArgumentType;
56
import net.fabricmc.api.ModInitializer;
67
import net.fabricmc.fabric.api.command.v2.ArgumentTypeRegistry;
8+
import net.fabricmc.fabric.api.message.v1.ServerMessageDecoratorEvent;
9+
import net.minecraft.network.chat.MutableComponent;
710
import net.minecraft.resources.ResourceLocation;
811

12+
import java.util.concurrent.CompletableFuture;
13+
914
public class FTBRanksFabric implements ModInitializer {
1015
@Override
1116
public void onInitialize() {
1217
new FTBRanks();
1318

1419
ArgumentTypeRegistry.registerArgumentType(new ResourceLocation(FTBRanks.MOD_ID, "rank"),
1520
RankArgumentType.class, new RankArgumentType.Info());
21+
22+
ServerMessageDecoratorEvent.EVENT.register(ServerMessageDecoratorEvent.STYLING_PHASE, (sender, message) -> {
23+
if (sender != null) {
24+
MutableComponent mutableComponent = message.copy();
25+
if (MessageDecorator.decorateMessage(sender, mutableComponent)) {
26+
return CompletableFuture.completedFuture(mutableComponent);
27+
}
28+
}
29+
return CompletableFuture.completedFuture(message);
30+
});
1631
}
1732
}

forge/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ if (ENV.CURSEFORGE_KEY) {
9292
id = project.curseforge_id_forge
9393
releaseType = project.curseforge_type
9494
addGameVersion "Forge"
95-
addGameVersion "1.19"
95+
addGameVersion "1.19.2"
9696
mainArtifact(remapJar.archivePath)
9797
relations {
9898
requiredDependency 'architectury-api'

forge/src/main/java/dev/ftb/mods/ftbranks/forge/FTBRanksForge.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
import dev.architectury.platform.forge.EventBuses;
44
import dev.ftb.mods.ftbranks.FTBRanks;
5+
import dev.ftb.mods.ftbranks.MessageDecorator;
56
import dev.ftb.mods.ftbranks.PlayerNameFormatting;
7+
import net.minecraft.network.chat.MutableComponent;
68
import net.minecraft.server.level.ServerPlayer;
79
import net.minecraftforge.common.MinecraftForge;
10+
import net.minecraftforge.event.ServerChatEvent;
811
import net.minecraftforge.event.entity.player.PlayerEvent;
9-
import net.minecraftforge.fml.IExtensionPoint.DisplayTest;
10-
import net.minecraftforge.fml.ModLoadingContext;
1112
import net.minecraftforge.fml.common.Mod;
1213
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
13-
import net.minecraftforge.network.NetworkConstants;
1414

1515
@Mod(FTBRanks.MOD_ID)
1616
public class FTBRanksForge {
@@ -19,14 +19,13 @@ public FTBRanksForge() {
1919
EventBuses.registerModEventBus(FTBRanks.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus());
2020

2121
MinecraftForge.EVENT_BUS.addListener(this::playerNameFormatting);
22+
MinecraftForge.EVENT_BUS.addListener(this::serverChat);
2223

2324
new FTBRanks();
2425

2526
// Nope.
2627
// PermissionAPI.setPermissionHandler(new PermissionAPIWrapper(PermissionAPI.getPermissionHandler()));
2728

28-
ModLoadingContext.get().registerExtensionPoint(DisplayTest.class, () -> new DisplayTest(() -> NetworkConstants.IGNORESERVERONLY, (a, b) -> true));
29-
3029
ModArgumentTypeInfo.ARGUMENT_TYPE_INFO.register(FMLJavaModLoadingContext.get().getModEventBus());
3130
}
3231

@@ -35,4 +34,15 @@ private void playerNameFormatting(PlayerEvent.NameFormat event) {
3534
event.setDisplayname(PlayerNameFormatting.formatPlayerName(player, event.getDisplayname()));
3635
}
3736
}
37+
38+
private void serverChat(ServerChatEvent event) {
39+
if (event.canChangeMessage()) {
40+
MutableComponent text = event.getMessage().copy();
41+
if (MessageDecorator.decorateMessage(event.getPlayer(), text)) {
42+
event.setMessage(text);
43+
}
44+
}
45+
46+
}
47+
3848
}

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ org.gradle.daemon=false
33
mod_id=ftbranks
44
archives_base_name=ftb-ranks
55
maven_group=dev.ftb.mods
6-
mod_version=1902.1.12
6+
mod_version=1902.1.13
77
mod_author=FTB Team
88

99
minecraft_version=1.19.2

0 commit comments

Comments
 (0)