Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.cobblemon.mod.common.Cobblemon;
import com.cobblemon.mod.common.api.pokemon.PokemonProperties;
import com.cobblemon.mod.common.api.pokemon.PokemonPropertyExtractor;
import com.cobblemon.mod.common.pokemon.Pokemon;
import dev.architectury.event.events.common.CommandRegistrationEvent;
import dev.architectury.event.events.common.LifecycleEvent;
Expand All @@ -11,6 +10,7 @@
import io.github.polymeta.wondertrade.commands.Trade;
import io.github.polymeta.wondertrade.configuration.BaseConfig;
import io.github.polymeta.wondertrade.configuration.Pool;
import io.github.polymeta.wondertrade.util.PokemonCodec;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
Expand Down Expand Up @@ -101,7 +101,7 @@ public static void regeneratePool(int size)
logger.error("Failed to regenerate pool! WonderTrade is now in a potentially broken state. Please review the config and try again.");
return;
}
pool.pokemon.add(pokemon.createPokemonProperties(PokemonPropertyExtractor.ALL).asString(" "));
pool.pokemon.add(PokemonCodec.encode(pokemon));
}
savePool();
regenerating.set(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import io.github.polymeta.wondertrade.WonderTrade;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.Commands;
import net.minecraft.network.chat.Component;

public class RegeneratePool {
private static final Command<CommandSourceStack> Execute = (context) -> Regenerate(context, IntegerArgumentType.getInteger(context, "size"));
Expand All @@ -20,11 +19,11 @@ public class RegeneratePool {

private static int Regenerate(CommandContext<CommandSourceStack> context, int size) {
if(WonderTrade.regenerating.get()) {
context.getSource().sendSystemMessage(Component.literal("The WonderTrade pool is being regenerated!"));
context.getSource().sendSystemMessage(WonderTrade.config.messages.poolRegenerating(context.getSource().registryAccess()));
return Command.SINGLE_SUCCESS;
}
WonderTrade.regeneratePool(size);
context.getSource().sendSystemMessage(Component.literal("WonderTrade pool regenerated!"));
context.getSource().sendSystemMessage(WonderTrade.config.messages.poolRegenerated(context.getSource().registryAccess()));
return size;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,18 @@
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import io.github.polymeta.wondertrade.WonderTrade;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.network.chat.Component;

public class Reload {
public static void register(CommandDispatcher<CommandSourceStack> dispatcher) {
var regenCommand = dispatcher.register(
dispatcher.register(
LiteralArgumentBuilder.<CommandSourceStack>literal("reloadwondertrade")
.requires(req -> Cobblemon.INSTANCE.getPermissionValidator().hasPermission(req,
new CobblemonPermission("wondertrade.command.reload", PermissionLevel.ALL_COMMANDS)))
.executes(ctx -> {
WonderTrade.loadConfig();
ctx.getSource().sendSystemMessage(Component.literal("Config reloaded, check console for errors"));
ctx.getSource().sendSystemMessage(WonderTrade.config.messages.configReloaded(ctx.getSource().registryAccess()));
return Command.SINGLE_SUCCESS;
})
);
dispatcher.register(LiteralArgumentBuilder.<CommandSourceStack>literal("regeneratepool").redirect(regenCommand));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
import io.github.polymeta.wondertrade.util.TradeUtil;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.Commands;
import net.minecraft.network.chat.Component;

public class Trade {

Expand All @@ -30,7 +29,7 @@ public static void register(CommandDispatcher<CommandSourceStack> dispatcher) {
.then(Commands.literal("pool")
.executes(ctx -> {
if(WonderTrade.regenerating.get()) {
ctx.getSource().sendSystemMessage(Component.literal("The WonderTrade pool is being regenerated!"));
ctx.getSource().sendSystemMessage(WonderTrade.config.messages.poolRegenerating(ctx.getSource().registryAccess()));
return Command.SINGLE_SUCCESS;
}
var player = ctx.getSource().getPlayerOrException();
Expand All @@ -41,7 +40,7 @@ public static void register(CommandDispatcher<CommandSourceStack> dispatcher) {
.requires(req -> Cobblemon.INSTANCE.getPermissionValidator().hasPermission(req, new CobblemonPermission("wondertrade.command.trade.base", PermissionLevel.NONE)))
.executes(ctx -> {
if(WonderTrade.regenerating.get()) {
ctx.getSource().sendSystemMessage(Component.literal("The WonderTrade pool is being regenerated!"));
ctx.getSource().sendSystemMessage(WonderTrade.config.messages.poolRegenerating(ctx.getSource().registryAccess()));
return Command.SINGLE_SUCCESS;
}
var player = ctx.getSource().getPlayerOrException();
Expand All @@ -56,12 +55,17 @@ public static void register(CommandDispatcher<CommandSourceStack> dispatcher) {
return 1;
})
);
dispatcher.register(LiteralArgumentBuilder.<CommandSourceStack>literal("wt").redirect(tradeCommand));
// A redirect only forwards further arguments, so the alias needs the target's
// own command to answer a bare "/wt".
dispatcher.register(LiteralArgumentBuilder.<CommandSourceStack>literal("wt")
.requires(tradeCommand.getRequirement())
.executes(tradeCommand.getCommand())
.redirect(tradeCommand));
}

private static final Command<CommandSourceStack> Execute = context -> {
if(WonderTrade.regenerating.get()) {
context.getSource().sendSystemMessage(Component.literal("The WonderTrade pool is being regenerated!"));
context.getSource().sendSystemMessage(WonderTrade.config.messages.poolRegenerating(context.getSource().registryAccess()));
return Command.SINGLE_SUCCESS;
}
var slot = PartySlotArgumentType.Companion.getPokemon(context, "slot");
Expand All @@ -85,7 +89,7 @@ public static void register(CommandDispatcher<CommandSourceStack> dispatcher) {

private static final Command<CommandSourceStack> ExecuteWithConfirm = context -> {
if(WonderTrade.regenerating.get()) {
context.getSource().sendSystemMessage(Component.literal("The WonderTrade pool is being regenerated!"));
context.getSource().sendSystemMessage(WonderTrade.config.messages.poolRegenerating(context.getSource().registryAccess()));
return Command.SINGLE_SUCCESS;
}
var slot = PartySlotArgumentType.Companion.getPokemon(context, "slot");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,9 @@ public static class MessageConfig {
public String successFeedback = "<gray>[<white>Wonder<red>Trade<gray>] <green>Successfully traded!";
public String broadcastPokemonAdded = "<gray>[<white>Wonder<red>Trade<gray>]<white> <pokemon> (<species>) got added to the wondertrade pool!";
public String broadcastShinyPokemonAdded = "<gray>[<white>Wonder<red>Trade<gray>]<yellow> Shiny <pokemon> (<species>) got added to the wondertrade pool!";
public String poolRegenerating = "<gray>[<white>Wonder<red>Trade<gray>] <red>The pool is being regenerated!";
public String poolRegenerated = "<gray>[<white>Wonder<red>Trade<gray>] <green>Pool regenerated!";
public String configReloaded = "<gray>[<white>Wonder<red>Trade<gray>] <green>Config reloaded, check the console for errors.";


public Component wonderTradeFeedback(Pokemon pokemon, int slot, RegistryAccess registryAccess) {
Expand Down Expand Up @@ -116,5 +119,17 @@ public Component broadcastPokemon(Pokemon pokemon, RegistryAccess registryAccess
public Component pokemonNotAllowed(RegistryAccess registryAccess) {
return TextUtil.styledText(this.pokemonNotAllowed, registryAccess);
}

public Component poolRegenerating(RegistryAccess registryAccess) {
return TextUtil.styledText(this.poolRegenerating, registryAccess);
}

public Component poolRegenerated(RegistryAccess registryAccess) {
return TextUtil.styledText(this.poolRegenerated, registryAccess);
}

public Component configReloaded(RegistryAccess registryAccess) {
return TextUtil.styledText(this.configReloaded, registryAccess);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package io.github.polymeta.wondertrade.configuration;

import com.google.gson.JsonElement;

import java.util.ArrayList;
import java.util.List;

public class Pool {
public List<String> pokemon = new ArrayList<>();
public List<JsonElement> pokemon = new ArrayList<>();
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package io.github.polymeta.wondertrade.gui;

import com.cobblemon.mod.common.api.pokemon.PokemonProperties;
import com.cobblemon.mod.common.item.PokemonItem;
import io.github.polymeta.wondertrade.WonderTrade;
import io.github.polymeta.wondertrade.util.GuiUtil;
import io.github.polymeta.wondertrade.util.PokemonCodec;
import net.minecraft.core.component.DataComponents;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerPlayer;
Expand Down Expand Up @@ -48,8 +48,8 @@ private void setupContainer()
var pageContent = WonderTrade.pool.pokemon.stream()
.skip((long) this.pageNumber * this.pageSize)
.limit(this.pageSize)
.map(PokemonProperties.Companion::parse)
.map(PokemonItem::from)
.map(PokemonCodec::decode)
.map(pokemon -> PokemonItem.from(pokemon, 1))
.toList();

for(int i = 0; i < pageContent.size(); i++)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package io.github.polymeta.wondertrade.util;

import com.cobblemon.mod.common.api.pokemon.PokemonProperties;
import com.cobblemon.mod.common.pokemon.Pokemon;
import com.google.gson.JsonElement;
import com.mojang.serialization.JsonOps;

import java.util.UUID;

/**
* Pool entries use Cobblemon's own codec. A property string cannot round-trip a
* regional form: applying properties recomputes aspects from species features
* instead of restoring them, so the pool reset forms back to base (issue #8).
*/
public final class PokemonCodec {

private PokemonCodec() {}

public static JsonElement encode(Pokemon pokemon) {
return Pokemon.getCODEC().encodeStart(JsonOps.INSTANCE, pokemon).getOrThrow();
}

/** Strings are pool entries written before the codec; parsed the old way. */
public static Pokemon decode(JsonElement entry) {
if (entry.isJsonPrimitive()) {
return PokemonProperties.Companion.parse(entry.getAsString()).create();
}
var pokemon = Pokemon.getCODEC().parse(JsonOps.INSTANCE, entry).getOrThrow();
// The codec restores the depositor's UUID, which must not reach a second party.
pokemon.setUuid(UUID.randomUUID());
return pokemon;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import com.cobblemon.mod.common.api.permission.CobblemonPermission;
import com.cobblemon.mod.common.api.permission.PermissionLevel;
import com.cobblemon.mod.common.api.pokemon.PokemonProperties;
import com.cobblemon.mod.common.api.pokemon.PokemonPropertyExtractor;
import com.cobblemon.mod.common.pokemon.Pokemon;
import io.github.polymeta.wondertrade.WonderTrade;
import net.minecraft.network.chat.Component;
Expand Down Expand Up @@ -41,7 +40,7 @@ public static void doWonderTrade(ServerPlayer player, Pokemon slot)
var playerParty = Cobblemon.INSTANCE.getStorage().getParty(player);
var wonderPoke = WonderTrade.pool.pokemon.remove(rng.nextInt(WonderTrade.pool.pokemon.size()));
var tookPoke = playerParty.remove(slot);
var pokeAdded = playerParty.add(PokemonProperties.Companion.parse(wonderPoke).create());
var pokeAdded = playerParty.add(PokemonCodec.decode(wonderPoke));
if(WonderTrade.config.adjustNewPokemonToLevelRange) {
var level = slot.getLevel();
if(level > WonderTrade.config.poolMaxLevel) {
Expand All @@ -51,7 +50,7 @@ else if (level < WonderTrade.config.poolMinLevel) {
slot.setLevel(WonderTrade.config.poolMinLevel);
}
}
WonderTrade.pool.pokemon.add(slot.createPokemonProperties(PokemonPropertyExtractor.ALL).asString(" "));
WonderTrade.pool.pokemon.add(PokemonCodec.encode(slot));
WonderTrade.savePool();
if(WonderTrade.config.cooldownEnabled && !canBypass) {
playersOnCooldown.add(player.getUUID());
Expand Down