Skip to content

Commit a5837c7

Browse files
committed
Narrator readout on experimental
1 parent d4c381b commit a5837c7

File tree

8 files changed

+104
-3
lines changed

8 files changed

+104
-3
lines changed

build.properties

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
#
22
#Tue Dec 22 14:17:37 GMT 2020
33
mod_name=Quark
4-
forge_version=34.1.32
4+
forge_version=35.1.28
55
mapping_version=20200916-1.16.2
66
mapping_channel=snapshot
77
mod_id=quark
8-
jei_version=7.6.0.49
8+
jei_version=7.6.0.62
99
arl_version=1.6-46.85
1010
version=r2.4
1111
dir_output=../Build Output/Quark/
1212
build_number=284
13-
mc_version=1.16.3
13+
mc_version=1.16.4

logs/debug.log

Whitespace-only changes.

logs/latest.log

Whitespace-only changes.

native/SAPIWrapper_x64.dll

83.5 KB
Binary file not shown.

native/SAPIWrapper_x86.dll

70.5 KB
Binary file not shown.

src/main/java/vazkii/quark/base/client/ModKeybindHandler.java

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public class ModKeybindHandler {
1313
public static final String MISC_GROUP = "quark.gui.keygroup.misc";
1414
public static final String INV_GROUP = "quark.gui.keygroup.inv";
1515
public static final String EMOTE_GROUP = "quark.gui.keygroup.emote";
16+
public static final String ACCESSIBILITY_GROUP = "quark.gui.keygroup.accessibility";
1617

1718
public static KeyBinding init(String s, String key, String group) {
1819
return init(s, key, "key.keyboard.", group, true);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package vazkii.quark.content.experimental.module;
2+
3+
import com.mojang.text2speech.Narrator;
4+
5+
import net.minecraft.block.BlockState;
6+
import net.minecraft.client.Minecraft;
7+
import net.minecraft.client.settings.KeyBinding;
8+
import net.minecraft.entity.player.PlayerEntity;
9+
import net.minecraft.item.Item;
10+
import net.minecraft.item.ItemStack;
11+
import net.minecraft.util.math.BlockPos;
12+
import net.minecraft.util.math.BlockRayTraceResult;
13+
import net.minecraft.util.math.RayTraceResult;
14+
import net.minecraft.util.text.StringTextComponent;
15+
import net.minecraftforge.api.distmarker.Dist;
16+
import net.minecraftforge.api.distmarker.OnlyIn;
17+
import net.minecraftforge.client.event.InputEvent;
18+
import net.minecraftforge.eventbus.api.SubscribeEvent;
19+
import vazkii.quark.base.client.ModKeybindHandler;
20+
import vazkii.quark.base.module.LoadModule;
21+
import vazkii.quark.base.module.ModuleCategory;
22+
import vazkii.quark.base.module.QuarkModule;
23+
24+
@LoadModule(category = ModuleCategory.EXPERIMENTAL, enabledByDefault = false, hasSubscriptions = true, subscribeOn = Dist.CLIENT)
25+
public class NarratorReadoutModule extends QuarkModule {
26+
27+
@OnlyIn(Dist.CLIENT)
28+
private KeyBinding keybind;
29+
30+
@Override
31+
@OnlyIn(Dist.CLIENT)
32+
public void clientSetup() {
33+
if(enabled)
34+
keybind = ModKeybindHandler.init("narrator_readout", "m", ModKeybindHandler.ACCESSIBILITY_GROUP);
35+
}
36+
37+
@SubscribeEvent
38+
@OnlyIn(Dist.CLIENT)
39+
public void onMouseInput(InputEvent.MouseInputEvent event) {
40+
acceptInput();
41+
}
42+
43+
@SubscribeEvent
44+
@OnlyIn(Dist.CLIENT)
45+
public void onKeyInput(InputEvent.KeyInputEvent event) {
46+
acceptInput();
47+
}
48+
49+
private void acceptInput() {
50+
Minecraft mc = Minecraft.getInstance();
51+
boolean down = keybind != null && keybind.isKeyDown();
52+
if(mc.isGameFocused() && down) {
53+
Narrator narrator = Narrator.getNarrator();
54+
String readout = getReadout(mc);
55+
if(readout != null) {
56+
narrator.say(readout, true);
57+
if(mc.player != null)
58+
mc.player.sendStatusMessage(new StringTextComponent(readout), true);
59+
}
60+
}
61+
}
62+
63+
private String getReadout(Minecraft mc) {
64+
PlayerEntity player = mc.player;
65+
if(player == null)
66+
return "Not ingame.";
67+
68+
StringBuilder sb = new StringBuilder();
69+
70+
RayTraceResult ray = mc.objectMouseOver;
71+
if(ray != null && ray instanceof BlockRayTraceResult) {
72+
BlockPos pos = ((BlockRayTraceResult) ray).getPos();
73+
BlockState state = mc.world.getBlockState(pos);
74+
75+
Item item = state.getBlock().asItem();
76+
if(item != null) {
77+
sb.append("Looking at ");
78+
sb.append(item.getDisplayName(new ItemStack(item)).getString().trim());
79+
sb.append(", ");
80+
}
81+
}
82+
83+
ItemStack stack = player.getHeldItemMainhand();
84+
if(!stack.isEmpty()) {
85+
sb.append("Holding ");
86+
sb.append(stack.getDisplayName().getString().trim());
87+
sb.append(", ");
88+
}
89+
90+
sb.append("Health ");
91+
sb.append((int) mc.player.getHealth());
92+
sb.append(", Food ");
93+
sb.append(mc.player.getFoodStats().getFoodLevel());
94+
95+
return sb.toString();
96+
}
97+
98+
}

src/main/resources/assets/quark/lang/en_us.json

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
"quark.gui.keygroup.misc": "Quark Misc",
2020
"quark.gui.keygroup.inv": "Quark Inventory",
2121
"quark.gui.keygroup.emote": "Quark Emotes",
22+
"quark.gui.keygroup.accessibility": "Quark Accessibility",
2223

2324
"quark.gui.config.save": "Save Changes",
2425
"quark.gui.config.social.website": "Quark Site",
@@ -118,6 +119,7 @@
118119
"quark.keybind.patreon_emote.zombie": "Zombie (Patreon)",
119120
"quark.keybind.back": "Back",
120121
"quark.keybind.camera_mode": "Camera Mode",
122+
"quark.keybind.narrator_readout": "Narrator Readout",
121123

122124
"quark.subtitles.meep": "Stoneling runs away",
123125
"quark.subtitles.give_stoneling": "Stoneling takes item",

0 commit comments

Comments
 (0)