Untitled
unknown
plain_text
a year ago
17 kB
17
Indexable
package me.spin.pixelchat.handlers; import com.pixelmonmod.pixelmon.api.pokemon.Element; import com.pixelmonmod.pixelmon.api.pokemon.Nature; import com.pixelmonmod.pixelmon.api.pokemon.Pokemon; import com.pixelmonmod.pixelmon.api.pokemon.stats.BattleStatsType; import com.pixelmonmod.pixelmon.api.pokemon.stats.EVStore; import me.spin.pixelchat.extras.PixelmonUtils; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.Style; import net.minecraft.network.chat.HoverEvent; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.Items; import net.minecraftforge.event.ServerChatEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import java.util.regex.Matcher; import java.util.regex.Pattern; @EventBusSubscriber public class PixelmonChatEventHandler { @SubscribeEvent public static void onServerChat(ServerChatEvent event) { ServerPlayer player = event.getPlayer(); String message = event.getMessage().getString(); Pattern pattern = Pattern.compile("(?i)\\{(pixelmon|moves|party)([1-6])?\\}"); Matcher matcher = pattern.matcher(message); MutableComponent newMessage = Component.empty(); int lastEnd = 0; while (matcher.find()) { String command = matcher.group(1).toLowerCase(); int slot = matcher.group(2) != null ? Integer.parseInt(matcher.group(2)) : -1; String placeholder = message.substring(matcher.start(), matcher.end()); Component displayText = processCommand(player, command, slot, placeholder); newMessage.append(Component.literal(message.substring(lastEnd, matcher.start()))); newMessage.append(displayText); lastEnd = matcher.end(); } newMessage.append(Component.literal(message.substring(lastEnd))); player.displayClientMessage(newMessage, false); event.setCanceled(true); } private static Component processCommand(ServerPlayer player, String command, int slot, String placeholder) { if ("party".equals(command) && slot == -1) { String partyInfo = formatPlayerParty(player); return createHoverableComponent("§8§l[§a§lParty§8§l]", partyInfo); } else if ("pixelmon".equals(command) && slot != -1) { Pokemon pokemon = PixelmonUtils.getPokemon(player, slot); if (pokemon != null) { String info = formatPokemonInfo(pokemon); return createHoverableComponent("§8§l[§a§l" + pokemon.getSpecies().getName() + "§8§l]", info); } else { return Component.literal("No Pokémon in slot " + slot); } } else if ("moves".equals(command) && slot != -1) { Pokemon movesPokemon = PixelmonUtils.getPokemon(player, slot); if (movesPokemon != null) { String movesInfo = formatPokemonMoves(movesPokemon); return createHoverableComponent("§8§l[§a§lMoves§8§l]", movesInfo); } else { return Component.literal("No Pokémon in slot " + slot); } } else { return Component.literal(placeholder); } } private static Component createHoverableComponent(String text, String hoverText) { Component hoverComponent = Component.literal(hoverText.replaceAll("§", "\u00A7")); return Component.literal(text.replaceAll("§", "\u00A7")) .setStyle(Style.EMPTY.withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, hoverComponent))); } private static String formatPokemonInfo(Pokemon pokemon) { StringBuilder info = new StringBuilder(); String name = pokemon.getNickname().isEmpty() ? pokemon.getSpecies().getName() : pokemon.getNickname(); info.append("§a").append(name).append(pokemon.isShiny() ? " §6★" : "").append("\n\n"); info.append("§aLevel: §d").append(pokemon.getPokemonLevel()).append("\n"); info.append("§aTypes: ").append(formatPokemonTypes(pokemon)).append("\n"); info.append("§aNature: §d").append(formatNature(pokemon.getNature())).append("\n"); info.append("§aGrowth: §d").append(pokemon.getGrowth().getLocalizedName()).append("\n"); info.append("§aAbility: §d").append(pokemon.getAbility().getName()).append("\n"); info.append("§aOT: §d").append(pokemon.getOriginalTrainer()).append("\n"); if (!pokemon.getHeldItem().isEmpty()) { info.append("§aItem: §d").append(pokemon.getHeldItem().getDisplayName().getString()).append("\n"); } String pokeballColor = getPokeballColor(pokemon.getBall().getLocalizedName()); System.out.println("Pokeball Color Code: " + pokeballColor); // Debug log info.append("§aPokeball: ").append(pokeballColor).append(pokemon.getBall().getLocalizedName()).append("\n\n"); info.append("§bIVs: §d").append(pokemon.getIVs().getTotal()).append("/").append(186).append(" §a(").append(pokemon.getIVs().getPercentageString(2)).append("%)\n"); info.append("§6HP: ").append(pokemon.getIVs().getStat(BattleStatsType.HP)).append("§8/§cAtk: ").append(pokemon.getIVs().getStat(BattleStatsType.ATTACK)).append("§8/§eDef: ").append(pokemon.getIVs().getStat(BattleStatsType.DEFENSE)).append("\n"); info.append("§9SpA: ").append(pokemon.getIVs().getStat(BattleStatsType.SPECIAL_ATTACK)).append("§8/§aSpD: ").append(pokemon.getIVs().getStat(BattleStatsType.SPECIAL_DEFENSE)).append("§8/§dSpe: ").append(pokemon.getIVs().getStat(BattleStatsType.SPEED)).append("\n"); info.append("§bEVs: §d").append(pokemon.getEVs().getTotal()).append("/").append(510).append("\n"); info.append("§6HP: ").append(pokemon.getEVs().getStat(BattleStatsType.HP)).append("§8/§cAtk: ").append(pokemon.getEVs().getStat(BattleStatsType.ATTACK)).append("§8/§eDef: ").append(pokemon.getEVs().getStat(BattleStatsType.DEFENSE)).append("\n"); info.append("§9SpA: ").append(pokemon.getEVs().getStat(BattleStatsType.SPECIAL_ATTACK)).append("§8/§aSpD: ").append(pokemon.getEVs().getStat(BattleStatsType.SPECIAL_DEFENSE)).append("§8/§dSpe: ").append(pokemon.getEVs().getStat(BattleStatsType.SPEED)); return info.toString().replaceAll("§", "\u00A7"); } private static String getPokeballColor(String pokeballName) { String lowercaseName = pokeballName.toLowerCase().replace(" ", "_"); System.out.println("Pokeball Name: " + lowercaseName); // Debug log switch (lowercaseName) { case "poke_ball": return "§c"; // Red case "great_ball": return "§9"; // Blue case "ultra_ball": return "§e"; // Yellow case "master_ball": return "§5"; // Purple case "safari_ball": return "§2"; // Green case "premier_ball": return "§f"; // White case "net_ball": return "§3"; // Teal case "dive_ball": return "§1"; // Dark Blue case "luxury_ball": return "§6"; // Gold case "heal_ball": return "§d"; // Pink case "quick_ball": return "§b"; // Light Blue case "timer_ball": return "§8"; // Grey case "dusk_ball": return "§0"; // Black case "cherish_ball": return "§4"; // Dark Red case "repeat_ball": return "§c"; // Red case "nest_ball": return "§a"; // Light Green case "level_ball": return "§6"; // Brown case "lure_ball": return "§9"; // Blue case "moon_ball": return "§5"; // Purple case "friend_ball": return "§2"; // Green case "love_ball": return "§d"; // Pink case "heavy_ball": return "§8"; // Grey case "fast_ball": return "§c"; // Red case "sport_ball": return "§6"; // Brown case "beast_ball": return "§a"; // Green default: return "§f"; } } private static String formatNature(Nature nature) { BattleStatsType increasedStat = nature.getIncreasedStat(); BattleStatsType decreasedStat = nature.getDecreasedStat(); String increasedStatName = getStatName(increasedStat); String decreasedStatName = getStatName(decreasedStat); return "§d" + nature.getLocalizedName() + " §8(§a+" + increasedStatName + "§8/§c-" + decreasedStatName + "§8)"; } private static String getStatName(BattleStatsType statType) { switch (statType) { case ATTACK: return "Attack"; case DEFENSE: return "Defense"; case SPECIAL_ATTACK: return "Special Attack"; case SPECIAL_DEFENSE: return "Special Defense"; case SPEED: return "Speed"; case NONE: return "None"; default: return "Unknown"; } } private static String formatPokemonMoves(Pokemon pokemon) { StringBuilder movesInfo = new StringBuilder(); String pokemonName = pokemon.getNickname().isEmpty() ? pokemon.getSpecies().getName() : pokemon.getNickname(); movesInfo.append("§a").append(pokemonName).append(pokemon.isShiny() ? " §6★" : "").append("\n\n"); int moveCount = 0; for (var move : pokemon.getMoveset()) { if (move != null) { if (moveCount > 0 && moveCount % 2 == 0) { movesInfo.append("\n"); } else if (moveCount > 0) { movesInfo.append(" §8| "); } String moveTypeColor = getMoveTypeColor(move.getMove().getAttackType()); movesInfo.append(moveTypeColor).append(move.getMove().getLocalizedName()); moveCount++; } } return movesInfo.toString().trim(); } private static String getMoveTypeColor(Element moveType) { switch (moveType) { case FIRE: return "§c"; // Red for Fire case WATER: return "§9"; // Blue for Water case GRASS: return "§2"; // Green for Grass case ELECTRIC: return "§e"; // Yellow for Electric case PSYCHIC: return "§d"; // Pink for Psychic case ICE: return "§b"; // Light Blue for Ice case DRAGON: return "§5"; // Purple for Dragon case DARK: return "§8"; // Dark Grey for Dark case FAIRY: return "§f"; // White for Fairy case NORMAL: return "§7"; // Silver/Grey for Normal case FIGHTING: return "§6"; // Orange/Brown for Fighting case POISON: return "§d"; // Pink for Poison case GROUND: return "§8"; // Dark Grey for Ground case FLYING: return "§f"; // White for Flying case BUG: return "§a"; // Light Green for Bug case ROCK: return "§8"; // Grey for Rock case GHOST: return "§5"; // Dark Purple for Ghost case STEEL: return "§7"; // Light Grey for Steel default: return "§7"; } } private static String formatPokemonTypes(Pokemon pokemon) { StringBuilder typesInfo = new StringBuilder(); var types = pokemon.getForm().getTypes(); for (int i = 0; i < types.size(); i++) { if (i > 0) { typesInfo.append(" §8| "); } Element type = types.get(i); String typeColor = getMoveTypeColor(type); typesInfo.append(typeColor).append(type.getLocalizedName()); } return typesInfo.toString().trim(); } private static String formatPlayerParty(ServerPlayer player) { StringBuilder partyInfo = new StringBuilder("Player's Party:\n"); Pokemon[] party = PixelmonUtils.getPlayerParty(player); if (party.length == 0) { return "No Pokémon in Party."; } for (Pokemon pokemon : party) { if (pokemon != null) { String pokemonName = pokemon.getNickname().isEmpty() ? pokemon.getSpecies().getName() : pokemon.getNickname(); partyInfo.append("§a").append(pokemonName).append(" - Lvl: ").append(pokemon.getPokemonLevel()).append("\n"); } } return partyInfo.toString(); } } package me.spin.pixelchat.extras; import com.pixelmonmod.pixelmon.api.pokemon.Pokemon; import com.pixelmonmod.pixelmon.api.storage.PlayerPartyStorage; import com.pixelmonmod.pixelmon.api.command.PixelmonCommandUtils; import net.minecraft.server.level.ServerPlayer; public class PixelmonUtils { public static Pokemon getPokemon(ServerPlayer player, int slot) { PlayerPartyStorage partyStorage = PixelmonCommandUtils.getPlayerStorage(player); if (partyStorage != null) { return partyStorage.get(slot - 1); } return null; } public static Pokemon[] getPlayerParty(ServerPlayer player) { PlayerPartyStorage partyStorage = PixelmonCommandUtils.getPlayerStorage(player); if (partyStorage != null) { return partyStorage.getAll(); } return new Pokemon[0]; } } package me.spin.pixelchat.listener; import com.pixelmonmod.pixelmon.api.pokemon.Pokemon; import me.spin.pixelchat.extras.PixelmonUtils; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; import net.minecraftforge.event.ServerChatEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @Mod.EventBusSubscriber public class ChatListener { @SubscribeEvent public static void onChat(ServerChatEvent event) { Component originalMessage = event.getMessage(); String messageStr = originalMessage.getString(); ServerPlayer player = event.getPlayer(); if (messageStr.matches("\\{pixelmon[1-6]\\}")) { int slot = Integer.parseInt(messageStr.replaceAll("\\D+", "")); String pokemonInfo = processPokemonInfo(player, slot); event.setMessage(Component.literal(pokemonInfo)); } } private static String processPokemonInfo(ServerPlayer player, int slot) { try { Pokemon pokemon = PixelmonUtils.getPokemon(player, slot); if (pokemon != null) { return formatPokemonInfo(pokemon); } else { return "No Pokemon in slot " + slot; } } catch (Exception e) { return "Error processing Pokemon info"; } } private static String formatPokemonInfo(Pokemon pokemon) { StringBuilder info = new StringBuilder(); info.append("Name: ").append(pokemon.getSpecies().getName()).append("\n"); info.append("Nature: ").append(pokemon.getNature().getLocalizedName()).append("\n"); info.append("IVs: ").append(pokemon.getIVs().toString()).append("\n"); info.append("EVs: ").append(pokemon.getEVs().toString()).append("\n"); info.append("Pokeball: ").append(pokemon.getBall().getLocalizedName()).append("\n"); info.append("Growth: ").append(pokemon.getGrowth().getLocalizedName()).append("\n"); info.append("Ability: ").append(pokemon.getAbility().getLocalizedName()).append("\n"); info.append("Trainer: ").append(pokemon.getOriginalTrainer()).append("\n"); info.append("Level: ").append(pokemon.getPokemonLevel()).append("\n"); return info.toString(); } }
Editor is loading...
Leave a Comment