Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
52133711ad | ||
|
|
4e1b82917b | ||
|
|
3b1d257241 | ||
|
|
0b8f916648 | ||
|
|
5ad7d5406a | ||
|
|
6ec008ee83 | ||
|
|
f4d2226ec2 | ||
|
|
0fc5d5e9d7 | ||
|
|
972c0f6430 | ||
|
|
86db95a7dc | ||
|
|
be95b79e4d | ||
|
|
5753443ab2 | ||
|
|
c6b7186032 | ||
|
|
32f3be2687 | ||
|
|
9012d78806 | ||
|
|
fffdfb7654 | ||
|
|
b314733f0b | ||
|
|
d5aa07fe91 | ||
|
|
27bedc2d2c | ||
|
|
86744c23a5 | ||
|
|
8d1a64136f | ||
|
|
bc550dd32c | ||
|
|
3009af8c42 | ||
|
|
bfd34eb621 | ||
|
|
2dc2c96176 | ||
|
|
df4db17cfd | ||
|
|
45bec488f1 | ||
|
|
9287374504 | ||
|
|
f2a36cd74a | ||
|
|
7ab3951613 | ||
|
|
e6d51c4d56 | ||
|
|
b9364304ca | ||
|
|
8236c6fb11 | ||
|
|
2041d43db4 | ||
|
|
94d92b6fc0 | ||
|
|
4a4d292228 | ||
|
|
0fef9eec3d | ||
|
|
5f3dc395ec |
@@ -4,15 +4,33 @@
|
||||
|
||||
### Additions
|
||||
- Added unique send out particles for Cherish, Dream, Beast, and Ancient Origin balls.
|
||||
- Made Wooloo and Dubwool dye-able like sheep
|
||||
|
||||
### Changes
|
||||
- Sounds for Relic Coin Sacks have been correctly renamed. Relic Coin Pouches received new sounds for breaking and placing.
|
||||
- Readjusted Petilil portraits
|
||||
- Changed "dimensions" spawn condition to check with dimension IDs instead of effects, so custom dimension IDs can be used.
|
||||
|
||||
### Fixes
|
||||
- Fixed a bug in which adding organic material to the fossil tank via right click was adding the full count of the stack currently in hand
|
||||
- Fixed a niche issue where some properties of entities were not initialized correctly, causing Pokémon that appeared to be level 1 until you battle them.
|
||||
- Fixed Fossilized Drake being missing from the Fossils item tag.
|
||||
- Fixed Gilded Chest block entity not being cleared on block break
|
||||
- Fixed sherd brokenness on Forge/Supplementaries incompat
|
||||
- Fixed Fossil Compartment crash with Jade / WAILA forks
|
||||
- Fixed PCStore#resize not allowing PC boxes size reduction.
|
||||
- Fixed pasture block PC lookups when the player is offline.
|
||||
- Fixed an untranslated battle message that occurs when using a move that just ran out of PP (e.g. Fire Blast that just got spited mid-turn).
|
||||
- Fixed held items being eaten even when the held item evolutions are already unlocked.
|
||||
- Fixed Hisuian Decidueye not being Grass/Fighting
|
||||
- Fixed both Decidueye forms learning both Triple Arrows and Spirit Shackle
|
||||
- Fixed Pineco being unable to evolve into Shulker Forretress
|
||||
- Fixed Kabutops T-posing when underwater. It still does not have proper swimming animations yet though.
|
||||
- Fixed Pidgey's missing walk animation.
|
||||
- Fixed recoil evo condition.
|
||||
- Fixed issue where poser debug tools didnt work on JSON posers
|
||||
- Fixed issue where gilded chests dont close when going far away
|
||||
|
||||
|
||||
### Developer
|
||||
- Changed SpawnAction#complete to return a nullable generic R (the spawn action result) instead of a boolean. More information this way.
|
||||
|
||||
@@ -102,7 +102,6 @@ import com.cobblemon.mod.common.pokemon.properties.HiddenAbilityPropertyType
|
||||
import com.cobblemon.mod.common.pokemon.properties.UncatchableProperty
|
||||
import com.cobblemon.mod.common.pokemon.properties.tags.PokemonFlagProperty
|
||||
import com.cobblemon.mod.common.pokemon.stat.CobblemonStatProvider
|
||||
import com.cobblemon.mod.common.sherds.CobblemonSherds
|
||||
import com.cobblemon.mod.common.starter.CobblemonStarterHandler
|
||||
import com.cobblemon.mod.common.trade.TradeManager
|
||||
import com.cobblemon.mod.common.util.DataKeys
|
||||
@@ -235,7 +234,7 @@ object Cobblemon {
|
||||
val player = event.player
|
||||
val block = player.world.getBlockState(event.pos).block
|
||||
player.party().forEach { pokemon ->
|
||||
pokemon.evolutions
|
||||
pokemon.lockedEvolutions
|
||||
.filterIsInstance<BlockClickEvolution>()
|
||||
.forEach { evolution ->
|
||||
evolution.attemptEvolution(pokemon, BlockClickEvolution.BlockInteractionContext(block, player.world))
|
||||
@@ -416,7 +415,6 @@ object Cobblemon {
|
||||
).ifSuccessful { it.mute = true }
|
||||
}
|
||||
|
||||
CobblemonSherds.registerSherds()
|
||||
}
|
||||
|
||||
fun getLevel(dimension: RegistryKey<World>): World? {
|
||||
|
||||
@@ -226,7 +226,7 @@ open class PokemonBattle(
|
||||
val facedFainted = opponentPokemon.facedOpponents.contains(faintedPokemon)
|
||||
val pokemon = opponentPokemon.effectedPokemon
|
||||
if (facedFainted) {
|
||||
pokemon.evolutions.forEach { evolution ->
|
||||
pokemon.lockedEvolutions.forEach { evolution ->
|
||||
evolution.requirements.filterIsInstance<DefeatRequirement>().forEach { defeatRequirement ->
|
||||
if (defeatRequirement.target.matches(faintedPokemon.effectedPokemon)) {
|
||||
val progress = pokemon.evolutionProxy.current().progressFirstOrCreate({ it is DefeatEvolutionProgress && it.currentProgress().target == defeatRequirement.target }) { DefeatEvolutionProgress() }
|
||||
|
||||
@@ -52,21 +52,24 @@ abstract class MultiblockBlock(properties: Settings) : BlockWithEntity(propertie
|
||||
if(hand == Hand.OFF_HAND) {
|
||||
return ActionResult.SUCCESS
|
||||
}
|
||||
val entity = world.getBlockEntity(pos) as MultiblockEntity?
|
||||
if (entity?.multiblockStructure != null) {
|
||||
return entity.multiblockStructure!!.onUse(state, world, pos, player, hand, hit)
|
||||
if (!world.isClient) {
|
||||
val entity = world.getBlockEntity(pos) as MultiblockEntity?
|
||||
if (entity?.multiblockStructure != null) {
|
||||
return entity.multiblockStructure!!.onUse(state, world, pos, player, hand, hit)
|
||||
}
|
||||
}
|
||||
return super.onUse(state, world, pos, player, hand, hit)
|
||||
}
|
||||
|
||||
override fun onBreak(world: World, pos: BlockPos, state: BlockState, player: PlayerEntity?) {
|
||||
super.onBreak(world, pos, state, player)
|
||||
if (!world.isClient) {
|
||||
val entity = world.getBlockEntity(pos)
|
||||
if (entity is MultiblockEntity && entity.multiblockStructure != null) {
|
||||
entity.multiblockStructure!!.onBreak(world, pos, state, player)
|
||||
}
|
||||
entity?.markRemoved()
|
||||
}
|
||||
super.onBreak(world, pos, state, player)
|
||||
}
|
||||
|
||||
override fun createBlockEntity(pos: BlockPos, state: BlockState): BlockEntity? {
|
||||
@@ -78,6 +81,7 @@ abstract class MultiblockBlock(properties: Settings) : BlockWithEntity(propertie
|
||||
return BlockRenderType.MODEL
|
||||
}
|
||||
|
||||
//This is done so a block picked with NBT doesnt absolutely DESTROY multiblocks
|
||||
override fun getPickStack(world: BlockView, pos: BlockPos, state: BlockState): ItemStack {
|
||||
val blockEntity = world.getBlockEntity(pos) as? MultiblockEntity ?: return ItemStack.EMPTY
|
||||
return if (blockEntity.multiblockStructure == null) super.getPickStack(world, pos, state) else ItemStack.EMPTY
|
||||
|
||||
@@ -153,7 +153,7 @@ interface Evolution : EvolutionLike {
|
||||
pokemon.getOwnerPlayer()?.sendMessage(lang("experience.learned_move", pokemon.getDisplayName(), move.displayName))
|
||||
}
|
||||
// we want to instantly tick for example you might only evolve your Bulbasaur at level 34 so Venusaur should be immediately available
|
||||
pokemon.evolutions.filterIsInstance<PassiveEvolution>().forEach { evolution -> evolution.attemptEvolution(pokemon) }
|
||||
pokemon.lockedEvolutions.filterIsInstance<PassiveEvolution>().forEach { evolution -> evolution.attemptEvolution(pokemon) }
|
||||
pokemon.getOwnerPlayer()?.playSound(CobblemonSounds.EVOLVING, SoundCategory.NEUTRAL, 1F, 1F)
|
||||
CobblemonEvents.EVOLUTION_COMPLETE.post(EvolutionCompleteEvent(pokemon, this))
|
||||
}
|
||||
|
||||
@@ -78,7 +78,7 @@ abstract class SpawningCondition<T : SpawningContext> {
|
||||
return false
|
||||
} else if (ctx.position.z < minZ.orMin() || ctx.position.z > maxZ.orMax()) {
|
||||
return false
|
||||
} else if (dimensions != null && dimensions!!.isNotEmpty() && ctx.world.dimension.effects !in dimensions!!) {
|
||||
} else if (dimensions != null && dimensions!!.isNotEmpty() && ctx.world.dimensionKey.value !in dimensions!!) {
|
||||
return false
|
||||
} else if (moonPhase != null && ctx.moonPhase !in moonPhase!!) {
|
||||
return false
|
||||
|
||||
@@ -124,7 +124,7 @@ open class PlayerPartyStore(
|
||||
}
|
||||
|
||||
// Passive evolutions
|
||||
pokemon.evolutions.filterIsInstance<PassiveEvolution>().forEach { it.attemptEvolution(pokemon) }
|
||||
pokemon.lockedEvolutions.filterIsInstance<PassiveEvolution>().forEach { it.attemptEvolution(pokemon) }
|
||||
val removeList = mutableListOf<Evolution>()
|
||||
pokemon.evolutionProxy.server().forEach {
|
||||
if (!it.test(pokemon) && it is LevelUpEvolution && !it.permanent)
|
||||
|
||||
@@ -54,8 +54,8 @@ class DamageInstruction(
|
||||
if (recoiling) {
|
||||
battlePokemon.effectedPokemon.let { pokemon ->
|
||||
if (RecoilEvolutionProgress.supports(pokemon)) {
|
||||
val newPercentage = privateMessage.argumentAt(1)?.split("/")?.getOrNull(0)?.toIntOrNull() ?: 0
|
||||
val newHealth = (pokemon.hp * (newPercentage / 100.0)).roundToInt()
|
||||
val healthStr = privateMessage.argumentAt(1) ?: throw UnsupportedOperationException("Cant get recoil string")
|
||||
val newHealth = "([0-9]+).*".toRegex().find(healthStr)?.groups?.get(1)?.value?.toIntOrNull() ?: throw UnsupportedOperationException("Cant get recoil string")
|
||||
val difference = pokemon.currentHealth - newHealth
|
||||
if (difference > 0) {
|
||||
val progress = pokemon.evolutionProxy.current().progressFirstOrCreate({ it is RecoilEvolutionProgress }) { RecoilEvolutionProgress() }
|
||||
|
||||
@@ -38,6 +38,7 @@ import net.minecraft.util.shape.VoxelShapes
|
||||
import net.minecraft.world.BlockView
|
||||
import net.minecraft.world.World
|
||||
import net.minecraft.world.WorldAccess
|
||||
import net.minecraft.world.WorldEvents
|
||||
import net.minecraft.world.WorldView
|
||||
|
||||
|
||||
@@ -72,10 +73,12 @@ class RestorationTankBlock(properties: Settings) : MultiblockBlock(properties),
|
||||
|
||||
override fun onBreak(world: World, pos: BlockPos, state: BlockState, player: PlayerEntity?) {
|
||||
super.onBreak(world, pos, state, player)
|
||||
val otherPart = world.getBlockState(getPositionOfOtherPart(state, pos))
|
||||
if (otherPart.block is RestorationTankBlock) {
|
||||
world.setBlockState(getPositionOfOtherPart(state, pos), Blocks.AIR.defaultState, 35)
|
||||
world.syncWorldEvent(player, 2001, getPositionOfOtherPart(state, pos), getRawIdFromState(otherPart))
|
||||
if (!world.isClient) {
|
||||
val otherPart = world.getBlockState(getPositionOfOtherPart(state, pos))
|
||||
if (otherPart.block is RestorationTankBlock) {
|
||||
world.setBlockState(getPositionOfOtherPart(state, pos), Blocks.AIR.defaultState, Block.NOTIFY_ALL)
|
||||
world.syncWorldEvent(player, WorldEvents.BLOCK_BROKEN, getPositionOfOtherPart(state, pos), getRawIdFromState(otherPart))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,9 +90,9 @@ class RestorationTankBlock(properties: Settings) : MultiblockBlock(properties),
|
||||
itemStack: ItemStack?
|
||||
) {
|
||||
//Place the full block before we call to super to validate the multiblock
|
||||
world.setBlockState(pos.up(), state.with(PART, TankPart.TOP) as BlockState, 3)
|
||||
world.setBlockState(pos.up(), state.with(PART, TankPart.TOP) as BlockState, Block.NOTIFY_ALL)
|
||||
world.updateNeighbors(pos, Blocks.AIR)
|
||||
state.updateNeighbors(world, pos, 3)
|
||||
state.updateNeighbors(world, pos, Block.NOTIFY_ALL)
|
||||
super.onPlaced(world, pos, state, placer, itemStack)
|
||||
}
|
||||
|
||||
@@ -100,7 +103,7 @@ class RestorationTankBlock(properties: Settings) : MultiblockBlock(properties),
|
||||
val tankBottomPos = pos.down()
|
||||
val tankBottomState = world.getBlockState(tankBottomPos)
|
||||
if(tankBottomState.block.equals(CobblemonBlocks.RESTORATION_TANK.asBlock()) && tankBottomState.get(PART) == TankPart.BOTTOM) {
|
||||
return super.onUse(tankBottomState, world, tankBottomPos, player, hand, hit)
|
||||
return onUse(tankBottomState, world, tankBottomPos, player, hand, hit)
|
||||
}
|
||||
}
|
||||
return super.onUse(state, world, pos, player, hand, hit)
|
||||
|
||||
@@ -27,6 +27,7 @@ import net.minecraft.item.ItemPlacementContext
|
||||
import net.minecraft.item.ItemStack
|
||||
import net.minecraft.screen.ScreenHandler
|
||||
import net.minecraft.server.network.ServerPlayerEntity
|
||||
import net.minecraft.server.world.ServerWorld
|
||||
import net.minecraft.sound.SoundCategory
|
||||
import net.minecraft.state.StateManager
|
||||
import net.minecraft.state.property.BooleanProperty
|
||||
@@ -37,6 +38,7 @@ import net.minecraft.util.*
|
||||
import net.minecraft.util.hit.BlockHitResult
|
||||
import net.minecraft.util.math.BlockPos
|
||||
import net.minecraft.util.math.Direction
|
||||
import net.minecraft.util.math.random.Random
|
||||
import net.minecraft.util.shape.VoxelShape
|
||||
import net.minecraft.util.shape.VoxelShapes
|
||||
import net.minecraft.world.BlockView
|
||||
@@ -125,11 +127,13 @@ class GildedChestBlock(settings: Settings, val type: Type = Type.RED) : BlockWit
|
||||
fun isFake() = (type == Type.FAKE)
|
||||
|
||||
override fun onBreak(world: World, pos: BlockPos, state: BlockState, player: PlayerEntity) {
|
||||
if (isFake()) {
|
||||
if (player is ServerPlayerEntity) {
|
||||
if (!world.isClient) {
|
||||
if (isFake() && (player is ServerPlayerEntity)) {
|
||||
spawnPokemon(world, pos, state, player)
|
||||
}
|
||||
world.setBlockState(pos, if (state.fluidState.isOf(Fluids.WATER)) Blocks.WATER.defaultState else Blocks.AIR.defaultState)
|
||||
val bEntity = world.getBlockEntity(pos) as? GildedChestBlockEntity
|
||||
bEntity?.markRemoved()
|
||||
} else super.onBreak(world, pos, state, player)
|
||||
}
|
||||
|
||||
@@ -197,9 +201,11 @@ class GildedChestBlock(settings: Settings, val type: Type = Type.RED) : BlockWit
|
||||
newState: BlockState,
|
||||
moved: Boolean
|
||||
) {
|
||||
if (!state.isOf(newState.block)) {
|
||||
val chest = world.getBlockEntity(pos) as GildedChestBlockEntity
|
||||
ItemScatterer.spawn(world, pos, chest.inventoryContents)
|
||||
if (!state.isOf(newState.block) && !world.isClient) {
|
||||
val chest = world.getBlockEntity(pos) as? GildedChestBlockEntity
|
||||
chest?.let {
|
||||
ItemScatterer.spawn(world, pos, chest.inventoryContents)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -261,4 +267,14 @@ class GildedChestBlock(settings: Settings, val type: Type = Type.RED) : BlockWit
|
||||
}
|
||||
}
|
||||
|
||||
override fun scheduledTick(
|
||||
state: BlockState?,
|
||||
world: ServerWorld?,
|
||||
pos: BlockPos?,
|
||||
random: Random?
|
||||
) {
|
||||
val blockEntity = world?.getBlockEntity(pos) as? GildedChestBlockEntity ?: return
|
||||
blockEntity.onScheduledTick()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -29,11 +29,17 @@ class FossilAnalyzerBlockEntity(
|
||||
|
||||
class FossilAnalyzerInventory(val analyzerEntity: FossilAnalyzerBlockEntity) : SidedInventory {
|
||||
override fun clear() {
|
||||
TODO("Not yet implemented")
|
||||
if(analyzerEntity.multiblockStructure != null && analyzerEntity.multiblockStructure is FossilMultiblockStructure) {
|
||||
val fossilMultiblockStructure = analyzerEntity.multiblockStructure as FossilMultiblockStructure
|
||||
fossilMultiblockStructure.fossilInventory.clear()
|
||||
}
|
||||
}
|
||||
|
||||
override fun size(): Int {
|
||||
TODO("Not yet implemented")
|
||||
if (analyzerEntity.multiblockStructure != null) {
|
||||
return 3
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
override fun isEmpty(): Boolean {
|
||||
@@ -41,19 +47,34 @@ class FossilAnalyzerBlockEntity(
|
||||
}
|
||||
|
||||
override fun getStack(slot: Int): ItemStack {
|
||||
if (analyzerEntity.multiblockStructure != null && analyzerEntity.multiblockStructure is FossilMultiblockStructure) {
|
||||
val fossilMultiblockStructure = analyzerEntity.multiblockStructure as FossilMultiblockStructure
|
||||
if (fossilMultiblockStructure.fossilInventory.size > slot) {
|
||||
return fossilMultiblockStructure.fossilInventory[slot]
|
||||
}
|
||||
}
|
||||
return ItemStack.EMPTY
|
||||
}
|
||||
|
||||
//Unimplemented since no extract
|
||||
override fun removeStack(slot: Int, amount: Int): ItemStack {
|
||||
return ItemStack.EMPTY
|
||||
return removeStack(slot)
|
||||
}
|
||||
|
||||
override fun removeStack(slot: Int): ItemStack {
|
||||
// if(analyzerEntity.multiblockStructure is FossilMultiblockStructure) {
|
||||
// val fossilMultiblockStructure = analyzerEntity.multiblockStructure as FossilMultiblockStructure
|
||||
// if (fossilMultiblockStructure.fossilInventory.size > slot) {
|
||||
// val itemStack = fossilMultiblockStructure.fossilInventory.removeAt(slot)
|
||||
// markDirty()
|
||||
// return itemStack
|
||||
// }
|
||||
// }
|
||||
return ItemStack.EMPTY
|
||||
}
|
||||
|
||||
override fun setStack(slot: Int, stack: ItemStack) {
|
||||
if (analyzerEntity.multiblockStructure != null) {
|
||||
if (analyzerEntity.multiblockStructure != null && analyzerEntity.multiblockStructure is FossilMultiblockStructure) {
|
||||
val struct = analyzerEntity.multiblockStructure as FossilMultiblockStructure
|
||||
analyzerEntity.world?.let {
|
||||
struct.insertFossil(stack, it)
|
||||
@@ -72,7 +93,10 @@ class FossilAnalyzerBlockEntity(
|
||||
}
|
||||
|
||||
override fun getAvailableSlots(side: Direction?): IntArray {
|
||||
return IntArray(1)
|
||||
if(analyzerEntity.multiblockStructure != null && analyzerEntity.multiblockStructure is FossilMultiblockStructure) {
|
||||
return intArrayOf(0,1,2)
|
||||
}
|
||||
return IntArray(0)
|
||||
}
|
||||
|
||||
override fun canInsert(slot: Int, stack: ItemStack?, dir: Direction?): Boolean {
|
||||
@@ -87,8 +111,8 @@ class FossilAnalyzerBlockEntity(
|
||||
}
|
||||
|
||||
override fun canExtract(slot: Int, stack: ItemStack?, dir: Direction?): Boolean {
|
||||
// return analyzerEntity.multiblockStructure != null && analyzerEntity.multiblockStructure is FossilMultiblockStructure && dir == Direction.DOWN
|
||||
return false
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -20,6 +20,7 @@ import net.minecraft.entity.player.PlayerEntity
|
||||
import net.minecraft.entity.player.PlayerInventory
|
||||
import net.minecraft.inventory.DoubleInventory
|
||||
import net.minecraft.inventory.Inventories
|
||||
import net.minecraft.inventory.Inventory
|
||||
import net.minecraft.inventory.SidedInventory
|
||||
import net.minecraft.item.ItemStack
|
||||
import net.minecraft.nbt.NbtCompound
|
||||
@@ -58,9 +59,7 @@ class GildedChestBlockEntity(pos: BlockPos, state: BlockState, val type: Type =
|
||||
override fun isPlayerViewing(player: PlayerEntity): Boolean {
|
||||
if (player.currentScreenHandler is GenericContainerScreenHandler) {
|
||||
val inventory = (player.currentScreenHandler as GenericContainerScreenHandler).inventory
|
||||
return inventory === this@GildedChestBlockEntity || inventory is DoubleInventory && inventory.isPart(
|
||||
this@GildedChestBlockEntity
|
||||
)
|
||||
return inventory === this@GildedChestBlockEntity
|
||||
}
|
||||
return false
|
||||
}
|
||||
@@ -99,8 +98,6 @@ class GildedChestBlockEntity(pos: BlockPos, state: BlockState, val type: Type =
|
||||
return dir == Direction.DOWN
|
||||
}
|
||||
|
||||
override fun canPlayerUse(player: PlayerEntity) = !player.isSpectator
|
||||
|
||||
override fun getInvStackList(): DefaultedList<ItemStack> = inventoryContents
|
||||
|
||||
override fun setInvStackList(list: DefaultedList<ItemStack>) {
|
||||
@@ -164,4 +161,10 @@ class GildedChestBlockEntity(pos: BlockPos, state: BlockState, val type: Type =
|
||||
Inventories.readNbt(nbt, inventoryContents)
|
||||
}
|
||||
}
|
||||
|
||||
fun onScheduledTick() {
|
||||
if (!this.removed) {
|
||||
stateManager.updateViewerCount(this.getWorld(), this.getPos(), this.cachedState)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -480,15 +480,19 @@ class FossilMultiblockStructure (
|
||||
}
|
||||
|
||||
fun updateProgress(world: World) {
|
||||
val screenID = if(protectionTime > 0F ) {
|
||||
val screenID = if (protectionTime > 0F) {
|
||||
MonitorBlock.MonitorScreen.GREEN_PROGRESS_9
|
||||
} else if (timeRemaining <= 0) {
|
||||
MonitorBlock.MonitorScreen.OFF
|
||||
} else {
|
||||
getProgressScreen((TIME_TO_TAKE - timeRemaining) / TIME_PER_STAGE)
|
||||
}
|
||||
|
||||
val monitorState = world.getBlockState(monitorPos)
|
||||
world.setBlockState(monitorPos, monitorState.with(MonitorBlock.SCREEN, screenID))
|
||||
|
||||
if (monitorState.contains(MonitorBlock.SCREEN)) {
|
||||
world.setBlockState(monitorPos, monitorState.with(MonitorBlock.SCREEN, screenID))
|
||||
}
|
||||
}
|
||||
|
||||
fun getProgressScreen(progress:Int) : MonitorBlock.MonitorScreen {
|
||||
|
||||
@@ -86,30 +86,12 @@ class JsonPokemonPoseableModel(override val rootPart: Bone) : PokemonPoseableMod
|
||||
|
||||
override val head: Bone by lazy { headJoint?.let { getPart(it) } ?: rootPart }
|
||||
|
||||
|
||||
@SerializedName("portraitScale")
|
||||
private val _portraitScale: Float? = null
|
||||
@SerializedName("portraitTranslation")
|
||||
private val _portraitTranslation: Vec3d? = null
|
||||
|
||||
@SerializedName("profileScale")
|
||||
private val _profileScale: Float? = null
|
||||
@SerializedName("profileTranslation")
|
||||
private val _profileTranslation: Vec3d? = null
|
||||
|
||||
//Some weirdness going on here, vars have to be initialized, gson doesn't like multiple fields with the same name
|
||||
@Transient
|
||||
//Idk, works fine with Blastoise
|
||||
override var portraitScale = 1F
|
||||
get() = _portraitScale ?: 1F
|
||||
@Transient
|
||||
override var portraitTranslation = Vec3d.ZERO
|
||||
get() = _portraitTranslation ?: Vec3d(0.0, 0.0, 0.0)
|
||||
@Transient
|
||||
override var profileScale = 1F
|
||||
get() = _profileScale ?: 1F
|
||||
@Transient
|
||||
override var profileTranslation = Vec3d.ZERO
|
||||
get() = _profileTranslation ?: Vec3d(0.0, 0.0, 0.0)
|
||||
|
||||
|
||||
val faint: Supplier<StatefulAnimation<PokemonEntity, ModelFrame>>? = null
|
||||
|
||||
@@ -8,13 +8,14 @@
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.animation.BipedWalkAnimation
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPose
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPoseableModel
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.MOVING_POSES
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.STATIONARY_POSES
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
|
||||
import net.minecraft.client.model.ModelPart
|
||||
import net.minecraft.util.math.Vec3d
|
||||
@@ -56,7 +57,7 @@ class KabutopsModel(root: ModelPart) : PokemonPoseableModel(), HeadedFrame, Bipe
|
||||
|
||||
standing = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = UI_POSES + PoseType.STAND,
|
||||
poseTypes = UI_POSES + STATIONARY_POSES,
|
||||
condition = { !it.isBattling },
|
||||
quirks = arrayOf(blink),
|
||||
idleAnimations = arrayOf(
|
||||
@@ -67,7 +68,7 @@ class KabutopsModel(root: ModelPart) : PokemonPoseableModel(), HeadedFrame, Bipe
|
||||
|
||||
walk = registerPose(
|
||||
poseName = "walk",
|
||||
poseType = PoseType.WALK,
|
||||
poseTypes = MOVING_POSES,
|
||||
quirks = arrayOf(blink),
|
||||
idleAnimations = arrayOf(
|
||||
singleBoneLook(),
|
||||
|
||||
@@ -8,21 +8,14 @@
|
||||
|
||||
package com.cobblemon.mod.common.client.render.models.blockbench.pokemon.gen1
|
||||
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.animation.WingFlapIdleAnimation
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.createTransformation
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BiWingedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.BipedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.frame.HeadedFrame
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.CryProvider
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPose
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pokemon.PokemonPoseableModel
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.pose.ModelPartTransformation
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.wavefunction.parabolaFunction
|
||||
import com.cobblemon.mod.common.client.render.models.blockbench.wavefunction.sineFunction
|
||||
import com.cobblemon.mod.common.entity.PoseType
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.SHOULDER_POSES
|
||||
import com.cobblemon.mod.common.entity.PoseType.Companion.UI_POSES
|
||||
import com.cobblemon.mod.common.util.math.geometry.toRadians
|
||||
import net.minecraft.client.model.ModelPart
|
||||
import net.minecraft.util.math.Vec3d
|
||||
|
||||
@@ -66,7 +59,7 @@ class PidgeyModel(root: ModelPart) : PokemonPoseableModel(), HeadedFrame {
|
||||
|
||||
stand = registerPose(
|
||||
poseName = "standing",
|
||||
poseTypes = SHOULDER_POSES + UI_POSES + PoseType.STANDING_POSES,
|
||||
poseTypes = SHOULDER_POSES + UI_POSES + PoseType.STATIONARY_POSES - PoseType.HOVER,
|
||||
transformTicks = 10,
|
||||
transformedParts = arrayOf(
|
||||
wingClosedLeft.createTransformation().withVisibility(visibility = true),
|
||||
|
||||
@@ -25,8 +25,8 @@ class PetililHisuiBiasModel (root: ModelPart) : PokemonPoseableModel(), HeadedFr
|
||||
val leaf_left = getPart("leaf_left_rotation")
|
||||
val leaf_right = getPart("leaf_right_rotation")
|
||||
|
||||
override var portraitScale = 1.75F
|
||||
override var portraitTranslation = Vec3d(0.01, -0.39, 0.0)
|
||||
override var portraitScale = 1.52F
|
||||
override var portraitTranslation = Vec3d(0.1, -0.25, 0.0)
|
||||
|
||||
override var profileScale = 0.8F
|
||||
override var profileTranslation = Vec3d(0.0, 0.5, 0.0)
|
||||
|
||||
@@ -22,8 +22,8 @@ class PetililModel (root: ModelPart) : PokemonPoseableModel(), HeadedFrame {
|
||||
override val rootPart = root.registerChildWithAllChildren("petilil")
|
||||
override val head = getPart("head")
|
||||
|
||||
override var portraitScale = 2.0F
|
||||
override var portraitTranslation = Vec3d(-0.3, -1.2, 0.0)
|
||||
override var portraitScale = 1.52F
|
||||
override var portraitTranslation = Vec3d(0.1, -0.25, 0.0)
|
||||
|
||||
override var profileScale = 0.8F
|
||||
override var profileTranslation = Vec3d(0.0, 0.5, 0.0)
|
||||
|
||||
@@ -28,8 +28,8 @@ class DubwoolModel(root: ModelPart) : PokemonPoseableModel(), HeadedFrame, Quadr
|
||||
override val foreRightLeg = getPart("leg_front_right")
|
||||
override val hindLeftLeg = getPart("leg_back_left")
|
||||
override val hindRightLeg = getPart("leg_back_right")
|
||||
val wool = getPart("wool")
|
||||
val neckWool = getPart("neck_wool")
|
||||
val wool = getPart("wool_shearable")
|
||||
val neckWool = getPart("neck_wool_shearable")
|
||||
|
||||
override var portraitScale = 3.1F
|
||||
override var portraitTranslation = Vec3d(-1.2, -0.7, 0.0)
|
||||
|
||||
@@ -28,7 +28,7 @@ class WoolooModel(root: ModelPart) : PokemonPoseableModel(), HeadedFrame, Quadru
|
||||
override val foreRightLeg = getPart("leg_front_right")
|
||||
override val hindLeftLeg = getPart("leg_back_left")
|
||||
override val hindRightLeg = getPart("leg_back_right")
|
||||
val wool = getPart("wool")
|
||||
val wool = getPart("wool_shearable")
|
||||
|
||||
override var portraitScale = 3.1F
|
||||
override var portraitTranslation = Vec3d(-0.85, -1.8, 0.0)
|
||||
|
||||
@@ -21,7 +21,9 @@ import com.cobblemon.mod.common.api.interaction.PokemonEntityInteraction
|
||||
import com.cobblemon.mod.common.api.net.serializers.PoseTypeDataSerializer
|
||||
import com.cobblemon.mod.common.api.net.serializers.StringSetDataSerializer
|
||||
import com.cobblemon.mod.common.api.pokemon.PokemonProperties
|
||||
import com.cobblemon.mod.common.api.pokemon.feature.ChoiceSpeciesFeatureProvider
|
||||
import com.cobblemon.mod.common.api.pokemon.feature.FlagSpeciesFeature
|
||||
import com.cobblemon.mod.common.api.pokemon.feature.StringSpeciesFeature
|
||||
import com.cobblemon.mod.common.api.pokemon.status.Statuses
|
||||
import com.cobblemon.mod.common.api.reactive.ObservableSubscription
|
||||
import com.cobblemon.mod.common.api.reactive.SimpleObservable
|
||||
@@ -81,6 +83,7 @@ import net.minecraft.entity.passive.PassiveEntity
|
||||
import net.minecraft.entity.passive.TameableShoulderEntity
|
||||
import net.minecraft.entity.player.PlayerEntity
|
||||
import net.minecraft.fluid.FluidState
|
||||
import net.minecraft.item.DyeItem
|
||||
import net.minecraft.item.ItemStack
|
||||
import net.minecraft.item.ItemUsage
|
||||
import net.minecraft.item.Items
|
||||
@@ -101,8 +104,11 @@ import net.minecraft.sound.SoundEvents
|
||||
import net.minecraft.text.Text
|
||||
import net.minecraft.text.TextContent
|
||||
import net.minecraft.util.ActionResult
|
||||
import net.minecraft.util.Colors
|
||||
import net.minecraft.util.DyeColor
|
||||
import net.minecraft.util.Hand
|
||||
import net.minecraft.util.Identifier
|
||||
import net.minecraft.util.Util
|
||||
import net.minecraft.util.math.BlockPos
|
||||
import net.minecraft.util.math.Box
|
||||
import net.minecraft.util.math.Vec3d
|
||||
@@ -330,6 +336,21 @@ open class PokemonEntity(
|
||||
this.tethering = null
|
||||
this.pokemon.recall()
|
||||
}
|
||||
//This is so that pokemon in the pasture block are ALWAYS in sync with the pokemon box
|
||||
//Before, pokemon entities in pastures would hold an old ref to a pokemon obj and changes to that would not appear to the underlying file
|
||||
if (this.tethering != null) {
|
||||
//Only for online players
|
||||
if (world.getPlayerByUuid(ownerUuid) != null){
|
||||
this.ownerUuid?.let {
|
||||
val actualPokemon = Cobblemon.storage.getPC(it)[this.pokemon.uuid]
|
||||
actualPokemon?.let {
|
||||
if (it !== pokemon) {
|
||||
pokemon = it
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
schedulingTracker.update(1/20F)
|
||||
}
|
||||
@@ -594,6 +615,7 @@ open class PokemonEntity(
|
||||
|
||||
override fun interactMob(player: PlayerEntity, hand: Hand) : ActionResult {
|
||||
val itemStack = player.getStackInHand(hand)
|
||||
val colorFeature = pokemon.getFeature<StringSpeciesFeature>(DataKeys.CAN_BE_COLORED)
|
||||
|
||||
if (itemStack.isOf(Items.SHEARS) && this.isShearable) {
|
||||
this.sheared(SoundCategory.PLAYERS)
|
||||
@@ -659,7 +681,6 @@ open class PokemonEntity(
|
||||
pokemon.lastFlowerFed = ItemStack.EMPTY
|
||||
return ActionResult.success(world.isClient)
|
||||
}
|
||||
|
||||
else {
|
||||
val mushroomStew = ItemUsage.exchangeStack(itemStack, player, Items.MUSHROOM_STEW.defaultStack)
|
||||
player.setStackInHand(hand, mushroomStew)
|
||||
@@ -700,6 +721,22 @@ open class PokemonEntity(
|
||||
return ActionResult.SUCCESS
|
||||
}
|
||||
}
|
||||
else if (itemStack.item is DyeItem && colorFeature != null) {
|
||||
val item = itemStack.item as DyeItem
|
||||
if (item.color.name.lowercase() != colorFeature.value.lowercase()) {
|
||||
itemStack.decrement(1)
|
||||
colorFeature.value = item.color.name.lowercase()
|
||||
this.pokemon.markFeatureDirty(colorFeature)
|
||||
this.pokemon.updateAspects()
|
||||
}
|
||||
}
|
||||
else if (itemStack.item.equals(Items.WATER_BUCKET) && colorFeature != null) {
|
||||
itemStack.decrement(1)
|
||||
player.giveOrDropItemStack(Items.BUCKET.defaultStack)
|
||||
colorFeature.value = ""
|
||||
this.pokemon.markFeatureDirty(colorFeature)
|
||||
this.pokemon.updateAspects()
|
||||
}
|
||||
|
||||
|
||||
if (hand == Hand.MAIN_HAND && player is ServerPlayerEntity && pokemon.getOwnerPlayer() == player) {
|
||||
@@ -828,7 +865,7 @@ open class PokemonEntity(
|
||||
// Check evolution item interaction
|
||||
if (pokemon.getOwnerPlayer() == player) {
|
||||
val context = ItemInteractionEvolution.ItemInteractionContext(stack, player.world)
|
||||
pokemon.evolutions
|
||||
pokemon.lockedEvolutions
|
||||
.filterIsInstance<ItemInteractionEvolution>()
|
||||
.forEach { evolution ->
|
||||
if (evolution.attemptEvolution(pokemon, context)) {
|
||||
@@ -1126,8 +1163,26 @@ open class PokemonEntity(
|
||||
this.pokemon.markFeatureDirty(feature)
|
||||
this.pokemon.updateAspects()
|
||||
val i = this.random.nextInt(3) + 1
|
||||
for (j in 0 until i) {
|
||||
val itemEntity = this.dropItem(Items.WHITE_WOOL, 1) ?: return
|
||||
for (j in 0 .. i) {
|
||||
val color = this.pokemon.getFeature<StringSpeciesFeature>(DataKeys.CAN_BE_COLORED)?.value ?: "white"
|
||||
val woolItem = when (color) {
|
||||
"black" -> Items.BLACK_WOOL
|
||||
"blue" -> Items.BLUE_WOOL
|
||||
"brown" -> Items.BROWN_WOOL
|
||||
"cyan" -> Items.CYAN_WOOL
|
||||
"gray" -> Items.GRAY_WOOL
|
||||
"green" -> Items.GREEN_WOOL
|
||||
"light-blue" -> Items.LIGHT_BLUE_WOOL
|
||||
"light-gray" -> Items.LIGHT_GRAY_WOOL
|
||||
"lime" -> Items.LIME_WOOL
|
||||
"magenta" -> Items.MAGENTA_WOOL
|
||||
"orange" -> Items.ORANGE_WOOL
|
||||
"purple" -> Items.PURPLE_WOOL
|
||||
"red" -> Items.RED_WOOL
|
||||
"yellow" -> Items.YELLOW_WOOL
|
||||
else -> Items.WHITE_WOOL
|
||||
}
|
||||
val itemEntity = this.dropItem(woolItem, 1) ?: return
|
||||
itemEntity.velocity = itemEntity.velocity.add(
|
||||
((this.random.nextFloat() - this.random.nextFloat()) * 0.1f).toDouble(),
|
||||
(this.random.nextFloat() * 0.05f).toDouble(),
|
||||
@@ -1141,6 +1196,8 @@ open class PokemonEntity(
|
||||
return !this.isBusy && !this.pokemon.isFainted() && !feature.enabled
|
||||
}
|
||||
|
||||
|
||||
|
||||
override fun canUsePortals() = false
|
||||
|
||||
override fun setAir(air: Int) {
|
||||
|
||||
@@ -19,7 +19,7 @@ class LinkCableItem : CobblemonItem(Settings()), PokemonEntityInteraction {
|
||||
override val accepted = setOf(PokemonEntityInteraction.Ownership.OWNER)
|
||||
override fun processInteraction(player: ServerPlayerEntity, entity: PokemonEntity, stack: ItemStack): Boolean {
|
||||
val pokemon = entity.pokemon
|
||||
pokemon.evolutions.filterIsInstance<TradeEvolution>().forEach { evolution ->
|
||||
pokemon.lockedEvolutions.filterIsInstance<TradeEvolution>().forEach { evolution ->
|
||||
// If an evolution is possible non-optional or has been successfully queued we will consume the item and stop
|
||||
// validate requirements to respect required held items and such.
|
||||
if (evolution.requirements.all { it.check(pokemon) } && evolution.evolve(pokemon)) {
|
||||
|
||||
@@ -426,6 +426,8 @@ open class Pokemon : ShowdownIdentifiable {
|
||||
|
||||
// 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> get() = this.form.evolutions.sortedBy { evolution -> evolution.optional }
|
||||
val lockedEvolutions: Iterable<Evolution>
|
||||
get() = evolutions.filter { it !in evolutionProxy.current() }
|
||||
|
||||
val preEvolution: PreEvolution? get() = this.form.preEvolution
|
||||
|
||||
|
||||
@@ -98,11 +98,11 @@ object TradeManager {
|
||||
party2.add(pokemon1)
|
||||
party1.add(pokemon2)
|
||||
|
||||
pokemon1.evolutions.filterIsInstance<TradeEvolution>().firstOrNull {
|
||||
pokemon1.lockedEvolutions.filterIsInstance<TradeEvolution>().firstOrNull {
|
||||
it.attemptEvolution(pokemon1, pokemon2)
|
||||
}
|
||||
|
||||
pokemon2.evolutions.filterIsInstance<TradeEvolution>().firstOrNull {
|
||||
pokemon2.lockedEvolutions.filterIsInstance<TradeEvolution>().firstOrNull {
|
||||
it.attemptEvolution(pokemon2, pokemon1)
|
||||
}
|
||||
CobblemonEvents.TRADE_COMPLETED.post(TradeCompletedEvent(player1, pokemon2, player2, pokemon1))
|
||||
|
||||
@@ -134,6 +134,7 @@ object DataKeys {
|
||||
// Features
|
||||
const val CAN_BE_MILKED = "milkable"
|
||||
const val HAS_BEEN_SHEARED = "sheared"
|
||||
const val CAN_BE_COLORED = "color"
|
||||
|
||||
// Variants
|
||||
const val IS_MOOSHTANK = "mooshtank"
|
||||
|
||||
@@ -231,7 +231,7 @@
|
||||
],
|
||||
"position": [0, "(math.clamp(math.sin(q.anim_time*90*4-110+180)*1,0.5,1)-0.5)*0.7", 0]
|
||||
},
|
||||
"wool": {
|
||||
"wool_shearable": {
|
||||
"position": [0, "0.5+Math.sin((query.anim_time-0.3) * 90 * 8) * 0.3", 0]
|
||||
},
|
||||
"tail": {
|
||||
@@ -419,10 +419,10 @@
|
||||
},
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.1667": [0, -2, -1],
|
||||
"0.3333": [0, -4, 0],
|
||||
"1.6667": [0, -4, 0],
|
||||
"1.8333": [0, -2, -1],
|
||||
"0.1667": [0, -1, -1],
|
||||
"0.3333": [0, -3, 0],
|
||||
"1.6667": [0, -3, 0],
|
||||
"1.8333": [0, -1, -1],
|
||||
"2.0": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
@@ -544,26 +544,28 @@
|
||||
},
|
||||
"ear_left": {
|
||||
"rotation": {
|
||||
"0.0": [0, -10, 0],
|
||||
"0.2917": [0, -10, -10],
|
||||
"0.4583": [0, -5, 5],
|
||||
"0.6667": [0, -10, 0],
|
||||
"1.6667": [0, -10, 0],
|
||||
"1.9167": [0, 0, 10],
|
||||
"2.0417": [0, -15, -5],
|
||||
"2.1667": [0, -10, 0]
|
||||
"0.0": [0, 0, 0],
|
||||
"0.2917": [-5, 10, -10],
|
||||
"0.4583": [-12.5, 11, -5],
|
||||
"0.6667": [-14, 12.3, 0],
|
||||
"1.0": [-15, 11.53, 0],
|
||||
"1.6667": [-10, 10, 0],
|
||||
"1.9167": [0, 10, 10],
|
||||
"2.0417": [0, -5, -5],
|
||||
"2.1667": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"ear_right": {
|
||||
"rotation": {
|
||||
"0.0": [0, 10, 0],
|
||||
"0.2917": [0, 10, 10],
|
||||
"0.4583": [0, 5, -5],
|
||||
"0.6667": [0, 10, 0],
|
||||
"1.6667": [0, 10, 0],
|
||||
"1.9167": [0, 0, -10],
|
||||
"2.0417": [0, 15, 5],
|
||||
"2.1667": [0, 10, 0]
|
||||
"0.0": [0, 0, 0],
|
||||
"0.2917": [-5, -10, 10],
|
||||
"0.4583": [-12.5, -11, 5],
|
||||
"0.6667": [-14, -12.3, 0],
|
||||
"1.0": [-15, -11.53, 0],
|
||||
"1.6667": [-10, -10, 0],
|
||||
"1.9167": [0, -10, -10],
|
||||
"2.0417": [0, 5, 5],
|
||||
"2.1667": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"neck": {
|
||||
|
||||
@@ -23,16 +23,16 @@
|
||||
{
|
||||
"name": "torso",
|
||||
"parent": "body",
|
||||
"pivot": [0, 8.5, 3.75],
|
||||
"pivot": [0, 7.5, 3.75],
|
||||
"cubes": [
|
||||
{"origin": [-3, 6.75, 0], "size": [6, 6, 6], "uv": [24, 26]},
|
||||
{"origin": [-3, 6.75, -5], "size": [6, 6, 6], "inflate": 0.01, "uv": [0, 26]}
|
||||
{"origin": [-3, 5.75, 0], "size": [6, 6, 6], "uv": [24, 26]},
|
||||
{"origin": [-3, 5.75, -5], "size": [6, 6, 6], "inflate": 0.01, "uv": [0, 26]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "wool",
|
||||
"name": "wool_shearable",
|
||||
"parent": "torso",
|
||||
"pivot": [6.5, 2.75, -5],
|
||||
"pivot": [6.5, 1.75, -5],
|
||||
"cubes": [
|
||||
{"origin": [-6.5, 2.75, -5.5], "size": [13, 13, 13], "inflate": 0.02, "uv": [0, 0]}
|
||||
]
|
||||
@@ -58,177 +58,201 @@
|
||||
{
|
||||
"name": "neck",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 8.65, -1.5],
|
||||
"pivot": [0, 7.65, -1.5],
|
||||
"cubes": [
|
||||
{"origin": [-2, 8.65, -5.5], "size": [4, 4, 4], "inflate": 0.01, "uv": [8, 56]}
|
||||
{"origin": [-2, 7.65, -5.5], "size": [4, 4, 4], "inflate": 0.01, "uv": [8, 56]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "head",
|
||||
"parent": "torso",
|
||||
"pivot": [0.1, 10.75, -5],
|
||||
"pivot": [0.1, 9.75, -5],
|
||||
"cubes": [
|
||||
{"origin": [-2.5, 8.75, -10.5], "size": [5, 4, 6], "uv": [0, 39]},
|
||||
{"origin": [-1, 10, -10.5], "size": [2, 1, 0], "inflate": 0.01, "uv": [0, 30]},
|
||||
{"origin": [-1.9, 12.75, -8.25], "size": [1, 2, 1], "pivot": [-1.9, 12.75, -7.25], "rotation": [0, -5, -5], "uv": [39, 0]},
|
||||
{"origin": [0.9, 12.75, -8.25], "size": [1, 2, 1], "pivot": [1.9, 12.75, -7.25], "rotation": [0, 5, 5], "uv": [9, 0]}
|
||||
{"origin": [-2.5, 7.75, -10.5], "size": [5, 4, 6], "uv": [0, 39]},
|
||||
{"origin": [-1, 9, -10.5], "size": [2, 1, 0], "inflate": 0.01, "uv": [0, 30]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "horn_right",
|
||||
"parent": "head",
|
||||
"pivot": [-2, 12.75, -7.75],
|
||||
"rotation": [-15, 0, -5],
|
||||
"cubes": [
|
||||
{"origin": [-2.5, 11.75, -8.25], "size": [1, 2, 1], "pivot": [-2, 12.75, -7.75], "rotation": [0, 47.5, 0], "uv": [39, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "horn_left",
|
||||
"parent": "head",
|
||||
"pivot": [2, 12.75, -7.75],
|
||||
"rotation": [-15, 0, 5],
|
||||
"cubes": [
|
||||
{"origin": [1.5, 11.75, -8.25], "size": [1, 2, 1], "pivot": [2, 12.75, -7.75], "rotation": [0, -47.5, 0], "uv": [9, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyes",
|
||||
"parent": "head",
|
||||
"pivot": [-0.15, 10.75, -9]
|
||||
"pivot": [-0.15, 9.75, -9]
|
||||
},
|
||||
{
|
||||
"name": "eye_right",
|
||||
"parent": "eyes",
|
||||
"pivot": [-3.6, 10, -8.5],
|
||||
"pivot": [-3.6, 9, -8.5],
|
||||
"cubes": [
|
||||
{"origin": [-2.51, 9.75, -9.5], "size": [0, 2, 1], "uv": [18, 25], "mirror": true},
|
||||
{"origin": [-2.401, 9.75, -9.5], "size": [0, 2, 1], "inflate": 0.1, "uv": [0, 0], "mirror": true},
|
||||
{"origin": [-2.52, 10.25, -9.5], "size": [0, 1, 1], "uv": [8, 9], "mirror": true}
|
||||
{"origin": [-2.51, 8.75, -9.5], "size": [0, 2, 1], "uv": [18, 25], "mirror": true},
|
||||
{"origin": [-2.451, 8.75, -9.5], "size": [0, 2, 1], "inflate": 0.05, "uv": [0, 0], "mirror": true},
|
||||
{"origin": [-2.52, 9.25, -9.5], "size": [0, 1, 1], "uv": [8, 9], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_right",
|
||||
"parent": "eye_right",
|
||||
"pivot": [-1.82, 10.75, -9],
|
||||
"pivot": [-1.8645, 9.75, -9.01],
|
||||
"cubes": [
|
||||
{"origin": [-2.32, 9.75, -9.5], "size": [1, 2, 1], "inflate": 0.11, "uv": [54, 39]}
|
||||
{"origin": [-2.3645, 8.75, -10.01], "size": [1, 2, 2], "inflate": 0.06, "uv": [54, 39]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eye_left",
|
||||
"parent": "eyes",
|
||||
"pivot": [3.75, 10, -8.5],
|
||||
"pivot": [3.75, 9, -8.5],
|
||||
"cubes": [
|
||||
{"origin": [2.51, 9.75, -9.5], "size": [0, 2, 1], "uv": [24, 25], "mirror": true},
|
||||
{"origin": [2.402, 9.75, -9.5], "size": [0, 2, 1], "inflate": 0.1, "uv": [0, 7], "mirror": true},
|
||||
{"origin": [2.52, 10.25, -9.5], "size": [0, 1, 1], "uv": [8, 10], "mirror": true}
|
||||
{"origin": [2.51, 8.75, -9.5], "size": [0, 2, 1], "uv": [24, 25], "mirror": true},
|
||||
{"origin": [2.452, 8.75, -9.5], "size": [0, 2, 1], "inflate": 0.05, "uv": [0, 7], "mirror": true},
|
||||
{"origin": [2.52, 9.25, -9.5], "size": [0, 1, 1], "uv": [8, 10], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "eyelid_left",
|
||||
"parent": "eye_left",
|
||||
"pivot": [1.82, 10.75, -9],
|
||||
"pivot": [1.8645, 9.75, -9.01],
|
||||
"cubes": [
|
||||
{"origin": [1.32, 9.75, -9.5], "size": [1, 2, 1], "inflate": 0.11, "uv": [52, 36], "mirror": true}
|
||||
{"origin": [1.3645, 8.75, -10.01], "size": [1, 2, 2], "inflate": 0.06, "uv": [56, 32], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mouth_open",
|
||||
"parent": "head",
|
||||
"pivot": [-0.05, 10, -9.5],
|
||||
"pivot": [-0.05, 9, -9.5],
|
||||
"cubes": [
|
||||
{"origin": [-1.05, 8.75, -10.41], "size": [2, 1, 0], "uv": [8, 12]}
|
||||
{"origin": [-1.05, 7.75, -10.41], "size": [2, 1, 0], "uv": [8, 12]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "head_wool",
|
||||
"parent": "head",
|
||||
"pivot": [-2.3928, 13.73889, -6.69372],
|
||||
"pivot": [-2.3928, 12.73889, -6.69372],
|
||||
"cubes": [
|
||||
{"origin": [-2.025, 12, -9.19785], "size": [2, 2, 2], "pivot": [-1.05693, 12.8315, -8.01133], "rotation": [0, 5, 0], "uv": [50, 24]},
|
||||
{"origin": [-2.5, 8.5, -7.5], "size": [5, 6, 4], "inflate": 0.01, "uv": [39, 0]},
|
||||
{"origin": [0.025, 12, -9.19785], "size": [2, 2, 2], "pivot": [1.06611, 12.8315, -8.01133], "rotation": [0, -5, 0], "uv": [52, 10]},
|
||||
{"origin": [-3.75, 11.5, -8.25], "size": [2, 2, 2], "uv": [8, 49]},
|
||||
{"origin": [1.75, 11.5, -8.25], "size": [2, 2, 2], "uv": [16, 39]}
|
||||
{"origin": [-2.025, 11, -9.19785], "size": [2, 2, 2], "pivot": [-1.05693, 11.8315, -8.01133], "rotation": [0, 5, 0], "uv": [50, 24]},
|
||||
{"origin": [-2.5, 7.5, -7.5], "size": [5, 5, 3], "inflate": 0.01, "uv": [24, 56]},
|
||||
{"origin": [0.025, 11, -9.19785], "size": [2, 2, 2], "pivot": [1.06611, 11.8315, -8.01133], "rotation": [0, -5, 0], "uv": [52, 10]},
|
||||
{"origin": [-3.75, 10.75, -8.5], "size": [2, 2, 2], "uv": [8, 49]},
|
||||
{"origin": [1.75, 10.75, -8.5], "size": [2, 2, 2], "uv": [16, 39]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "head_wool_shearable",
|
||||
"parent": "head_wool",
|
||||
"pivot": [0, -1, 0],
|
||||
"cubes": [
|
||||
{"origin": [-2.5, 9.5, -7.5], "size": [5, 4, 4], "inflate": 0.02, "uv": [39, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "braid_right",
|
||||
"parent": "head_wool",
|
||||
"pivot": [-3, 11.5, -7.5],
|
||||
"pivot": [-3, 10.75, -7.5],
|
||||
"cubes": [
|
||||
{"origin": [-3.5, 10.75, -8], "size": [1, 1, 1], "uv": [0, 39]},
|
||||
{"origin": [-4, 9, -8.5], "size": [2, 2, 2], "uv": [0, 49]}
|
||||
{"origin": [-3.5, 10, -8], "size": [1, 1, 1], "uv": [0, 39]},
|
||||
{"origin": [-4, 8.25, -8.5], "size": [2, 2, 2], "uv": [0, 49]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "braid_middle_right",
|
||||
"parent": "braid_right",
|
||||
"pivot": [-3, 9, -7.5],
|
||||
"pivot": [-3, 8.25, -7.5],
|
||||
"cubes": [
|
||||
{"origin": [-3.5, 8.25, -8], "size": [1, 1, 1], "uv": [0, 41]},
|
||||
{"origin": [-4, 6.5, -8.5], "size": [2, 2, 2], "uv": [36, 48]}
|
||||
{"origin": [-3.5, 7.5, -8], "size": [1, 1, 1], "uv": [0, 41]},
|
||||
{"origin": [-4, 5.75, -8.5], "size": [2, 2, 2], "uv": [36, 48]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "braid_bottom_right",
|
||||
"parent": "braid_middle_right",
|
||||
"pivot": [-3, 6.5, -7.5],
|
||||
"pivot": [-3, 5.75, -7.5],
|
||||
"cubes": [
|
||||
{"origin": [-3.5, 5.75, -8], "size": [1, 1, 1], "uv": [0, 43]},
|
||||
{"origin": [-4, 4, -8.5], "size": [2, 2, 2], "uv": [28, 48]},
|
||||
{"origin": [-4, 3.75, -8.5], "size": [2, 1, 0], "pivot": [-3, 4.75, -8.5], "rotation": [-12.5, 0, 0], "uv": [0, 61]},
|
||||
{"origin": [-4, 3.75, -8.5], "size": [0, 1, 2], "pivot": [-4, 4.75, -7.5], "rotation": [0, 0, 12.5], "uv": [0, 60]},
|
||||
{"origin": [-2, 3.75, -8.5], "size": [0, 1, 2], "pivot": [-2, 4.75, -7.5], "rotation": [0, 0, -12.5], "uv": [0, 61]},
|
||||
{"origin": [-4, 3.75, -6.5], "size": [2, 1, 0], "pivot": [-3, 4.75, -6.5], "rotation": [12.5, 0, 0], "uv": [0, 60]}
|
||||
{"origin": [-3.5, 5, -8], "size": [1, 1, 1], "uv": [0, 43]},
|
||||
{"origin": [-4, 3.25, -8.5], "size": [2, 2, 2], "uv": [28, 48]},
|
||||
{"origin": [-4, 3, -8.5], "size": [2, 1, 0], "pivot": [-3, 4, -8.5], "rotation": [-12.5, 0, 0], "uv": [0, 61]},
|
||||
{"origin": [-4, 3, -8.5], "size": [0, 1, 2], "pivot": [-4, 4, -7.5], "rotation": [0, 0, 12.5], "uv": [0, 60]},
|
||||
{"origin": [-2, 3, -8.5], "size": [0, 1, 2], "pivot": [-2, 4, -7.5], "rotation": [0, 0, -12.5], "uv": [0, 61]},
|
||||
{"origin": [-4, 3, -6.5], "size": [2, 1, 0], "pivot": [-3, 4, -6.5], "rotation": [12.5, 0, 0], "uv": [0, 60]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "braid_left",
|
||||
"parent": "head_wool",
|
||||
"pivot": [3, 11.5, -7.5],
|
||||
"pivot": [3, 10.75, -7.5],
|
||||
"cubes": [
|
||||
{"origin": [2.5, 10.75, -8], "size": [1, 1, 1], "uv": [26, 26]},
|
||||
{"origin": [2, 9, -8.5], "size": [2, 2, 2], "uv": [48, 30]}
|
||||
{"origin": [2.5, 10, -8], "size": [1, 1, 1], "uv": [26, 26]},
|
||||
{"origin": [2, 8.25, -8.5], "size": [2, 2, 2], "uv": [48, 30]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "braid_middle_left",
|
||||
"parent": "braid_left",
|
||||
"pivot": [3, 9, -7.5],
|
||||
"pivot": [3, 8.25, -7.5],
|
||||
"cubes": [
|
||||
{"origin": [2.5, 8.25, -8], "size": [1, 1, 1], "uv": [26, 28]},
|
||||
{"origin": [2, 6.5, -8.5], "size": [2, 2, 2], "uv": [32, 39]}
|
||||
{"origin": [2.5, 7.5, -8], "size": [1, 1, 1], "uv": [26, 28]},
|
||||
{"origin": [2, 5.75, -8.5], "size": [2, 2, 2], "uv": [32, 39]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "braid_bottom_left",
|
||||
"parent": "braid_middle_left",
|
||||
"pivot": [3, 6.5, -7.5],
|
||||
"pivot": [3, 5.75, -7.5],
|
||||
"cubes": [
|
||||
{"origin": [2.5, 5.75, -8], "size": [1, 1, 1], "uv": [26, 30]},
|
||||
{"origin": [2, 4, -8.5], "size": [2, 2, 2], "uv": [0, 8]},
|
||||
{"origin": [2, 3.75, -8.5], "size": [2, 1, 0], "pivot": [3, 4.75, -8.5], "rotation": [-12.5, 0, 0], "uv": [4, 61], "mirror": true},
|
||||
{"origin": [2, 3.75, -8.5], "size": [0, 1, 2], "pivot": [2, 4.75, -7.5], "rotation": [0, 0, 12.5], "uv": [4, 61], "mirror": true},
|
||||
{"origin": [4, 3.75, -8.5], "size": [0, 1, 2], "pivot": [4, 4.75, -7.5], "rotation": [0, 0, -12.5], "uv": [4, 60], "mirror": true},
|
||||
{"origin": [2, 3.75, -6.5], "size": [2, 1, 0], "pivot": [3, 4.75, -6.5], "rotation": [12.5, 0, 0], "uv": [4, 60], "mirror": true}
|
||||
{"origin": [2.5, 5, -8], "size": [1, 1, 1], "uv": [26, 30]},
|
||||
{"origin": [2, 3.25, -8.5], "size": [2, 2, 2], "uv": [0, 8]},
|
||||
{"origin": [2, 3, -8.5], "size": [2, 1, 0], "pivot": [3, 4, -8.5], "rotation": [-12.5, 0, 0], "uv": [4, 61], "mirror": true},
|
||||
{"origin": [2, 3, -8.5], "size": [0, 1, 2], "pivot": [2, 4, -7.5], "rotation": [0, 0, 12.5], "uv": [4, 61], "mirror": true},
|
||||
{"origin": [4, 3, -8.5], "size": [0, 1, 2], "pivot": [4, 4, -7.5], "rotation": [0, 0, -12.5], "uv": [4, 60], "mirror": true},
|
||||
{"origin": [2, 3, -6.5], "size": [2, 1, 0], "pivot": [3, 4, -6.5], "rotation": [12.5, 0, 0], "uv": [4, 60], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ear_left",
|
||||
"parent": "head",
|
||||
"pivot": [2.5, 11.75, -6.5],
|
||||
"pivot": [2.5, 10.75, -6.5],
|
||||
"rotation": [0, 0, 15],
|
||||
"cubes": [
|
||||
{"origin": [2.25, 10, -6.5], "size": [4, 2, 0], "uv": [48, 34]}
|
||||
{"origin": [2.25, 9, -6.5], "size": [4, 2, 0], "uv": [48, 34]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ear_right",
|
||||
"parent": "head",
|
||||
"pivot": [-2.5, 11.75, -6.5],
|
||||
"pivot": [-2.5, 10.75, -6.5],
|
||||
"rotation": [0, 0, -15],
|
||||
"cubes": [
|
||||
{"origin": [-6.25, 10, -6.5], "size": [4, 2, 0], "uv": [39, 10]}
|
||||
{"origin": [-6.25, 9, -6.5], "size": [4, 2, 0], "uv": [39, 10]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_front_right",
|
||||
"parent": "body",
|
||||
"pivot": [2.25, 8.5, -3],
|
||||
"pivot": [2.25, 7.5, -3],
|
||||
"cubes": [
|
||||
{"origin": [0.75, 5, -4.5], "size": [3, 5, 3], "uv": [0, 0]}
|
||||
{"origin": [0.75, 4, -4.5], "size": [3, 5, 3], "uv": [0, 0]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_front_right2",
|
||||
"parent": "leg_front_right",
|
||||
"pivot": [2.25, 6, -3.75],
|
||||
"pivot": [2.25, 5, -3.75],
|
||||
"cubes": [
|
||||
{"origin": [1.25, 1.25, -3.75], "size": [2, 4, 2], "uv": [18, 26]}
|
||||
{"origin": [1.25, 1.25, -3.75], "size": [2, 3, 2], "uv": [18, 26]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -242,17 +266,17 @@
|
||||
{
|
||||
"name": "leg_front_left",
|
||||
"parent": "body",
|
||||
"pivot": [-2.25, 8.5, -3],
|
||||
"pivot": [-2.25, 7.5, -3],
|
||||
"cubes": [
|
||||
{"origin": [-3.75, 5, -4.5], "size": [3, 5, 3], "uv": [47, 45]}
|
||||
{"origin": [-3.75, 4, -4.5], "size": [3, 5, 3], "uv": [47, 45]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_front_left2",
|
||||
"parent": "leg_front_left",
|
||||
"pivot": [-2.25, 5, -3.75],
|
||||
"pivot": [-2.25, 4, -3.75],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 1.25, -3.75], "size": [2, 4, 2], "uv": [42, 26]}
|
||||
{"origin": [-3.25, 1.25, -3.75], "size": [2, 3, 2], "uv": [42, 26]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -266,17 +290,17 @@
|
||||
{
|
||||
"name": "leg_back_right",
|
||||
"parent": "body",
|
||||
"pivot": [2.25, 8.5, 3.5],
|
||||
"pivot": [2.25, 7.5, 3.5],
|
||||
"cubes": [
|
||||
{"origin": [0.75, 5, 1.5], "size": [3, 5, 4], "uv": [22, 39]}
|
||||
{"origin": [0.75, 4, 1.5], "size": [3, 5, 4], "uv": [22, 39]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_back_right2",
|
||||
"parent": "leg_back_right",
|
||||
"pivot": [2.25, 5, 5],
|
||||
"pivot": [2.25, 4, 5],
|
||||
"cubes": [
|
||||
{"origin": [1.25, 1.25, 3.75], "size": [2, 4, 2], "uv": [46, 37]}
|
||||
{"origin": [1.25, 1.25, 3.75], "size": [2, 3, 2], "uv": [46, 37]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -290,17 +314,17 @@
|
||||
{
|
||||
"name": "leg_back_left",
|
||||
"parent": "body",
|
||||
"pivot": [-2.25, 8.5, 3.5],
|
||||
"pivot": [-2.25, 7.5, 3.5],
|
||||
"cubes": [
|
||||
{"origin": [-3.75, 5, 1.5], "size": [3, 5, 4], "uv": [36, 39]}
|
||||
{"origin": [-3.75, 4, 1.5], "size": [3, 5, 4], "uv": [36, 39]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "leg_back_left2",
|
||||
"parent": "leg_back_left",
|
||||
"pivot": [-2.25, 5, 5],
|
||||
"pivot": [-2.25, 4, 5],
|
||||
"cubes": [
|
||||
{"origin": [-3.25, 1.25, 3.75], "size": [2, 4, 2], "uv": [20, 48]}
|
||||
{"origin": [-3.25, 1.25, 3.75], "size": [2, 3, 2], "uv": [20, 48]}
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "wool",
|
||||
"name": "wool_shearable",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 12.75, 0.25],
|
||||
"cubes": [
|
||||
@@ -47,7 +47,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "neck_wool",
|
||||
"name": "neck_wool_shearable",
|
||||
"parent": "neck",
|
||||
"pivot": [0, 15.5, -9.5],
|
||||
"rotation": [-62.5, 0, 0],
|
||||
@@ -57,7 +57,7 @@
|
||||
},
|
||||
{
|
||||
"name": "neck_wool_middle_right",
|
||||
"parent": "neck_wool",
|
||||
"parent": "neck_wool_shearable",
|
||||
"pivot": [0.25, 13.75, -9.5],
|
||||
"rotation": [7.5, 0, 12.5],
|
||||
"cubes": [
|
||||
@@ -66,7 +66,7 @@
|
||||
},
|
||||
{
|
||||
"name": "neck_wool_middle_left",
|
||||
"parent": "neck_wool",
|
||||
"parent": "neck_wool_shearable",
|
||||
"pivot": [-0.25, 13.75, -9.5],
|
||||
"rotation": [7.5, 0, -12.5],
|
||||
"cubes": [
|
||||
@@ -75,7 +75,7 @@
|
||||
},
|
||||
{
|
||||
"name": "neck_wool_right",
|
||||
"parent": "neck_wool",
|
||||
"parent": "neck_wool_shearable",
|
||||
"pivot": [-1.75, 13.75, -9.5],
|
||||
"rotation": [12.5, 0, 25],
|
||||
"cubes": [
|
||||
@@ -84,7 +84,7 @@
|
||||
},
|
||||
{
|
||||
"name": "neck_wool_left",
|
||||
"parent": "neck_wool",
|
||||
"parent": "neck_wool_shearable",
|
||||
"pivot": [1.75, 13.75, -9.5],
|
||||
"rotation": [12.5, 0, -25],
|
||||
"cubes": [
|
||||
@@ -324,19 +324,19 @@
|
||||
{
|
||||
"name": "tail",
|
||||
"parent": "torso",
|
||||
"pivot": [0, 15, 7],
|
||||
"pivot": [0, 14, 7],
|
||||
"rotation": [-42.5, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-0.5, 14, 7], "size": [1, 1, 3], "inflate": 0.01, "uv": [102, 1]}
|
||||
{"origin": [-0.5, 13, 7], "size": [1, 1, 3], "inflate": 0.01, "uv": [102, 1]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "tail2",
|
||||
"parent": "tail",
|
||||
"pivot": [0, 14, 10],
|
||||
"pivot": [0, 13, 10],
|
||||
"rotation": [35, 0, 0],
|
||||
"cubes": [
|
||||
{"origin": [-0.5, 14, 10], "size": [1, 1, 3], "uv": [98, 26]}
|
||||
{"origin": [-0.5, 13, 10], "size": [1, 1, 3], "uv": [98, 26]}
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -14,6 +14,210 @@
|
||||
"shiny"
|
||||
],
|
||||
"texture": "cobblemon:textures/pokemon/0831_wooloo/wooloo_shiny.png"
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-black"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0831_wooloo/wooloo_wool_black.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-blue"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0831_wooloo/wooloo_wool_blue.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-brown"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0831_wooloo/wooloo_wool_brown.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-cyan"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0831_wooloo/wooloo_wool_cyan.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-gray"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0831_wooloo/wooloo_wool_gray.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-green"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0831_wooloo/wooloo_wool_green.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-light_blue"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0831_wooloo/wooloo_wool_light_blue.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-light_gray"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0831_wooloo/wooloo_wool_light_gray.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-lime"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0831_wooloo/wooloo_wool_lime.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-magenta"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0831_wooloo/wooloo_wool_magenta.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-orange"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0831_wooloo/wooloo_wool_orange.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-pink"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0831_wooloo/wooloo_wool_pink.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-purple"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0831_wooloo/wooloo_wool_purple.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-red"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0831_wooloo/wooloo_wool_red.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-white"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0831_wooloo/wooloo_wool.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-white shiny"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0831_wooloo/wooloo_wool_shiny.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-yellow"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0831_wooloo/wooloo_wool_yellow.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -14,6 +14,390 @@
|
||||
"shiny"
|
||||
],
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_shiny.png"
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-black"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_black.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-blue"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_blue.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-brown"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_brown.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-cyan"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_cyan.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-gray"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_gray.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-green"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_green.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-light_blue"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_light_blue.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-light_gray"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_light_gray.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-lime"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_lime.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-magenta"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_magenta.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-orange"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_orange.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-pink"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_pink.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-purple"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_purple.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-red"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_red.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-white"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_white.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-yellow"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_yellow.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-black shiny"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_black_shiny.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-blue shiny"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_blue_shiny.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-brown shiny"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_brown_shiny.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-cyan shiny"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_cyan_shiny.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-gray shiny"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_gray_shiny.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-green shiny"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_green_shiny.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-light_blue shiny"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_light_blue_shiny.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-light_gray shiny"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_light_gray_shiny.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-lime shiny"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_lime_shiny.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-magenta shiny"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_magenta_shiny.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-orange shiny"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_orange_shiny.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-pink shiny"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_pink_shiny.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-purple shiny"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_purple_shiny.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-red shiny"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_red_shiny.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-white shiny"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_white_shiny.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"aspects": [
|
||||
"color-yellow shiny"
|
||||
],
|
||||
"layers": [
|
||||
{
|
||||
"name": "color",
|
||||
"texture": "cobblemon:textures/pokemon/0832_dubwool/dubwool_wool_yellow_shiny.png",
|
||||
"emissive": false
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1130,6 +1130,7 @@
|
||||
"cobblemon.battle.cant.shelltrap": "%1$s's shell trap didn't work!",
|
||||
"cobblemon.battle.cant.taunt": "%1$s can't use %2$s after the taunt!",
|
||||
"cobblemon.battle.cant.throatchop": "The effects of Throat Chop prevent %1$s from using certain moves!",
|
||||
"cobblemon.battle.cant.nopp": "%1$s can't use %2$s because it is out of PP!",
|
||||
|
||||
"cobblemon.battle.activate.confusion": "%1$s is confused!",
|
||||
"cobblemon.battle.activate.happyhour": "Everyone is caught up in the happy atmosphere!",
|
||||
|
||||
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
@@ -215,6 +215,7 @@
|
||||
"variant": "level_up",
|
||||
"result": "forretress shulker",
|
||||
"consumeHeldItem": true,
|
||||
"permanent": true,
|
||||
"learnableMoves": [
|
||||
"heavyslam"
|
||||
],
|
||||
|
||||
@@ -17,8 +17,7 @@
|
||||
"speed": 70
|
||||
},
|
||||
"features": [
|
||||
"hisuian",
|
||||
"regional"
|
||||
"hisuian"
|
||||
],
|
||||
"catchRate": 45,
|
||||
"maleRatio": 0.875,
|
||||
@@ -63,7 +62,6 @@
|
||||
"1:leafstorm",
|
||||
"1:tackle",
|
||||
"1:uturn",
|
||||
"1:spiritshackle",
|
||||
"9:peck",
|
||||
"12:shadowsneak",
|
||||
"15:razorleaf",
|
||||
@@ -140,8 +138,7 @@
|
||||
"hisui_regional"
|
||||
],
|
||||
"aspects": [
|
||||
"hisuian",
|
||||
"regional-hisui"
|
||||
"hisuian"
|
||||
],
|
||||
"height": 16,
|
||||
"weight": 370,
|
||||
@@ -191,7 +188,6 @@
|
||||
"1:leafage",
|
||||
"1:leafstorm",
|
||||
"1:phantomforce",
|
||||
"1:spiritshackle",
|
||||
"1:spite",
|
||||
"1:tackle",
|
||||
"1:uturn",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{
|
||||
"pokemon": ["conkeldurr"],
|
||||
"pokemon": ["conkeldurr", "wooloo", "dubwool"],
|
||||
"features": ["color"]
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
{
|
||||
"pokemon": ["gimmighoul"],
|
||||
"pokemon": ["gimmighoul", "gholdengo"],
|
||||
"features": ["roaming"]
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"type": "choice",
|
||||
"keys": ["color"],
|
||||
"default": "false",
|
||||
"keys": ["color", "colour"],
|
||||
"default": "none",
|
||||
"choices": [
|
||||
"white",
|
||||
"orange",
|
||||
|
||||
@@ -15,6 +15,7 @@ import com.cobblemon.mod.common.item.group.CobblemonItemGroups
|
||||
import com.cobblemon.mod.common.loot.LootInjector
|
||||
import com.cobblemon.mod.common.particle.CobblemonParticles
|
||||
import com.cobblemon.mod.common.platform.events.*
|
||||
import com.cobblemon.mod.common.sherds.CobblemonSherds
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import com.cobblemon.mod.common.util.didSleep
|
||||
import com.cobblemon.mod.common.util.endsWith
|
||||
@@ -95,6 +96,8 @@ object CobblemonFabric : CobblemonImplementation {
|
||||
this.networkManager.registerServerBound()
|
||||
|
||||
Cobblemon.initialize()
|
||||
//This has to be registered elsewhere on forge so we cant do it in common
|
||||
CobblemonSherds.registerSherds()
|
||||
|
||||
CobblemonBlockPredicates.touch()
|
||||
CobblemonPlacementModifierTypes.touch()
|
||||
|
||||
@@ -14,6 +14,7 @@ import com.cobblemon.mod.common.integration.adorn.AdornCompatibility
|
||||
import com.cobblemon.mod.common.item.group.CobblemonItemGroups
|
||||
import com.cobblemon.mod.common.loot.LootInjector
|
||||
import com.cobblemon.mod.common.particle.CobblemonParticles
|
||||
import com.cobblemon.mod.common.sherds.CobblemonSherds
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import com.cobblemon.mod.common.util.didSleep
|
||||
import com.cobblemon.mod.common.util.endsWith
|
||||
@@ -152,6 +153,9 @@ class CobblemonForge : CobblemonImplementation {
|
||||
event.register(RegistryKeys.PLACEMENT_MODIFIER_TYPE) {
|
||||
CobblemonPlacementModifierTypes.touch()
|
||||
}
|
||||
event.register(RegistryKeys.DECORATED_POT_PATTERN) {
|
||||
CobblemonSherds.registerSherds()
|
||||
}
|
||||
|
||||
event.register(RegistryKeys.STRUCTURE_PROCESSOR) {
|
||||
CobblemonProcessorTypes.touch()
|
||||
|
||||