diff --git a/gradle.properties b/gradle.properties index af52f7c..82f4ad5 100755 --- a/gradle.properties +++ b/gradle.properties @@ -3,16 +3,16 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://fabricmc.net/use - minecraft_version=1.17-pre1 - yarn_mappings=1.17-pre1+build.4 - loader_version=0.11.3 + minecraft_version=1.17.1 + yarn_mappings=1.17.1+build.63 + loader_version=0.11.7 # Mod Properties - mod_version = 0.2.7 + mod_version = 0.2.8 maven_group = eu.midnightdust archives_base_name = midnightlib # Dependencies # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api - fabric_version=0.34.8+1.17 + fabric_version=0.41.0+1.17 mod_menu_version = 2.0.2 diff --git a/src/main/java/eu/midnightdust/core/MidnightLibClient.java b/src/main/java/eu/midnightdust/core/MidnightLibClient.java index 7edc302..7121533 100755 --- a/src/main/java/eu/midnightdust/core/MidnightLibClient.java +++ b/src/main/java/eu/midnightdust/core/MidnightLibClient.java @@ -1,44 +1,26 @@ package eu.midnightdust.core; -import eu.midnightdust.hats.bunny.BunnyEarsFeatureRenderer; -import eu.midnightdust.hats.christmas.ChristmasHatFeatureRenderer; import eu.midnightdust.core.config.MidnightLibConfig; -import eu.midnightdust.hats.tater.TinyPotatoFeatureRenderer; import eu.midnightdust.hats.web.HatLoader; import eu.midnightdust.hats.witch.WitchHatFeatureRenderer; import eu.midnightdust.lib.config.MidnightConfig; +import eu.midnightdust.lib.util.MidnightColorUtil; import net.fabricmc.api.ClientModInitializer; -import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityModelLayerRegistry; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry; -import java.util.Calendar; - -@SuppressWarnings({"deprecation", "UnstableApiUsage"}) public class MidnightLibClient implements ClientModInitializer { public static final String MOD_ID = "midnightlib"; - public static Event EVENT = Event.NONE; @Override public void onInitializeClient() { MidnightConfig.init("midnightlib", MidnightLibConfig.class); - MidnightConfig.useTooltipForTitle = MidnightLibConfig.titleStyle.equals(MidnightLibConfig.TitleStyle.TOOLTIP); - EntityModelLayerRegistry.registerModelLayer(BunnyEarsFeatureRenderer.RABBIT_EARS_MODEL_LAYER, BunnyEarsFeatureRenderer::getTexturedModelData); - EntityModelLayerRegistry.registerModelLayer(ChristmasHatFeatureRenderer.CHRISTMAS_HAT_MODEL_LAYER, ChristmasHatFeatureRenderer::getTexturedModelData); - EntityModelLayerRegistry.registerModelLayer(TinyPotatoFeatureRenderer.TINY_POTATO_MODEL_LAYER, TinyPotatoFeatureRenderer::getTexturedModelData); EntityModelLayerRegistry.registerModelLayer(WitchHatFeatureRenderer.WITCH_HAT_MODEL_LAYER, WitchHatFeatureRenderer::getTexturedModelData); if (MidnightLibConfig.special_hats) HatLoader.init(); - if (MidnightLibConfig.event_hats) EVENT = getEvent(); - } - private Event getEvent() { - if (Calendar.getInstance().get(Calendar.MONTH) == Calendar.APRIL && Calendar.getInstance().get(Calendar.DAY_OF_MONTH) <= 4) return Event.EASTER; - if (Calendar.getInstance().get(Calendar.MONTH) == Calendar.OCTOBER && Calendar.getInstance().get(Calendar.DAY_OF_MONTH) >= 30) return Event.HALLOWEEN; - if (Calendar.getInstance().get(Calendar.MONTH) == Calendar.DECEMBER && Calendar.getInstance().get(Calendar.DAY_OF_MONTH) == 10) return Event.FABRIC; - if (Calendar.getInstance().get(Calendar.MONTH) == Calendar.DECEMBER && Calendar.getInstance().get(Calendar.DAY_OF_MONTH) >= 23 && Calendar.getInstance().get(Calendar.DAY_OF_MONTH) <= 26) return Event.CHRISTMAS; - return Event.NONE; - } - - public enum Event { - NONE, EASTER, HALLOWEEN, FABRIC, CHRISTMAS + ClientTickEvents.END_CLIENT_TICK.register( + client -> MidnightColorUtil.tick() + ); } } diff --git a/src/main/java/eu/midnightdust/core/MidnightLibServer.java b/src/main/java/eu/midnightdust/core/MidnightLibServer.java new file mode 100755 index 0000000..80dd38f --- /dev/null +++ b/src/main/java/eu/midnightdust/core/MidnightLibServer.java @@ -0,0 +1,20 @@ +package eu.midnightdust.core; + +import eu.midnightdust.lib.config.AutoCommand; +import eu.midnightdust.lib.config.MidnightConfig; +import net.fabricmc.api.DedicatedServerModInitializer; + +import java.lang.reflect.Field; + +public class MidnightLibServer implements DedicatedServerModInitializer { + + @Override + public void onInitializeServer() { + MidnightConfig.configClass.forEach((modid, config) -> { + for (Field field : config.getFields()) { + if (field.isAnnotationPresent(MidnightConfig.Entry.class)) + new AutoCommand(field, modid).register(); + } + }); + } +} diff --git a/src/main/java/eu/midnightdust/core/config/MidnightLibConfig.java b/src/main/java/eu/midnightdust/core/config/MidnightLibConfig.java index 48e5831..a2971fb 100755 --- a/src/main/java/eu/midnightdust/core/config/MidnightLibConfig.java +++ b/src/main/java/eu/midnightdust/core/config/MidnightLibConfig.java @@ -6,18 +6,14 @@ import net.fabricmc.loader.api.FabricLoader; public class MidnightLibConfig extends MidnightConfig { @Comment public static Comment midnightlib_description; @Entry // Enable or disable the MidnightConfig overview screen button - public static boolean config_screen_list = !FabricLoader.getInstance().isModLoaded("modmenu"); - @Entry // Change the style of the title in MidnightConfig - public static TitleStyle titleStyle = MidnightConfig.useTooltipForTitle ? TitleStyle.TOOLTIP : TitleStyle.TEXT; + public static ConfigButton config_screen_list = FabricLoader.getInstance().isModLoaded("modmenu") ? ConfigButton.MODMENU : ConfigButton.TRUE; @Entry // Change the texture of the background in MidnightConfig public static String background_texture = "minecraft:textures/block/deepslate.png"; @Comment public static Comment midnighthats_description; - @Entry // Enable or disable event hats - public static boolean event_hats = true; @Entry // Enable or disable hats for contributors, friends and donors. public static boolean special_hats = true; - public enum TitleStyle { - TEXT,TOOLTIP + public enum ConfigButton { + TRUE,FALSE,MODMENU } } diff --git a/src/main/java/eu/midnightdust/core/mixin/MixinOptionsScreen.java b/src/main/java/eu/midnightdust/core/mixin/MixinOptionsScreen.java index b7b433e..687a2e6 100755 --- a/src/main/java/eu/midnightdust/core/mixin/MixinOptionsScreen.java +++ b/src/main/java/eu/midnightdust/core/mixin/MixinOptionsScreen.java @@ -3,6 +3,7 @@ package eu.midnightdust.core.mixin; import eu.midnightdust.core.config.MidnightLibConfig; import eu.midnightdust.core.screen.MidnightConfigOverviewScreen; import eu.midnightdust.lib.util.screen.TexturedOverlayButtonWidget; +import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.option.OptionsScreen; import net.minecraft.text.Text; @@ -24,7 +25,7 @@ public class MixinOptionsScreen extends Screen { @Inject(at = @At("HEAD"),method = "init") private void midnightlib$init(CallbackInfo ci) { - if (MidnightLibConfig.config_screen_list) - this.addDrawableChild(new TexturedOverlayButtonWidget(this.width / 2 + 158, this.height / 6 - 12, 20, 20, 0, 0, 20, MIDNIGHTLIB_ICON_TEXTURE, 32, 64, (buttonWidget) -> Objects.requireNonNull(client).openScreen(new MidnightConfigOverviewScreen(this)), new TranslatableText("narrator.button.midnightlib"))); + if (MidnightLibConfig.config_screen_list.equals(MidnightLibConfig.ConfigButton.TRUE) || MidnightLibConfig.config_screen_list.equals(MidnightLibConfig.ConfigButton.MODMENU) && FabricLoader.getInstance().isModLoaded("modmenu")) + this.addDrawableChild(new TexturedOverlayButtonWidget(this.width / 2 + 158, this.height / 6 - 12, 20, 20, 0, 0, 20, MIDNIGHTLIB_ICON_TEXTURE, 32, 64, (buttonWidget) -> Objects.requireNonNull(client).setScreen(new MidnightConfigOverviewScreen(this)), new TranslatableText("midnightlib.overview.title"))); } } diff --git a/src/main/java/eu/midnightdust/hats/mixin/PlayerEntityRendererMixin.java b/src/main/java/eu/midnightdust/core/mixin/MixinPlayerEntityRenderer.java similarity index 63% rename from src/main/java/eu/midnightdust/hats/mixin/PlayerEntityRendererMixin.java rename to src/main/java/eu/midnightdust/core/mixin/MixinPlayerEntityRenderer.java index 7316add..f2f56b3 100755 --- a/src/main/java/eu/midnightdust/hats/mixin/PlayerEntityRendererMixin.java +++ b/src/main/java/eu/midnightdust/core/mixin/MixinPlayerEntityRenderer.java @@ -1,8 +1,5 @@ -package eu.midnightdust.hats.mixin; +package eu.midnightdust.core.mixin; -import eu.midnightdust.hats.bunny.BunnyEarsFeatureRenderer; -import eu.midnightdust.hats.christmas.ChristmasHatFeatureRenderer; -import eu.midnightdust.hats.tater.TinyPotatoFeatureRenderer; import eu.midnightdust.hats.witch.WitchHatFeatureRenderer; import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.render.entity.EntityRendererFactory; @@ -15,16 +12,13 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(PlayerEntityRenderer.class) -public abstract class PlayerEntityRendererMixin extends LivingEntityRenderer> { - public PlayerEntityRendererMixin(EntityRendererFactory.Context ctx, PlayerEntityModel model, float shadowSize) { +public abstract class MixinPlayerEntityRenderer extends LivingEntityRenderer> { + public MixinPlayerEntityRenderer(EntityRendererFactory.Context ctx, PlayerEntityModel model, float shadowSize) { super(ctx, model, shadowSize); } @Inject(at = @At("TAIL"), method = "") public void addFeatures(EntityRendererFactory.Context ctx, boolean slim, CallbackInfo ci) { this.addFeature(new WitchHatFeatureRenderer<>(this, ctx.getModelLoader())); - this.addFeature(new ChristmasHatFeatureRenderer<>(this, ctx.getModelLoader())); - this.addFeature(new BunnyEarsFeatureRenderer<>(this, ctx.getModelLoader())); - this.addFeature(new TinyPotatoFeatureRenderer<>(this, ctx.getModelLoader())); } } diff --git a/src/main/java/eu/midnightdust/core/screen/MidnightConfigOverviewScreen.java b/src/main/java/eu/midnightdust/core/screen/MidnightConfigOverviewScreen.java index 9dff755..119111d 100755 --- a/src/main/java/eu/midnightdust/core/screen/MidnightConfigOverviewScreen.java +++ b/src/main/java/eu/midnightdust/core/screen/MidnightConfigOverviewScreen.java @@ -26,16 +26,14 @@ public class MidnightConfigOverviewScreen extends Screen { @Override protected void init() { - this.addDrawableChild(new ButtonWidget(this.width / 2 - 100, this.height - 28, 200, 20, ScreenTexts.DONE, (button) -> Objects.requireNonNull(client).openScreen(parent))); + this.addDrawableChild(new ButtonWidget(this.width / 2 - 100, this.height - 28, 200, 20, ScreenTexts.DONE, (button) -> Objects.requireNonNull(client).setScreen(parent))); this.list = new MidnightOverviewListWidget(this.client, this.width, this.height, 32, this.height - 32, 25); if (this.client != null && this.client.world != null) this.list.setRenderBackground(false); this.addSelectableChild(this.list); - MidnightConfig.configClass.forEach((modid, configClass) -> { - list.addButton(new ButtonWidget(this.width / 2 - 100, this.height - 28, 200, 20, new TranslatableText(modid +".midnightconfig.title"), (button) -> { - Objects.requireNonNull(client).openScreen(MidnightConfig.getScreen(this,modid)); - })); - }); + MidnightConfig.configClass.forEach((modid, configClass) -> + list.addButton(new ButtonWidget(this.width / 2 - 100, this.height - 28, 200, 20, new TranslatableText(modid +".midnightconfig.title"), (button) -> + Objects.requireNonNull(client).setScreen(MidnightConfig.getScreen(this,modid))))); super.init(); } @Override @@ -44,8 +42,8 @@ public class MidnightConfigOverviewScreen extends Screen { this.list.render(matrices, mouseX, mouseY, delta); int stringWidth = title.getString().length() + 47; - if (MidnightConfig.useTooltipForTitle) renderTooltip(matrices, title, width/2 - stringWidth, 27); - else drawCenteredText(matrices, textRenderer, title, width / 2, 15, 0xFFFFFF); + renderTooltip(matrices, title, width/2 - stringWidth, 27); + //drawCenteredText(matrices, textRenderer, title, width / 2, 15, 0xFFFFFF); super.render(matrices, mouseX, mouseY, delta); } @Environment(EnvType.CLIENT) @@ -85,7 +83,7 @@ public class MidnightConfigOverviewScreen extends Screen { return buttons; } - public List method_37025() { + public List selectableChildren() { return buttons; } } diff --git a/src/main/java/eu/midnightdust/hats/bunny/BunnyEarsFeatureRenderer.java b/src/main/java/eu/midnightdust/hats/bunny/BunnyEarsFeatureRenderer.java deleted file mode 100755 index eaeb4c0..0000000 --- a/src/main/java/eu/midnightdust/hats/bunny/BunnyEarsFeatureRenderer.java +++ /dev/null @@ -1,63 +0,0 @@ -package eu.midnightdust.hats.bunny; - -import eu.midnightdust.core.MidnightLibClient; -import eu.midnightdust.core.config.MidnightLibConfig; -import eu.midnightdust.hats.web.HatLoader; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.client.model.TexturedModelData; -import net.minecraft.client.render.OverlayTexture; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.render.VertexConsumer; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.entity.feature.FeatureRenderer; -import net.minecraft.client.render.entity.feature.FeatureRendererContext; -import net.minecraft.client.render.entity.model.*; -import net.minecraft.client.render.item.ItemRenderer; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.entity.LivingEntity; -import net.minecraft.util.Identifier; - -import java.util.UUID; - -@Environment(EnvType.CLIENT) -public class BunnyEarsFeatureRenderer> extends FeatureRenderer { - private static final String MOD_ID = MidnightLibClient.MOD_ID; - public static final EntityModelLayer RABBIT_EARS_MODEL_LAYER = new EntityModelLayer(new Identifier("midnight-hats","bunny_ears"), "main"); - private static final UUID MOTSCHEN = UUID.fromString("a44c2660-630f-478f-946a-e518669fcf0c"); - - private static final Identifier DEACTIVATED = new Identifier(MOD_ID,"textures/hats/empty.png"); - private static final Identifier RABBIT = new Identifier("textures/entity/rabbit/brown.png"); - private final BunnyEarsModel bunnyEars; - - public BunnyEarsFeatureRenderer(FeatureRendererContext featureRendererContext, EntityModelLoader entityModelLoader) { - super(featureRendererContext); - this.bunnyEars = new BunnyEarsModel<>(entityModelLoader.getModelPart(RABBIT_EARS_MODEL_LAYER)); - } - - public static TexturedModelData getTexturedModelData() { - return TexturedModelData.of(BunnyEarsModel.getModelData(), 64, 32); - } - - public void render(MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, T livingEntity, float f, float g, float h, float j, float k, float l) { - UUID uuid = livingEntity.getUuid(); - Identifier hat_type = getHat(uuid); - - if (!(hat_type == DEACTIVATED) && !HatLoader.PLAYER_HATS.containsKey(uuid) && !uuid.equals(MOTSCHEN)) { - matrixStack.push(); - ((ModelWithHead) this.getContextModel()).getHead().rotate(matrixStack); - VertexConsumer vertexConsumer = ItemRenderer.getArmorGlintConsumer(vertexConsumerProvider, RenderLayer.getEntityCutoutNoCull(hat_type), false, false); - this.bunnyEars.render(matrixStack, vertexConsumer, i, OverlayTexture.DEFAULT_UV, 1.0F, 1.0F, 1.0F, 1.0F); - matrixStack.pop(); - } - } - private Identifier getHat(UUID uuid) { - if (MidnightLibConfig.event_hats && MidnightLibClient.EVENT.equals(MidnightLibClient.Event.EASTER)) - return RABBIT; - else if (HatLoader.PLAYER_HATS != null && HatLoader.PLAYER_HATS.containsKey(uuid) && HatLoader.PLAYER_HATS.get(uuid).getHatType().contains("bunny")) - return RABBIT; - - return DEACTIVATED; - } - -} diff --git a/src/main/java/eu/midnightdust/hats/bunny/BunnyEarsModel.java b/src/main/java/eu/midnightdust/hats/bunny/BunnyEarsModel.java deleted file mode 100755 index 645564d..0000000 --- a/src/main/java/eu/midnightdust/hats/bunny/BunnyEarsModel.java +++ /dev/null @@ -1,36 +0,0 @@ -package eu.midnightdust.hats.bunny; - -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 BunnyEarsModel extends SinglePartEntityModel { - private final ModelPart right_ear; - - public BunnyEarsModel(ModelPart root) { - this.right_ear = root; - right_ear.setPivot(0.0F, -3.0F, -1.0F); - } - public static ModelData getModelData(){ - ModelData modelData = new ModelData(); - ModelPartData modelPartData = modelData.getRoot(); - modelPartData.addChild("right_ear", ModelPartBuilder.create().uv(52, 0).cuboid(-2.5F, -9.0F, -1.0F, 2.0F, 5.0F, 1.0F), ModelTransform.NONE); - modelPartData.addChild("left_ear", ModelPartBuilder.create().uv(58, 0).mirrored().cuboid(0.5F, -9.0F, -1.0F, 2.0F, 5.0F, 1.0F), ModelTransform.NONE); - return modelData; - } - - public ModelPart getPart() { - return this.right_ear; - } - - @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){ - right_ear.render(matrixStack, buffer, packedLight, packedOverlay); - } -} \ No newline at end of file diff --git a/src/main/java/eu/midnightdust/hats/christmas/ChristmasHatFeatureRenderer.java b/src/main/java/eu/midnightdust/hats/christmas/ChristmasHatFeatureRenderer.java deleted file mode 100755 index 0872a9f..0000000 --- a/src/main/java/eu/midnightdust/hats/christmas/ChristmasHatFeatureRenderer.java +++ /dev/null @@ -1,64 +0,0 @@ -package eu.midnightdust.hats.christmas; - -import eu.midnightdust.core.MidnightLibClient; -import eu.midnightdust.core.config.MidnightLibConfig; -import eu.midnightdust.hats.web.HatLoader; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.client.model.TexturedModelData; -import net.minecraft.client.render.OverlayTexture; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.render.VertexConsumer; -import net.minecraft.client.render.VertexConsumerProvider; -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.render.item.ItemRenderer; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.entity.LivingEntity; -import net.minecraft.util.Identifier; - -import java.util.UUID; - -@Environment(EnvType.CLIENT) -public class ChristmasHatFeatureRenderer> extends FeatureRenderer { - private static final String MOD_ID = MidnightLibClient.MOD_ID; - public static final EntityModelLayer CHRISTMAS_HAT_MODEL_LAYER = new EntityModelLayer(new Identifier("midnight-hats","christmas_hat"), "main"); - private static final UUID MOTSCHEN = UUID.fromString("a44c2660-630f-478f-946a-e518669fcf0c"); - - private static final Identifier DEACTIVATED = new Identifier(MOD_ID,"textures/hats/empty.png"); - private static final Identifier CHRISTMAS = new Identifier(MOD_ID,"textures/hats/christmas.png"); - private final ChristmasHatModel christmasHat; - - public ChristmasHatFeatureRenderer(FeatureRendererContext featureRendererContext, EntityModelLoader entityModelLoader) { - super(featureRendererContext); - this.christmasHat = new ChristmasHatModel<>(entityModelLoader.getModelPart(CHRISTMAS_HAT_MODEL_LAYER)); - } - - public static TexturedModelData getTexturedModelData() { - return TexturedModelData.of(ChristmasHatModel.getModelData(), 64, 64); - } - - public void render(MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, T livingEntity, float f, float g, float h, float j, float k, float l) { - UUID uuid = livingEntity.getUuid(); - Identifier hat_type = getHat(); - - if (!(hat_type == DEACTIVATED) && !HatLoader.PLAYER_HATS.containsKey(uuid) && !uuid.equals(MOTSCHEN)) { - matrixStack.push(); - - ((ModelWithHead) this.getContextModel()).getHead().rotate(matrixStack); - VertexConsumer vertexConsumer = ItemRenderer.getArmorGlintConsumer(vertexConsumerProvider, RenderLayer.getEntityCutoutNoCull(hat_type), false, false); - this.christmasHat.render(matrixStack, vertexConsumer, i, OverlayTexture.DEFAULT_UV, 1.0F, 1.0F, 1.0F, 1.0F); - - matrixStack.pop(); - } - } - private Identifier getHat() { - if (MidnightLibConfig.event_hats && MidnightLibClient.EVENT.equals(MidnightLibClient.Event.CHRISTMAS)) - return CHRISTMAS; - return DEACTIVATED; - } -} diff --git a/src/main/java/eu/midnightdust/hats/christmas/ChristmasHatModel.java b/src/main/java/eu/midnightdust/hats/christmas/ChristmasHatModel.java deleted file mode 100755 index 6afc7ec..0000000 --- a/src/main/java/eu/midnightdust/hats/christmas/ChristmasHatModel.java +++ /dev/null @@ -1,56 +0,0 @@ -package eu.midnightdust.hats.christmas; - -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 ChristmasHatModel extends SinglePartEntityModel { - private final ModelPart headwear; - - public ChristmasHatModel(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, 0).cuboid(-10.0F, -0.1F, 0.0F, 10.0F, 2.0F, 10.0F), ModelTransform.NONE); - ModelPartData modelPartData2 = modelPartData.addChild("bone", ModelPartBuilder.create().uv(0, 12).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, 23).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(21, 12).cuboid(0.0F, -3.0F, 0.0F, 3.0F, 3.0F, 3.0F), ModelTransform.rotation(-0.2618F, 0.0F, 0.1047F)); - - return modelData; - } - public ModelPart getPart() { - return this.headwear; - } - - @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); - } - - public void setRotationAngle(ModelPart bone, float x, float y, float z) { - bone.pitch = x; - bone.yaw = y; - bone.roll = z; - } -} \ No newline at end of file diff --git a/src/main/java/eu/midnightdust/hats/tater/TinyPotatoFeatureRenderer.java b/src/main/java/eu/midnightdust/hats/tater/TinyPotatoFeatureRenderer.java deleted file mode 100755 index 1311b6c..0000000 --- a/src/main/java/eu/midnightdust/hats/tater/TinyPotatoFeatureRenderer.java +++ /dev/null @@ -1,66 +0,0 @@ -package eu.midnightdust.hats.tater; - -import eu.midnightdust.core.MidnightLibClient; -import eu.midnightdust.core.config.MidnightLibConfig; -import eu.midnightdust.hats.web.HatLoader; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.client.model.TexturedModelData; -import net.minecraft.client.render.OverlayTexture; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.render.VertexConsumer; -import net.minecraft.client.render.VertexConsumerProvider; -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.render.item.ItemRenderer; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.entity.LivingEntity; -import net.minecraft.util.Identifier; - -import java.util.UUID; - -@Environment(EnvType.CLIENT) -public class TinyPotatoFeatureRenderer> extends FeatureRenderer { - private static final String MOD_ID = MidnightLibClient.MOD_ID; - public static final EntityModelLayer TINY_POTATO_MODEL_LAYER = new EntityModelLayer(new Identifier("midnight-hats","tiny_potato"), "main"); - private static final UUID MOTSCHEN = UUID.fromString("a44c2660-630f-478f-946a-e518669fcf0c"); - - private static final Identifier DEACTIVATED = new Identifier(MOD_ID,"textures/hats/empty.png"); - private static final Identifier TATER = new Identifier(MOD_ID,"textures/hats/tater.png"); - private final TinyPotatoModel tinyPotato; - - public TinyPotatoFeatureRenderer(FeatureRendererContext featureRendererContext, EntityModelLoader entityModelLoader) { - super(featureRendererContext); - this.tinyPotato = new TinyPotatoModel<>(entityModelLoader.getModelPart(TINY_POTATO_MODEL_LAYER)); - } - - public static TexturedModelData getTexturedModelData() { - return TexturedModelData.of(TinyPotatoModel.getModelData(), 16, 16); - } - - public void render(MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, T livingEntity, float f, float g, float h, float j, float k, float l) { - UUID uuid = livingEntity.getUuid(); - Identifier hat_type = getHat(uuid); - - if (!(hat_type == DEACTIVATED) && !HatLoader.PLAYER_HATS.containsKey(uuid) && !uuid.equals(MOTSCHEN)) { - matrixStack.push(); - - ((ModelWithHead) this.getContextModel()).getHead().rotate(matrixStack); - VertexConsumer vertexConsumer = ItemRenderer.getArmorGlintConsumer(vertexConsumerProvider, RenderLayer.getEntityCutoutNoCull(hat_type), false, false); - this.tinyPotato.render(matrixStack, vertexConsumer, i, OverlayTexture.DEFAULT_UV, 1.0F, 1.0F, 1.0F, 1.0F); - - matrixStack.pop(); - } - } - private Identifier getHat(UUID uuid) { - if (MidnightLibConfig.event_hats && MidnightLibClient.EVENT.equals(MidnightLibClient.Event.FABRIC)) - return TATER; - else if (HatLoader.PLAYER_HATS != null && HatLoader.PLAYER_HATS.containsKey(uuid) && HatLoader.PLAYER_HATS.get(uuid).getHatType().contains("tater")) - return TATER; - return DEACTIVATED; - } -} diff --git a/src/main/java/eu/midnightdust/hats/tater/TinyPotatoModel.java b/src/main/java/eu/midnightdust/hats/tater/TinyPotatoModel.java deleted file mode 100755 index ac623bd..0000000 --- a/src/main/java/eu/midnightdust/hats/tater/TinyPotatoModel.java +++ /dev/null @@ -1,36 +0,0 @@ -package eu.midnightdust.hats.tater; - -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 TinyPotatoModel extends SinglePartEntityModel { - private final ModelPart tater; - public TinyPotatoModel(ModelPart root) { - tater = root; - tater.setPivot(0.0F, -8.0F, 0.0F); - } - - public static ModelData getModelData() { - ModelData modelData = new ModelData(); - ModelPartData modelPartData = modelData.getRoot(); - modelPartData.addChild("tater", ModelPartBuilder.create().uv(0, 0).cuboid(-2.0F, -6.0F, -2.0F, 4.0F, 6.0F, 4.0F), ModelTransform.NONE); - - return modelData; - } - public ModelPart getPart() { - return this.tater; - } - - @Override - public void setAngles(T entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch){ - //previously the render function, render code was moved to a method below - } - @Override - public void render(MatrixStack matrixStack, VertexConsumer buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha){ - - tater.render(matrixStack, buffer, packedLight, packedOverlay); - } -} \ No newline at end of file diff --git a/src/main/java/eu/midnightdust/hats/web/HatLoader.java b/src/main/java/eu/midnightdust/hats/web/HatLoader.java index d4f6359..38e8eea 100755 --- a/src/main/java/eu/midnightdust/hats/web/HatLoader.java +++ b/src/main/java/eu/midnightdust/hats/web/HatLoader.java @@ -42,7 +42,7 @@ public class HatLoader { logger.log(Level.INFO, "Player hats successfully loaded!"); } else { PLAYER_HATS = Collections.emptyMap(); - logger.log(Level.WARN, "A problem with the database occured, the hats could not be initialized."); + logger.log(Level.WARN, "A problem with the database occurred, the hats could not be initialized."); } }, MinecraftClient.getInstance()); } diff --git a/src/main/java/eu/midnightdust/hats/witch/WitchHatFeatureRenderer.java b/src/main/java/eu/midnightdust/hats/witch/WitchHatFeatureRenderer.java index 463f885..9361e5e 100755 --- a/src/main/java/eu/midnightdust/hats/witch/WitchHatFeatureRenderer.java +++ b/src/main/java/eu/midnightdust/hats/witch/WitchHatFeatureRenderer.java @@ -1,43 +1,42 @@ package eu.midnightdust.hats.witch; -import eu.midnightdust.core.MidnightLibClient; -import eu.midnightdust.core.config.MidnightLibConfig; 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.OverlayTexture; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.render.VertexConsumer; -import net.minecraft.client.render.VertexConsumerProvider; +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.render.item.ItemRenderer; 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> extends FeatureRenderer { - private static final String MOD_ID = MidnightLibClient.MOD_ID; 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 DEACTIVATED = new Identifier(MOD_ID,"textures/hats/empty.png"); private static final Identifier WITCH = new Identifier("textures/entity/witch.png"); - private static final Identifier MOTSCHEN_SKIN = new Identifier(MOD_ID,"textures/hats/motschen.png"); - private static final Identifier CONTRIBUTER_SKIN = new Identifier(MOD_ID,"textures/hats/contributer.png"); - private static final Identifier FRIEND_SKIN = new Identifier(MOD_ID,"textures/hats/friend.png"); - private static final Identifier DONATOR_SKIN = new Identifier(MOD_ID,"textures/hats/donator.png"); - private static final Identifier SOCIAL_SKIN = new Identifier(MOD_ID,"textures/hats/social.png"); - private static final Identifier PRIDE_SKIN = new Identifier(MOD_ID,"textures/hats/pride.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 witchHat; + private final MinecraftClient client = MinecraftClient.getInstance(); public WitchHatFeatureRenderer(FeatureRendererContext featureRendererContext, EntityModelLoader entityModelLoader) { super(featureRendererContext); @@ -49,32 +48,36 @@ public class WitchHatFeatureRenderer extends SinglePartEntityModel @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); -} + headwear.render(matrixStack, buffer, packedLight, packedOverlay, red, green, blue, alpha); + } @Override public ModelPart getPart() { @@ -57,6 +55,5 @@ public class WitchHatModel extends SinglePartEntityModel bone.pitch = x; bone.yaw = y; bone.roll = z; -} - - } \ No newline at end of file + } +} \ No newline at end of file diff --git a/src/main/java/eu/midnightdust/lib/config/AutoCommand.java b/src/main/java/eu/midnightdust/lib/config/AutoCommand.java new file mode 100644 index 0000000..ba7f71f --- /dev/null +++ b/src/main/java/eu/midnightdust/lib/config/AutoCommand.java @@ -0,0 +1,91 @@ +package eu.midnightdust.lib.config; + +import com.mojang.brigadier.arguments.DoubleArgumentType; +import com.mojang.brigadier.arguments.IntegerArgumentType; +import com.mojang.brigadier.arguments.StringArgumentType; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback; +import net.minecraft.server.command.CommandManager; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.text.LiteralText; + +import java.lang.reflect.Field; +import java.util.Arrays; + +public class AutoCommand { + private LiteralArgumentBuilder command; + final Field entry; + final String modid; + + public AutoCommand(Field entry, String modid) { + this.entry = entry; + this.modid = modid; + } + + public void register() { + command = CommandManager.literal(modid); + command(); + LiteralArgumentBuilder finalized = CommandManager.literal("midnightconfig").then(command); + + CommandRegistrationCallback.EVENT.register((dispatcher, dedicated) -> dispatcher.register(finalized)); + } + + private void command() { + if (entry.getType() == int.class) + command = command.then(CommandManager.literal(this.entry.getName()).executes(ctx -> getValue(ctx.getSource())).then( + CommandManager.argument("value", IntegerArgumentType.integer((int) entry.getAnnotation(MidnightConfig.Entry.class).min(),(int) entry.getAnnotation(MidnightConfig.Entry.class).max())) + .executes(ctx -> this.setValue(ctx.getSource(), IntegerArgumentType.getInteger(ctx, "value"))) + )); + else if (entry.getType() == double.class) + command = command.then(CommandManager.literal(this.entry.getName()).executes(ctx -> getValue(ctx.getSource())).then( + CommandManager.argument("value", DoubleArgumentType.doubleArg(entry.getAnnotation(MidnightConfig.Entry.class).min(),entry.getAnnotation(MidnightConfig.Entry.class).max())) + .executes(ctx -> this.setValue(ctx.getSource(), DoubleArgumentType.getDouble(ctx, "value"))) + )); + else if (entry.getType() == boolean.class) { + command = command.then(CommandManager.literal(this.entry.getName()).executes(ctx -> getValue(ctx.getSource())).then( + CommandManager.literal("true") + .executes(ctx -> this.setValue(ctx.getSource(), true)) + )); + command = command.then(CommandManager.literal(this.entry.getName()).executes(ctx -> getValue(ctx.getSource())).then( + CommandManager.literal("false") + .executes(ctx -> this.setValue(ctx.getSource(), false)) + )); + } + else if (entry.getType().isEnum()) { + for (int i = 0; i < entry.getType().getEnumConstants().length; ++i) { + Object enumValue = Arrays.stream(entry.getType().getEnumConstants()).toList().get(i); + command = command.then(CommandManager.literal(this.entry.getName()).executes(ctx -> getValue(ctx.getSource())).then( + CommandManager.literal(enumValue.toString()) + .executes(ctx -> this.setValue(ctx.getSource(), enumValue)) + )); + } + } + else + command = command.then(CommandManager.literal(this.entry.getName()).executes(ctx -> getValue(ctx.getSource())).then( + CommandManager.argument("value", StringArgumentType.string()) + .executes(ctx -> this.setValue(ctx.getSource(), StringArgumentType.getString(ctx, "value"))) + )); + } + + private int setValue(ServerCommandSource source, Object value) { + try { + entry.set(null,value); + MidnightConfig.write(modid); + } + catch (Exception e) { + source.sendError(new LiteralText("Could not set "+entry.getName()+" to value "+value+": " + e)); + return 0; + } + + source.sendFeedback(new LiteralText("Successfully set " + entry.getName()+" to "+value), true); + return 1; + } + private int getValue(ServerCommandSource source) { + try { + source.sendFeedback(new LiteralText("The value of "+entry.getName()+" is "+entry.get(null)), false); + return 1; + } + catch (IllegalAccessException ignored) {} + return 0; + } +} diff --git a/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java b/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java index a1baeeb..3b69531 100755 --- a/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java +++ b/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java @@ -39,38 +39,14 @@ import java.util.function.Function; import java.util.function.Predicate; import java.util.regex.Pattern; -/* MidnightConfig v1.0.6 - Single class config library - feel free to copy! - Changelog: - - 1.0.6: - - Abstract & Allow super ticks - - 1.0.5: - - Custom lang keys - - Transparent list background when in game - - 1.0.4: - - Number field length is now configurable - - Fixed number fields being empty - - 1.0.3: - - Text field length is now configurable - - Better separation of client and server - - 1.0.2: - - Update to 21w20a - - 1.0.1: - - Fixed buttons not working in fullscreen - - 1.0.0: - - The config screen no longer shows the entries of all instances of MidnightConfig - - Compatible with servers! - - Scrollable! - - Comment support! - - Fresh New Design */ - -/** Based on https://github.com/Minenash/TinyConfig +/** MidnightConfig v1.0.8 by TeamMidnightDust & Motschen + * Single class config library - feel free to copy! + * + * Based on https://github.com/Minenash/TinyConfig * Credits to Minenash */ @SuppressWarnings("unchecked") public abstract class MidnightConfig { - public static boolean useTooltipForTitle = true; // Render title as tooltip or as simple text - private static final Pattern INTEGER_ONLY = Pattern.compile("(-?[0-9]*)"); private static final Pattern DECIMAL_ONLY = Pattern.compile("-?([\\d]+\\.?[\\d]*|[\\d]*\\.?[\\d]+|\\.)"); @@ -211,6 +187,7 @@ public abstract class MidnightConfig { private final Screen parent; private final String modid; private MidnightConfigListWidget list; + private boolean reload = false; // Real Time config update // @Override @@ -220,25 +197,27 @@ public abstract class MidnightConfig { try { info.field.set(null, info.value); } catch (IllegalAccessException ignored) {} } + private void loadValues() { + try { gson.fromJson(Files.newBufferedReader(path), configClass.get(modid)); } + catch (Exception e) { write(modid); } + for (EntryInfo info : entries) { + if (info.field.isAnnotationPresent(Entry.class)) + try { + info.value = info.field.get(null); + info.tempValue = info.value.toString(); + } catch (IllegalAccessException ignored) { + } + } + } @Override protected void init() { super.init(); + if (!reload) loadValues(); this.addDrawableChild(new ButtonWidget(this.width / 2 - 154, this.height - 28, 150, 20, ScreenTexts.CANCEL, button -> { - try { gson.fromJson(Files.newBufferedReader(path), configClass.get(modid)); } - catch (Exception e) { write(modid); } - - for (EntryInfo info : entries) { - if (info.field.isAnnotationPresent(Entry.class)) { - try { - info.value = info.field.get(null); - info.tempValue = info.value.toString(); - } catch (IllegalAccessException ignored) { - } - } - } - Objects.requireNonNull(client).openScreen(parent); + loadValues(); + Objects.requireNonNull(client).setScreen(parent); })); ButtonWidget done = this.addDrawableChild(new ButtonWidget(this.width / 2 + 4, this.height - 28, 150, 20, ScreenTexts.DONE, (button) -> { @@ -249,7 +228,7 @@ public abstract class MidnightConfig { } catch (IllegalAccessException ignored) {} } write(modid); - Objects.requireNonNull(client).openScreen(parent); + Objects.requireNonNull(client).setScreen(parent); })); this.list = new MidnightConfigListWidget(this.client, this.width, this.height, 32, this.height - 32, 25); @@ -262,7 +241,8 @@ public abstract class MidnightConfig { info.value = info.defaultValue; info.tempValue = info.value.toString(); double scrollAmount = list.getScrollAmount(); - Objects.requireNonNull(client).openScreen(this); + this.reload = true; + Objects.requireNonNull(client).setScreen(this); list.setScrollAmount(scrollAmount); })); @@ -291,8 +271,8 @@ public abstract class MidnightConfig { this.list.render(matrices, mouseX, mouseY, delta); int stringWidth = (int) (title.getString().length() * 2.75f); - if (useTooltipForTitle) renderTooltip(matrices, title, width/2 - stringWidth, 27); - else drawCenteredText(matrices, textRenderer, title, width / 2, 15, 0xFFFFFF); + renderTooltip(matrices, title, width/2 - stringWidth, 27); + //drawCenteredText(matrices, textRenderer, title, width / 2, 15, 0xFFFFFF); for (EntryInfo info : entries) { if (info.id.equals(modid)) { @@ -377,7 +357,7 @@ public abstract class MidnightConfig { return buttonsWithResetButtons; } - public List method_37025() { + public List selectableChildren() { return buttonsWithResetButtons; } } diff --git a/src/main/java/eu/midnightdust/lib/util/MidnightColorUtil.java b/src/main/java/eu/midnightdust/lib/util/MidnightColorUtil.java index d687664..a750a03 100755 --- a/src/main/java/eu/midnightdust/lib/util/MidnightColorUtil.java +++ b/src/main/java/eu/midnightdust/lib/util/MidnightColorUtil.java @@ -1,8 +1,14 @@ package eu.midnightdust.lib.util; -import java.awt.*; +import java.awt.Color; public class MidnightColorUtil { + public static float hue; + public static void tick() { + if (hue > 1) hue = 0f; + hue = hue + 0.01f; + } + /** * @credit https://stackoverflow.com/questions/4129666/how-to-convert-hex-to-rgb-using-java * @param colorStr e.g. "FFFFFF" @@ -14,4 +20,8 @@ public class MidnightColorUtil { Integer.valueOf( colorStr.substring( 2, 4 ), 16 ), Integer.valueOf( colorStr.substring( 4, 6 ), 16 )); } + + public static Color radialRainbow(float saturation, float brightness) { + return Color.getHSBColor(hue, saturation, brightness); + } } diff --git a/src/main/java/eu/midnightdust/lib/util/render/entity/EmissiveOverlayRenderer.java b/src/main/java/eu/midnightdust/lib/util/render/entity/EmissiveOverlayRenderer.java new file mode 100644 index 0000000..7446e8b --- /dev/null +++ b/src/main/java/eu/midnightdust/lib/util/render/entity/EmissiveOverlayRenderer.java @@ -0,0 +1,20 @@ +package eu.midnightdust.lib.util.render.entity; + +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.entity.feature.EyesFeatureRenderer; +import net.minecraft.client.render.entity.feature.FeatureRendererContext; +import net.minecraft.client.render.entity.model.EntityModel; +import net.minecraft.entity.LivingEntity; +import net.minecraft.util.Identifier; + +public class EmissiveOverlayRenderer extends EyesFeatureRenderer> { + private final RenderLayer SKIN; + + public EmissiveOverlayRenderer(FeatureRendererContext> featureRendererContext, Identifier texture) { + super(featureRendererContext); + SKIN = RenderLayer.getEyes(texture); + } + public RenderLayer getEyesTexture() { + return SKIN; + } +} \ No newline at end of file diff --git a/src/main/resources/assets/midnightlib/lang/de_de.json b/src/main/resources/assets/midnightlib/lang/de_de.json index 6b1b3ec..13a1ce4 100755 --- a/src/main/resources/assets/midnightlib/lang/de_de.json +++ b/src/main/resources/assets/midnightlib/lang/de_de.json @@ -2,17 +2,10 @@ "midnightlib.overview.title":"MidnightConfig Übersicht", "midnightlib.midnightconfig.title":"MidnightLib Konfiguration", "midnightlib.midnightconfig.midnightlib_description":"§nMidnightLib", - "midnightlib.midnightconfig.config_screen_list":"Konfigurationsliste aktivieren", - "midnightlib.midnightconfig.titleStyle":"Aussehen der Konfigurationsbildschirmtitel", - "midnightlib.midnightconfig.background_texture":"Textur der Konfigurationsbildschirmhintergründe", - "midnightlib.midnightconfig.titleStyle.tooltip":"§cBenötigt Neustart!", - "midnightlib.midnightconfig.enum.TitleStyle.TEXT":"Text", - "midnightlib.midnightconfig.enum.TitleStyle.TOOLTIP":"Tooltip", + "midnightlib.midnightconfig.config_screen_list":"Konfigurationsübersicht", + "midnightlib.midnightconfig.background_texture":"Textur der Konfigurationsbildschirme", "midnightlib.midnightconfig.midnighthats_description":"§nMidnightHats", - "midnightlib.midnightconfig.event_hats":"Event Hüte", - "midnightlib.midnightconfig.special_hats":"Besondere Hüte", - "midnightlib.modrinth":"Modrinth", - "midnightlib.curseforge":"CurseForge", - "modmenu.descriptionTranslation.midnightlib": "Bibliothek für Mods von Team MidnightDust.\nBesitzt eine Konfigurationsschnittstelle, oft benutzten Code, und kosmetische Gegenstände.", - "modmenu.summaryTranslation.midnightlib": "Bibliothek für Mods von Team MidnightDust." + "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." } \ No newline at end of file diff --git a/src/main/resources/assets/midnightlib/lang/en_us.json b/src/main/resources/assets/midnightlib/lang/en_us.json index 67f4346..e25b876 100755 --- a/src/main/resources/assets/midnightlib/lang/en_us.json +++ b/src/main/resources/assets/midnightlib/lang/en_us.json @@ -3,16 +3,15 @@ "midnightlib.midnightconfig.title":"MidnightLib Config", "midnightlib.midnightconfig.midnightlib_description":"§nMidnightLib", "midnightlib.midnightconfig.config_screen_list":"Enable Config Screen List", - "midnightlib.midnightconfig.titleStyle":"Style of config screen titles", - "midnightlib.midnightconfig.titleStyle.tooltip":"§cRequires restart!", - "midnightlib.midnightconfig.enum.TitleStyle.TEXT":"Text", - "midnightlib.midnightconfig.enum.TitleStyle.TOOLTIP":"Tooltip", + "midnightlib.midnightconfig.enum.ConfigButton.TRUE":"§aTrue", + "midnightlib.midnightconfig.enum.ConfigButton.FALSE":"§cFalse", + "midnightlib.midnightconfig.enum.ConfigButton.MODMENU":"§bModMenu", "midnightlib.midnightconfig.background_texture":"Texture of config screen backgrounds", "midnightlib.midnightconfig.midnighthats_description":"§nMidnightHats", - "midnightlib.midnightconfig.event_hats":"Enable Event Hats", - "midnightlib.midnightconfig.special_hats":"Enable Special Hats", + "midnightlib.midnightconfig.special_hats":"Enable Supporter Hats", "midnightlib.modrinth":"Modrinth", "midnightlib.curseforge":"CurseForge", - "modmenu.descriptionTranslation.midnightlib": "Common Library for Team MidnightDust's mods.\nProvides a config api, common utils, and cosmetics.", + "midnightlib.wiki":"Wiki", + "modmenu.descriptionTranslation.midnightlib": "Common Library for Team MidnightDust's mods.\nProvides a config api, automatic integration with other mods, common utils, and cosmetics.", "modmenu.summaryTranslation.midnightlib": "Common Library for Team MidnightDust's mods." } \ No newline at end of file diff --git a/src/main/resources/assets/midnightlib/textures/hats/christmas.png b/src/main/resources/assets/midnightlib/textures/hats/christmas.png deleted file mode 100755 index 7e092c3..0000000 Binary files a/src/main/resources/assets/midnightlib/textures/hats/christmas.png and /dev/null differ diff --git a/src/main/resources/assets/midnightlib/textures/hats/contributer.png b/src/main/resources/assets/midnightlib/textures/hats/contributer.png deleted file mode 100755 index e4c0dcd..0000000 Binary files a/src/main/resources/assets/midnightlib/textures/hats/contributer.png and /dev/null differ diff --git a/src/main/resources/assets/midnightlib/textures/hats/donator.png b/src/main/resources/assets/midnightlib/textures/hats/donator.png deleted file mode 100755 index ec52883..0000000 Binary files a/src/main/resources/assets/midnightlib/textures/hats/donator.png and /dev/null differ diff --git a/src/main/resources/assets/midnightlib/textures/hats/empty.png b/src/main/resources/assets/midnightlib/textures/hats/empty.png deleted file mode 100755 index fcc9887..0000000 Binary files a/src/main/resources/assets/midnightlib/textures/hats/empty.png and /dev/null differ diff --git a/src/main/resources/assets/midnightlib/textures/hats/friend.png b/src/main/resources/assets/midnightlib/textures/hats/friend.png deleted file mode 100755 index 80d4996..0000000 Binary files a/src/main/resources/assets/midnightlib/textures/hats/friend.png and /dev/null differ diff --git a/src/main/resources/assets/midnightlib/textures/hats/motschen.png b/src/main/resources/assets/midnightlib/textures/hats/motschen.png deleted file mode 100755 index cf60fd0..0000000 Binary files a/src/main/resources/assets/midnightlib/textures/hats/motschen.png and /dev/null differ diff --git a/src/main/resources/assets/midnightlib/textures/hats/overlay.png b/src/main/resources/assets/midnightlib/textures/hats/overlay.png new file mode 100644 index 0000000..469e49a Binary files /dev/null and b/src/main/resources/assets/midnightlib/textures/hats/overlay.png differ diff --git a/src/main/resources/assets/midnightlib/textures/hats/pride.png b/src/main/resources/assets/midnightlib/textures/hats/pride.png deleted file mode 100755 index 4058af7..0000000 Binary files a/src/main/resources/assets/midnightlib/textures/hats/pride.png and /dev/null differ diff --git a/src/main/resources/assets/midnightlib/textures/hats/social.png b/src/main/resources/assets/midnightlib/textures/hats/social.png deleted file mode 100755 index b0a052b..0000000 Binary files a/src/main/resources/assets/midnightlib/textures/hats/social.png and /dev/null differ diff --git a/src/main/resources/assets/midnightlib/textures/hats/tater.png b/src/main/resources/assets/midnightlib/textures/hats/tater.png deleted file mode 100755 index 169af8f..0000000 Binary files a/src/main/resources/assets/midnightlib/textures/hats/tater.png and /dev/null differ diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index f80b4a1..6219587 100755 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -23,13 +23,15 @@ "client": [ "eu.midnightdust.core.MidnightLibClient" ], + "server": [ + "eu.midnightdust.core.MidnightLibServer" + ], "modmenu": [ "eu.midnightdust.lib.config.AutoModMenu" ] }, "mixins": [ - "midnighthats.mixins.json", "midnightcore.mixins.json" ], @@ -41,7 +43,10 @@ "modmenu": { "links": { "modmenu.discord": "https://discord.midnightdust.eu/", - "modmenu.website": "https://www.midnightdust.eu/" + "modmenu.website": "https://www.midnightdust.eu/", + "midnightlib.curseforge": "https://www.curseforge.com/minecraft/mc-mods/midnightlib", + "midnightlib.modrinth": "https://modrinth.com/mod/midnightlib", + "midnightlib.wiki": "https://github.com/TeamMidnightDust/MidnightLib/wiki" }, "badges": [ "library" ] } diff --git a/src/main/resources/midnightcore.mixins.json b/src/main/resources/midnightcore.mixins.json index 49a5a32..15cf298 100755 --- a/src/main/resources/midnightcore.mixins.json +++ b/src/main/resources/midnightcore.mixins.json @@ -4,7 +4,8 @@ "compatibilityLevel": "JAVA_16", "client": [ "MixinOptionsScreen", - "MixinEntryListWidget" + "MixinEntryListWidget", + "MixinPlayerEntityRenderer" ], "injectors": { "defaultRequire": 1 diff --git a/src/main/resources/midnighthats.mixins.json b/src/main/resources/midnighthats.mixins.json deleted file mode 100755 index 5300b4f..0000000 --- a/src/main/resources/midnighthats.mixins.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "required": true, - "package": "eu.midnightdust.hats.mixin", - "compatibilityLevel": "JAVA_16", - "client": [ - "PlayerEntityRendererMixin" - ], - "injectors": { - "defaultRequire": 1 - } -} \ No newline at end of file