mirror of
https://gitlab.com/cable-mc/cobblemon.git
synced 2026-10-27 04:26:27 -04:00
Implemented passive evolution trigger, reduced visibility on species and form evolution property, cleaned up package structure of evolution stuff.
This commit is contained in:
+2
-2
@@ -1,8 +1,8 @@
|
||||
package com.cablemc.pokemoncobbled.common.api.pokemon.evolution
|
||||
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.Pokemon
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.ItemInteractionEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.TradeEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.variants.ItemInteractionEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.variants.TradeEvolution
|
||||
|
||||
/**
|
||||
* Represents an evolution of a [Pokemon] that can only occur during specific actions and with added context.
|
||||
|
||||
+3
-3
@@ -4,9 +4,9 @@ import com.cablemc.pokemoncobbled.common.api.moves.MoveTemplate
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.PokemonProperties
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.evolution.requirement.EvolutionRequirement
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.Pokemon
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.ItemInteractionEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.LevelEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.TradeEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.variants.ItemInteractionEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.variants.LevelEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.variants.TradeEvolution
|
||||
|
||||
/**
|
||||
* Represents an evolution of a [Pokemon], this is the server side counterpart of [EvolutionDisplay].
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
package com.cablemc.pokemoncobbled.common.api.pokemon.evolution
|
||||
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.Pokemon
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.CobbledClientEvolutionController
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.CobbledServerEvolutionController
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.controller.CobbledClientEvolutionController
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.controller.CobbledServerEvolutionController
|
||||
import com.google.gson.JsonElement
|
||||
import net.minecraft.nbt.NbtElement
|
||||
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
package com.cablemc.pokemoncobbled.common.api.pokemon.evolution
|
||||
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.Pokemon
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.LevelEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.variants.LevelEvolution
|
||||
|
||||
/**
|
||||
* Represents an evolution of a [Pokemon] that can occur without any additional context or actions.
|
||||
|
||||
+9
-3
@@ -6,8 +6,8 @@ import com.cablemc.pokemoncobbled.common.api.entity.Despawner
|
||||
import com.cablemc.pokemoncobbled.common.api.events.CobbledEvents
|
||||
import com.cablemc.pokemoncobbled.common.api.events.pokemon.ShoulderMountEvent
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.PokemonSpecies
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.evolution.PassiveEvolution
|
||||
import com.cablemc.pokemoncobbled.common.api.scheduling.afterOnMain
|
||||
import com.cablemc.pokemoncobbled.common.api.storage.party.PlayerPartyStore
|
||||
import com.cablemc.pokemoncobbled.common.api.types.ElementalTypes
|
||||
import com.cablemc.pokemoncobbled.common.client.entity.PokemonClientDelegate
|
||||
import com.cablemc.pokemoncobbled.common.entity.EntityProperty
|
||||
@@ -128,6 +128,7 @@ class PokemonEntity(
|
||||
ticksLived++
|
||||
if (this.ticksLived % 20 == 0) {
|
||||
this.updateEyeHeight()
|
||||
this.attemptPassiveEvolution()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -284,8 +285,6 @@ class PokemonEntity(
|
||||
(stack.item as? PokemonInteractiveItem)?.onInteraction(playerIn, this, stack)
|
||||
}
|
||||
|
||||
|
||||
|
||||
private fun tryMountingShoulder(player: ServerPlayerEntity) {
|
||||
if (this.pokemon.belongsTo(player) && this.hasRoomToMount(player)) {
|
||||
CobbledEvents.SHOULDER_MOUNT.postThen(ShoulderMountEvent(player, pokemon, isLeft = player.shoulderEntityLeft.isEmpty)) {
|
||||
@@ -322,4 +321,11 @@ class PokemonEntity(
|
||||
(this as AccessorEntity).standingEyeHeight(this.getActiveEyeHeight(EntityPose.STANDING, this.type.dimensions))
|
||||
}
|
||||
|
||||
private fun attemptPassiveEvolution() {
|
||||
this.pokemon.evolutions.filterIsInstance<PassiveEvolution>()
|
||||
.forEach { evolution ->
|
||||
evolution.attemptEvolution(this.pokemon)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+2
-3
@@ -2,7 +2,7 @@ package com.cablemc.pokemoncobbled.common.item.interactive
|
||||
|
||||
import com.cablemc.pokemoncobbled.common.entity.pokemon.PokemonEntity
|
||||
import com.cablemc.pokemoncobbled.common.item.CobbledItemGroups
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.ItemInteractionEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.variants.ItemInteractionEvolution
|
||||
import net.minecraft.item.ItemStack
|
||||
import net.minecraft.server.network.ServerPlayerEntity
|
||||
|
||||
@@ -10,8 +10,7 @@ class EvolutionItem(properties: Settings = Settings().group(CobbledItemGroups.EV
|
||||
|
||||
override fun processInteraction(player: ServerPlayerEntity, entity: PokemonEntity, stack: ItemStack) {
|
||||
val pokemon = entity.pokemon
|
||||
pokemon.species.evolutions.filterIsInstance<ItemInteractionEvolution>()
|
||||
.sortedBy { evolution -> evolution.optional }
|
||||
pokemon.evolutions.filterIsInstance<ItemInteractionEvolution>()
|
||||
.forEach { evolution ->
|
||||
if (evolution.attemptEvolution(pokemon, this)) {
|
||||
this.consumeItem(player, stack)
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ import com.cablemc.pokemoncobbled.common.api.pokemon.evolution.EvolutionDisplay
|
||||
import com.cablemc.pokemoncobbled.common.net.messages.common.pokemon.update.evolution.EvolutionLikeUpdatePacket
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.Pokemon
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.CobbledEvolutionDisplay
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.DummyEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.variants.DummyEvolution
|
||||
import net.minecraft.network.PacketByteBuf
|
||||
|
||||
/**
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ class AcceptEvolutionPacket() : EvolutionDisplayUpdatePacket() {
|
||||
}
|
||||
|
||||
override fun applyToPokemon(pokemon: Pokemon) {
|
||||
val evolution = pokemon.species.evolutions.firstOrNull { evolution -> evolution.id.equals(this.evolutionId, true) } ?: return
|
||||
val evolution = pokemon.evolutions.firstOrNull { evolution -> evolution.id.equals(this.evolutionId, true) } ?: return
|
||||
pokemon.pendingEvolutions.start(evolution)
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ import com.cablemc.pokemoncobbled.common.api.pokemon.evolution.EvolutionDisplay
|
||||
import com.cablemc.pokemoncobbled.common.net.messages.common.pokemon.update.evolution.EvolutionLikeUpdatePacket
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.Pokemon
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.CobbledEvolutionDisplay
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.DummyEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.variants.DummyEvolution
|
||||
import net.minecraft.network.PacketByteBuf
|
||||
|
||||
/**
|
||||
|
||||
@@ -89,7 +89,8 @@ data class FormData(
|
||||
val types: Iterable<ElementalType>
|
||||
get() = secondaryType?.let { listOf(primaryType, it) } ?: listOf(primaryType)
|
||||
|
||||
val evolutions: MutableSet<Evolution>
|
||||
// Only exists for use of Pokemon.evolutions do not expose to end user due to how the species/form data is structured
|
||||
internal val evolutions: MutableSet<Evolution>
|
||||
get() = _evolutions ?: species.evolutions
|
||||
|
||||
fun eyeHeight(entity: PokemonEntity): Float {
|
||||
|
||||
@@ -28,9 +28,9 @@ import com.cablemc.pokemoncobbled.common.pokemon.activestate.ActivePokemonState
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.activestate.InactivePokemonState
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.activestate.PokemonState
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.activestate.SentOutState
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.CobbledClientEvolutionController
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.CobbledServerEvolutionController
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.LevelEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.controller.CobbledClientEvolutionController
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.controller.CobbledServerEvolutionController
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.variants.LevelEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.status.PersistentStatus
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.status.PersistentStatusContainer
|
||||
import com.cablemc.pokemoncobbled.common.util.DataKeys
|
||||
@@ -90,8 +90,7 @@ open class Pokemon {
|
||||
experience = experienceGroup.getExperience(value)
|
||||
}
|
||||
_level.emit(value)
|
||||
this.species.evolutions.filterIsInstance<LevelEvolution>()
|
||||
.sortedBy { evolution -> evolution.optional }
|
||||
this.evolutions.filterIsInstance<LevelEvolution>()
|
||||
.forEach { evolution ->
|
||||
evolution.attemptEvolution(this)
|
||||
}
|
||||
@@ -169,6 +168,10 @@ open class Pokemon {
|
||||
|
||||
val storeCoordinates = SettableObservable<StoreCoordinates<*>?>(null)
|
||||
|
||||
|
||||
// We want non-optional evolutions to trigger first to avoid unnecessary packets and any cost associate with an optional one that would just be lost
|
||||
val evolutions: Iterable<Evolution> = this.form.evolutions.sortedBy { evolution -> evolution.optional }
|
||||
|
||||
// Lazy due to leaking this
|
||||
/**
|
||||
* The server side [EvolutionController] responsible for holding [Evolution]s.
|
||||
|
||||
@@ -2,10 +2,10 @@ package com.cablemc.pokemoncobbled.common.pokemon
|
||||
|
||||
import com.cablemc.pokemoncobbled.common.api.abilities.AbilityTemplate
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.effect.ShoulderEffect
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.experience.ExperienceGroups
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.stats.Stat
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.evolution.Evolution
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.evolution.PreEvolution
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.experience.ExperienceGroups
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.stats.Stat
|
||||
import com.cablemc.pokemoncobbled.common.api.types.ElementalType
|
||||
import com.cablemc.pokemoncobbled.common.api.types.ElementalTypes
|
||||
import com.cablemc.pokemoncobbled.common.entity.pokemon.PokemonEntity
|
||||
@@ -42,7 +42,8 @@ class Species {
|
||||
|
||||
var forms = mutableListOf(FormData())
|
||||
|
||||
val evolutions: MutableSet<Evolution> = hashSetOf()
|
||||
// Only exists for use of Pokemon.evolutions do not expose to end user due to how the species/form data is structured
|
||||
internal val evolutions: MutableSet<Evolution> = hashSetOf()
|
||||
|
||||
val preEvolution: PreEvolution? = null
|
||||
|
||||
|
||||
+3
-3
@@ -2,9 +2,9 @@ package com.cablemc.pokemoncobbled.common.pokemon.evolution.adapters
|
||||
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.evolution.Evolution
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.evolution.adapters.EvolutionAdapter
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.ItemInteractionEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.LevelEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.TradeEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.variants.ItemInteractionEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.variants.LevelEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.variants.TradeEvolution
|
||||
import com.google.common.collect.HashBiMap
|
||||
import com.google.gson.*
|
||||
import java.lang.reflect.Type
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.cablemc.pokemoncobbled.common.pokemon.evolution
|
||||
package com.cablemc.pokemoncobbled.common.pokemon.evolution.controller
|
||||
|
||||
import com.cablemc.pokemoncobbled.common.CobbledNetwork.sendToServer
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.evolution.EvolutionController
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
package com.cablemc.pokemoncobbled.common.pokemon.evolution
|
||||
package com.cablemc.pokemoncobbled.common.pokemon.evolution.controller
|
||||
|
||||
import com.cablemc.pokemoncobbled.common.api.events.CobbledEvents
|
||||
import com.cablemc.pokemoncobbled.common.api.events.pokemon.evolution.EvolutionAcceptedEvent
|
||||
@@ -136,7 +136,7 @@ internal class CobbledServerEvolutionController(override val pokemon: Pokemon) :
|
||||
result
|
||||
})
|
||||
|
||||
private fun findEvolutionFromId(id: String) = this.pokemon.species.evolutions
|
||||
private fun findEvolutionFromId(id: String) = this.pokemon.evolutions
|
||||
.firstOrNull { evolution -> evolution.id.equals(id, true) }
|
||||
|
||||
}
|
||||
+2
-1
@@ -1,4 +1,4 @@
|
||||
package com.cablemc.pokemoncobbled.common.pokemon.evolution
|
||||
package com.cablemc.pokemoncobbled.common.pokemon.evolution.variants
|
||||
|
||||
import com.cablemc.pokemoncobbled.common.api.moves.MoveTemplate
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.PokemonProperties
|
||||
@@ -6,6 +6,7 @@ import com.cablemc.pokemoncobbled.common.api.pokemon.evolution.Evolution
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.evolution.requirement.EvolutionRequirement
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.Pokemon
|
||||
|
||||
// Used only to comply with pokemon update packet structure
|
||||
internal class DummyEvolution : Evolution {
|
||||
|
||||
override val id = "dummy"
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.cablemc.pokemoncobbled.common.pokemon.evolution
|
||||
package com.cablemc.pokemoncobbled.common.pokemon.evolution.variants
|
||||
|
||||
import com.cablemc.pokemoncobbled.common.api.moves.MoveTemplate
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.PokemonProperties
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.cablemc.pokemoncobbled.common.pokemon.evolution
|
||||
package com.cablemc.pokemoncobbled.common.pokemon.evolution.variants
|
||||
|
||||
import com.cablemc.pokemoncobbled.common.api.moves.MoveTemplate
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.PokemonProperties
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.cablemc.pokemoncobbled.common.pokemon.evolution
|
||||
package com.cablemc.pokemoncobbled.common.pokemon.evolution.variants
|
||||
|
||||
import com.cablemc.pokemoncobbled.common.api.moves.MoveTemplate
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.PokemonProperties
|
||||
@@ -3,8 +3,8 @@ package com.cablemc.pokemoncobbled.api.pokemon
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.PokemonProperties
|
||||
import com.cablemc.pokemoncobbled.common.api.pokemon.PokemonSpecies
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.Pokemon
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.LevelEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.TradeEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.variants.LevelEvolution
|
||||
import com.cablemc.pokemoncobbled.common.pokemon.evolution.variants.TradeEvolution
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
Reference in New Issue
Block a user