blob: 4e895f9c776d033fc098d464264e6c0c0e7670f8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
package com.thatgravyboat.skyblockhud.playerstats;
import com.thatgravyboat.skyblockhud.SkyblockHud;
import com.thatgravyboat.skyblockhud.Utils;
import com.thatgravyboat.skyblockhud.overlay.RPGHud;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.IChatComponent;
import net.minecraftforge.client.event.ClientChatReceivedEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
public class ActionBarParsing {
private static String lastActionBar = "";
private static String lastLowActionBar = "";
private static IChatComponent lastLowEditedActionBar = null;
private static final Pattern HealthRegex = Pattern.compile("([0-9]+)/([0-9]+)\u2764");
private static final Pattern HealingRegex = Pattern.compile("\\+([0-9]+)[\u2586\u2585\u2584\u2583\u2582\u2581]");
private static final Pattern DefenseRegex = Pattern.compile("([0-9]+)\u2748 Defense");
private static final Pattern ManaRegex = Pattern.compile("([0-9]+)/([0-9]+)\u270E Mana");
private static final Pattern ManaOverflowRegex = Pattern.compile("([0-9]+)/([0-9]+)\u270E ([0-9]+)\u02AC");
private static final Pattern ManaDecreaseRegex = Pattern.compile("-([0-9]+) Mana \\(");
private static final Pattern XpGainRegex = Pattern.compile("\\+(\\d*\\.?\\d*) (Farming|Mining|Combat|Foraging|Fishing|Enchanting|Alchemy|Carpentry|Runecrafting) \\((\\d*\\.?\\d*)%\\)");
private static final Pattern HealthReplaceRegex = Pattern.compile("\u00A7c([0-9]+)/([0-9]+)\u2764");
private static final Pattern HealingReplaceRegex = Pattern.compile("\\+\u00A7c([0-9]+)[\u2586\u2585\u2584\u2583\u2582\u2581]");
private static final Pattern HealthAbsorptionReplaceRegex = Pattern.compile("\u00A76([0-9]+)/([0-9]+)\u2764");
private static final Pattern DefenseReplaceRegex = Pattern.compile("\u00A7a([0-9]+)\u00A7a\u2748 Defense");
private static final Pattern ManaReplaceRegex = Pattern.compile("\u00A7b([0-9]+)/([0-9]+)\u270E Mana");
private static final Pattern ManaOverflowReplaceRegex = Pattern.compile("\u00A7b([0-9]+)/([0-9]+)\u270E \u00A73([0-9]+)\u02AC");
private static int ticksSinceLastPrediction = 0;
private static boolean predict = false;
@SubscribeEvent
public void tick(TickEvent.ClientTickEvent event) {
if (predict) {
ticksSinceLastPrediction++;
if (ticksSinceLastPrediction == 20 && SkyblockHud.config.rpg.showRpgHud) {
ticksSinceLastPrediction = 0;
RPGHud.manaPredictionUpdate(true, 0);
}
}
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
public void onStatusBarHigh(ClientChatReceivedEvent event) {
if (event.type == 2 && SkyblockHud.hasSkyblockScoreboard() && SkyblockHud.config.rpg.showRpgHud) {
parseActionBar(event.message.getUnformattedText());
}
}
@SubscribeEvent(priority = EventPriority.LOW)
public void onStatusBarLow(ClientChatReceivedEvent event) {
if (event.type == 2 && SkyblockHud.hasSkyblockScoreboard() && SkyblockHud.config.rpg.showRpgHud) {
String message = event.message.getUnformattedText();
if (lastLowEditedActionBar == null || !lastLowActionBar.equals(message)) {
lastLowActionBar = message;
message = HealthReplaceRegex.matcher(message).replaceAll("");
message = HealthAbsorptionReplaceRegex.matcher(message).replaceAll("");
message = DefenseReplaceRegex.matcher(message).replaceAll("");
message = ManaReplaceRegex.matcher(message).replaceAll("");
message = ManaOverflowReplaceRegex.matcher(message).replaceAll("");
lastLowEditedActionBar = new ChatComponentText(message.trim());
}
event.message = lastLowEditedActionBar;
}
}
public static void parseActionBar(String input) {
if (!lastActionBar.equals(input)) {
lastActionBar = input;
String bar = Utils.removeColor(input);
Matcher HealthMatcher = HealthRegex.matcher(bar);
Matcher DefenseMatcher = DefenseRegex.matcher(bar);
Matcher ManaMatcher = ManaRegex.matcher(bar);
Matcher ManaUseMatcher = ManaDecreaseRegex.matcher(bar);
Matcher ManaOverflowMatcher = ManaOverflowRegex.matcher(bar);
Matcher XpGainMatcher = XpGainRegex.matcher(bar);
boolean healthFound = HealthMatcher.find();
boolean defenseFound = DefenseMatcher.find();
boolean manaFound = ManaMatcher.find();
boolean manaUseFound = ManaUseMatcher.find();
boolean manaOverflowFound = ManaOverflowMatcher.find();
boolean xpFound = XpGainMatcher.find();
if (healthFound) {
try {
RPGHud.updateHealth(Integer.parseInt(HealthMatcher.group(1)), Integer.parseInt(HealthMatcher.group(2)));
} catch (Exception ignored) {}
}
if (defenseFound) {
try {
RPGHud.updateDefense(Integer.parseInt(DefenseMatcher.group(1)));
} catch (Exception ignored) {}
} else if (!xpFound && !manaUseFound) {
RPGHud.updateDefense(0);
}
if (manaFound) {
try {
RPGHud.updateMana(Integer.parseInt(ManaMatcher.group(1)), Integer.parseInt(ManaMatcher.group(2)));
} catch (Exception ignored) {}
}
if (!manaFound && manaOverflowFound) {
try {
RPGHud.updateMana(Integer.parseInt(ManaOverflowMatcher.group(1)), Integer.parseInt(ManaOverflowMatcher.group(2)));
RPGHud.updateOverflow(Integer.parseInt(ManaOverflowMatcher.group(3)));
} catch (Exception ignored) {}
}
if (!manaFound) {
if (manaUseFound) {
try {
RPGHud.manaPredictionUpdate(false, Integer.parseInt(ManaUseMatcher.group(1)));
} catch (Exception ignored) {}
}
RPGHud.manaPredictionUpdate(true, 0);
}
predict = !manaFound;
}
}
}
|