mirror of
https://gitlab.com/cable-mc/cobblemon.git
synced 2026-11-12 19:28:54 -05:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
396b31e530 |
No files matched your search
@@ -9,28 +9,19 @@
|
||||
|
||||
### Changes
|
||||
- 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 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
|
||||
- Added `is_alive` function to entities. Can be useful for terminating particles bound to them.
|
||||
|
||||
### Particles
|
||||
- Fixed local space settings for particles that are attached to Pokemon locators. Should fix a lot of jitters and rotation issues.
|
||||
|
||||
### Localization
|
||||
- Updated translations for:
|
||||
-3
@@ -266,9 +266,6 @@ object EntityMoLangFunctions : AbstractMoLangFunctionHolder<Entity>() {
|
||||
entity.noPhysics = intangible
|
||||
DoubleValue.ONE
|
||||
}
|
||||
functions["is_alive"] = { params ->
|
||||
if (entity.isAlive) DoubleValue.ONE else DoubleValue.ZERO
|
||||
}
|
||||
|
||||
when (entity) {
|
||||
is PosableEntity -> {
|
||||
|
||||
-1
@@ -41,7 +41,6 @@ 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,6 +169,7 @@ 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))
|
||||
}
|
||||
|
||||
@@ -15,9 +15,7 @@ import com.cobblemon.mod.common.ModAPI
|
||||
import com.cobblemon.mod.common.api.snowstorm.ParticleMaterial
|
||||
import com.cobblemon.mod.common.api.snowstorm.ParticleMaterials
|
||||
import com.cobblemon.mod.common.api.snowstorm.UVDetails
|
||||
import com.cobblemon.mod.common.client.MountedPokemonAnimationRenderController
|
||||
import com.cobblemon.mod.common.client.particle.ParticleStorm
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.util.math.geometry.transformDirection
|
||||
import com.cobblemon.mod.common.util.resolveBoolean
|
||||
import com.cobblemon.mod.common.util.resolveDouble
|
||||
@@ -142,19 +140,6 @@ class SnowstormParticle(
|
||||
}
|
||||
}
|
||||
|
||||
/* Without this, locators will lag behind the animation because particles render before Pokemon.
|
||||
* This is important for particles attached to locators using local position/rotation.
|
||||
*
|
||||
* In the future, we may want to make `MountedPokemonAnimationRenderController` a more
|
||||
* generic utility for bedrock models if we see a case where other non-pokemon models (ie. NPCs)
|
||||
* should emit particles in their animations that utilise local space.
|
||||
*/
|
||||
storm.entity?.let {
|
||||
if (storm.effect.space.localPosition && it is PokemonEntity) {
|
||||
MountedPokemonAnimationRenderController.setup(it, tickDelta)
|
||||
}
|
||||
}
|
||||
|
||||
applyRandoms()
|
||||
setParticleAgeInRuntime()
|
||||
storm.effect.curves.forEach { it.apply(runtime) }
|
||||
@@ -162,16 +147,11 @@ class SnowstormParticle(
|
||||
|
||||
val vec3d = camera.position
|
||||
|
||||
// Interpolate because we are often between the ticks where these positions update.
|
||||
val interpLocalX = Mth.lerp(tickDelta.toDouble(), prevLocalX, localX)
|
||||
val interpLocalY = Mth.lerp(tickDelta.toDouble(), prevLocalY, localY)
|
||||
val interpLocalZ = Mth.lerp(tickDelta.toDouble(), prevLocalZ, localZ)
|
||||
|
||||
val pos = if (storm.effect.space.localPosition && storm.effect.space.localRotation) {
|
||||
val vec = Vec3(interpLocalX, interpLocalY, interpLocalZ)
|
||||
val rotated = storm.attachedMatrix.matrix.transformDirection(vec)
|
||||
Vector3d(rotated.x, rotated.y, rotated.z)
|
||||
} else if (storm.effect.space.localRotation) {
|
||||
val pos = if (storm.effect.space.localRotation) {
|
||||
val interpRotation = Mth.lerp(tickDelta.toDouble(), 0.0, currentRotation.angle)
|
||||
val vec = Vector3d(interpLocalX, interpLocalY, interpLocalZ)
|
||||
oldAxisRotation.transform(vec)
|
||||
@@ -180,11 +160,9 @@ class SnowstormParticle(
|
||||
Vector3d(interpLocalX, interpLocalY, interpLocalZ)
|
||||
}
|
||||
|
||||
val origin = if (storm.effect.space.localPosition) storm.attachedMatrix.getOrigin() else originPos
|
||||
|
||||
val f = (pos.x + origin.x - vec3d.x()).toFloat()
|
||||
val g = (pos.y + origin.y - vec3d.y()).toFloat()
|
||||
val h = (pos.z + origin.z - vec3d.z()).toFloat()
|
||||
val f = (pos.x + originPos.x - vec3d.x()).toFloat()
|
||||
val g = (pos.y + originPos.y - vec3d.y()).toFloat()
|
||||
val h = (pos.z + originPos.z - vec3d.z()).toFloat()
|
||||
val quaternion = storm.effect.particle.cameraMode.getRotation(
|
||||
matrixWrapper = matrixWrapper,
|
||||
prevAngle = oRoll,
|
||||
@@ -253,7 +231,7 @@ class SnowstormParticle(
|
||||
|
||||
override fun tick() {
|
||||
if (storm.effect.space.localPosition) {
|
||||
originPos = storm.attachedMatrix.getOrigin()
|
||||
originPos = matrixWrapper.getOrigin()
|
||||
}
|
||||
|
||||
applyRandoms()
|
||||
|
||||
+170
@@ -15,11 +15,51 @@
|
||||
"name": "smeargle",
|
||||
"pivot": [0, 0, 0]
|
||||
},
|
||||
{
|
||||
"name": "locator_root",
|
||||
"parent": "smeargle",
|
||||
"pivot": [0, 0, 0],
|
||||
"locators": {
|
||||
"root": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_top",
|
||||
"parent": "smeargle",
|
||||
"pivot": [0, 30, 0],
|
||||
"locators": {
|
||||
"top": [0, 30, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_special",
|
||||
"parent": "smeargle",
|
||||
"pivot": [0, 14, -20],
|
||||
"locators": {
|
||||
"special": [0, 14, -20]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "body",
|
||||
"parent": "smeargle",
|
||||
"pivot": [0, 6, 0]
|
||||
},
|
||||
{
|
||||
"name": "locator_target",
|
||||
"parent": "body",
|
||||
"pivot": [0, 14, -8],
|
||||
"locators": {
|
||||
"target": [0, 14, -8]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_middle",
|
||||
"parent": "body",
|
||||
"pivot": [0, 14, 0],
|
||||
"locators": {
|
||||
"middle": [0, 14, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "torso",
|
||||
"parent": "body",
|
||||
@@ -68,6 +108,23 @@
|
||||
{"origin": [10.5, 14, -1.5], "size": [2, 2, 3], "inflate": 0.02, "uv": [22, 46]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_hand_secondary",
|
||||
"parent": "hand_left",
|
||||
"pivot": [12.5, 14, 0],
|
||||
"rotation": [0, -90, 0],
|
||||
"locators": {
|
||||
"hand_secondary": [12.5, 14, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item",
|
||||
"parent": "hand_left",
|
||||
"pivot": [12.5, 14, 0],
|
||||
"locators": {
|
||||
"item": [12.5, 14, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "thumb_left",
|
||||
"parent": "hand_left",
|
||||
@@ -140,6 +197,15 @@
|
||||
{"origin": [-12.5, 14, -1.5], "size": [2, 2, 3], "inflate": 0.02, "uv": [32, 46], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_hand_primary",
|
||||
"parent": "hand_right",
|
||||
"pivot": [-12.5, 14, 0],
|
||||
"rotation": [0, 90, 0],
|
||||
"locators": {
|
||||
"hand_primary": [-12.5, 14, 0]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "thumb_right",
|
||||
"parent": "hand_right",
|
||||
@@ -206,6 +272,31 @@
|
||||
{"origin": [-1.5, 21, -8.01], "size": [1, 1, 0], "uv": [0, 9], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_mouth",
|
||||
"parent": "head",
|
||||
"pivot": [0, 18, -4.75],
|
||||
"locators": {
|
||||
"mouth": [0, 18, -4.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item_face",
|
||||
"parent": "head",
|
||||
"pivot": [0, 25.5, -7.5],
|
||||
"rotation": [-35, 0, 0],
|
||||
"locators": {
|
||||
"item_face": [0, 25.5, -7.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_face",
|
||||
"parent": "head",
|
||||
"pivot": [0, 23, -8],
|
||||
"locators": {
|
||||
"face": [0, 23, -8]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eyes",
|
||||
"parent": "head",
|
||||
@@ -255,6 +346,15 @@
|
||||
{"origin": [4.03, 22.5, -5.5], "size": [0, 2, 1], "uv": [8, -1]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_left",
|
||||
"parent": "pupil_left",
|
||||
"pivot": [4, 23.5, -5],
|
||||
"rotation": [0, -90, 0],
|
||||
"locators": {
|
||||
"eye2": [4, 23.5, -5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eyelid_left",
|
||||
"parent": "eye_left",
|
||||
@@ -323,6 +423,15 @@
|
||||
{"origin": [-4.03, 22.5, -5.5], "size": [0, 2, 1], "uv": [8, 18], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_eye_right",
|
||||
"parent": "pupil_right",
|
||||
"pivot": [-4, 23.5, -5],
|
||||
"rotation": [0, 90, 0],
|
||||
"locators": {
|
||||
"eye1": [-4, 23.5, -5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "eyelid_happy_right",
|
||||
"parent": "eye_right",
|
||||
@@ -405,6 +514,22 @@
|
||||
{"origin": [-1, 28, -1.25], "size": [2, 3, 2], "uv": [3, 25]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_head",
|
||||
"parent": "hat",
|
||||
"pivot": [0, 26.5, -6.25],
|
||||
"locators": {
|
||||
"head": [0, 26.5, -6.25]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_item_hat",
|
||||
"parent": "hat",
|
||||
"pivot": [0, 28.5, -0.75],
|
||||
"locators": {
|
||||
"item_hat": [0, 28.5, -0.75]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "tail",
|
||||
"parent": "torso",
|
||||
@@ -437,6 +562,15 @@
|
||||
{"origin": [-1.1, 6.5, 19.5], "size": [2, 2, 6], "uv": [44, 32]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_tail",
|
||||
"parent": "tail4",
|
||||
"pivot": [0, 7.5, 22.5],
|
||||
"rotation": [-180, 0, 180],
|
||||
"locators": {
|
||||
"tail": [0, 7.5, 22.5]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "tail5",
|
||||
"parent": "tail4",
|
||||
@@ -486,6 +620,24 @@
|
||||
{"origin": [-3, 7.5, 50], "size": [6, 0, 4], "pivot": [0, 7.5, 52], "rotation": [0, 0, -45], "uv": [66, 19]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_tail_tip",
|
||||
"parent": "tail_end_fur",
|
||||
"pivot": [0, 7.5, 54],
|
||||
"rotation": [-180, 0, 180],
|
||||
"locators": {
|
||||
"tail_tip": [0, 7.5, 54]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "locator_physical",
|
||||
"parent": "tail_end_fur",
|
||||
"pivot": [0, 7.5, 51],
|
||||
"rotation": [-180, 0, 180],
|
||||
"locators": {
|
||||
"physical": [0, 7.5, 51]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "tail_end_fur_left",
|
||||
"parent": "tail_end2",
|
||||
@@ -534,6 +686,15 @@
|
||||
{"origin": [1, 0.09, -1], "size": [2, 0, 2], "uv": [50, 48]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_foot_secondary",
|
||||
"parent": "foot_left",
|
||||
"pivot": [2, 0.5, -2],
|
||||
"rotation": [90, 0, 0],
|
||||
"locators": {
|
||||
"foot_secondary": [2, 0.5, -2]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "foot_left2",
|
||||
"parent": "foot_left",
|
||||
@@ -567,6 +728,15 @@
|
||||
{"origin": [-3, 0.09, -1], "size": [2, 0, 2], "uv": [50, 52], "mirror": true}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "locator_foot_primary",
|
||||
"parent": "foot_right",
|
||||
"pivot": [-2, 0.5, -2],
|
||||
"rotation": [90, 0, 0],
|
||||
"locators": {
|
||||
"foot_primary": [-2, 0.5, -2]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "foot_right2",
|
||||
"parent": "foot_right",
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@
|
||||
}
|
||||
],
|
||||
"type": "cobblemon:cooking_pot_shapeless",
|
||||
"category": "misc",
|
||||
"category": "medicines",
|
||||
"ingredients": [
|
||||
{
|
||||
"item": "create:experience_nugget"
|
||||
|
||||
@@ -548,7 +548,7 @@
|
||||
"battleOnly": false
|
||||
},
|
||||
{
|
||||
"name": "Exclamation",
|
||||
"name": "!",
|
||||
"primaryType": "psychic",
|
||||
"maleRatio": -1,
|
||||
"height": 5,
|
||||
@@ -563,7 +563,7 @@
|
||||
"battleOnly": false
|
||||
},
|
||||
{
|
||||
"name": "Question",
|
||||
"name": "?",
|
||||
"primaryType": "psychic",
|
||||
"maleRatio": -1,
|
||||
"height": 5,
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
"cobblemon:tart_apple",
|
||||
"cobblemon:syrupy_apple",
|
||||
"cobblemon:candied_apple",
|
||||
{ "id": "create:honeyed_apple","required": false },
|
||||
{ "id": "nomansland:honeyed_apple","required": false }
|
||||
{ "id": "create:honeyed_apple","required": false }
|
||||
]
|
||||
}
|
||||
Binary file not shown.
+1
-1
@@ -4,5 +4,5 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>local.com.bedrockk</groupId>
|
||||
<artifactId>molang</artifactId>
|
||||
<version>1.1.21</version>
|
||||
<version>1.1.12</version>
|
||||
</project>
|
||||
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
<?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.
@@ -0,0 +1,8 @@
|
||||
<?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.14</version>
|
||||
</project>
|
||||
Binary file not shown.
@@ -0,0 +1,8 @@
|
||||
<?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.
@@ -0,0 +1,8 @@
|
||||
<?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.
@@ -0,0 +1,8 @@
|
||||
<?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.
@@ -0,0 +1,8 @@
|
||||
<?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.
@@ -0,0 +1,8 @@
|
||||
<?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.
+3
-3
@@ -3,10 +3,10 @@
|
||||
<groupId>local.com.bedrockk</groupId>
|
||||
<artifactId>molang</artifactId>
|
||||
<versioning>
|
||||
<release>1.1.21</release>
|
||||
<release>1.1.20</release>
|
||||
<versions>
|
||||
<version>1.1.21</version>
|
||||
<version>1.1.20</version>
|
||||
</versions>
|
||||
<lastUpdated>20231949390008</lastUpdated>
|
||||
<lastUpdated>20231949390007</lastUpdated>
|
||||
</versioning>
|
||||
</metadata>
|
||||
@@ -14,7 +14,7 @@ architectury-plugin = "3.4-SNAPSHOT"
|
||||
moddev = "1.0.11"
|
||||
|
||||
# Common
|
||||
molang = "1.1.21"
|
||||
molang = "1.1.20"
|
||||
jei-api = "19.22.1.316"
|
||||
appleskin-api = "mc1.21-3.0.5"
|
||||
|
||||
|
||||
Reference in new issue
Block a user