Skip to content

Commit d554229

Browse files
committed
color annotation
1 parent 79c575f commit d554229

5 files changed

Lines changed: 66 additions & 4 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ This mod is client side only, you don't have to install it on the server to use
99
- Change between Extract X, Y and Z with hotkeys (planned: config panel buttons)
1010
- Improved Number Constant editing
1111
- Color coded psi cost based on the sustainability or danger of the spell
12+
- Colored piece outlines using the @color=name_or_hex comment annotation (planned: config panel buttons)
1213
- Planned: hotkey to highlight tricks, unused, dependency and dependent pieces
1314
- Planned: insert Cross Connectors with shift-arrow
1415

src/main/java/gdavid/psionicutilities/PsionicUtilities.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,22 @@
11
package gdavid.psionicutilities;
22

3+
import net.minecraft.resources.ResourceLocation;
4+
import net.minecraft.world.item.Item;
5+
import net.minecraftforge.api.distmarker.Dist;
6+
import net.minecraftforge.api.distmarker.OnlyIn;
7+
import net.minecraftforge.event.RegistryEvent.Register;
8+
import net.minecraftforge.eventbus.api.SubscribeEvent;
39
import net.minecraftforge.fml.IExtensionPoint.DisplayTest;
10+
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
11+
import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus;
412
import net.minecraftforge.network.NetworkConstants;
513

614
import net.minecraftforge.fml.ModLoadingContext;
715
import net.minecraftforge.fml.common.Mod;
16+
import vazkii.psi.api.ClientPsiAPI;
817

918
@Mod(PsionicUtilities.modId)
19+
@EventBusSubscriber(bus = Bus.MOD, value = Dist.CLIENT)
1020
public class PsionicUtilities {
1121

1222
public static final String modId = "psionicutilities";
@@ -16,4 +26,10 @@ public PsionicUtilities() {
1626
() -> new DisplayTest(() -> NetworkConstants.IGNORESERVERONLY, (a, b) -> true));
1727
}
1828

29+
@OnlyIn(Dist.CLIENT)
30+
@SubscribeEvent
31+
public static void registerTextures(Register<Item> e) {
32+
ClientPsiAPI.registerPieceTexture(new ResourceLocation(modId, "highlight"), new ResourceLocation(modId, "spell/highlight"));
33+
}
34+
1935
}

src/main/java/gdavid/psionicutilities/mixin/SpellPieceMixin.java

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,31 @@
11
package gdavid.psionicutilities.mixin;
22

3-
import com.mojang.blaze3d.vertex.PoseStack;
4-
import com.mojang.blaze3d.vertex.VertexConsumer;
3+
import com.mojang.blaze3d.vertex.*;
4+
import com.mojang.math.Matrix4f;
5+
import gdavid.psionicutilities.PsionicUtilities;
6+
import net.minecraft.client.renderer.MultiBufferSource;
7+
import net.minecraft.client.resources.model.Material;
8+
import net.minecraft.network.chat.TextColor;
9+
import net.minecraft.resources.ResourceLocation;
510
import org.spongepowered.asm.mixin.Mixin;
611
import org.spongepowered.asm.mixin.injection.At;
12+
import org.spongepowered.asm.mixin.injection.Inject;
713
import org.spongepowered.asm.mixin.injection.Redirect;
814

915
import gdavid.psionicutilities.Util;
1016
import net.minecraftforge.api.distmarker.Dist;
1117
import net.minecraftforge.api.distmarker.OnlyIn;
18+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
19+
import vazkii.psi.api.ClientPsiAPI;
1220
import vazkii.psi.api.spell.IGenericRedirector;
1321
import vazkii.psi.api.spell.SpellParam;
1422
import vazkii.psi.api.spell.SpellPiece;
1523

24+
import java.util.Arrays;
25+
import java.util.Optional;
26+
1627
@Mixin(value = SpellPiece.class, remap = false)
17-
public class SpellPieceMixin {
28+
public abstract class SpellPieceMixin {
1829

1930
@OnlyIn(Dist.CLIENT)
2031
@Redirect(method = "drawParam(Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;ILvazkii/psi/api/spell/SpellParam$Side;ILvazkii/psi/api/spell/SpellParam$ArrowType;F)V", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/vertex/VertexConsumer;color(IIII)Lcom/mojang/blaze3d/vertex/VertexConsumer;", remap = true))
@@ -29,4 +40,38 @@ private VertexConsumer paramColor(VertexConsumer builder, int r, int g, int b, i
2940
return builder.color(r, g, b, a);
3041
}
3142

43+
@OnlyIn(Dist.CLIENT)
44+
@Inject(method = "drawBackground", at = @At("HEAD"))
45+
private void drawBackground(PoseStack ms, MultiBufferSource buffers, int light, CallbackInfo callback) {
46+
SpellPiece self = (SpellPiece) (Object) this;
47+
if (self.comment != null) {
48+
String prefix = "@color=";
49+
Optional<String> str = Arrays.stream(self.comment.split(";")).filter(ln -> ln.startsWith(prefix)).findFirst().map(ln -> ln.substring(prefix.length()));
50+
str.ifPresent(color -> {
51+
TextColor value = TextColor.parseColor(color);
52+
if (value != null) {
53+
drawHighlight(ms, buffers, light, value.getValue());
54+
}
55+
});
56+
}
57+
}
58+
59+
private void drawHighlight(PoseStack ms, MultiBufferSource buffers, int light, int value) {
60+
int r = (value >> 16) & 0xFF;
61+
int g = (value >> 8) & 0xFF;
62+
int b = value & 0xFF;
63+
Material material = new Material(ClientPsiAPI.PSI_PIECE_TEXTURE_ATLAS, new ResourceLocation(PsionicUtilities.modId, "spell/highlight"));
64+
VertexConsumer buf = material.buffer(buffers, ignore -> SpellPiece.getLayer());
65+
Matrix4f mat = ms.last().pose();
66+
buf.vertex(mat, -1, 17, 0).color(r, g, b, 128);
67+
buf.uv(0, 1).uv2(light).endVertex();
68+
buf.vertex(mat, 17, 17, 0).color(r, g, b, 128);
69+
buf.uv(1, 1).uv2(light).endVertex();
70+
buf.vertex(mat, 17, -1, 0).color(r, g, b, 128);
71+
buf.uv(1, 0).uv2(light).endVertex();
72+
buf.vertex(mat, -1, -1, 0).color(r, g, b, 128);
73+
buf.uv(0, 0).uv2(light).endVertex();
74+
ms.translate(0, 0, 0.1f);
75+
}
76+
3277
}
561 Bytes
Loading

src/main/resources/pack.mcmeta

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"pack": {
33
"description": "Psionic Utilities resources",
4-
"pack_format": 6
4+
"pack_format": 8
55
}
66
}

0 commit comments

Comments
 (0)