Skip to content

Commit

Permalink
1.1.0
Browse files Browse the repository at this point in the history
Added some functions and classes comments, so devs can use as an API
Hopefully fixed the issue where our custom icon wasn't appearing on some modpacks
  • Loading branch information
Rafacasari committed Jul 10, 2024
1 parent c69f03c commit 19f4486
Show file tree
Hide file tree
Showing 17 changed files with 272 additions and 186 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,10 @@ public abstract class ItemRendererMixin {
@Shadow @Final private ItemModels models;
@Shadow public abstract void renderItem(ItemStack stack, ModelTransformationMode renderMode, boolean leftHanded, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay, BakedModel model);

// TODO: Need to change cobbledex_item to be 2d as default and 3d should come here? May fix some modpacks
@Inject(method = "getModel", at = @At("HEAD"), cancellable = true)
private void cobbledex$bakeCobbledexItem(ItemStack stack, World world, LivingEntity entity, int seed, CallbackInfoReturnable<BakedModel> cir) {
if (stack.getItem() instanceof CobbledexItem) {
Identifier identifier = MiscUtils.INSTANCE.cobbledexResource("cobbledex_item");
Identifier identifier = MiscUtils.INSTANCE.cobbledexResource("cobbledex_model");
BakedModel model = this.models.getModelManager().getModel(new ModelIdentifier(identifier, "inventory"));
ClientWorld clientWorld = world instanceof ClientWorld ? (ClientWorld) world : null;
BakedModel overriddenModel = model.getOverrides().apply(model, stack, clientWorld, entity, seed);
Expand All @@ -51,7 +50,7 @@ public abstract class ItemRendererMixin {
private void cobbledex$determineCobbledexModel(ItemStack stack, ModelTransformationMode renderMode, boolean leftHanded, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay, BakedModel model, CallbackInfo ci) {
boolean shouldBe2d = renderMode == ModelTransformationMode.GUI || renderMode == ModelTransformationMode.FIXED;
if (shouldBe2d && stack.getItem() instanceof CobbledexItem) {
BakedModel replacementModel = this.models.getModelManager().getModel(new ModelIdentifier(MiscUtils.INSTANCE.cobbledexResource("cobbledex_icon"), "inventory"));
BakedModel replacementModel = this.models.getModelManager().getModel(new ModelIdentifier(MiscUtils.INSTANCE.cobbledexResource("cobbledex_item"), "inventory"));
if (!model.equals(replacementModel)) {
ci.cancel();
renderItem(stack, renderMode, leftHanded, matrices, vertexConsumers, light, overlay, replacementModel);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@


package com.rafacasari.mod.cobbledex.api

import com.cobblemon.mod.common.Cobblemon.playerData
Expand All @@ -14,6 +16,13 @@ import com.rafacasari.mod.cobbledex.network.client.packets.ReceiveCollectionData
import com.rafacasari.mod.cobbledex.utils.MiscUtils.logInfo
import net.minecraft.server.network.ServerPlayerEntity

@Suppress("unused")
/**
* A player-data that contains all Pokédex data (discovered/caught list)
*
* [registers] = MutableMap<**Species.showdownId**, MutableMap<**FormData.formOnlyShowdownId**, **DiscoveryRegister**>>
*
*/
class CobbledexDiscovery(val registers: MutableMap<String, MutableMap<String, DiscoveryRegister>> = mutableMapOf()): PlayerDataExtension {

companion object {
Expand All @@ -23,6 +32,9 @@ class CobbledexDiscovery(val registers: MutableMap<String, MutableMap<String, Di
.disableHtmlEscaping()
.create()

/**
* Get [CobbledexDiscovery] for [player]
*/
fun getPlayerData(player: ServerPlayerEntity): CobbledexDiscovery {
val data = playerData.get(player)

Expand Down Expand Up @@ -79,18 +91,41 @@ class CobbledexDiscovery(val registers: MutableMap<String, MutableMap<String, Di
}
}

/**
* Return true if player caught the given [FormData]
*/
fun caught(form: FormData): Boolean = registers[form.species.showdownId()]?.get(form.formOnlyShowdownId())?.status == DiscoveryRegister.RegisterType.CAUGHT

/**
* Return true if player discovered/seen the given [FormData]
*/
fun discovered(form: FormData): Boolean = registers[form.species.showdownId()]?.get(form.formOnlyShowdownId())?.status == DiscoveryRegister.RegisterType.SEEN

private fun getRegister(showdownId: String): MutableMap<String, DiscoveryRegister>? {
return registers[showdownId]
}

/**
* Get player total number of Forms discovered
*/
fun getTotalDiscovered(): Int {
return registers.values.flatMap { it.values }.count()
}

/**
* Get player total number of Forms caught
*/
fun getTotalCaught(): Int {
return registers.values.flatMap { it.values }.count { it.status == DiscoveryRegister.RegisterType.CAUGHT }
}

/**
* Add or update a player discovery
*
* [update] is **optional** and is a callback called after adding into list
*
* [fireEvents] determine if events in [CobbledexEvents] should be fired
*/
fun addOrUpdate(player: ServerPlayerEntity, formData: FormData, isShiny: Boolean, status: DiscoveryRegister.RegisterType, update: ((DiscoveryRegister) -> Unit)? = null, fireEvents: Boolean = true): Boolean {
val species = formData.species.showdownId()
val form = formData.formOnlyShowdownId()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,33 @@
package com.rafacasari.mod.cobbledex.api

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

object CobbledexEvents {

/**
* Fired when a new [Species] is **discovered**
*/
@JvmField
val NEW_SPECIES_DISCOVERED = EventObservable<DiscoveryEvent.OnSpeciesDiscoveryEvent>()

/**
* Fired when a new [FormData] is **discovered**
*/
@JvmField
val NEW_FORM_DISCOVERED = EventObservable<DiscoveryEvent.OnFormDiscoveryEvent>()

/**
* Fired when a new [Species] is **caught**
*/
@JvmField
val NEW_SPECIES_CAUGHT = EventObservable<DiscoveryEvent.OnSpeciesDiscoveryEvent>()

/**
* Fired when a new [FormData] is **caught**
*/
@JvmField
val NEW_FORM_CAUGHT = EventObservable<DiscoveryEvent.OnFormDiscoveryEvent>()
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ class PokedexRewardHistory(val received: MutableList<String> = mutableListOf())
.disableHtmlEscaping()
.create()

/**
* Get [PokedexRewardHistory] for [player]
*/
fun getPlayerRewards(player: ServerPlayerEntity): PokedexRewardHistory {
val playerData= CobblemonPlayerData.get(player)
val history = playerData.extraData.getOrPut(NAME_KEY) {
Expand All @@ -34,7 +37,11 @@ class PokedexRewardHistory(val received: MutableList<String> = mutableListOf())
return history
}

fun checkRewards(player: ServerPlayerEntity) {

/**
* Check available rewards for [player] and automatically give it
*/
internal fun checkRewards(player: ServerPlayerEntity) {
if(!Cobbledex.getConfig().CaughtRewards || !Cobbledex.serverInitialized)
return

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ import com.rafacasari.mod.cobbledex.utils.CobblemonUtils.drawBlackSilhouettePoke
import com.rafacasari.mod.cobbledex.utils.CobblemonUtils.validForms
import com.rafacasari.mod.cobbledex.utils.MiscUtils.cobbledexResource
import com.rafacasari.mod.cobbledex.utils.MiscUtils.cobbledexTextTranslation
import com.rafacasari.mod.cobbledex.utils.MiscUtils.cobbledexTranslation
import com.rafacasari.mod.cobbledex.utils.MiscUtils.emptyLine
import net.minecraft.client.MinecraftClient
import net.minecraft.client.gui.DrawContext
Expand Down Expand Up @@ -217,7 +216,7 @@ class CobbledexCollectionGUI : Screen(cobbledexTextTranslation("cobbledex")) {
drawScaledText(
context = context,
font = CobblemonResources.DEFAULT_LARGE,
text = cobbledexTranslation("cobbledex.texts.cobbledex").bold(),
text = cobbledexTextTranslation("cobbledex").bold(),
x = x + 200.25F,
y = y + 13.25F,
shadow = true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ class CobbledexTab(
x = x + (width / 2),
y = y + 1,
centered = true,
shadow = true
shadow = true,
maxCharacterWidth = BUTTON_WIDTH
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import com.rafacasari.mod.cobbledex.client.gui.CobbledexGUI.CobbledexRelatedMenu
import com.rafacasari.mod.cobbledex.network.client.handlers.SyncServerSettingsHandler
import com.rafacasari.mod.cobbledex.utils.CobblemonUtils
import com.rafacasari.mod.cobbledex.utils.MiscUtils.cobbledexResource
import com.rafacasari.mod.cobbledex.utils.MiscUtils.cobbledexTranslation
import com.rafacasari.mod.cobbledex.utils.MiscUtils.cobbledexTextTranslation
import java.util.*

class PokemonEvolutionDisplay(x: Int, y: Int): CobbledexScrollList<PokemonEvolutionDisplay.EvolveSlot>(x, y, SLOT_HEIGHT + SLOT_SPACING) {
Expand Down Expand Up @@ -98,7 +98,7 @@ class PokemonEvolutionDisplay(x: Int, y: Int): CobbledexScrollList<PokemonEvolut
CobbledexGUI.Instance?.updateRelatedSpecies()
}
},
text = cobbledexTranslation("cobbledex.texts.select"),
text = cobbledexTextTranslation("select"),
resource = buttonResource,
boldText = true,
largeText = false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,19 @@ import net.minecraft.util.math.RotationAxis
import org.joml.Quaternionf
import org.joml.Vector3f

@Suppress("unused")
/**
* A utility class for Cobblemon-specific functions. This class also adds extensions for Species and Forms classes in Cobblemon.
*/
object CobblemonUtils {

fun Species.getFormByName(name: String) : FormData {
return forms.find { it.name == name } ?: this.standardForm
}

/**
This doesn't should be really needed, since aspects are always directly from **[FormData]**
**/
fun removeUnnecessaryAspects(pokeAspects: Set<String>) : Set<String> {
return pokeAspects.filter {
(it != "male" && it != "female" && it != "shiny")
Expand Down Expand Up @@ -78,10 +85,6 @@ object CobblemonUtils {
return form.drops.entries.filterIsInstance<ItemDropEntry>()
}


// TODO: Implement cache to prevent pokedex FPS lag
// private val cachedPortrait: MutableMap<String, Framebuffer> = mutableMapOf()

fun drawBlackSilhouettePokemon(species: Identifier, aspects: Set<String>, matrixStack: MatrixStack, rotation: Quaternionf, scale: Float = 20F) {
var model: PokemonPoseableModel? = null
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,26 @@ import net.minecraft.text.ClickEvent
import net.minecraft.text.MutableText
import net.minecraft.text.TextContent

@Suppress("unused")
/**
* A utility class with functions for Cobbledex or un-categorized functions
*/
object MiscUtils {
/**
* Returns an [Identifier] using **Cobbledex MOD ID** as namespace
*/
fun cobbledexResource(path: String): Identifier = Identifier(Cobbledex.MOD_ID, path)
fun cobbledexTranslation(key: String): MutableText = Text.translatable(key)
fun translatable(key: String): MutableText = Text.translatable(key)

fun logInfo(text: String) = Cobbledex.LOGGER.info(text)
fun logWarn(text: String) = Cobbledex.LOGGER.warn(text)
fun logError(text: String) = Cobbledex.LOGGER.error(text)
fun logDebug(text: String) = Cobbledex.LOGGER.debug(text)

fun MutableText.withRGBColor(color: Int) = also { it.style = it.style.withColor(color) }
fun Text.bold() = also { (it as MutableText).style = it.style.withBold(true) }
fun Text.bold(): MutableText = MutableText.of(this.content).also {
it.style = it.style.withBold(true)
}

fun Float.format(): String = if (this % 1 == 0f) this.toInt().toString() else this.toString()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,5 +112,4 @@ object PacketUtils {
this.readLong()
else null
}

}
Original file line number Diff line number Diff line change
@@ -1,11 +1,27 @@
package com.rafacasari.mod.cobbledex.utils

import com.cobblemon.mod.common.api.types.ElementalType
import com.cobblemon.mod.common.pokemon.FormData
import com.cobblemon.mod.common.pokemon.Pokemon
import com.rafacasari.mod.cobbledex.cobblemon.showdown.ShowdownService

@Suppress("unused")
object TypeChartUtils {
private var typeChart: HashMap<String, HashMap<String, Int>>? = null

/**
* Get the damage multiplier for [type] based on [Pokemon]
*/
fun getModifier(type: ElementalType, pokemon: Pokemon): Float = getModifier(type, pokemon.primaryType, pokemon.secondaryType)

/**
* Get the damage multiplier for [type] based on [FormData]
*/
fun getModifier(type: ElementalType, formData: FormData): Float = getModifier(type, formData.primaryType, formData.secondaryType)

/**
* Get the damage multiplier for [type] based on [defenderType1] and [defenderType2]
*/
fun getModifier(type: ElementalType, defenderType1: ElementalType?, defenderType2: ElementalType?): Float {
var multiplier = 1f

Expand Down

This file was deleted.

Loading

0 comments on commit 19f4486

Please sign in to comment.