mirror of
https://github.com/TeamMidnightDust/MidnightLib.git
synced 2025-12-15 17:05:09 +01:00
MidnightLib 1.3.0 - No more hats
- Re-enable Quilt and Forge support - Completely remove unnecessary bloat (Hat cosmetics) - File size is now just around 55KB for the Fabric & Quilt version, 60KB for Forge
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package eu.midnightdust.core;
|
||||
|
||||
import eu.midnightdust.core.config.MidnightLibConfig;
|
||||
import eu.midnightdust.hats.web.HatLoader;
|
||||
import eu.midnightdust.lib.config.MidnightConfig;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -10,11 +9,7 @@ import java.util.List;
|
||||
public class MidnightLibClient {
|
||||
public static List<String> hiddenMods = new ArrayList<>();
|
||||
|
||||
public static final String MOD_ID = "midnightlib";
|
||||
|
||||
public static void onInitializeClient() {
|
||||
MidnightConfig.init("midnightlib", MidnightLibConfig.class);
|
||||
|
||||
if (MidnightLibConfig.special_hats) HatLoader.init();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,12 +4,8 @@ import eu.midnightdust.lib.config.MidnightConfig;
|
||||
import eu.midnightdust.lib.util.PlatformFunctions;
|
||||
|
||||
public class MidnightLibConfig extends MidnightConfig {
|
||||
@Comment(centered = true) public static Comment midnightlib_description;
|
||||
@Entry // Enable or disable the MidnightConfig overview screen button
|
||||
public static ConfigButton config_screen_list = PlatformFunctions.isModLoaded("modmenu") ? ConfigButton.MODMENU : ConfigButton.TRUE;
|
||||
@Comment(centered = true) public static Comment midnighthats_description;
|
||||
@Entry // Enable or disable hats for contributors, friends and donors.
|
||||
public static boolean special_hats = true;
|
||||
|
||||
public enum ConfigButton {
|
||||
TRUE,FALSE,MODMENU
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
package eu.midnightdust.core.mixin;
|
||||
|
||||
import eu.midnightdust.hats.witch.WitchHatFeatureRenderer;
|
||||
import net.minecraft.client.network.AbstractClientPlayerEntity;
|
||||
import net.minecraft.client.render.entity.EntityRendererFactory;
|
||||
import net.minecraft.client.render.entity.LivingEntityRenderer;
|
||||
import net.minecraft.client.render.entity.PlayerEntityRenderer;
|
||||
import net.minecraft.client.render.entity.model.PlayerEntityModel;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(PlayerEntityRenderer.class)
|
||||
public abstract class MixinPlayerEntityRenderer extends LivingEntityRenderer<AbstractClientPlayerEntity, PlayerEntityModel<AbstractClientPlayerEntity>> {
|
||||
public MixinPlayerEntityRenderer(EntityRendererFactory.Context ctx, PlayerEntityModel<AbstractClientPlayerEntity> model, float shadowSize) {
|
||||
super(ctx, model, shadowSize);
|
||||
}
|
||||
|
||||
@Inject(at = @At("TAIL"), method = "<init>")
|
||||
public void addFeatures(EntityRendererFactory.Context ctx, boolean slim, CallbackInfo ci) {
|
||||
this.addFeature(new WitchHatFeatureRenderer<>(this, ctx.getModelLoader()));
|
||||
}
|
||||
}
|
||||
@@ -37,7 +37,7 @@ public class MidnightConfigOverviewScreen extends Screen {
|
||||
sortedMods.forEach((modid) -> {
|
||||
if (!MidnightLibClient.hiddenMods.contains(modid)) {
|
||||
list.addButton(ButtonWidget.builder(Text.translatable(modid +".midnightconfig.title"), (button) ->
|
||||
Objects.requireNonNull(client).setScreen(MidnightConfig.getScreen(this,modid))).dimensions(this.width / 2 - 100, this.height - 28, 200, 20).build());
|
||||
Objects.requireNonNull(client).setScreen(MidnightConfig.getScreen(this,modid))).dimensions(this.width / 2 - 125, this.height - 28, 250, 20).build());
|
||||
}
|
||||
});
|
||||
super.init();
|
||||
@@ -59,7 +59,7 @@ public class MidnightConfigOverviewScreen extends Screen {
|
||||
textRenderer = minecraftClient.textRenderer;
|
||||
}
|
||||
@Override
|
||||
public int getScrollbarPositionX() {return this.width -7;}
|
||||
public int getScrollbarPositionX() {return this.width-7;}
|
||||
|
||||
public void addButton(ClickableWidget button) {
|
||||
this.addEntry(OverviewButtonEntry.create(button));
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
package eu.midnightdust.hats.web;
|
||||
|
||||
import com.google.common.reflect.TypeToken;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.lang.reflect.Type;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
@SuppressWarnings("UnstableApiUsage")
|
||||
public class HatLoader {
|
||||
public static final System.Logger logger = System.getLogger("MidnightLib");
|
||||
private final static String HATS_URL = "https://raw.githubusercontent.com/TeamMidnightDust/MidnightHats/master/hats.json";
|
||||
public static final Type HAT_TYPE = new TypeToken<Map<UUID, PlayerHatData>>(){}.getType();
|
||||
public static Map<UUID, PlayerHatData> PLAYER_HATS;
|
||||
private static final Gson GSON = new GsonBuilder().create();
|
||||
|
||||
|
||||
public static void init() {
|
||||
CompletableFuture.supplyAsync(() -> {
|
||||
try (Reader reader = new InputStreamReader(new URL(HATS_URL).openStream())) {
|
||||
return GSON.<Map<UUID, PlayerHatData>>fromJson(reader, HAT_TYPE);
|
||||
} catch (MalformedURLException error) {
|
||||
logger.log(System.Logger.Level.ERROR, "Unable to load player hats because of connection problems: " + error.getMessage());
|
||||
} catch (IOException error) {
|
||||
logger.log(System.Logger.Level.ERROR, "Unable to load player hats because of an I/O Exception: " + error.getMessage());
|
||||
}
|
||||
|
||||
return null;
|
||||
}).thenAcceptAsync(playerData -> {
|
||||
if (playerData != null) {
|
||||
PLAYER_HATS = playerData;
|
||||
System.out.println("(MidnightLib) Player hats successfully loaded!");
|
||||
} else {
|
||||
PLAYER_HATS = Collections.emptyMap();
|
||||
logger.log(System.Logger.Level.WARNING, "A problem with the database occurred, the hats could not be initialized.");
|
||||
}
|
||||
}, MinecraftClient.getInstance());
|
||||
}
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
package eu.midnightdust.hats.web;
|
||||
|
||||
public class PlayerHatData {
|
||||
private final String hat;
|
||||
|
||||
public PlayerHatData(String hat) {
|
||||
this.hat = hat;
|
||||
}
|
||||
|
||||
public String getHatType() {
|
||||
return hat;
|
||||
}
|
||||
}
|
||||
@@ -1,82 +0,0 @@
|
||||
package eu.midnightdust.hats.witch;
|
||||
|
||||
import eu.midnightdust.hats.web.HatLoader;
|
||||
import eu.midnightdust.lib.util.MidnightColorUtil;
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.model.TexturedModelData;
|
||||
import net.minecraft.client.render.*;
|
||||
import net.minecraft.client.render.entity.feature.FeatureRenderer;
|
||||
import net.minecraft.client.render.entity.feature.FeatureRendererContext;
|
||||
import net.minecraft.client.render.entity.model.EntityModel;
|
||||
import net.minecraft.client.render.entity.model.EntityModelLayer;
|
||||
import net.minecraft.client.render.entity.model.EntityModelLoader;
|
||||
import net.minecraft.client.render.entity.model.ModelWithHead;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.UUID;
|
||||
|
||||
import static eu.midnightdust.core.MidnightLibClient.MOD_ID;
|
||||
|
||||
@Environment(EnvType.CLIENT)
|
||||
public class WitchHatFeatureRenderer<T extends LivingEntity, M extends EntityModel<T>> extends FeatureRenderer<T, M> {
|
||||
public static final EntityModelLayer WITCH_HAT_MODEL_LAYER = new EntityModelLayer(new Identifier("midnight-hats","witch_hat"), "main");
|
||||
private static final UUID MOTSCHEN = UUID.fromString("a44c2660-630f-478f-946a-e518669fcf0c");
|
||||
|
||||
private static final Identifier WITCH = new Identifier("textures/entity/witch.png");
|
||||
private static final Identifier OVERLAY = new Identifier(MOD_ID,"textures/hats/overlay.png");
|
||||
private static final Color MOTSCHEN_COLOR = MidnightColorUtil.radialRainbow(1,1);
|
||||
private static final Color ADOPTER_COLOR = MidnightColorUtil.hex2Rgb("ffffff");
|
||||
private static final Color MODDER_COLOR = MidnightColorUtil.hex2Rgb("7825b4");
|
||||
private static final Color FRIEND_COLOR = MidnightColorUtil.hex2Rgb("ff0234");
|
||||
private static final Color DONOR_COLOR = MidnightColorUtil.hex2Rgb("ff6c00");
|
||||
private static final Color SOCIAL_COLOR = MidnightColorUtil.hex2Rgb("238a9d");
|
||||
private final WitchHatModel<T> witchHat;
|
||||
private final MinecraftClient client = MinecraftClient.getInstance();
|
||||
|
||||
public WitchHatFeatureRenderer(FeatureRendererContext<T, M> featureRendererContext, EntityModelLoader entityModelLoader) {
|
||||
super(featureRendererContext);
|
||||
this.witchHat = new WitchHatModel<>(entityModelLoader.getModelPart(WITCH_HAT_MODEL_LAYER));
|
||||
}
|
||||
|
||||
public static TexturedModelData getTexturedModelData() {
|
||||
return TexturedModelData.of(WitchHatModel.getModelData(), 64, 128);
|
||||
}
|
||||
|
||||
public void render(MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, T livingEntity, float f, float g, float h, float j, float k, float l) {
|
||||
Color hat_type = getHat(livingEntity.getUuid());
|
||||
|
||||
if (hat_type != null && !livingEntity.isInvisibleTo(client.player)) {
|
||||
if (hat_type == MOTSCHEN_COLOR) hat_type = MidnightColorUtil.radialRainbow(1,1);
|
||||
matrixStack.push();
|
||||
|
||||
((ModelWithHead) this.getContextModel()).getHead().rotate(matrixStack);
|
||||
VertexConsumer vertexConsumer = vertexConsumerProvider.getBuffer(RenderLayer.getEntityCutoutNoCull(WITCH));
|
||||
this.witchHat.render(matrixStack, vertexConsumer, i, OverlayTexture.DEFAULT_UV,1f,1f,1f,1);
|
||||
VertexConsumer glow = vertexConsumerProvider.getBuffer(RenderLayer.getBeaconBeam(OVERLAY,true));
|
||||
matrixStack.translate(0,0,-0.001f);
|
||||
this.witchHat.render(matrixStack, glow, 230, OverlayTexture.DEFAULT_UV, hat_type.getRed() / 255f, hat_type.getGreen() / 255f, hat_type.getBlue() / 255f, 1.0F);
|
||||
|
||||
matrixStack.pop();
|
||||
}
|
||||
}
|
||||
private Color getHat(UUID uuid) {
|
||||
if (uuid.equals(MOTSCHEN)) {
|
||||
return MOTSCHEN_COLOR;
|
||||
} else if (HatLoader.PLAYER_HATS != null && HatLoader.PLAYER_HATS.containsKey(uuid)) {
|
||||
return switch (HatLoader.PLAYER_HATS.get(uuid).getHatType()) {
|
||||
case "adopter" -> ADOPTER_COLOR;
|
||||
case "contributer", "modder" -> MODDER_COLOR;
|
||||
case "friend" -> FRIEND_COLOR;
|
||||
case "donator", "donor" -> DONOR_COLOR;
|
||||
case "social" -> SOCIAL_COLOR;
|
||||
default -> MidnightColorUtil.hex2Rgb(HatLoader.PLAYER_HATS.get(uuid).getHatType());
|
||||
};
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
package eu.midnightdust.hats.witch;
|
||||
|
||||
import net.minecraft.client.model.*;
|
||||
import net.minecraft.client.render.VertexConsumer;
|
||||
import net.minecraft.client.render.entity.model.SinglePartEntityModel;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
|
||||
public class WitchHatModel<T extends LivingEntity> extends SinglePartEntityModel<T> {
|
||||
private final ModelPart headwear;
|
||||
|
||||
public WitchHatModel(ModelPart root) {
|
||||
headwear = root;
|
||||
root.setPivot(5.0F, -9.0F, -5.0F);
|
||||
|
||||
ModelPart bone = headwear.getChild("bone");
|
||||
bone.setPivot(-8.5F, -0.1F, 1.5F);
|
||||
setRotationAngle(bone, -0.0524F, 0.0F, 0.0349F);
|
||||
|
||||
ModelPart bone2 = bone.getChild("bone2");
|
||||
bone2.setPivot(1.5F, -4.0F, 1.5F);
|
||||
setRotationAngle(bone2, -0.1222F, 0.0F, 0.0698F);
|
||||
|
||||
ModelPart bone3 = bone2.getChild("bone3");
|
||||
bone3.setPivot(1.5F, -4.0F, 1.5F);
|
||||
setRotationAngle(bone3, -0.2618F, 0.0F, 0.1047F);
|
||||
}
|
||||
|
||||
public static ModelData getModelData(){
|
||||
ModelData modelData = new ModelData();
|
||||
ModelPartData modelPartData = modelData.getRoot();
|
||||
modelPartData.addChild("headwear", ModelPartBuilder.create().uv(0, 64).cuboid(-10.0F, -0.1F, 0.0F, 10.0F, 2.0F, 10.0F), ModelTransform.NONE);
|
||||
ModelPartData modelPartData2 = modelPartData.addChild("bone", ModelPartBuilder.create().uv(0, 76).cuboid(0.0F, -4.0F, 0.0F, 7.0F, 4.0F, 7.0F), ModelTransform.rotation(-0.0524F, 0.0F, 0.0349F));
|
||||
ModelPartData modelPartData3 = modelPartData2.addChild("bone2", ModelPartBuilder.create().uv(0, 87).cuboid(0.0F, -4.0F, 0.0F, 4.0F, 4.0F, 4.0F), ModelTransform.rotation(-0.1222F, 0.0F, 0.0698F));
|
||||
modelPartData3.addChild("bone3", ModelPartBuilder.create().uv(0, 95).cuboid(0.0F, -2.0F, 0.0F, 1.0F, 2.0F, 1.0F), ModelTransform.rotation(-0.2618F, 0.0F, 0.1047F));
|
||||
|
||||
return modelData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAngles(T entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(MatrixStack matrixStack, VertexConsumer buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha){
|
||||
headwear.render(matrixStack, buffer, packedLight, packedOverlay, red, green, blue, alpha);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModelPart getPart() {
|
||||
return headwear;
|
||||
}
|
||||
|
||||
public void setRotationAngle(ModelPart bone, float x, float y, float z) {
|
||||
bone.pitch = x;
|
||||
bone.yaw = y;
|
||||
bone.roll = z;
|
||||
}
|
||||
}
|
||||
@@ -83,8 +83,8 @@ public abstract class MidnightConfig {
|
||||
|
||||
for (Field field : config.getFields()) {
|
||||
EntryInfo info = new EntryInfo();
|
||||
if ((field.isAnnotationPresent(Entry.class) || field.isAnnotationPresent(Comment.class)) && !field.isAnnotationPresent(Server.class) && !field.isAnnotationPresent(Hidden.class))
|
||||
if (PlatformFunctions.isClientEnv()) initClient(modid, field, info);
|
||||
if ((field.isAnnotationPresent(Entry.class) || field.isAnnotationPresent(Comment.class)) && !field.isAnnotationPresent(Server.class) && !field.isAnnotationPresent(Hidden.class) && PlatformFunctions.isClientEnv())
|
||||
initClient(modid, field, info);
|
||||
if (field.isAnnotationPresent(Comment.class)) info.centered = field.getAnnotation(Comment.class).centered();
|
||||
if (field.isAnnotationPresent(Entry.class))
|
||||
try {
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
{
|
||||
"midnightlib.overview.title":"MidnightConfig Übersicht",
|
||||
"midnightlib.midnightconfig.title":"MidnightLib Konfiguration",
|
||||
"midnightlib.midnightconfig.midnightlib_description":"§nMidnightLib",
|
||||
"midnightlib.midnightconfig.config_screen_list":"Konfigurationsübersicht",
|
||||
"midnightlib.midnightconfig.background_texture":"Textur der Konfigurationsbildschirme",
|
||||
"midnightlib.midnightconfig.midnighthats_description":"§nMidnightHats",
|
||||
"midnightlib.midnightconfig.special_hats":"Unterstützer-Hüte",
|
||||
"modmenu.descriptionTranslation.midnightlib": "Code-Bibliothek für Mods von MidnightDust.\nStellt eine Konfigurationsschnittstelle, automatische Kompatibilität, oft genutzten Code und Hüte für Unterstützer bereit.",
|
||||
"modmenu.summaryTranslation.midnightlib": "Code-Bibliothek für Mods von MidnightDust."
|
||||
}
|
||||
@@ -1,14 +1,11 @@
|
||||
{
|
||||
"midnightlib.overview.title":"MidnightConfig Overview",
|
||||
"midnightlib.midnightconfig.title":"MidnightLib Config",
|
||||
"midnightlib.midnightconfig.midnightlib_description":"§nMidnightLib",
|
||||
"midnightlib.midnightconfig.config_screen_list":"Enable Config Screen List",
|
||||
"midnightlib.midnightconfig.enum.ConfigButton.TRUE":"§aYes",
|
||||
"midnightlib.midnightconfig.enum.ConfigButton.FALSE":"§cNo",
|
||||
"midnightlib.midnightconfig.enum.ConfigButton.MODMENU":"§bModMenu",
|
||||
"midnightlib.midnightconfig.background_texture":"Texture of config screen backgrounds",
|
||||
"midnightlib.midnightconfig.midnighthats_description":"§nMidnightHats",
|
||||
"midnightlib.midnightconfig.special_hats":"Enable Supporter Hats",
|
||||
"midnightlib.modrinth":"Modrinth",
|
||||
"midnightlib.curseforge":"CurseForge",
|
||||
"midnightlib.wiki":"Wiki",
|
||||
|
||||
@@ -1,17 +1,10 @@
|
||||
{
|
||||
"midnightlib.overview.title":"Vue d'ensemble de MidnightConfig",
|
||||
"midnightlib.midnightconfig.title":"Configuration de MidnightLib",
|
||||
"midnightlib.midnightconfig.midnightlib_description":"§nMidnightLib",
|
||||
"midnightlib.midnightconfig.config_screen_list":"Activer la liste de l'écran de configuration",
|
||||
"midnightlib.midnightconfig.enum.ConfigButton.TRUE":"§aOui",
|
||||
"midnightlib.midnightconfig.enum.ConfigButton.FALSE":"§cNon",
|
||||
"midnightlib.midnightconfig.enum.ConfigButton.MODMENU":"§bModMenu",
|
||||
"midnightlib.midnightconfig.background_texture":"Texture d'arrière-plan de l'écran de configuration",
|
||||
"midnightlib.midnightconfig.midnighthats_description":"§nMidnightHats",
|
||||
"midnightlib.midnightconfig.special_hats":"Activer les chapeaux de fan",
|
||||
"midnightlib.modrinth":"Modrinth",
|
||||
"midnightlib.curseforge":"CurseForge",
|
||||
"midnightlib.wiki":"Wiki",
|
||||
"modmenu.descriptionTranslation.midnightlib": "Bibliothèque commune pour les mods de la Team MidnightDust.\nFournit une API de configuration, une intégration automatique avec d'autres mods, des utilitaires courants et des cosmétiques.",
|
||||
"modmenu.summaryTranslation.midnightlib": "Bibliothèque commune pour les mods de la Team MidnightDust."
|
||||
}
|
||||
|
||||
@@ -1,17 +1,10 @@
|
||||
{
|
||||
"midnightlib.overview.title":"Visão geral do MidnightConfig",
|
||||
"midnightlib.midnightconfig.title":"Configuração MidnightLib",
|
||||
"midnightlib.midnightconfig.midnightlib_description":"§nMidnightLib",
|
||||
"midnightlib.midnightconfig.config_screen_list":"Ativar lista de telas de configuração",
|
||||
"midnightlib.midnightconfig.enum.ConfigButton.TRUE":"§aVerdadeiro",
|
||||
"midnightlib.midnightconfig.enum.ConfigButton.FALSE":"§cFalso",
|
||||
"midnightlib.midnightconfig.enum.ConfigButton.MODMENU":"§bModMenu",
|
||||
"midnightlib.midnightconfig.background_texture":"Textura dos fundos da tela de configuração",
|
||||
"midnightlib.midnightconfig.midnighthats_description":"§nMidnightHats",
|
||||
"midnightlib.midnightconfig.special_hats":"Ativar chapéus de torcedor",
|
||||
"midnightlib.modrinth":"Modrinth",
|
||||
"midnightlib.curseforge":"CurseForge",
|
||||
"midnightlib.wiki":"Wiki",
|
||||
"modmenu.descriptionTranslation.midnightlib": "Biblioteca comum para mods do Team MidnightDust.\nFornece uma API de configuração, integração automática com outros mods, utilitários comuns e cosméticos.",
|
||||
"modmenu.summaryTranslation.midnightlib": "Biblioteca comum para mods do Team MidnightDust."
|
||||
}
|
||||
@@ -1,16 +1,10 @@
|
||||
{
|
||||
"midnightlib.overview.title":"MidnightConfig күзәтү",
|
||||
"midnightlib.midnightconfig.title":"MidnightLib көйләүләре",
|
||||
"midnightlib.midnightconfig.midnightlib_description":"§nMidnightLib",
|
||||
"midnightlib.midnightconfig.config_screen_list":"Көйләүләр экранының исемлеген кушу",
|
||||
"midnightlib.midnightconfig.enum.ConfigButton.TRUE":"§aӘйе",
|
||||
"midnightlib.midnightconfig.enum.ConfigButton.FALSE":"§cЮк",
|
||||
"midnightlib.midnightconfig.enum.ConfigButton.MODMENU":"§bModMenu",
|
||||
"midnightlib.midnightconfig.background_texture":"Көйләүләр экранының фонының текстурасы",
|
||||
"midnightlib.midnightconfig.midnighthats_description":"§nMidnightHats",
|
||||
"midnightlib.midnightconfig.special_hats":"Ярдәмченең эшләпәсен кушу",
|
||||
"midnightlib.modrinth":"Modrinth",
|
||||
"midnightlib.curseforge":"CurseForge",
|
||||
"midnightlib.wiki":"Вики",
|
||||
"modmenu.descriptionTranslation.midnightlib": "MidnightDust төркеменең модлары өчен гомуми китапханә.\nКөйләүләр API-ын, башка модлар белән автоматик интеграцияне, гомуми хезмәти программаларны һәм бизәнүләрне тәэмин ителә.",
|
||||
"modmenu.summaryTranslation.midnightlib": "MidnightDust төркеменең модлары өчен гомуми китапханә."
|
||||
|
||||
@@ -1,16 +1,8 @@
|
||||
{
|
||||
"midnightlib.overview.title":"Огляд MidnightConfig",
|
||||
"midnightlib.midnightconfig.title":"Конфігурація MidnightLib",
|
||||
"midnightlib.midnightconfig.midnightlib_description":"§nMidnightLib",
|
||||
"midnightlib.midnightconfig.config_screen_list":"Увімкнути список екрана конфігурації",
|
||||
"midnightlib.midnightconfig.enum.ConfigButton.TRUE":"§aTrue",
|
||||
"midnightlib.midnightconfig.enum.ConfigButton.FALSE":"§cFalse",
|
||||
"midnightlib.midnightconfig.enum.ConfigButton.MODMENU":"§bModMenu",
|
||||
"midnightlib.midnightconfig.background_texture":"Текстура фону екрана конфігурації",
|
||||
"midnightlib.midnightconfig.midnighthats_description":"§nMidnightHats",
|
||||
"midnightlib.midnightconfig.special_hats":"Увімкнути капелюхи спонсорів",
|
||||
"midnightlib.modrinth":"Modrinth",
|
||||
"midnightlib.curseforge":"CurseForge",
|
||||
"midnightlib.wiki":"Вікі",
|
||||
"modmenu.descriptionTranslation.midnightlib": "Загальна бібліотека для модів команди MidnightDust.\nНадає конфігураційний API, автоматичну інтеграцію з іншими модами, загальні утиліти та косметику.",
|
||||
"modmenu.summaryTranslation.midnightlib": "Загальна бібліотека для модів команди MidnightDust."
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 217 B |
@@ -4,8 +4,7 @@
|
||||
"package": "eu.midnightdust.core.mixin",
|
||||
"compatibilityLevel": "JAVA_17",
|
||||
"client": [
|
||||
"MixinOptionsScreen",
|
||||
"MixinPlayerEntityRenderer"
|
||||
"MixinOptionsScreen"
|
||||
],
|
||||
"injectors": {
|
||||
"defaultRequire": 1
|
||||
|
||||
Reference in New Issue
Block a user