mirror of
https://github.com/PuzzleMC/Puzzle.git
synced 2025-12-15 11:25:11 +01:00
Add emissive textures module, Try to fix puzzle-splashscreen
This commit is contained in:
@@ -6,7 +6,7 @@ public class PuzzleConfig extends MidnightConfigLite {
|
||||
@Entry public static boolean checkUpdates = true;
|
||||
@Entry public static boolean showPuzzleInfo = true;
|
||||
@Entry public static boolean resourcepackSplashScreen = true;
|
||||
@Entry public static boolean randomEntityTextures = true;
|
||||
@Entry public static boolean emissiveTextures = true;
|
||||
@Entry public static boolean customRenderLayers = true;
|
||||
@Entry public static boolean unlimitedRotations = true;
|
||||
@Entry public static boolean biggerModels = true;
|
||||
|
||||
5
puzzle-emissives/build.gradle
Executable file
5
puzzle-emissives/build.gradle
Executable file
@@ -0,0 +1,5 @@
|
||||
archivesBaseName = "puzzle-emissives"
|
||||
|
||||
dependencies {
|
||||
api project(":puzzle-base")
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package net.puzzlemc.emissives;
|
||||
|
||||
import net.fabricmc.api.ClientModInitializer;
|
||||
import net.puzzlemc.core.config.PuzzleConfig;
|
||||
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
|
||||
import net.fabricmc.fabric.api.resource.SimpleSynchronousResourceReloadListener;
|
||||
import net.minecraft.resource.ResourceManager;
|
||||
import net.minecraft.resource.ResourceType;
|
||||
import net.minecraft.util.Identifier;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
public class PuzzleEmissiveTextures implements ClientModInitializer {
|
||||
public static final Map<Identifier, Identifier> emissiveTextures = new HashMap<>();
|
||||
|
||||
public void onInitializeClient() {
|
||||
ResourceManagerHelper.get(ResourceType.CLIENT_RESOURCES).registerReloadListener(new SimpleSynchronousResourceReloadListener() {
|
||||
@Override
|
||||
public Identifier getFabricId() {
|
||||
return new Identifier("puzzle", "emissive_textures");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reload(ResourceManager manager) {
|
||||
if (PuzzleConfig.emissiveTextures) {
|
||||
String suffix = "_e";
|
||||
|
||||
for (Identifier id : manager.findResources("optifine", path -> path.contains("emissive.properties"))) {
|
||||
try (InputStream stream = manager.getResource(id).getInputStream()) {
|
||||
Properties properties = new Properties();
|
||||
properties.load(stream);
|
||||
|
||||
if (properties.get("suffix.emissive") != null) {
|
||||
suffix = properties.get("suffix.emissive").toString();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
LogManager.getLogger("Puzzle").error("Error occurred while loading emissive.properties " + id.toString(), e);
|
||||
}
|
||||
String finalSuffix = suffix;
|
||||
for (Identifier emissiveId : manager.findResources("textures", path -> path.endsWith(finalSuffix + ".png"))) {
|
||||
try {
|
||||
String normalTexture = emissiveId.toString();
|
||||
normalTexture = normalTexture.substring(0, normalTexture.lastIndexOf(finalSuffix));
|
||||
Identifier normalId = Identifier.tryParse(normalTexture + ".png");
|
||||
emissiveTextures.put(normalId, emissiveId);
|
||||
if (PuzzleConfig.debugMessages) LogManager.getLogger("Puzzle").info(normalId + " " + emissiveId);
|
||||
} catch (Exception e) {
|
||||
LogManager.getLogger("Puzzle").error("Error occurred while loading emissive texture " + emissiveId.toString(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package net.puzzlemc.emissives.mixin;
|
||||
|
||||
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.*;
|
||||
import net.minecraft.client.render.entity.feature.FeatureRendererContext;
|
||||
import net.minecraft.client.render.entity.model.EntityModel;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.puzzlemc.core.config.PuzzleConfig;
|
||||
import net.puzzlemc.emissives.PuzzleEmissiveTextures;
|
||||
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.CallbackInfo;
|
||||
|
||||
@Mixin(value = LivingEntityRenderer.class)
|
||||
public abstract class MixinLivingEntityRenderer<T extends LivingEntity, M extends EntityModel<T>> extends EntityRenderer<T> implements FeatureRendererContext<T, M> {
|
||||
|
||||
@Shadow public abstract M getModel();
|
||||
|
||||
protected MixinLivingEntityRenderer(EntityRendererFactory.Context ctx) {
|
||||
super(ctx);
|
||||
}
|
||||
|
||||
@Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/model/EntityModel;render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;IIFFFF)V", shift = At.Shift.AFTER), method = "render*")
|
||||
private void onRender(T entity, float yaw, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, CallbackInfo ci) {
|
||||
if (PuzzleConfig.emissiveTextures && PuzzleEmissiveTextures.emissiveTextures.containsKey(this.getTexture(entity))) {
|
||||
VertexConsumer vertexConsumer = vertexConsumers.getBuffer(RenderLayer.getBeaconBeam(PuzzleEmissiveTextures.emissiveTextures.get(this.getTexture(entity)),true));
|
||||
|
||||
this.getModel().render(matrices, vertexConsumer, 15728640, OverlayTexture.DEFAULT_UV, 1.0F, 1.0F, 1.0F, 1.0F);
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
puzzle-emissives/src/main/resources/assets/puzzle/icon.png
Normal file
BIN
puzzle-emissives/src/main/resources/assets/puzzle/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.3 KiB |
40
puzzle-emissives/src/main/resources/fabric.mod.json
Executable file
40
puzzle-emissives/src/main/resources/fabric.mod.json
Executable file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"id": "puzzle-emissives",
|
||||
"version": "${version}",
|
||||
|
||||
"name": "Puzzle Emissive Textures",
|
||||
"description": "Displays emissive textures on blocks and entities",
|
||||
"authors": [
|
||||
"PuzzleMC",
|
||||
"Motschen"
|
||||
],
|
||||
"contact": {
|
||||
"homepage": "https://www.midnightdust.eu/",
|
||||
"sources": "https://github.com/TeamMidnightDust/Puzzle",
|
||||
"issues": "https://github.com/TeamMidnightDust/Puzzle/issues"
|
||||
},
|
||||
|
||||
"license": "MIT",
|
||||
"icon": "assets/puzzle/icon.png",
|
||||
|
||||
"environment": "client",
|
||||
"entrypoints": {
|
||||
"client": [
|
||||
"net.puzzlemc.emissives.PuzzleEmissiveTextures"
|
||||
]
|
||||
},
|
||||
"custom": {
|
||||
"modmenu": {
|
||||
"parent": "puzzle"
|
||||
}
|
||||
},
|
||||
|
||||
"mixins": [
|
||||
"puzzle-emissives.mixins.json"
|
||||
],
|
||||
|
||||
"depends": {
|
||||
"fabric": "*"
|
||||
}
|
||||
}
|
||||
11
puzzle-emissives/src/main/resources/puzzle-emissives.mixins.json
Executable file
11
puzzle-emissives/src/main/resources/puzzle-emissives.mixins.json
Executable file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"required": true,
|
||||
"package": "net.puzzlemc.emissives.mixin",
|
||||
"compatibilityLevel": "JAVA_17",
|
||||
"client": [
|
||||
"MixinLivingEntityRenderer"
|
||||
],
|
||||
"injectors": {
|
||||
"defaultRequire": 1
|
||||
}
|
||||
}
|
||||
@@ -53,10 +53,14 @@ public class PuzzleClient implements ClientModInitializer {
|
||||
PuzzleSplashScreen.resetColors();
|
||||
MinecraftClient.getInstance().getTextureManager().registerTexture(PuzzleSplashScreen.LOGO, new PuzzleSplashScreen.LogoTexture());
|
||||
}));
|
||||
PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.of("Disable splash screen logo blending "), (button) -> button.setMessage(PuzzleConfig.disableSplashScreenBlend ? YES : NO), (button) -> {
|
||||
PuzzleConfig.disableSplashScreenBlend = !PuzzleConfig.disableSplashScreenBlend;
|
||||
PuzzleConfig.write(id);
|
||||
}));
|
||||
}
|
||||
if (FabricLoader.getInstance().isModLoaded("puzzle-randomentities")) {
|
||||
PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.of("Random Entity Textures"), (button) -> button.setMessage(PuzzleConfig.randomEntityTextures ? YES : NO), (button) -> {
|
||||
PuzzleConfig.randomEntityTextures = !PuzzleConfig.randomEntityTextures;
|
||||
if (FabricLoader.getInstance().isModLoaded("puzzle-emissives")) {
|
||||
PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.of("Emissive Textures"), (button) -> button.setMessage(PuzzleConfig.emissiveTextures ? YES : NO), (button) -> {
|
||||
PuzzleConfig.emissiveTextures = !PuzzleConfig.emissiveTextures;
|
||||
PuzzleConfig.write(id);
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.puzzlemc.splashscreen.mixin;
|
||||
|
||||
import com.mojang.blaze3d.platform.GlStateManager;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.gui.screen.Overlay;
|
||||
import net.minecraft.client.gui.screen.SplashOverlay;
|
||||
@@ -69,6 +70,10 @@ public abstract class MixinSplashScreen extends Overlay {
|
||||
GlStateManager._clear(16384, MinecraftClient.IS_SYSTEM_MAC);
|
||||
}
|
||||
}
|
||||
@Inject(method = "render", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;enableBlend()V", shift = At.Shift.AFTER))
|
||||
private void disableBlend(MatrixStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) {
|
||||
if (PuzzleConfig.disableSplashScreenBlend) RenderSystem.disableBlend();
|
||||
}
|
||||
|
||||
@ModifyArg(method = "renderProgressBar", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/SplashOverlay;fill(Lnet/minecraft/client/util/math/MatrixStack;IIIII)V"), index = 5)
|
||||
private int modifyProgressFrame(int color) { // Set the Progress Bar Frame Color to our configured value //
|
||||
|
||||
@@ -14,3 +14,4 @@ include 'puzzle-models'
|
||||
include 'puzzle-blocks'
|
||||
//include 'puzzle-randomentities'
|
||||
include 'puzzle-gui'
|
||||
include 'puzzle-emissives'
|
||||
|
||||
Reference in New Issue
Block a user