Skip to content

1.19/dev #34

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Dec 7, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

[1902.1.13]

### Fixed
* Made rank-based chat text colouring (using `ftbranks.chat_text.*` nodes in `ranks.snbt`) work correctly on Forge and Fabric
* FTB Ranks is no longer incorrectly marked as a server-only mod
* As of the previous release, it is also required on the client (to support Tab-completion for ranks in commands)

[1902.1.12]

### Added
Expand Down
2 changes: 0 additions & 2 deletions common/src/main/java/dev/ftb/mods/ftbranks/FTBRanks.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package dev.ftb.mods.ftbranks;

import dev.architectury.event.events.common.ChatEvent;
import dev.architectury.event.events.common.CommandRegistrationEvent;
import dev.architectury.event.events.common.LifecycleEvent;
import dev.ftb.mods.ftbranks.api.FTBRanksAPI;
Expand All @@ -23,6 +22,5 @@ public FTBRanks() {
LifecycleEvent.SERVER_LEVEL_SAVE.register(FTBRanksAPIImpl::worldSaved);
LifecycleEvent.SERVER_STARTING.register(FTBRanksAPIImpl::serverStarting);
CommandRegistrationEvent.EVENT.register(FTBRanksCommands::register);
ChatEvent.RECEIVED.register(FTBRanksAPIImpl::chatReceived);
}
}
43 changes: 43 additions & 0 deletions common/src/main/java/dev/ftb/mods/ftbranks/MessageDecorator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package dev.ftb.mods.ftbranks;

import dev.ftb.mods.ftbranks.api.FTBRanksAPI;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.server.level.ServerPlayer;
import org.apache.commons.lang3.mutable.MutableBoolean;

public class MessageDecorator {
/**
* Common method called by Forge and Fabric-specific chat decoration event handlers. Note: only message text is
* decorated here; sender name decoration is done via modifying the return value of player.getDisplayName(), via
* Forge event or Fabric mixin.
*
* @param player player sending the message
* @param text the mutable message text (to be mutated in-place if necessary)
* @return true if decoration was applied, false if not
*/
public static boolean decorateMessage(ServerPlayer player, MutableComponent text) {
MutableBoolean changed = new MutableBoolean(false);

ChatFormatting color = ChatFormatting.getByName(FTBRanksAPI.getPermissionValue(player, "ftbranks.chat_text.color").asString().orElse(null));
if (color != null) {
text.setStyle(text.getStyle().applyFormat(color));
changed.setTrue();
}

addStyle(player, text, "ftbranks.chat_text.bold", ChatFormatting.BOLD, changed);
addStyle(player, text, "ftbranks.chat_text.italic", ChatFormatting.ITALIC, changed);
addStyle(player, text, "ftbranks.chat_text.underlined", ChatFormatting.UNDERLINE, changed);
addStyle(player, text, "ftbranks.chat_text.strikethrough", ChatFormatting.STRIKETHROUGH, changed);
addStyle(player, text, "ftbranks.chat_text.obfuscated", ChatFormatting.OBFUSCATED, changed);

return changed.booleanValue();
}

private static void addStyle(ServerPlayer player, MutableComponent component, String node, ChatFormatting modifier, MutableBoolean changed) {
if (FTBRanksAPI.getPermissionValue(player, node).asBooleanOrFalse()) {
component.setStyle(component.getStyle().applyFormat(modifier));
changed.setTrue();
}
}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,10 @@
package dev.ftb.mods.ftbranks.impl;

import com.mojang.datafixers.types.Type;
import dev.architectury.event.EventResult;
import dev.architectury.event.events.common.ChatEvent;
import dev.ftb.mods.ftbranks.api.FTBRanksAPI;
import dev.ftb.mods.ftbranks.api.RankManager;
import dev.ftb.mods.ftbranks.impl.condition.*;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import org.jetbrains.annotations.Nullable;

/**
* @author LatvianModder
Expand Down Expand Up @@ -67,28 +59,4 @@ public static void serverStarting(MinecraftServer server) {
manager.registerCondition("fake_player", (rank, tag) -> new FakePlayerCondition());
manager.registerCondition("creative_mode", (rank, tag) -> new CreativeModeCondition());
}

public static EventResult chatReceived(@Nullable ServerPlayer player, Component component) {
if (component instanceof MutableComponent text) {
// NOTE: only message text is decorated here; see PlayerNameFormatting for decoration of sender names
ChatFormatting color = ChatFormatting.getByName(FTBRanksAPI.getPermissionValue(player, "ftbranks.chat_text.color").asString().orElse(null));
if (color != null) {
text.setStyle(text.getStyle().applyFormat(color));
}

modifyText(player, text, "ftbranks.chat_text.bold", ChatFormatting.BOLD);
modifyText(player, text, "ftbranks.chat_text.italic", ChatFormatting.ITALIC);
modifyText(player, text, "ftbranks.chat_text.underlined", ChatFormatting.UNDERLINE);
modifyText(player, text, "ftbranks.chat_text.strikethrough", ChatFormatting.STRIKETHROUGH);
modifyText(player, text, "ftbranks.chat_text.obfuscated", ChatFormatting.OBFUSCATED);
return EventResult.interruptTrue();
}
return EventResult.pass();
}

private static void modifyText(ServerPlayer player, MutableComponent component, String node, ChatFormatting modifier) {
if (FTBRanksAPI.getPermissionValue(player, node).asBooleanOrFalse()) {
component.setStyle(component.getStyle().applyFormat(modifier));
}
}
}
2 changes: 1 addition & 1 deletion fabric/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ if (ENV.CURSEFORGE_KEY) {
id = project.curseforge_id_fabric
releaseType = project.curseforge_type
addGameVersion "Fabric"
addGameVersion "1.19"
addGameVersion "1.19.2"
mainArtifact(remapJar.archivePath)
relations {
requiredDependency 'architectury-api'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,32 @@
package dev.ftb.mods.ftbranks.fabric;

import dev.ftb.mods.ftbranks.FTBRanks;
import dev.ftb.mods.ftbranks.MessageDecorator;
import dev.ftb.mods.ftbranks.RankArgumentType;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.command.v2.ArgumentTypeRegistry;
import net.fabricmc.fabric.api.message.v1.ServerMessageDecoratorEvent;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.resources.ResourceLocation;

import java.util.concurrent.CompletableFuture;

public class FTBRanksFabric implements ModInitializer {
@Override
public void onInitialize() {
new FTBRanks();

ArgumentTypeRegistry.registerArgumentType(new ResourceLocation(FTBRanks.MOD_ID, "rank"),
RankArgumentType.class, new RankArgumentType.Info());

ServerMessageDecoratorEvent.EVENT.register(ServerMessageDecoratorEvent.STYLING_PHASE, (sender, message) -> {
if (sender != null) {
MutableComponent mutableComponent = message.copy();
if (MessageDecorator.decorateMessage(sender, mutableComponent)) {
return CompletableFuture.completedFuture(mutableComponent);
}
}
return CompletableFuture.completedFuture(message);
});
}
}
2 changes: 1 addition & 1 deletion forge/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ if (ENV.CURSEFORGE_KEY) {
id = project.curseforge_id_forge
releaseType = project.curseforge_type
addGameVersion "Forge"
addGameVersion "1.19"
addGameVersion "1.19.2"
mainArtifact(remapJar.archivePath)
relations {
requiredDependency 'architectury-api'
Expand Down
20 changes: 15 additions & 5 deletions forge/src/main/java/dev/ftb/mods/ftbranks/forge/FTBRanksForge.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@

import dev.architectury.platform.forge.EventBuses;
import dev.ftb.mods.ftbranks.FTBRanks;
import dev.ftb.mods.ftbranks.MessageDecorator;
import dev.ftb.mods.ftbranks.PlayerNameFormatting;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.server.level.ServerPlayer;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.ServerChatEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.fml.IExtensionPoint.DisplayTest;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.network.NetworkConstants;

@Mod(FTBRanks.MOD_ID)
public class FTBRanksForge {
Expand All @@ -19,14 +19,13 @@ public FTBRanksForge() {
EventBuses.registerModEventBus(FTBRanks.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus());

MinecraftForge.EVENT_BUS.addListener(this::playerNameFormatting);
MinecraftForge.EVENT_BUS.addListener(this::serverChat);

new FTBRanks();

// Nope.
// PermissionAPI.setPermissionHandler(new PermissionAPIWrapper(PermissionAPI.getPermissionHandler()));

ModLoadingContext.get().registerExtensionPoint(DisplayTest.class, () -> new DisplayTest(() -> NetworkConstants.IGNORESERVERONLY, (a, b) -> true));

ModArgumentTypeInfo.ARGUMENT_TYPE_INFO.register(FMLJavaModLoadingContext.get().getModEventBus());
}

Expand All @@ -35,4 +34,15 @@ private void playerNameFormatting(PlayerEvent.NameFormat event) {
event.setDisplayname(PlayerNameFormatting.formatPlayerName(player, event.getDisplayname()));
}
}

private void serverChat(ServerChatEvent event) {
if (event.canChangeMessage()) {
MutableComponent text = event.getMessage().copy();
if (MessageDecorator.decorateMessage(event.getPlayer(), text)) {
event.setMessage(text);
}
}

}

}
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ org.gradle.daemon=false
mod_id=ftbranks
archives_base_name=ftb-ranks
maven_group=dev.ftb.mods
mod_version=1902.1.12
mod_version=1902.1.13
mod_author=FTB Team

minecraft_version=1.19.2
Expand Down