Untitled
unknown
plain_text
2 years ago
17 kB
30
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