Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 65 additions & 23 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
id("net.fabricmc.fabric-loom-remap") version "1.14-SNAPSHOT"
id("dev.kikugie.loom-back-compat")
id("org.jetbrains.kotlin.jvm") version "2.3.0"
id("dev.deftu.gradle.bloom") version "0.2.0"
}
Expand All @@ -17,10 +17,31 @@ base {
}

repositories {
mavenCentral()
gradlePluginPortal()
google()

maven("https://maven.parchmentmc.org")
maven("https://repo.polyfrost.org/releases")
maven("https://repo.polyfrost.org/snapshots")
maven("https://maven.gegy.dev/releases")

maven("https://maven.logix.dev/snapshots")
maven("https://nexus.prsm.wtf/repository/maven-public/maven-repo/releases/")
maven("https://repo.hypixel.net/repository/Hypixel/")
maven("https://maven.deftu.dev/releases")

maven("https://maven.fabricmc.net/releases")
maven("https://jitpack.io") {
content { includeGroupAndSubgroups("com.github") }
}
maven("https://maven.bawnorton.com/releases") {
content { includeGroup("com.github.bawnorton.mixinsquared") }
}
maven("https://maven.azureaaron.net/releases") {
content { includeGroup("net.azureaaron") }
}
maven("https://redirector.kotlinlang.org/maven/compose-dev")
}

loom {
Expand All @@ -34,26 +55,34 @@ loom {

dependencies {
minecraft("com.mojang:minecraft:${property("minecraft_version")}")
@Suppress("UnstableApiUsage")
mappings(loom.layered {
officialMojangMappings()
optionalProp("${property("parchment_version")}") {
parchment("org.parchmentmc.data:parchment-${property("minecraft_version")}:$it@zip")
}
optionalProp("${property("yalmm_version")}") {
mappings("dev.lambdaurora:yalmm-mojbackward:${property("minecraft_version")}+build.$it")

val hasOfficialMappings = findProperty("has_official_mappings")?.toString()?.toBoolean() ?: true
if (hasOfficialMappings) {
@Suppress("UnstableApiUsage")
mappings(loom.layered {
officialMojangMappings()
optionalProp("${property("parchment_version")}") {
parchment("org.parchmentmc.data:parchment-${property("minecraft_version")}:$it@zip")
}
optionalProp("${property("yalmm_version")}") {
mappings("dev.lambdaurora:yalmm-mojbackward:${property("minecraft_version")}+build.$it")
}
})
} else {
findProperty("mappings_version")?.toString()?.takeUnless { it.isBlank() }?.let {
mappings(it)
}
})
}
modImplementation("net.fabricmc:fabric-loader:${property("loader_version")}")
modImplementation("org.polyfrost.oneconfig:${property("minecraft_version")}-fabric:1.0.0-alpha.181")
modImplementation("org.polyfrost.oneconfig:commands:1.0.0-alpha.181")
modImplementation("org.polyfrost.oneconfig:config:1.0.0-alpha.181")
modImplementation("org.polyfrost.oneconfig:config-impl:1.0.0-alpha.181")
modImplementation("org.polyfrost.oneconfig:events:1.0.0-alpha.181")
modImplementation("org.polyfrost.oneconfig:internal:1.0.0-alpha.181")
modImplementation("org.polyfrost.oneconfig:ui:1.0.0-alpha.181")
modImplementation("org.polyfrost.oneconfig:utils:1.0.0-alpha.181")
modImplementation("org.polyfrost.oneconfig:hud:1.0.0-alpha.181")
modImplementation("org.polyfrost.oneconfig:${property("minecraft_version")}-fabric:1.0.0-alpha.192")
implementation("org.polyfrost.oneconfig:commands:1.0.0-alpha.192")
implementation("org.polyfrost.oneconfig:config:1.0.0-alpha.192")
implementation("org.polyfrost.oneconfig:config-impl:1.0.0-alpha.192")
implementation("org.polyfrost.oneconfig:events:1.0.0-alpha.192")
implementation("org.polyfrost.oneconfig:internal:1.0.0-alpha.192")
implementation("org.polyfrost.oneconfig:ui:1.0.0-alpha.192")
implementation("org.polyfrost.oneconfig:utils:1.0.0-alpha.192")
implementation("org.polyfrost.oneconfig:hud:1.0.0-alpha.192")
}

bloom {
Expand All @@ -78,18 +107,31 @@ tasks.processResources {
}
}

val javaVersionStr = findProperty("java_version")?.toString() ?: "21"
val javaVersionInt = javaVersionStr.toInt()

val kotlinJvmTarget = when(javaVersionInt) {
21 -> JvmTarget.JVM_21
22 -> JvmTarget.JVM_22
23 -> JvmTarget.JVM_23
24 -> JvmTarget.JVM_24
25 -> JvmTarget.JVM_25
else -> JvmTarget.JVM_21
}

tasks.withType<JavaCompile>().configureEach {
options.release.set(21)
options.release.set(javaVersionInt)
}

tasks.withType<KotlinCompile>().configureEach {
compilerOptions.jvmTarget.set(JvmTarget.JVM_21)
compilerOptions.jvmTarget.set(kotlinJvmTarget)
}

java {
withSourcesJar()
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
toolchain {
languageVersion.set(JavaLanguageVersion.of(javaVersionInt))
}
}

tasks.jar {
Expand Down
8 changes: 4 additions & 4 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,18 @@ org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.configureoncommand=true
org.gradle.parallel.threads=4
org.gradle.jvmargs=-Xmx2G
org.gradle.jvmargs=-Xmx4G
loom.ignoreDependencyLoomVersionValidation=true

# Mod information
mod.name=DamageTint
mod.id=damagetint
mod.version=3.4.0-alpha.1
mod.version=3.4.1-alpha.1
mod.group=org.polyfrost

# Loom settings, [VERSIONED] means to be overridden in each version's gradle.properties
loom_version=1.14-SNAPSHOT
loader_version=0.18.4
loomx.loom_version=1.16-SNAPSHOT
loader_version=0.19.2
minecraft_version=[VERSIONED]
parchment_version=[VERSIONED]
yalmm_version=[VERSIONED]
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.0-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
8 changes: 6 additions & 2 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,20 @@ pluginManagement {
maven("https://maven.architectury.dev")
maven("https://repo.polyfrost.org/releases")
maven("https://repo.polyfrost.org/snapshots")
maven("https://maven.kikugie.dev/releases") { name = "KikuGie Releases" }
maven("https://maven.kikugie.dev/snapshots") { name = "KikuGie Snapshots" }
}
}

plugins {
id("dev.kikugie.stonecutter") version "0.7.10"
id("dev.kikugie.stonecutter") version "0.9.4"
id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
id("dev.kikugie.loom-back-compat") version "0.3"
}

stonecutter {
create(rootProject) {
versions("1.21.1", "1.21.4", "1.21.8", "1.21.10")
versions("1.21.1", "1.21.4", "1.21.5", "1.21.8", "1.21.10", "1.21.11", "26.1")

vcsVersion = "1.21.10" // primary
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,17 @@
package org.polyfrost.damagetint.client;

import dev.deftu.omnicore.api.client.commands.OmniClientCommands;
import org.polyfrost.damagetint.DamageTintConstants;
import org.polyfrost.oneconfig.api.event.v1.EventManager;
import org.polyfrost.oneconfig.api.event.v1.events.InitializationEvent;
import org.polyfrost.oneconfig.utils.v1.dsl.ScreensKt;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class DamageTintClient {

public static final DamageTintClient INSTANCE = new DamageTintClient();

public final Logger LOGGER = LoggerFactory.getLogger("DamageTint");

public void initialize() {
DamageTintConfig.INSTANCE.preload();
OmniClientCommands.register(OmniClientCommands.literal(DamageTintConstants.ID).executes(ctx -> ctx.getSource().openScreen(ScreensKt.createScreen(DamageTintConfig.INSTANCE))));
EventManager.register(InitializationEvent.class, () -> DamageTintConfig.updateOverlayColor(DamageTintConfig.color));
}
}
36 changes: 13 additions & 23 deletions src/main/java/org/polyfrost/damagetint/client/DamageTintConfig.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,13 @@
package org.polyfrost.damagetint.client;

import dev.deftu.omnicore.api.client.OmniClient;
import dev.deftu.omnicore.api.client.OmniClientRuntime;
import dev.deftu.omnicore.api.color.OmniColor;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.OverlayTexture;
import org.polyfrost.compose.render.PolyColor;
import org.polyfrost.damagetint.DamageTintConstants;
import org.polyfrost.damagetint.client.utils.OverlayModifier;
import org.polyfrost.oneconfig.api.config.v1.Config;
import org.polyfrost.oneconfig.api.config.v1.annotations.Button;
import org.polyfrost.oneconfig.api.config.v1.annotations.Color;
import org.polyfrost.oneconfig.api.config.v1.annotations.Switch;
import org.polyfrost.polyui.color.ColorUtils;
import org.polyfrost.polyui.color.PolyColor;

public class DamageTintConfig extends Config {

Expand All @@ -23,35 +19,29 @@ public class DamageTintConfig extends Config {
private static final int defaultColor = 1291780096;

@Color(title = "Damage Tint Color")
public static PolyColor color = ColorUtils.toColor(defaultColor);

@Button(title = "Reset Damage Tint", text = "Reset Color")
private void resetColor() {
color = ColorUtils.asMutable(ColorUtils.toColor(defaultColor));
save();
}
public static PolyColor color = new PolyColor(defaultColor);

@Switch(title = "Fade Out Damage Tint")
public static boolean fade = false;

public DamageTintConfig() {
super("damagetint.json", "/assets/damagetint/damagetint_dark.svg", DamageTintConstants.NAME, Category.QOL);
addCallback("color", (() -> {
updateOverlayColor(color);
}));
save();
}

public static void updateOverlayColor(PolyColor newColor) {
OmniClientRuntime.runOnMain(() -> {
int r = newColor.red();
int g = newColor.green();
int b = newColor.blue();
Minecraft.getInstance().execute(() -> {
int r = newColor.getRed();
int g = newColor.getGreen();
int b = newColor.getBlue();
// Alpha is flipped for some reason, so 0 is fully opaque and 255 is fully transparent... Why, Mojang? Other developer note: 😭😭😭😭😭
int a = 255 - newColor.alpha();

OmniColor color = new OmniColor(r, g, b, a);
DamageTintClient.INSTANCE.LOGGER.info("updateOverlayColor called");
int a = 255 - newColor.getAlpha();

OverlayTexture overlayTexture = OmniClient.get().gameRenderer.overlayTexture();
((OverlayModifier)overlayTexture).damageTint$setOverlayColor(color);
OverlayTexture overlayTexture = Minecraft.getInstance().gameRenderer.overlayTexture();
((OverlayModifier)overlayTexture).damageTint$setOverlayColor(a, r, g, b);
});
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.polyfrost.damagetint.client.utils;

import dev.deftu.omnicore.api.color.OmniColor;

public interface OverlayModifier {
void damageTint$setOverlayColor(OmniColor color);
void damageTint$setOverlayColor(int a, int r, int g, int b);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package org.polyfrost.damagetint.mixin.client;

import net.minecraft.client.renderer.entity.LivingEntityRenderer;
//? if >=1.21.4 {
import net.minecraft.client.renderer.entity.state.LivingEntityRenderState;
//?}
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.world.entity.LivingEntity;
import org.polyfrost.damagetint.client.DamageTintConfig;
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.Unique;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

//? if >=1.21.4 {
import java.util.Map;
import java.util.WeakHashMap;
//?}

@Mixin(LivingEntityRenderer.class)
public class Mixin_LivingEntityRenderer {

//? if >=1.21.4 {
@Unique
private static final Map<Object, Integer> damageTint$hurtTimeMap = java.util.Collections.synchronizedMap(new WeakHashMap<>());
@Unique
private static final Map<Object, Integer> damageTint$deathTimeMap = java.util.Collections.synchronizedMap(new WeakHashMap<>());

@Inject(method = "extractRenderState(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/client/renderer/entity/state/LivingEntityRenderState;F)V", at = @At("HEAD"))
private void onExtractRenderState(LivingEntity entity, LivingEntityRenderState state, float f, CallbackInfo ci) {
damageTint$hurtTimeMap.put(state, entity.hurtTime);
damageTint$deathTimeMap.put(state, entity.deathTime);
}

@Inject(method = "getOverlayCoords", at = @At("HEAD"), cancellable = true)
private static void onGetOverlayCoords(LivingEntityRenderState state, float f, CallbackInfoReturnable<Integer> cir) {
if (DamageTintConfig.fade && DamageTintConfig.enabled) {
Integer hurtTimeObj = damageTint$hurtTimeMap.get(state);
Integer deathTimeObj = damageTint$deathTimeMap.get(state);
int hurtTime = hurtTimeObj != null ? hurtTimeObj : 0;
int deathTime = deathTimeObj != null ? deathTimeObj : 0;

if (hurtTime > 0) {
int row = Math.round((1.0f - (float) hurtTime / 10.0f) * 7.0f);
cir.setReturnValue(OverlayTexture.pack(OverlayTexture.u(f), row));
} else if (deathTime > 0) {
cir.setReturnValue(OverlayTexture.pack(OverlayTexture.u(f), 0));
}
}
}
//?} else {
/*// 1.21.1 has an entirely different method sig/approach
@Inject(method = "getOverlayCoords", at = @At("HEAD"), cancellable = true)
private static void onGetOverlayCoords(LivingEntity entity, float f, CallbackInfoReturnable<Integer> cir) {
if (DamageTintConfig.fade && DamageTintConfig.enabled) {
int hurtTime = entity.hurtTime;
int deathTime = entity.deathTime;

if (hurtTime > 0) {
int row = Math.round((1.0f - (float) hurtTime / 10.0f) * 7.0f);
cir.setReturnValue(OverlayTexture.pack(OverlayTexture.u(f), row));
} else if (deathTime > 0) {
cir.setReturnValue(OverlayTexture.pack(OverlayTexture.u(f), 0));
}
}
}
*///?}
}
Loading
Loading