mirror of
https://github.com/ashhhleyyy/player-pronouns.git
synced 2024-11-01 07:07:38 +00:00
feat: add PronounDB.org syncing
This commit is contained in:
parent
f3a2a51591
commit
3d53fd1688
2 changed files with 62 additions and 2 deletions
|
@ -21,31 +21,38 @@ import java.util.Optional;
|
||||||
public class Config {
|
public class Config {
|
||||||
private static final Codec<Config> CODEC = RecordCodecBuilder.create(instance -> instance.group(
|
private static final Codec<Config> CODEC = RecordCodecBuilder.create(instance -> instance.group(
|
||||||
Codec.BOOL.fieldOf("allow_custom").forGetter(config -> config.allowCustom),
|
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("single").forGetter(config -> config.single),
|
||||||
Pronoun.CODEC.listOf().fieldOf("pairs").forGetter(config -> config.pairs),
|
Pronoun.CODEC.listOf().fieldOf("pairs").forGetter(config -> config.pairs),
|
||||||
Codec.STRING.optionalFieldOf("default_placeholder", "Unknown").forGetter(config -> config.defaultPlaceholder)
|
Codec.STRING.optionalFieldOf("default_placeholder", "Unknown").forGetter(config -> config.defaultPlaceholder)
|
||||||
).apply(instance, Config::new));
|
).apply(instance, Config::new));
|
||||||
|
|
||||||
private final boolean allowCustom;
|
private final boolean allowCustom;
|
||||||
|
private final boolean enablePronounDBSync;
|
||||||
private final List<Pronoun> single;
|
private final List<Pronoun> single;
|
||||||
private final List<Pronoun> pairs;
|
private final List<Pronoun> pairs;
|
||||||
private final String defaultPlaceholder;
|
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.allowCustom = allowCustom;
|
||||||
|
this.enablePronounDBSync = enablePronounDBSync;
|
||||||
this.single = single;
|
this.single = single;
|
||||||
this.pairs = pairs;
|
this.pairs = pairs;
|
||||||
this.defaultPlaceholder = defaultPlaceholder;
|
this.defaultPlaceholder = defaultPlaceholder;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Config() {
|
private Config() {
|
||||||
this(true, Collections.emptyList(), Collections.emptyList(), "Unknown");
|
this(true, true, Collections.emptyList(), Collections.emptyList(), "Unknown");
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean allowCustom() {
|
public boolean allowCustom() {
|
||||||
return allowCustom;
|
return allowCustom;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean enablePronounDBSync() {
|
||||||
|
return enablePronounDBSync;
|
||||||
|
}
|
||||||
|
|
||||||
public List<Pronoun> getSingle() {
|
public List<Pronoun> getSingle() {
|
||||||
return single;
|
return single;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,31 +1,67 @@
|
||||||
package io.github.ashisbored.playerpronouns;
|
package io.github.ashisbored.playerpronouns;
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
import eu.pb4.placeholders.api.PlaceholderContext;
|
import eu.pb4.placeholders.api.PlaceholderContext;
|
||||||
import eu.pb4.placeholders.api.PlaceholderResult;
|
import eu.pb4.placeholders.api.PlaceholderResult;
|
||||||
import eu.pb4.placeholders.api.Placeholders;
|
import eu.pb4.placeholders.api.Placeholders;
|
||||||
import io.github.ashisbored.playerpronouns.command.PronounsCommand;
|
import io.github.ashisbored.playerpronouns.command.PronounsCommand;
|
||||||
|
import io.github.ashisbored.playerpronouns.data.Pronoun;
|
||||||
import io.github.ashisbored.playerpronouns.data.PronounDatabase;
|
import io.github.ashisbored.playerpronouns.data.PronounDatabase;
|
||||||
import io.github.ashisbored.playerpronouns.data.PronounList;
|
import io.github.ashisbored.playerpronouns.data.PronounList;
|
||||||
import io.github.ashisbored.playerpronouns.data.Pronouns;
|
import io.github.ashisbored.playerpronouns.data.Pronouns;
|
||||||
import net.fabricmc.api.ModInitializer;
|
import net.fabricmc.api.ModInitializer;
|
||||||
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
|
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
|
||||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
|
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.MinecraftServer;
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
|
import net.minecraft.util.JsonHelper;
|
||||||
import net.minecraft.util.WorldSavePath;
|
import net.minecraft.util.WorldSavePath;
|
||||||
|
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.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import org.spongepowered.include.com.google.common.base.Charsets;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
public class PlayerPronouns implements ModInitializer {
|
public class PlayerPronouns implements ModInitializer {
|
||||||
public static final Logger LOGGER = LogManager.getLogger();
|
public static final Logger LOGGER = LogManager.getLogger();
|
||||||
public static final String MOD_ID = "playerpronouns";
|
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;
|
private static PronounDatabase pronounDatabase;
|
||||||
public static Config config;
|
public static Config config;
|
||||||
|
@ -59,6 +95,23 @@ public class PlayerPronouns implements ModInitializer {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> {
|
||||||
|
if(config.enablePronounDBSync()) {
|
||||||
|
String pronounDbUrl = "https://pronoundb.org/api/v1/lookup?platform=minecraft&id=%s".formatted(handler.getPlayer().getUuid());
|
||||||
|
try(CloseableHttpClient client = HttpClients.createMinimal();
|
||||||
|
CloseableHttpResponse resp = client.execute(new HttpGet(pronounDbUrl))) {
|
||||||
|
|
||||||
|
if(resp.getStatusLine().getStatusCode() == 200) {
|
||||||
|
JsonObject json = JsonHelper.deserialize(new String(resp.getEntity().getContent().readAllBytes(), Charsets.UTF_8));
|
||||||
|
String pronouns = PRONOUNDB_ID_MAP.getOrDefault(json.get("pronouns").getAsString(), "ask");
|
||||||
|
setPronouns(handler.getPlayer(), new Pronouns(pronouns, PronounList.get().getCalculatedPronounStrings().get(pronouns)));
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
//noinspection CodeBlock2Expr
|
//noinspection CodeBlock2Expr
|
||||||
CommandRegistrationCallback.EVENT.register((dispatcher, registry, env) -> {
|
CommandRegistrationCallback.EVENT.register((dispatcher, registry, env) -> {
|
||||||
PronounsCommand.register(dispatcher);
|
PronounsCommand.register(dispatcher);
|
||||||
|
|
Loading…
Reference in a new issue