123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- package me.hammerle;
- import java.io.File;
- import java.io.IOException;
- import java.nio.file.Files;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.HashMap;
- import java.util.List;
- import java.util.stream.Collectors;
- import net.minecraft.client.Minecraft;
- import net.minecraft.client.gui.AbstractGui;
- import net.minecraft.client.gui.FontRenderer;
- import net.minecraft.client.util.ITooltipFlag.TooltipFlags;
- import net.minecraft.item.ItemStack;
- import net.minecraft.util.text.ChatType;
- import net.minecraft.util.text.ITextComponent;
- import net.minecraft.util.text.StringTextComponent;
- import net.minecraftforge.client.event.GuiContainerEvent;
- import net.minecraftforge.client.event.ClientChatEvent;
- import net.minecraftforge.client.event.ClientChatReceivedEvent;
- import net.minecraftforge.client.event.RenderGameOverlayEvent;
- import net.minecraftforge.event.TickEvent;
- import net.minecraftforge.eventbus.api.SubscribeEvent;
- import net.minecraftforge.fml.common.Mod;
- @Mod.EventBusSubscriber
- @Mod("hek")
- public class HeK {
- private final static HashMap<String, Skill> SKILLS = new HashMap<>();
- private static void addSkill(String name) {
- SKILLS.put(name, new Skill(name));
- }
- private static int skillCorner = 0;
- private static boolean toggle = true;
- static {
- addSkill("Attack");
- addSkill("Constitution");
- addSkill("Mining");
- addSkill("Smelting");
- addSkill("Fishing");
- addSkill("Hunting");
- addSkill("Taming");
- addSkill("Leatherworking");
- addSkill("Tailoring");
- addSkill("Strength");
- addSkill("Woodcutting");
- addSkill("Firemaking");
- addSkill("Weaponsmithing");
- addSkill("Farming");
- addSkill("Cooking");
- addSkill("Merchanting");
- addSkill("Crafting");
- addSkill("Tinkering");
- addSkill("Ranged");
- addSkill("Fletching");
- addSkill("Carpentry");
- addSkill("Armoursmithing");
- addSkill("Herblore");
- addSkill("Agility");
- addSkill("Thieving");
- addSkill("Forgery");
- addSkill("Alchemy");
- addSkill("Defence");
- load();
- }
- private static String filter = "Hegemony";
- private static void sendMessage(String msg) {
- Minecraft.getInstance().ingameGUI.addChatMessage(ChatType.CHAT, new StringTextComponent(msg));
- }
- private static String removeFormatting(ITextComponent text) {
- return text.getFormattedText().replaceAll("§.", "");
- }
- private static double parse(String number) {
- try {
- return Double.parseDouble(number.replace(",", ""));
- } catch(NumberFormatException ex) {
- return 0.0;
- }
- }
- private static void save() {
- File config = new File("./config");
- if(!config.exists()) {
- config.mkdir();
- }
- ArrayList<String> data = new ArrayList<>();
- data.add(String.valueOf(skillCorner));
- try {
- Files.write(new File("./config/hek").toPath(), data);
- } catch(IOException ex) {
- }
- }
- private static void load() {
- try {
- File config = new File("./config/hek");
- if(!config.exists()) {
- return;
- }
- List<String> list = Files.readAllLines(config.toPath());
- if(list.isEmpty()) {
- return;
- }
- try {
- skillCorner = Integer.parseInt(list.get(0));
- } catch(NumberFormatException ex) {
- }
- } catch(Exception ex) {
- }
- }
- @SubscribeEvent
- public static void onClientChat(GuiContainerEvent e) {
- if(!e.getGuiContainer().getTitle().getFormattedText().contains("Skills")) {
- return;
- }
- for(ItemStack stack : e.getGuiContainer().getContainer().getInventory()) {
- if(stack.isEmpty()) {
- continue;
- }
- String name = removeFormatting(stack.getDisplayName());
- Skill skill = SKILLS.get(name);
- if(skill == null) {
- continue;
- }
- List<ITextComponent> lore = stack.getTooltip(Minecraft.getInstance().player, TooltipFlags.NORMAL);
- for(ITextComponent text : lore) {
- String line = removeFormatting(text);
- if(line.startsWith("Experience") && line.length() >= 13) {
- skill.setExperience(parse(line.substring(12)));
- }
- }
- }
- }
- @SubscribeEvent
- public static void onClientChat(ClientChatEvent e) {
- try {
- if(!e.getMessage().startsWith("/")) {
- return;
- }
- String[] parts = e.getMessage().split(" ");
- switch(parts[0]) {
- case "/hefix":
- e.setCanceled(true);
- if(parts.length < 2) {
- filter = null;
- sendMessage("Filter cleared");
- return;
- }
- filter = String.join(" ", Arrays.copyOfRange(parts, 1, parts.length));
- sendMessage("Filter set to '" + filter + "'");
- break;
- case "/toggle":
- e.setCanceled(true);
- skillCorner = (skillCorner + 1) % 4;
- save();
- break;
- }
- } catch(Exception ex) {
- }
- }
- @SubscribeEvent
- public static void onChatReceive(ClientChatReceivedEvent e) {
- String msg = removeFormatting(e.getMessage());
- if(filter != null && msg.contains(filter)) {
- e.setCanceled(true);
- }
- if(e.getType() == ChatType.GAME_INFO) {
- String[] parts = msg.split(" ");
- ArrayList<Skill> skills = new ArrayList<>();
- ArrayList<Double> xp = new ArrayList<>();
- for(String part : parts) {
- part = part.replace(",", "");
- Skill skill = SKILLS.get(part);
- if(skill != null) {
- skills.add(skill);
- continue;
- }
- try {
- xp.add(Double.parseDouble(part));
- } catch(NumberFormatException ex) {
- }
- }
- if(skills.size() == xp.size()) {
- for(int i = 0; i < skills.size(); i++) {
- skills.get(i).addExperience(xp.get(i));
- }
- } else if(xp.size() == 1) {
- for(int i = 0; i < skills.size(); i++) {
- skills.get(i).addExperience(xp.get(0));
- }
- }
- }
- }
- @SubscribeEvent
- public static void onClientTick(TickEvent.ClientTickEvent e) {
- if(e.phase == TickEvent.Phase.END) {
- SKILLS.values().forEach(skill -> skill.tick());
- }
- }
- @SubscribeEvent
- public static void onRenderGui(RenderGameOverlayEvent.Post e) {
- if(e.getType() != RenderGameOverlayEvent.ElementType.EXPERIENCE) {
- return;
- }
- toggle = false;
- List<String> texts = SKILLS.values().stream()
- .filter(skill -> skill.shouldRender())
- .sorted()
- .map(skill -> {
- String c = "§r";
- if(toggle) {
- c = "§7";
- }
- toggle = !toggle;
- if(skill.shouldRenderLastPercent()) {
- return String.format("§6Lv. %s%d §6%s: %s%.2f%% +%.2f%%",
- c, skill.getLevel(), skill.getName(), c, skill.getPercent(), skill.getLastPercent());
- }
- return String.format("§6Lv. %s%d §6%s: %s%.2f%%",
- c, skill.getLevel(), skill.getName(), c, skill.getPercent());
- })
- .collect(Collectors.toList());
- Minecraft mc = Minecraft.getInstance();
- FontRenderer fr = mc.fontRenderer;
- int width = 0;
- int height = 4;
- for(String text : texts) {
- height += fr.FONT_HEIGHT;
- width = Math.max(fr.getStringWidth(text), width);
- }
- width += 4;
- // 0 - top left
- int y = 0;
- int x = 0;
- switch(skillCorner) {
- case 1: // 1 - top right
- x = mc.getMainWindow().getScaledWidth() - width;
- y = 0;
- break;
- case 2: // 2 - bottom left
- x = 0;
- y = mc.getMainWindow().getScaledHeight() - height;
- break;
- case 3: // 3 - bottom right
- x = mc.getMainWindow().getScaledWidth() - width;
- y = mc.getMainWindow().getScaledHeight() - height;
- break;
- }
- AbstractGui.fill(x, y, x + width, y + height, 1342177280);
- x += 2;
- y += 2;
- for(String text : texts) {
- fr.drawString(text, x, y, 0xFFFFFF);
- y += fr.FONT_HEIGHT;
- }
- }
- }
|