Skip to content

Commit ac9974e

Browse files
committed
v0.2.0
added option to disable rendering added options to reset segment selection on different triggers
1 parent 2063889 commit ac9974e

File tree

11 files changed

+104
-6
lines changed

11 files changed

+104
-6
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ org.gradle.jvmargs=-Xmx1G
88
loader_version=0.14.19
99

1010
# Mod Properties
11-
mod_version = 0.0.1-1.19.4
11+
mod_version = 0.2.0-1.19.4
1212
maven_group = io.csum
1313
archives_base_name = segmented
1414

src/main/java/io/csum/segmented/SegmentedMod.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
public class SegmentedMod implements ModInitializer {
99
public static int selectedHotbarSegment = -1;
10+
public static float cancelTimer = 0;
1011

1112
@Override
1213
public void onInitialize() {

src/main/java/io/csum/segmented/client/control/SegmentedKeyHandler.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@ public boolean handleSegmentedHotbarSlotSelection(PlayerInventory inventory, int
1515
if (slot > 2) { return true; }
1616
if (SegmentedMod.selectedHotbarSegment == -1) {
1717
SegmentedMod.selectedHotbarSegment = slot;
18+
SegmentedMod.cancelTimer = config.timerreset * 20;
1819
} else {
1920
inventory.selectedSlot = slot + 3 * SegmentedMod.selectedHotbarSegment;
2021
SegmentedMod.selectedHotbarSegment = -1;
22+
SegmentedMod.cancelTimer = 0;
2123
}
2224
return true;
2325
}

src/main/java/io/csum/segmented/client/gui/SegmentedHotbarRenderer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class SegmentedHotbarRenderer extends DrawableHelper {
3030

3131
public boolean renderSegmentedHotbar(MatrixStack matrices) {
3232

33-
if (isHidden() || !config.enabled) { return false; }
33+
if (isHidden() || !config.enabled || config.norender) { return false; }
3434

3535
PlayerEntity player = (PlayerEntity)client.cameraEntity;
3636
if (player == null) { return false; }

src/main/java/io/csum/segmented/config/SegmentedConfig.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,22 @@ public class SegmentedConfig implements ConfigData {
1212
@Comment("Enables or disables the segmented hotbar")
1313
public boolean enabled = true;
1414

15+
@ConfigEntry.Gui.Tooltip
16+
@Comment("If true, disables the custom hotbar but keeps the selection mechanics")
17+
public boolean norender = false;
18+
19+
@ConfigEntry.Gui.Tooltip
20+
@Comment("Enables or disables the mechanic where scrolling clears the segment selection")
21+
public boolean scrollreset = true;
22+
23+
@ConfigEntry.Gui.Tooltip
24+
@Comment("Enables or disables the mechanic where using an item clears the segment selection")
25+
public boolean usereset = true;
26+
27+
@ConfigEntry.Gui.Tooltip
28+
@Comment("Sets the time in seconds after which the segment selection gets cleared, 0 disables this feature")
29+
public float timerreset = 5;
30+
1531
// this will be used for a mode i want to add later on,
1632
// when it's turned on the textures will be stitched together from the minecraft widgets texture,
1733
// allowing for easier resource pack compatibility. might not be possible to implement this, we'll see.

src/main/java/io/csum/segmented/mixin/client/InGameHudMixin.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package io.csum.segmented.mixin.client;
22

3+
import io.csum.segmented.SegmentedMod;
34
import io.csum.segmented.client.gui.SegmentedHotbarRenderer;
5+
import io.csum.segmented.config.SegmentedConfig;
6+
import me.shedaniel.autoconfig.AutoConfig;
47
import net.fabricmc.api.EnvType;
58
import net.fabricmc.api.Environment;
69
import net.minecraft.client.gui.DrawableHelper;
@@ -15,8 +18,20 @@
1518
@Environment(EnvType.CLIENT)
1619
public abstract class InGameHudMixin extends DrawableHelper {
1720

21+
private final SegmentedConfig config = AutoConfig.getConfigHolder(SegmentedConfig.class).getConfig();
22+
23+
// rewrites the hotbar renderer so it's segmented, and handles cancelling segment selection on a timer
1824
@Inject(method = "renderHotbar", at = @At(value = "HEAD"), cancellable = true, require = 0)
1925
private void renderSegmentedHotbar(float tickDelta, MatrixStack matrices, CallbackInfo ci) {
26+
if (config.timerreset > 0) {
27+
if (SegmentedMod.cancelTimer > 0) {
28+
SegmentedMod.cancelTimer -= tickDelta;
29+
} else {
30+
SegmentedMod.cancelTimer = 0;
31+
SegmentedMod.selectedHotbarSegment = -1;
32+
}
33+
}
34+
2035
SegmentedHotbarRenderer segmentedHotbarRenderer = new SegmentedHotbarRenderer();
2136
if (segmentedHotbarRenderer.renderSegmentedHotbar(matrices)) {
2237
ci.cancel();

src/main/java/io/csum/segmented/mixin/client/MinecraftClientMixin.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ public abstract class MinecraftClientMixin {
2424
@Shadow @Nullable
2525
public Screen currentScreen;
2626

27-
28-
2927
@Redirect(method = "handleInputEvents",
3028
at = @At(value = "INVOKE",
3129
target = "Lnet/minecraft/client/option/KeyBinding;wasPressed()Z",
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package io.csum.segmented.mixin.client;
2+
3+
import io.csum.segmented.SegmentedMod;
4+
import io.csum.segmented.config.SegmentedConfig;
5+
import me.shedaniel.autoconfig.AutoConfig;
6+
import net.fabricmc.api.EnvType;
7+
import net.fabricmc.api.Environment;
8+
import net.minecraft.client.Mouse;
9+
import org.spongepowered.asm.mixin.Mixin;
10+
import org.spongepowered.asm.mixin.injection.At;
11+
import org.spongepowered.asm.mixin.injection.Inject;
12+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
13+
14+
@Mixin(value = Mouse.class, priority = 9999)
15+
@Environment(EnvType.CLIENT)
16+
public abstract class MouseMixin {
17+
18+
// clears segment selection on item use
19+
@Inject(method = "onMouseButton",
20+
at = @At(value = "INVOKE",
21+
target = "Lnet/minecraft/client/option/KeyBinding;onKeyPressed(Lnet/minecraft/client/util/InputUtil$Key;)V"))
22+
private void segmentedOnKeyPressed(long window, int button, int action, int mods, CallbackInfo ci) {
23+
24+
SegmentedConfig config = AutoConfig.getConfigHolder(SegmentedConfig.class).getConfig();
25+
if (config.enabled && config.usereset) { SegmentedMod.selectedHotbarSegment = -1; }
26+
27+
}
28+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package io.csum.segmented.mixin.client;
2+
3+
import io.csum.segmented.SegmentedMod;
4+
import io.csum.segmented.config.SegmentedConfig;
5+
import me.shedaniel.autoconfig.AutoConfig;
6+
import net.fabricmc.api.EnvType;
7+
import net.fabricmc.api.Environment;
8+
import net.minecraft.entity.player.PlayerInventory;
9+
import org.spongepowered.asm.mixin.Mixin;
10+
import org.spongepowered.asm.mixin.injection.At;
11+
import org.spongepowered.asm.mixin.injection.Inject;
12+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
13+
14+
@Mixin(value = PlayerInventory.class, priority = 9999)
15+
@Environment(EnvType.CLIENT)
16+
public abstract class PlayerInventoryMixin {
17+
18+
@Inject(method = "scrollInHotbar",
19+
at = @At(value = "HEAD"))
20+
private void segmentedScrollInHotbar(double scrollAmount, CallbackInfo ci) {
21+
SegmentedConfig config = AutoConfig.getConfigHolder(SegmentedConfig.class).getConfig();
22+
if (config.enabled && config.scrollreset) { SegmentedMod.selectedHotbarSegment = -1; }
23+
}
24+
}
Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
{
22
"text.autoconfig.segmented.title" : "Segmented Options",
33
"text.autoconfig.segmented.option.enabled" : "Enabled",
4-
"text.autoconfig.segmented.option.enabled.@Tooltip" : "Enables or disables the segmented hotbar"
4+
"text.autoconfig.segmented.option.enabled.@Tooltip" : "Enables or disables the segmented hotbar",
5+
6+
"text.autoconfig.segmented.option.norender" : "Use vanilla hotbar rendering",
7+
"text.autoconfig.segmented.option.norender.@Tooltip" : "If true, disables the custom hotbar but keeps the selection mechanics",
8+
9+
"text.autoconfig.segmented.option.scrollreset" : "Scrolling clears segment selection",
10+
"text.autoconfig.segmented.option.scrollreset.@Tooltip": "Enables or disables the mechanic where scrolling clears the segment selection",
11+
12+
"text.autoconfig.segmented.option.usereset" : "Using item clears segment selection",
13+
"text.autoconfig.segmented.option.usereset.@Tooltip" : "Enables or disables the mechanic where using an item clears the segment selection",
14+
15+
"text.autoconfig.segmented.option.timerreset" : "Segment selection clear time",
16+
"text.autoconfig.segmented.option.timerreset.@Tooltip" : "Sets the time in seconds after which the segment selection gets cleared, 0 disables this feature"
517
}

0 commit comments

Comments
 (0)