Compare commits

..
Author SHA1 Message Date
Landon Wills dac4eb3501 Experimental fix for unintentional local emitter rotation 2026-11-12 16:51:42 -05:00
Hiroku 99e72339db Remove rogue println, closes #2147 2026-11-08 10:32:42 +10:00
Hiroku 10c9931d2c Merge branch 'weight-tweak-tweak' into 'main'
add `spawnable_position` to weight rule component's "weight" expression

Closes #2145

See merge request cable-mc/cobblemon!2521
2026-11-07 08:20:09 +00:00
Hiroku 0e55165570 Merge branch 'main' into 'main'
Main - fixs #2142, unown name issue.

See merge request cable-mc/cobblemon!2523
2026-11-07 08:19:02 +00:00
Matthew Baerg b6b87621a5 Update file CHANGELOG.md 2026-11-07 04:42:37 +00:00
Matthew Baerg 71b01d562b Update file CHANGELOG.md 2026-11-07 04:39:00 +00:00
Matthew Baerg 21eb66e69b Update file unown.json 2026-11-07 03:31:36 +00:00
Matthew Baerg 8b04e57a1d Update file unown.json 2026-11-07 02:35:21 +00:00
Hiroku 1ff3b7ee96 Updated molang dep for some library fixes 2026-11-07 12:07:03 +10:00
spacky 8a2d6096e3 update changelog 2026-11-03 09:02:01 -08:00
spacky 2645b5e375 add spawnable_position to weight rule component's "weight" expression 2026-11-03 08:03:14 -08:00
28 changed files with 25 additions and 111 deletions

No files matched your search

+6 -25
View File
@@ -11,44 +11,25 @@
- Amethyst now grows from Typegem core blocks like typegems do
- Updated the recipe category for the Create compatibility EXP Candy recipe
- Added No Man's Lands' Honeyed Apple to the Leaves Leftovers tag
- Updated Unown's punctuation form names from `!` and `?` to `Exclamation` and `Question`, changing their visible form labels in tooltips and mod integrations.
### Fixes
- Fixed Ponigiri food values for AppleSkin integration
- Fixed errors emitted by typos in Parched Peat bog structure files
- Fixed datapacks with item interaction evolutions that don't specify an item crashing the world on load.
- Fixed the Pokédex evolution tree crashing when a datapack's dex entry is missing an evolution's form.
- Fixed the Pokédex evolution tree crashing with a stack overflow on evolutions that loop back on themselves.
- Fixed the Pokédex evolution tree crashing when looking at a dex that is not part of the "National Dex" aggregate.
- Fixed evolution trees not building properly when a Pokémon has several Pokédex entries for different regions.
- Fixed form-changing evolutions sometimes resolving to the source form in the Pokédex evolution tree.
- Broken datapack evolutions are now logged and skipped in the Pokédex evolution tree instead of crashing.
- Fixed the `alpha` property having no tab completion in commands such as `/pokespawn`, `/pokegive` and `/pokeedit`, and added the missing `dmax_level`, `gmax_factor` and `tradable` aliases to tab completion
- Fixed friendship booster items not being recognised as such
- Fixed conflicts with other mods that would make use of recipe books in certain ways (Farmer's Delight Cooking Pot)
- Fixed Pokémon battles stalling when a sidemod cancels the `THROWN_POKEBALL_HIT` hit event
- Fixed choice feature tab completion in `spawnpokemon/pokegive/pokeedit` commands
- Fixed MoLang that's targeting players intermittedly failing when they have died, needing them to relog
- Fixed a NeoForge bug where none of the Cobblemon plants/berries could be placed into pots
- Fixed party overlay not hiding when the player opens the Pokédex scanner
- Added compat for AppleSkin
- Fixed some display names having unintended font colours
- Fixed `hate_entity` task focusing on its own entity
- Thus enabled deadly warfare between Zangoose and Seviper
- Prehistoric Frozen Pond, Prehistoric Frozen Spike, and Prehistoric Lush Den now generate
- Fixed Frogadier floating in its battle_idle animation
- Fixed absence or incorrect mergers in spawning conditions, making max height/depth of conditions to use the min value instead
- Added stricter riding checks on server side to prevent possible packet forgery when player tries to ride pokemon
- Fixed Pokémon cries and animation sounds played from GUIs, such as the starter selection screen and the Pokédex, being tied to the Master volume slider instead of Friendly Creatures
- Fixed boat style mounts sprinting on their own after landing in water from jet flight
- Fixed Unown punctuation forms (? and !) resolving to duplicate Showdown IDs and colliding in form displays.
### Developer
- Fixed JsonArray to MoValue conversion not working properly.
### Molang & Datapacks
- `q.is_standing_on_blocks` now properly checks for non-full blocks like slabs, Mud or Soul Sand
- Added Molang functions to play footstep sounds based on the corresponding surface. These are intended to be used by Pokémon animations.
- Pokémon can now have their Minecraft footstep sounds silenced in their poser. This doesn't affect emitting game events.
- Fixed the Molang coalescing operator not working the way you'd expect a coalesce operator to.
- Added `v.spawnable_position` to the weight spawn rule component's "weight" expression
### Particles
- Fixes emitters being rotated by a model's locators when local rotation was off. This should fix some niche unexpected rotation issues from occurring.
### Localization
- Updated translations for:
@@ -37,7 +37,6 @@ import com.cobblemon.mod.common.util.writeRidingStats
import kotlin.math.abs
import kotlin.math.max
import kotlin.math.min
import net.minecraft.client.Minecraft
import net.minecraft.core.BlockPos
import net.minecraft.network.RegistryFriendlyByteBuf
import net.minecraft.util.Mth
@@ -95,8 +94,12 @@ class BoatBehaviour : RidingBehaviour<BoatSettings, BoatState> {
state.jumpBuffer.set(state.jumpBuffer.get() + 1)
}
if (vehicle.level().isClientSide) {
handleSprinting(state)
// Only start sprinting on vehicle if the state has changed and the pokemon has atleast 1/3 stamina
if (driver.isSprinting && !state.isVehicleSprinting.get()) {
state.isVehicleSprinting.set(state.stamina.get() > 0.33f)
}
else if (!driver.isSprinting) {
state.isVehicleSprinting.set(false)
}
if (!state.isVehicleSprinting.get()) {
@@ -112,20 +115,6 @@ class BoatBehaviour : RidingBehaviour<BoatSettings, BoatState> {
super.tick(settings, state, vehicle, driver, input)
}
fun handleSprinting(
state: BoatState
) {
// Check the keys instead of driver.isSprinting since that can still be true from a previous ride style
val tryingToSprint = Minecraft.getInstance().options.keySprint.isDown() && Minecraft.getInstance().options.keyUp.isDown()
// Only start sprinting on vehicle if the state has changed and the pokemon has atleast 1/3 stamina
if (tryingToSprint && !state.isVehicleSprinting.get()) {
state.isVehicleSprinting.set(state.stamina.get() > 0.33f)
}
else if (!tryingToSprint) {
state.isVehicleSprinting.set(false)
}
}
override fun pose(settings: BoatSettings, state: BoatState, vehicle: PokemonEntity): PoseType {
return poseProvider.select(settings, state, vehicle)
}
@@ -31,8 +31,8 @@ class EmitterSpace(
}
}
fun initializeEmitterMatrix(rootMatrix: MatrixWrapper, locatorMatrix: MatrixWrapper): MatrixWrapper {
var rootRotation = rootMatrix.matrix.getRotation(AxisAngle4f())
fun initializeEmitterMatrix(rootMatrix: MatrixWrapper, locatorMatrix: MatrixWrapper, localSpaceRotation: Boolean = true): MatrixWrapper {
var rootRotation = if (localSpaceRotation) rootMatrix.matrix.getRotation(AxisAngle4f()) else AxisAngle4f()
//When the locator hasn't yet been initialized, we start getting NaNs, so default to no rotation instead
if (rootRotation.x.isNaN() || rootRotation.y.isNaN() || rootRotation.z.isNaN() || rootRotation.angle.isNaN()) {
rootRotation = AxisAngle4f()
@@ -41,6 +41,7 @@ class WeightTweakRuleComponent : SpawnRuleComponent {
return if (spawnDetailSelector.selects(detail) && spawnablePositionSelector.selects(spawnablePosition)) {
runtime.environment.setSimpleVariable("spawn", detail.struct)
runtime.environment.setSimpleVariable("spawn_detail", detail.struct)
runtime.environment.setSimpleVariable("spawnable_position", spawnablePosition.getOrSetupStruct())
runtime.environment.setSimpleVariable("weight", DoubleValue(weight.toDouble()))
runtime.resolveFloat(this.weight)
} else {
@@ -169,7 +169,6 @@ class TypeGemCoreBlock(properties: Properties) : Block(properties) {
if (fullClusterCount == 0) {
if (gemCount < Cobblemon.config.typeGemMinGrowth && clusters.isNotEmpty()) {
println("Force set a cluster to FULL at size $gemCount")
val randomCluster = clusters.random()
level.setBlockAndUpdate(randomCluster.second, randomCluster.first.setValue(GROWTH_TYPE, GrowthType.FULL))
}
@@ -36,7 +36,7 @@ object SpawnSnowstormEntityParticleHandler : ClientNetworkPacketHandler<SpawnSno
sourceLocators.forEach { locator ->
val locatorMatrix = sourceState.locatorStates[locator]!!
val particleMatrix = effect.emitter.space.initializeEmitterMatrix(rootMatrix, locatorMatrix)
val particleMatrix = effect.emitter.space.initializeEmitterMatrix(rootMatrix, locatorMatrix, effect.space.localRotation)
val particleRuntime = MoLangRuntime().setup().setupClient()
particleRuntime.environment.query.addFunction("entity") { sourceState.runtime.environment.query }
@@ -355,7 +355,7 @@ abstract class PosableState : Schedulable {
val rootMatrix = locatorStates["root"] ?: return@addFunction DoubleValue.ZERO // Played before it's on screen for the first time
val locatorMatrix = locatorStates[locator] ?: rootMatrix
val particleMatrix = effect.emitter.space.initializeEmitterMatrix(rootMatrix, locatorMatrix)
val particleMatrix = effect.emitter.space.initializeEmitterMatrix(rootMatrix, locatorMatrix, effect.space.localRotation)
val particleRuntime = MoLangRuntime().setup().setupClient()
particleRuntime.environment.query.addFunction("entity") { runtime.environment.query }
@@ -73,7 +73,7 @@ class BedrockParticleKeyframe(
val rootMatrix = state.locatorStates["root"]!!
val locatorMatrix = state.locatorStates[locator] ?: state.locatorStates["root"]!!
val particleMatrix = effect.emitter.space.initializeEmitterMatrix(rootMatrix, locatorMatrix)
val particleMatrix = effect.emitter.space.initializeEmitterMatrix(rootMatrix, locatorMatrix, effect.space.localRotation)
if (this in state.poseParticles) {
return
@@ -548,7 +548,7 @@
"battleOnly": false
},
{
"name": "!",
"name": "Exclamation",
"primaryType": "psychic",
"maleRatio": -1,
"height": 5,
@@ -563,7 +563,7 @@
"battleOnly": false
},
{
"name": "?",
"name": "Question",
"primaryType": "psychic",
"maleRatio": -1,
"height": 5,
Binary file not shown.
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>local.com.bedrockk</groupId>
<artifactId>molang</artifactId>
<version>1.1.12</version>
</project>
Binary file not shown.
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>local.com.bedrockk</groupId>
<artifactId>molang</artifactId>
<version>1.1.13</version>
</project>
Binary file not shown.
Binary file not shown.
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>local.com.bedrockk</groupId>
<artifactId>molang</artifactId>
<version>1.1.15</version>
</project>
Binary file not shown.
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>local.com.bedrockk</groupId>
<artifactId>molang</artifactId>
<version>1.1.16</version>
</project>
Binary file not shown.
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>local.com.bedrockk</groupId>
<artifactId>molang</artifactId>
<version>1.1.18</version>
</project>
Binary file not shown.
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>local.com.bedrockk</groupId>
<artifactId>molang</artifactId>
<version>1.1.19</version>
</project>
Binary file not shown.
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>local.com.bedrockk</groupId>
<artifactId>molang</artifactId>
<version>1.1.20</version>
</project>
Binary file not shown.
@@ -4,5 +4,5 @@
<modelVersion>4.0.0</modelVersion>
<groupId>local.com.bedrockk</groupId>
<artifactId>molang</artifactId>
<version>1.1.14</version>
<version>1.1.21</version>
</project>
+3 -3
View File
@@ -3,10 +3,10 @@
<groupId>local.com.bedrockk</groupId>
<artifactId>molang</artifactId>
<versioning>
<release>1.1.20</release>
<release>1.1.21</release>
<versions>
<version>1.1.20</version>
<version>1.1.21</version>
</versions>
<lastUpdated>20231949390007</lastUpdated>
<lastUpdated>20231949390008</lastUpdated>
</versioning>
</metadata>
+1 -1
View File
@@ -14,7 +14,7 @@ architectury-plugin = "3.4-SNAPSHOT"
moddev = "1.0.11"
# Common
molang = "1.1.20"
molang = "1.1.21"
jei-api = "19.22.1.316"
appleskin-api = "mc1.21-3.0.5"