mirror of
https://github.com/ashhhleyyy/player-pronouns.git
synced 2024-11-01 07:07:38 +00:00
Merge pull request #7 from JustPyrrha/feat/pronoundb
This commit is contained in:
commit
be80375f2c
3 changed files with 84 additions and 5 deletions
|
@ -42,6 +42,10 @@ dependencies {
|
|||
include(libs.fabric.permissions)
|
||||
}
|
||||
|
||||
loom {
|
||||
runtimeOnlyLog4j.set(true)
|
||||
}
|
||||
|
||||
tasks.processResources {
|
||||
inputs.property("version", project.version)
|
||||
|
||||
|
|
|
@ -21,31 +21,38 @@ import java.util.Optional;
|
|||
public class Config {
|
||||
private static final Codec<Config> CODEC = RecordCodecBuilder.create(instance -> instance.group(
|
||||
Codec.BOOL.fieldOf("allow_custom").forGetter(config -> config.allowCustom),
|
||||
Codec.BOOL.fieldOf("enable_pronoundb_sync").forGetter(config -> config.enablePronounDBSync),
|
||||
Pronoun.CODEC.listOf().fieldOf("single").forGetter(config -> config.single),
|
||||
Pronoun.CODEC.listOf().fieldOf("pairs").forGetter(config -> config.pairs),
|
||||
Codec.STRING.optionalFieldOf("default_placeholder", "Unknown").forGetter(config -> config.defaultPlaceholder)
|
||||
).apply(instance, Config::new));
|
||||
|
||||
private final boolean allowCustom;
|
||||
private final boolean enablePronounDBSync;
|
||||
private final List<Pronoun> single;
|
||||
private final List<Pronoun> pairs;
|
||||
private final String defaultPlaceholder;
|
||||
|
||||
private Config(boolean allowCustom, List<Pronoun> single, List<Pronoun> pairs, String defaultPlaceholder) {
|
||||
private Config(boolean allowCustom, boolean enablePronounDBSync, List<Pronoun> single, List<Pronoun> pairs, String defaultPlaceholder) {
|
||||
this.allowCustom = allowCustom;
|
||||
this.enablePronounDBSync = enablePronounDBSync;
|
||||
this.single = single;
|
||||
this.pairs = pairs;
|
||||
this.defaultPlaceholder = defaultPlaceholder;
|
||||
}
|
||||
|
||||
private Config() {
|
||||
this(true, Collections.emptyList(), Collections.emptyList(), "Unknown");
|
||||
this(true, true, Collections.emptyList(), Collections.emptyList(), "Unknown");
|
||||
}
|
||||
|
||||
public boolean allowCustom() {
|
||||
return allowCustom;
|
||||
}
|
||||
|
||||
public boolean enablePronounDBSync() {
|
||||
return enablePronounDBSync;
|
||||
}
|
||||
|
||||
public List<Pronoun> getSingle() {
|
||||
return single;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package io.github.ashisbored.playerpronouns;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import eu.pb4.placeholders.api.PlaceholderContext;
|
||||
import eu.pb4.placeholders.api.PlaceholderResult;
|
||||
import eu.pb4.placeholders.api.Placeholders;
|
||||
|
@ -10,22 +11,62 @@ import io.github.ashisbored.playerpronouns.data.Pronouns;
|
|||
import net.fabricmc.api.ModInitializer;
|
||||
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
|
||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
|
||||
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.JsonHelper;
|
||||
import net.minecraft.util.WorldSavePath;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.spongepowered.include.com.google.common.base.Charsets;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.http.HttpClient;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.time.Duration;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
public class PlayerPronouns implements ModInitializer {
|
||||
public static final Logger LOGGER = LogManager.getLogger();
|
||||
public static final Logger LOGGER = LoggerFactory.getLogger(PlayerPronouns.class);
|
||||
public static final String MOD_ID = "playerpronouns";
|
||||
private static final Map<String, String> PRONOUNDB_ID_MAP = new HashMap<>() {{
|
||||
// short pronoun set identifier map from https://pronoundb.org/docs
|
||||
put("unspecified", "ask"); // default if unknown
|
||||
put("hh", "he/him");
|
||||
put("hi", "he/it");
|
||||
put("hs", "he/she");
|
||||
put("ht", "he/they");
|
||||
put("ih", "it/he");
|
||||
put("ii", "it/its");
|
||||
put("is", "it/she");
|
||||
put("it", "it/they");
|
||||
put("shh", "she/he");
|
||||
put("sh", "she/her");
|
||||
put("si", "she/it");
|
||||
put("st", "she/they");
|
||||
put("th", "they/he");
|
||||
put("ti", "they/it");
|
||||
put("ts", "they/she");
|
||||
put("tt", "they/them");
|
||||
put("any", "any");
|
||||
put("other", "other");
|
||||
put("ask", "ask");
|
||||
put("avoid", "avoid");
|
||||
}};
|
||||
|
||||
private static PronounDatabase pronounDatabase;
|
||||
public static Config config;
|
||||
|
@ -59,6 +100,33 @@ public class PlayerPronouns implements ModInitializer {
|
|||
}
|
||||
});
|
||||
|
||||
ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> {
|
||||
if(config.enablePronounDBSync()) {
|
||||
var pronounDbUrl = "https://pronoundb.org/api/v1/lookup?platform=minecraft&id=%s"
|
||||
.formatted(handler.getPlayer().getUuid());
|
||||
try {
|
||||
var client = HttpClient.newBuilder()
|
||||
.version(HttpClient.Version.HTTP_2)
|
||||
.followRedirects(HttpClient.Redirect.NORMAL)
|
||||
.build();
|
||||
var req = HttpRequest.newBuilder()
|
||||
.uri(new URI(pronounDbUrl))
|
||||
.GET()
|
||||
.timeout(Duration.ofSeconds(10))
|
||||
.build();
|
||||
client.sendAsync(req, HttpResponse.BodyHandlers.ofString())
|
||||
.thenApply(HttpResponse::body)
|
||||
.thenAccept(body -> {
|
||||
var json = JsonHelper.deserialize(body);
|
||||
var pronouns = PRONOUNDB_ID_MAP.getOrDefault(json.get("pronouns").getAsString(), "ask");
|
||||
setPronouns(handler.getPlayer(), new Pronouns(pronouns, PronounList.get().getCalculatedPronounStrings().get(pronouns)));
|
||||
}).join();
|
||||
} catch (URISyntaxException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//noinspection CodeBlock2Expr
|
||||
CommandRegistrationCallback.EVENT.register((dispatcher, registry, env) -> {
|
||||
PronounsCommand.register(dispatcher);
|
||||
|
|
Loading…
Reference in a new issue