Skip to content

Commit 3d5ec8a

Browse files
author
PingIsFun
authored
Merge pull request #14 from PingIsFun/middle-click
Middle click
2 parents 8d22cfe + c966143 commit 3d5ec8a

8 files changed

Lines changed: 99 additions & 8 deletions

File tree

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ modrinth {
8585
required.project "cloth-config"
8686
}
8787
syncBodyFrom = rootProject.file("README.md").text
88-
changelog = "Small fix"
88+
changelog = "Change player status with middle clicking"
8989
// debugMode = true
9090

9191
}

gradle.properties

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ org.gradle.jvmargs=-Xmx1G
44
# Fabric Properties
55
# check these on https://fabricmc.net/develop
66
minecraft_version=1.19.2
7-
yarn_mappings=1.19.2+build.22
8-
loader_version=0.14.9
7+
yarn_mappings=1.19.2+build.28
8+
loader_version=0.14.10
99

1010
# Mod Properties
11-
mod_version = 0.1.3
11+
mod_version = 0.2.0
1212
maven_group = io.github.pingisfun.hitboxplus
1313
archives_base_name = hitboxplus
1414
release_type = beta
1515

1616
# Dependencies
1717
cloth_config_version=8.2.88
18-
mod_menu_version=4.0.6
18+
mod_menu_version=4.1.0

src/main/java/io/github/pingisfun/hitboxplus/HitboxPlus.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,18 @@ public class HitboxPlus implements ModInitializer {
1414
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
1515

1616
// For dev debug comment when committing
17-
// public static void INFO(Object obj) {
18-
// LOGGER.info(String.valueOf(obj));
17+
// public static void INFO(Object... obj) {
18+
// LOGGER.info("<-----------------");
19+
// for (Object i : obj) {
20+
// LOGGER.info(String.valueOf(i));
21+
// }
22+
//
23+
// LOGGER.info("----------------->");
24+
// }
25+
// public static void SINFO(Object... obj) {
26+
// for (Object i : obj) {
27+
// LOGGER.info(String.valueOf(i));
28+
// }
1929
// }
2030

2131
@Override

src/main/java/io/github/pingisfun/hitboxplus/ModConfig.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.github.pingisfun.hitboxplus;
22

3+
import io.github.pingisfun.hitboxplus.util.ConfEnums;
34
import me.shedaniel.autoconfig.ConfigData;
45
import me.shedaniel.autoconfig.annotation.Config;
56
import me.shedaniel.autoconfig.annotation.ConfigEntry;
@@ -22,6 +23,10 @@ public class ModConfig implements ConfigData {
2223
@ConfigEntry.BoundedDiscrete(max = 10, min = 0)
2324
public int alpha = 10;
2425

26+
@ConfigEntry.Category(value = "general")
27+
@ConfigEntry.Gui.Tooltip
28+
@ConfigEntry.Gui.PrefixText
29+
public ConfEnums.PlayerListTypes middleClick = ConfEnums.PlayerListTypes.CYCLE;
2530

2631
@ConfigEntry.Gui.PrefixText
2732
@ConfigEntry.Category(value = "players")
@@ -157,4 +162,5 @@ public PlayerListConfig(int color) {
157162
@ConfigEntry.BoundedDiscrete(max = 10, min = 0)
158163
public int alpha = 10;
159164
}
165+
160166
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package io.github.pingisfun.hitboxplus.mixin;
2+
3+
import io.github.pingisfun.hitboxplus.ModConfig;
4+
import io.github.pingisfun.hitboxplus.util.ConfEnums;
5+
import me.shedaniel.autoconfig.AutoConfig;
6+
import net.minecraft.client.MinecraftClient;
7+
import net.minecraft.client.network.OtherClientPlayerEntity;
8+
import net.minecraft.util.hit.EntityHitResult;
9+
import net.minecraft.util.hit.HitResult;
10+
import org.spongepowered.asm.mixin.Mixin;
11+
import org.spongepowered.asm.mixin.injection.At;
12+
import org.spongepowered.asm.mixin.injection.Inject;
13+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
14+
15+
@Mixin(MinecraftClient.class)
16+
public abstract class MinecraftClientMixin {
17+
@Inject(at = @At("HEAD"), method = "doItemPick")
18+
private void toggleHostility(CallbackInfo ci) {
19+
MinecraftClient client = MinecraftClient.getInstance();
20+
if (!client.getEntityRenderDispatcher().shouldRenderHitboxes()) {
21+
return;
22+
}
23+
ModConfig config = AutoConfig.getConfigHolder(ModConfig.class).getConfig();
24+
if (!config.isPlayerConfigEnabled) {
25+
return;
26+
}
27+
HitResult hit = client.crosshairTarget;
28+
if (hit == null || hit.getType() != HitResult.Type.ENTITY) {
29+
return;
30+
}
31+
EntityHitResult entityHit = (EntityHitResult) hit;
32+
33+
if (entityHit.getEntity() instanceof OtherClientPlayerEntity) {
34+
if (config.middleClick == ConfEnums.PlayerListTypes.DISABLED) {
35+
return;
36+
}
37+
String name = entityHit.getEntity().getEntityName();
38+
boolean wasEnemy = config.enemy.list.remove(name);
39+
boolean wasFriend = config.friend.list.remove(name);
40+
// none -> friend -> enemy ->> none -> friend -> enemy ->>
41+
if (config.middleClick == ConfEnums.PlayerListTypes.CYCLE) {
42+
if (wasFriend && wasEnemy) {
43+
assert true; // Do nothing
44+
} else if (!wasFriend && !wasEnemy) {
45+
config.friend.list.add(name);
46+
} else if (wasFriend) {
47+
config.enemy.list.add(name);
48+
}
49+
} else if (config.middleClick == ConfEnums.PlayerListTypes.FRIEND && !wasFriend) {
50+
config.friend.list.add(name);
51+
} else if (config.middleClick == ConfEnums.PlayerListTypes.ENEMY && !wasEnemy) {
52+
config.enemy.list.add(name);
53+
}
54+
55+
AutoConfig.getConfigHolder(ModConfig.class).setConfig(config);
56+
AutoConfig.getConfigHolder(ModConfig.class).save();
57+
}
58+
59+
}
60+
61+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package io.github.pingisfun.hitboxplus.util;
2+
3+
public class ConfEnums {
4+
public enum PlayerListTypes {
5+
DISABLED,
6+
ENEMY,
7+
FRIEND,
8+
CYCLE,
9+
}
10+
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
"text.autoconfig.hitboxplus.option.color": "Color",
1111
"text.autoconfig.hitboxplus.option.alpha.@Tooltip": "0 = invisible, 10 = solid",
1212
"text.autoconfig.hitboxplus.option.alpha": "Transparency",
13+
"text.autoconfig.hitboxplus.option.middleClick.@PrefixText": "§f§lAdvanced",
14+
"text.autoconfig.hitboxplus.option.middleClick.@Tooltip": "Only works when hitboxes are enabled and player config is enabled",
15+
"text.autoconfig.hitboxplus.option.middleClick": "Middle Click Functionality",
1316

1417

1518
"text.autoconfig.hitboxplus.option.isPlayerConfigEnabled.@PrefixText": "§f§lPlayer Config",

src/main/resources/hitboxplus.mixins.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
"mixins": [
77
],
88
"client": [
9-
"RenderHitboxMixin"
9+
"RenderHitboxMixin",
10+
"MinecraftClientMixin"
1011
],
1112
"injectors": {
1213
"defaultRequire": 1

0 commit comments

Comments
 (0)