Skip to content

Commit

Permalink
1.0.36
Browse files Browse the repository at this point in the history
Added Caught Rewards!
Added item into Tools tab, now JEI should work properly
Added credits into /cobbledex command, when used without parameters
Added French translation (thanks @DaftHunk)
Code cleanup
  • Loading branch information
Rafacasari committed Jul 6, 2024
1 parent ca0dd0a commit 1fe4317
Show file tree
Hide file tree
Showing 24 changed files with 863 additions and 97 deletions.
91 changes: 59 additions & 32 deletions common/src/main/kotlin/com/rafacasari/mod/cobbledex/Cobbledex.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ import com.cobblemon.mod.common.api.text.onHover
import com.cobblemon.mod.common.platform.events.PlatformEvents
import com.cobblemon.mod.common.platform.events.ServerPlayerEvent
import com.cobblemon.mod.common.pokemon.FormData
import com.cobblemon.mod.common.util.giveOrDropItemStack
import com.cobblemon.mod.common.util.server
import com.rafacasari.mod.cobbledex.api.CobbledexCoopDiscovery
import com.rafacasari.mod.cobbledex.api.CobbledexDiscovery
import com.rafacasari.mod.cobbledex.api.*
import com.rafacasari.mod.cobbledex.api.classes.DiscoveryRegister
import com.rafacasari.mod.cobbledex.client.gui.CobbledexCollectionGUI
import com.rafacasari.mod.cobbledex.client.gui.CobbledexGUI
Expand All @@ -35,7 +35,10 @@ import java.nio.file.Paths

object Cobbledex {
private lateinit var config: CobbledexConfig
private lateinit var rewardManager: PokedexRewards

fun getConfig() : CobbledexConfig = config
fun getRewardManager(): PokedexRewards = rewardManager

const val MOD_ID : String = "cobbledex"

Expand All @@ -45,59 +48,81 @@ object Cobbledex {
val LOGGER: Logger = LoggerFactory.getLogger("Cobbledex")
lateinit var implementation: CobbledexImplementation

private var eventsCreated: Boolean = false
fun preInitialize(implementation: CobbledexImplementation) {
logInfo("Initializing Cobbledex $VERSION...")
Cobbledex.implementation = implementation

implementation.registerItems()
rewardManager = PokedexRewards.getInstance()

loadConfig()

// Register our custom extension data
PlayerDataExtensionRegistry.register(CobbledexDiscovery.NAME_KEY, CobbledexDiscovery::class.java)
PlayerDataExtensionRegistry.register(PokedexRewardHistory.NAME_KEY, PokedexRewardHistory::class.java)

PlatformEvents.SERVER_STARTED.subscribe { serverEvent ->
logInfo("Server initialized...")

PlayerDataExtensionRegistry.register(CobbledexDiscovery.NAME_KEY, CobbledexDiscovery::class.java)
// Initialize CO-OP Discovery. Save inside world-root path to work on LAN servers without overlaps
val serverPath = serverEvent.server.getSavePath(WorldSavePath.ROOT).toAbsolutePath()
CobbledexCoopDiscovery.load(Paths.get(serverPath.toString(), "cobbledex-coop.json").toString())
}

if (!eventsCreated) {
CobblemonEvents.STARTER_CHOSEN.subscribe(Priority.LOW) {
registerPlayerDiscovery(it.player, it.pokemon.form, it.pokemon.shiny, DiscoveryRegister.RegisterType.CAUGHT)
CobblemonEvents.STARTER_CHOSEN.subscribe(Priority.LOW) {
registerPlayerDiscovery(it.player, it.pokemon.form, it.pokemon.shiny, DiscoveryRegister.RegisterType.CAUGHT)

if (getConfig().GiveCobbledexItemOnStarterChosen) {
val itemStack = ItemStack(CobbledexConstants.COBBLEDEX_ITEM, 1)
it.player.giveItemStack(itemStack)
}
}
if (getConfig().GiveCobbledexItemOnStarterChosen) {
val itemStack = ItemStack(CobbledexConstants.COBBLEDEX_ITEM, 1)
it.player.giveOrDropItemStack(itemStack)
}
}

CobblemonEvents.POKEMON_CAPTURED.subscribe(Priority.LOWEST) {
registerPlayerDiscovery(it.player, it.pokemon.form, it.pokemon.shiny, DiscoveryRegister.RegisterType.CAUGHT)
}
CobblemonEvents.POKEMON_CAPTURED.subscribe(Priority.LOWEST) {
registerPlayerDiscovery(it.player, it.pokemon.form, it.pokemon.shiny, DiscoveryRegister.RegisterType.CAUGHT)
}

CobblemonEvents.EVOLUTION_COMPLETE.subscribe(Priority.LOW) {
val player = it.pokemon.getOwnerPlayer()
CobblemonEvents.EVOLUTION_COMPLETE.subscribe(Priority.LOW) {
val player = it.pokemon.getOwnerPlayer()

if (player != null)
registerPlayerDiscovery(player, it.pokemon.form, it.pokemon.shiny, DiscoveryRegister.RegisterType.CAUGHT)
}
if (player != null)
registerPlayerDiscovery(player, it.pokemon.form, it.pokemon.shiny, DiscoveryRegister.RegisterType.CAUGHT)
}

CobblemonEvents.TRADE_COMPLETED.subscribe(Priority.LOW) {
serverEvent.server.playerManager.getPlayer(it.tradeParticipant1.uuid)?.let { player ->
val pokemon = it.tradeParticipant1Pokemon
registerPlayerDiscovery(player, pokemon.form, pokemon.shiny, DiscoveryRegister.RegisterType.CAUGHT)
}
CobblemonEvents.TRADE_COMPLETED.subscribe(Priority.LOW) {
it.tradeParticipant1Pokemon.getOwnerPlayer()?.let { player ->
val pokemon = it.tradeParticipant1Pokemon
registerPlayerDiscovery(player, pokemon.form, pokemon.shiny, DiscoveryRegister.RegisterType.CAUGHT)
}

serverEvent.server.playerManager.getPlayer(it.tradeParticipant2.uuid)?.let { player ->
val pokemon = it.tradeParticipant2Pokemon
registerPlayerDiscovery(player, pokemon.form, pokemon.shiny, DiscoveryRegister.RegisterType.CAUGHT)
}
}
it.tradeParticipant2Pokemon.getOwnerPlayer()?.let { player ->
val pokemon = it.tradeParticipant2Pokemon
registerPlayerDiscovery(player, pokemon.form, pokemon.shiny, DiscoveryRegister.RegisterType.CAUGHT)
}
}

// This should prevent events from being added more than once
eventsCreated = true
CobblemonEvents.FOSSIL_REVIVED.subscribe(Priority.LOW) {
it.player?.let { player ->
registerPlayerDiscovery(player, it.pokemon.form, it.pokemon.shiny, DiscoveryRegister.RegisterType.CAUGHT)
}
}

// CobblemonEvents.BATTLE_STARTED_PRE.subscribe(Priority.LOW) { event ->
// val pokemonList = event.battle.activePokemon
//
// event.battle.players.forEach { player ->
// pokemonList.forEach {
// val pokemon = it.battlePokemon?.entity?.pokemon
// if (pokemon != null)
// registerPlayerDiscovery(player, pokemon.form, pokemon.shiny, DiscoveryRegister.RegisterType.SEEN)
// }
// }
// }

CobbledexEvents.NEW_FORM_CAUGHT.subscribe {
PokedexRewardHistory.checkRewards(it.player)
}

PlatformEvents.CLIENT_PLAYER_LOGOUT.subscribe {
CobbledexConstants.Client.discoveredList.clear()
}
Expand All @@ -121,6 +146,8 @@ object Cobbledex {
}

getConfig().syncPlayer(login.player)

PokedexRewardHistory.checkRewards(login.player)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ class CobbledexConfig : IEncodable {
var Collection_NeedCatch = false
var Collection_DisableBlackSilhouette = false

var CaughtRewards = true


companion object {
val GSON: Gson = GsonBuilder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,27 +18,23 @@ class CobbledexCoopDiscovery(val registers: MutableMap<String, MutableMap<String
.setPrettyPrinting()
.create()

private var isInitialized: Boolean =false
private lateinit var discovery: CobbledexCoopDiscovery
private var discovery: CobbledexCoopDiscovery? = null

private lateinit var filePath: String
private var filePath: String = ""
fun getDiscovery() : CobbledexCoopDiscovery?
{
if (!isInitialized)
logWarn("Called getDiscovery before initialization")

return if (this::discovery.isInitialized) discovery else null
return discovery
}

fun load(path: String) {
if (isInitialized) {
logWarn("CobbledexCoopDiscovery.load was called twice!")
filePath = path

if (filePath.isEmpty())
{
logError("Failed to load Cobbledex COOP Discovery! filePath is empty!")
return
}

isInitialized = true
filePath = path

logInfo("Loading CobbledexCoopDiscovery at \"${filePath}\"...")
val configFile = File(path)
configFile.parentFile.mkdirs()
Expand All @@ -61,15 +57,10 @@ class CobbledexCoopDiscovery(val registers: MutableMap<String, MutableMap<String
}

fun save() {
if (!isInitialized)
{
logWarn("Tried to save CobbledexCoopDiscovery without loading it first")
return
}

if (!this::filePath.isInitialized)
if (filePath.isEmpty())
{
logWarn("Tried to save CobbledexCoopDiscovery without filePath being initialized")
logWarn("Tried to save CobbledexCoopDiscovery without a valid filePath")
return
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import com.google.gson.GsonBuilder
import com.google.gson.JsonObject
import com.rafacasari.mod.cobbledex.Cobbledex
import com.rafacasari.mod.cobbledex.api.classes.DiscoveryRegister
import com.rafacasari.mod.cobbledex.api.events.DiscoveryEvent
import com.rafacasari.mod.cobbledex.network.client.packets.ReceiveCollectionDataPacket
import com.rafacasari.mod.cobbledex.utils.MiscUtils.logInfo
import net.minecraft.server.network.ServerPlayerEntity
Expand All @@ -30,12 +31,12 @@ class CobbledexDiscovery(val registers: MutableMap<String, MutableMap<String, Di

val pc = player.pc()
pc.forEach { pokemon ->
discovery.addOrUpdate(pokemon.species.showdownId(), pokemon.form.formOnlyShowdownId(), pokemon.shiny, DiscoveryRegister.RegisterType.CAUGHT, null)
discovery.addOrUpdate(player, pokemon.form, pokemon.shiny, DiscoveryRegister.RegisterType.CAUGHT, null)
}

val party = player.party()
party.forEach { pokemon ->
discovery.addOrUpdate(pokemon.species.showdownId(), pokemon.form.formOnlyShowdownId(), pokemon.shiny, DiscoveryRegister.RegisterType.CAUGHT, null)
discovery.addOrUpdate(player, pokemon.form, pokemon.shiny, DiscoveryRegister.RegisterType.CAUGHT, null)
}

ReceiveCollectionDataPacket(discovery.registers).sendToPlayer(player)
Expand All @@ -51,7 +52,7 @@ class CobbledexDiscovery(val registers: MutableMap<String, MutableMap<String, Di

val cobbledexData = getPlayerData(player)

val isNewRegister = cobbledexData.addOrUpdate(form.species.showdownId(), form.formOnlyShowdownId(), isShiny, status, update)
val isNewRegister = cobbledexData.addOrUpdate(player, form, isShiny, status, update)

playerData.saveSingle(data)
return isNewRegister
Expand All @@ -62,7 +63,18 @@ class CobbledexDiscovery(val registers: MutableMap<String, MutableMap<String, Di
return registers[showdownId]
}

fun addOrUpdate(species: String, form: String, isShiny: Boolean, status: DiscoveryRegister.RegisterType, update: ((DiscoveryRegister) -> Unit)? = null): Boolean {
fun getTotalDiscovered(): Int {
return registers.values.flatMap { it.values }.count()
}

fun getTotalCaught(): Int {
return registers.values.flatMap { it.values }.count { it.status == DiscoveryRegister.RegisterType.CAUGHT }
}

fun addOrUpdate(player: ServerPlayerEntity, formData: FormData, isShiny: Boolean, status: DiscoveryRegister.RegisterType, update: ((DiscoveryRegister) -> Unit)? = null): Boolean {
val species = formData.species.showdownId()
val form = formData.formOnlyShowdownId()

val currentRegister = getRegister(species)

val discoverTimestamp = System.currentTimeMillis()
Expand All @@ -79,6 +91,8 @@ class CobbledexDiscovery(val registers: MutableMap<String, MutableMap<String, Di
if (formRegister.status == DiscoveryRegister.RegisterType.SEEN && status == DiscoveryRegister.RegisterType.CAUGHT) {
formRegister.status = DiscoveryRegister.RegisterType.CAUGHT
formRegister.caughtTimestamp = caughtTimestamp

CobbledexEvents.NEW_FORM_CAUGHT.post(DiscoveryEvent.OnFormDiscoveryEvent(player, formRegister, formData))
}

update?.invoke(formRegister)
Expand All @@ -88,13 +102,26 @@ class CobbledexDiscovery(val registers: MutableMap<String, MutableMap<String, Di
val newRegister = DiscoveryRegister(isShiny, status, discoverTimestamp, caughtTimestamp)
currentRegister[form] = newRegister
update?.invoke(newRegister)

CobbledexEvents.NEW_FORM_DISCOVERED.post(DiscoveryEvent.OnFormDiscoveryEvent(player, newRegister, formData))
if (status == DiscoveryRegister.RegisterType.CAUGHT)
CobbledexEvents.NEW_FORM_CAUGHT.post(DiscoveryEvent.OnFormDiscoveryEvent(player, newRegister, formData))

return true
}
} else {
// New pokemon
val newRegister = DiscoveryRegister(isShiny, status, discoverTimestamp, caughtTimestamp)
registers[species] = mutableMapOf(form to newRegister)
update?.invoke(newRegister)

CobbledexEvents.NEW_SPECIES_DISCOVERED.post(DiscoveryEvent.OnSpeciesDiscoveryEvent(player, newRegister, formData.species))
CobbledexEvents.NEW_FORM_DISCOVERED.post(DiscoveryEvent.OnFormDiscoveryEvent(player, newRegister, formData))

if (status == DiscoveryRegister.RegisterType.CAUGHT) {
CobbledexEvents.NEW_SPECIES_CAUGHT.post(DiscoveryEvent.OnSpeciesDiscoveryEvent(player, newRegister, formData.species))
CobbledexEvents.NEW_FORM_CAUGHT.post(DiscoveryEvent.OnFormDiscoveryEvent(player, newRegister, formData))
}
return true
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.rafacasari.mod.cobbledex.api

import com.cobblemon.mod.common.api.reactive.EventObservable
import com.rafacasari.mod.cobbledex.api.events.DiscoveryEvent

object CobbledexEvents {
@JvmField
val NEW_SPECIES_DISCOVERED = EventObservable<DiscoveryEvent.OnSpeciesDiscoveryEvent>()

@JvmField
val NEW_FORM_DISCOVERED = EventObservable<DiscoveryEvent.OnFormDiscoveryEvent>()

@JvmField
val NEW_SPECIES_CAUGHT = EventObservable<DiscoveryEvent.OnSpeciesDiscoveryEvent>()

@JvmField
val NEW_FORM_CAUGHT = EventObservable<DiscoveryEvent.OnFormDiscoveryEvent>()
}
Loading

0 comments on commit 1fe4317

Please sign in to comment.