Skip to content

Commit

Permalink
Finish up 1.20.5 update
Browse files Browse the repository at this point in the history
  • Loading branch information
Patbox committed Apr 19, 2024
1 parent 5c41472 commit 5f4a4ad
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,6 @@ public static String raw(String key, LocalizationTarget target) {

@Nullable
public static String raw(String key, ServerLanguage language) {
return language.serverTranslations().get(key);
return language.serverTranslations().getOrNull(key);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package xyz.nucleoid.server.translations.impl;

import net.minecraft.nbt.NbtElement;
import com.mojang.serialization.JavaOps;
import net.minecraft.nbt.NbtOps;
import net.minecraft.text.*;
import xyz.nucleoid.server.translations.api.language.ServerLanguage;
Expand All @@ -11,18 +11,18 @@
public interface LocalizableText {

static Text asLocalizedFor(final Text text, final ServerLanguage language) {
// TODO 1.20.5 Not tested
// Encode to *any* intermediary format to apply the translation steps from TranslatableTextContentMixin to all translation text codecs
var dynamicOps = NbtOps.INSTANCE;
Optional<NbtElement> optionalNbt = TextCodecs.CODEC.encodeStart(dynamicOps, text).result();
if (optionalNbt.isEmpty()) {
ServerTranslations.TRANSLATION_CONTEXT.set(language);
var optional = TextCodecs.CODEC.encodeStart(dynamicOps, text).result();
ServerTranslations.TRANSLATION_CONTEXT.remove();
if (optional.isEmpty()) {
// Failed to encode text, shouldn't happen
return text;
}

// Decode back
ServerTranslations.TRANSLATION_CONTEXT.set(language);
Optional<Text> optionalText = TextCodecs.CODEC.parse(dynamicOps, optionalNbt.get()).result();
ServerTranslations.TRANSLATION_CONTEXT.remove();
var optionalText = TextCodecs.CODEC.parse(dynamicOps, optional.get()).result();
// Failed to decode text, shouldn't happen
return optionalText.orElse(text);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.mojang.logging.LogUtils;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
import net.minecraft.server.MinecraftServer;
import net.minecraft.text.TranslatableTextContent;
import xyz.nucleoid.server.translations.api.LocalizationTarget;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.objects.Object2ObjectRBTreeMap;
Expand Down Expand Up @@ -169,6 +170,9 @@ public CompletableFuture<Void> reload(Synchronizer synchronizer, ResourceManager

int keyCount = ServerTranslations.INSTANCE.getTranslationKeyCount();
LOGGER.info(Text.translatable("text.translated_server.loaded.translation_key", String.valueOf(keyCount)).getString());

//System.out.println(LocalizableText.asLocalizedFor(
// Text.translatable("text.translated_server.loaded.translation_key"), ServerLanguage.getLanguage("en_us")).getContent() instanceof TranslatableTextContent t ? t.getFallback() : "[FAIL]");
});
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package xyz.nucleoid.server.translations.mixin.codec;

import com.mojang.serialization.Codec;
import com.mojang.serialization.DynamicOps;
import net.minecraft.component.type.LoreComponent;
import net.minecraft.component.type.WrittenBookContentComponent;
import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import xyz.nucleoid.server.translations.api.LocalizationTarget;
import xyz.nucleoid.server.translations.impl.ServerTranslations;

@Mixin(targets = "net/minecraft/util/dynamic/CodecCache$2")
public class CodecCacheMixin {
@Shadow
@Final
private Codec<Object> field_51505;
@Inject(method = "encode", at = @At("HEAD"), cancellable = true)
private void dontCacheOnNetworking(Object value, DynamicOps<Object> ops, Object prefix, CallbackInfoReturnable<Object> cir) {
if (
(value instanceof Text || value instanceof WrittenBookContentComponent || value instanceof LoreComponent)
&& (LocalizationTarget.forPacket() != null || ServerTranslations.TRANSLATION_CONTEXT.get() != null)
) {
cir.setReturnValue(this.field_51505.encode(value, ops, prefix));
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package xyz.nucleoid.server.translations.mixin.packet;
package xyz.nucleoid.server.translations.mixin.codec;

import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.mojang.serialization.MapCodec;
Expand All @@ -21,7 +21,22 @@ public abstract class TranslatableTextContentMixin {
)
)
private static MapCodec<TranslatableTextContent> stapi$addTranslationFallback(MapCodec<TranslatableTextContent> original) {
return original.xmap(Function.identity(), (content) -> {
return original.xmap((content) -> {
if (content.getFallback() != null) {
ServerLanguage language = ServerTranslations.TRANSLATION_CONTEXT.get();
if (language == null) {
var target = LocalizationTarget.forPacket();
if (target != null) {
language = target.getLanguage();
}
}

if (language != null && content.getFallback().equals(language.serverTranslations().getOrNull(content.getKey()))) {
return new TranslatableTextContent(content.getKey(), null, content.getArgs());
}
}
return content;
}, (content) -> {
if (content.getFallback() == null) {
ServerLanguage language = ServerTranslations.TRANSLATION_CONTEXT.get();
if (language == null) {
Expand Down
5 changes: 3 additions & 2 deletions api/src/main/resources/server_translations_api.mixin.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@
"mixins": [
"LanguageMixin",
"ServerPlayerEntityMixin",
"codec.CodecCacheMixin",
"codec.TranslatableTextContentMixin",
"packet.BlockEntityDataMixin",
"packet.BlockEntityUpdateS2CPacketMixin",
"packet.TranslatableTextContentMixin"
"packet.BlockEntityUpdateS2CPacketMixin"
],
"client": [
"client.LanguageMixin"
Expand Down
12 changes: 6 additions & 6 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ plugins {
id 'eclipse'
id 'idea'
id 'maven-publish'
id 'fabric-loom' version '1.5.+' apply false
id 'fabric-loom' version '1.6.+' apply false
id 'com.matthewprenger.cursegradle' version "1.4.0"
}

class Globals {
static def baseVersion = "2.2.0"
static def mcVersion = "24w09a"
static def yarnVersion = "+build.6"
static def baseVersion = "2.3.0"
static def mcVersion = "1.20.5-rc2"
static def yarnVersion = "+build.1"
}

archivesBaseName = "Server-Translations"
Expand Down Expand Up @@ -51,9 +51,9 @@ allprojects {
mappings "net.fabricmc:yarn:${Globals.mcVersion}${Globals.yarnVersion}:v2"
modImplementation "net.fabricmc:fabric-loader:0.15.7"

modImplementation include("xyz.nucleoid:packet-tweaker:0.5.0+1.20.2-rc1")
modImplementation include("xyz.nucleoid:packet-tweaker:0.5.1+24w03b")

modImplementation "net.fabricmc.fabric-api:fabric-api:0.96.5+1.20.5"
modImplementation "net.fabricmc.fabric-api:fabric-api:0.97.3+1.20.5"
}

processResources {
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

0 comments on commit 5f4a4ad

Please sign in to comment.