Skip to content

Commit 4ea5ea3

Browse files
authored
Merge pull request #2
Add Opacity Xray
2 parents f6f141c + 081ad55 commit 4ea5ea3

File tree

8 files changed

+154
-8
lines changed

8 files changed

+154
-8
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package me.dustin.jex.event.render;
2+
3+
import me.dustin.events.core.Event;
4+
5+
public class EventBufferQuadAlpha extends Event {
6+
private int alpha;
7+
8+
public EventBufferQuadAlpha(int alpha) {
9+
this.alpha = alpha;
10+
}
11+
12+
public int getAlpha() {
13+
return alpha;
14+
}
15+
16+
public void setAlpha(int alpha) {
17+
this.alpha = alpha;
18+
}
19+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package me.dustin.jex.event.render;
2+
3+
import me.dustin.events.core.Event;
4+
import net.minecraft.block.BlockState;
5+
import net.minecraft.client.render.RenderLayer;
6+
7+
public class EventGetRenderLayer extends Event {
8+
private BlockState state;
9+
private RenderLayer renderLayer;
10+
11+
public EventGetRenderLayer(BlockState state) {
12+
this.state = state;
13+
}
14+
15+
public BlockState getState() {
16+
return state;
17+
}
18+
19+
public RenderLayer getRenderLayer() {
20+
return renderLayer;
21+
}
22+
23+
public void setRenderLayer(RenderLayer renderLayer) {
24+
this.renderLayer = renderLayer;
25+
}
26+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package me.dustin.jex.event.render;
2+
3+
import me.dustin.events.core.Event;
4+
5+
public class EventIsBlockOpaque extends Event {
6+
private boolean opaque;
7+
8+
public EventIsBlockOpaque(boolean opaque) {
9+
this.opaque = opaque;
10+
}
11+
12+
public boolean isOpaque() {
13+
return opaque;
14+
}
15+
16+
public void setOpaque(boolean opaque) {
17+
this.opaque = opaque;
18+
}
19+
}

src/main/java/me/dustin/jex/feature/impl/world/Xray.java

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,11 @@
88
import me.dustin.jex.feature.core.Feature;
99
import me.dustin.jex.feature.core.annotate.Feat;
1010
import me.dustin.jex.feature.core.enums.FeatureCategory;
11+
import me.dustin.jex.option.annotate.Op;
12+
import me.dustin.jex.option.annotate.OpChild;
1113
import net.minecraft.block.Block;
1214
import net.minecraft.block.Blocks;
15+
import net.minecraft.client.render.RenderLayer;
1316
import org.lwjgl.glfw.GLFW;
1417

1518
import java.util.ArrayList;
@@ -18,6 +21,10 @@
1821
public class Xray extends Feature {
1922

2023
public static ArrayList<Block> blockList = new ArrayList<>();
24+
@Op(name = "Opacity")
25+
public boolean opacity = false;
26+
@OpChild(name = "Alpha Value", parent = "Opacity", max = 255)
27+
public int alphaValue = 64;
2128

2229
public static void firstLoad() {
2330
blockList.add(Blocks.DIAMOND_ORE);
@@ -33,18 +40,20 @@ public Xray() {
3340
this.setKey(GLFW.GLFW_KEY_X);
3441
}
3542

36-
@EventListener(events = {EventShouldDrawSide.class, EventBlockBrightness.class, EventMarkChunkClosed.class, EventRenderBlockEntity.class, EventRenderBlock.class, EventRenderFluid.class})
43+
@EventListener(events = {EventShouldDrawSide.class, EventBlockBrightness.class, EventMarkChunkClosed.class, EventRenderBlockEntity.class, EventRenderBlock.class, EventRenderFluid.class,
44+
EventGetRenderLayer.class, EventIsBlockOpaque.class, EventBufferQuadAlpha.class})
3745
private void run(Event event) {
3846
if (event instanceof EventMarkChunkClosed) {
3947
event.cancel();
4048
}
4149
if (event instanceof EventShouldDrawSide) {
42-
try {
43-
EventShouldDrawSide eventShouldDrawSide = (EventShouldDrawSide) event;
50+
EventShouldDrawSide eventShouldDrawSide = (EventShouldDrawSide) event;
51+
if (this.opacity && isValid(eventShouldDrawSide.getBlock())) {
52+
eventShouldDrawSide.setShouldDrawSide(true);
53+
event.cancel();
54+
} else if (!this.opacity) {
4455
eventShouldDrawSide.setShouldDrawSide(isValid(eventShouldDrawSide.getBlock()));
4556
event.cancel();
46-
} catch (Exception e) {
47-
4857
}
4958
}
5059
if (event instanceof EventBlockBrightness) {
@@ -53,19 +62,39 @@ private void run(Event event) {
5362
}
5463
if (event instanceof EventRenderBlockEntity) {
5564
EventRenderBlockEntity eventRenderBlockEntity = (EventRenderBlockEntity) event;
56-
if (!blockList.contains(WorldHelper.INSTANCE.getBlock(eventRenderBlockEntity.blockEntity.getPos())))
65+
if (!blockList.contains(WorldHelper.INSTANCE.getBlock(eventRenderBlockEntity.blockEntity.getPos())) && !this.opacity)
5766
event.cancel();
5867
}
5968
if (event instanceof EventRenderBlock) {
6069
EventRenderBlock eventRenderBlock = (EventRenderBlock) event;
61-
if (!blockList.contains(eventRenderBlock.block))
70+
if (!blockList.contains(eventRenderBlock.block) && !this.opacity)
6271
event.cancel();
6372
}
6473
if (event instanceof EventRenderFluid) {
6574
EventRenderFluid eventRenderFluid = (EventRenderFluid) event;
6675
if (!blockList.contains(eventRenderFluid.getBlock()))
6776
event.cancel();
6877
}
78+
if (event instanceof EventGetRenderLayer) {
79+
EventGetRenderLayer eventGetRenderLayer = (EventGetRenderLayer) event;
80+
if (!blockList.contains(eventGetRenderLayer.getState().getBlock()) && this.opacity) {
81+
eventGetRenderLayer.setRenderLayer(RenderLayer.getTranslucent());
82+
event.cancel();
83+
}
84+
}
85+
if (event instanceof EventIsBlockOpaque) {
86+
//This is intended to stop non-opaque blocks from rendering if they're fully covered by other blocks i.e clumps of leaves on trees, glass etc..
87+
EventIsBlockOpaque eventIsBlockOpaque = (EventIsBlockOpaque) event;
88+
if (this.opacity) {
89+
eventIsBlockOpaque.setOpaque(true);
90+
}
91+
}
92+
if (event instanceof EventBufferQuadAlpha) {
93+
EventBufferQuadAlpha eventBufferQuadAlpha = (EventBufferQuadAlpha) event;
94+
if (this.opacity) {
95+
eventBufferQuadAlpha.setAlpha(alphaValue);
96+
}
97+
}
6998
}
7099

71100
@Override

src/main/java/me/dustin/jex/load/mixin/MixinAbstractBlockstate.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package me.dustin.jex.load.mixin;
22

33
import me.dustin.jex.event.render.EventBlockBrightness;
4+
import me.dustin.jex.event.render.EventIsBlockOpaque;
45
import net.minecraft.block.AbstractBlock;
56
import net.minecraft.block.Block;
67
import org.spongepowered.asm.mixin.Final;
@@ -10,13 +11,17 @@
1011
import org.spongepowered.asm.mixin.injection.Inject;
1112
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
1213

13-
@Mixin(AbstractBlock.AbstractBlockState.class)
14+
@Mixin(value = AbstractBlock.AbstractBlockState.class, remap = false)
1415
public abstract class MixinAbstractBlockstate {
1516

1617
@Shadow
1718
@Final
1819
private int luminance;
1920

21+
@Shadow
22+
@Final
23+
private boolean opaque;
24+
2025
@Shadow
2126
public abstract Block getBlock();
2227

@@ -26,4 +31,9 @@ public void getLuminance(CallbackInfoReturnable<Integer> cir) {
2631
cir.setReturnValue(eventBlockBrightness.getBrightness());
2732
}
2833

34+
@Inject(method = "isOpaque", at = @At("HEAD"), cancellable = true)
35+
public void isOpaque(CallbackInfoReturnable<Boolean> cir) {
36+
EventIsBlockOpaque eventIsBlockOpaque = new EventIsBlockOpaque(opaque).run();
37+
cir.setReturnValue(eventIsBlockOpaque.isOpaque());
38+
}
2939
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package me.dustin.jex.load.mixin;
2+
3+
import me.dustin.jex.event.render.EventBufferQuadAlpha;
4+
import net.fabricmc.fabric.impl.client.indigo.renderer.render.AbstractQuadRenderer;
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.Pseudo;
7+
import org.spongepowered.asm.mixin.injection.At;
8+
import org.spongepowered.asm.mixin.injection.ModifyArg;
9+
10+
@Pseudo
11+
@Mixin(value = AbstractQuadRenderer.class, remap = false)
12+
public class MixinAbstractQuadRenderer {
13+
@ModifyArg(method = "bufferQuad(Lnet/minecraft/client/render/VertexConsumer;Lnet/fabricmc/fabric/impl/client/indigo/renderer/mesh/MutableQuadViewImpl;Lnet/minecraft/util/math/Matrix4f;ILnet/minecraft/util/math/Matrix3f;Lnet/minecraft/util/math/Vec3f;)V",
14+
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/VertexConsumer;color(IIII)Lnet/minecraft/client/render/VertexConsumer;"), index = 3)
15+
private static int colorAlpha(int alpha) {
16+
EventBufferQuadAlpha eventBufferQuadAlpha = new EventBufferQuadAlpha(alpha).run();
17+
return eventBufferQuadAlpha.getAlpha();
18+
}
19+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package me.dustin.jex.load.mixin;
2+
3+
import me.dustin.jex.event.render.EventGetRenderLayer;
4+
import net.minecraft.block.BlockState;
5+
import net.minecraft.client.render.RenderLayer;
6+
import net.minecraft.client.render.RenderLayers;
7+
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.injection.At;
9+
import org.spongepowered.asm.mixin.injection.Inject;
10+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
11+
12+
@Mixin(RenderLayers.class)
13+
public class MixinRenderLayers {
14+
@Inject(method = "getBlockLayer", at = @At("HEAD"), cancellable = true)
15+
private static void getBlockLayer(BlockState state, CallbackInfoReturnable<RenderLayer> cir) {
16+
EventGetRenderLayer eventGetRenderLayer = new EventGetRenderLayer(state).run();
17+
if (eventGetRenderLayer.isCancelled()) {
18+
cir.setReturnValue(eventGetRenderLayer.getRenderLayer());
19+
cir.cancel();
20+
}
21+
}
22+
}

src/main/resources/jex.mixins.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"client": [
99
"MixinAbstractBlockstate",
1010
"MixinAbstractClientPlayerEntity",
11+
"MixinAbstractQuadRenderer",
1112
"MixinBackgroundRenderer",
1213
"MixinBlock",
1314
"MixinBlockEntityRenderDispatcher",
@@ -45,6 +46,7 @@
4546
"MixinPlayerEntity",
4647
"MixinPlayerEntityRenderer",
4748
"MixinProjectileEntity",
49+
"MixinRenderLayers",
4850
"MixinRenderTickCounter",
4951
"MixinScreen",
5052
"MixinSignEditScreen",

0 commit comments

Comments
 (0)