mirror of
https://gitlab.com/cable-mc/cobblemon.git
synced 2026-10-29 21:38:53 -04:00
Compare commits
11
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
24f5a314f5 | ||
|
|
7ae20ccd60 | ||
|
|
621b867d14 | ||
|
|
2928667500 | ||
|
|
1c528a909c | ||
|
|
9ca5d12f84 | ||
|
|
cc9bb528a8 | ||
|
|
f4c847fdd5 | ||
|
|
ec6e1403e7 | ||
|
|
10a4a03a8b | ||
|
|
e0a86f8794 |
No files matched your search
@@ -431,6 +431,7 @@
|
||||
- Fixed display case not being able to be fed items from underneath.
|
||||
- Fixed Pokémon battling in water continuously sinking to the bottom.
|
||||
- Fixed passive healing and wake from faint not disabling when their config values are set to 0.
|
||||
- Fixed an issue where rebinding the R key to a mouse button prevented players from closing the battle interface using that button.
|
||||
|
||||
### Developer
|
||||
- `SpawnCause` is now an implementation of `SpawningInfluence`.
|
||||
|
||||
@@ -62,9 +62,9 @@ class NPCClass {
|
||||
fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeString(resourceIdentifier.toString())
|
||||
buffer.writeCollection(names) { _, v -> buffer.writeText(v) }
|
||||
buffer.writeFloat(this.hitbox.width)
|
||||
buffer.writeFloat(this.hitbox.height)
|
||||
buffer.writeBoolean(this.hitbox.fixed)
|
||||
buffer.writeFloat(hitbox.width)
|
||||
buffer.writeFloat(hitbox.height)
|
||||
buffer.writeBoolean(hitbox.fixed)
|
||||
battleConfiguration.encode(buffer)
|
||||
buffer.writeNullable(interaction) { _, value ->
|
||||
buffer.writeString(value.type)
|
||||
|
||||
@@ -184,15 +184,16 @@ class BattleGUI : Screen(battleLang("gui.title")), CobblemonRenderable {
|
||||
|
||||
override fun charTyped(chr: Char, modifiers: Int): Boolean {
|
||||
if (chr.toString().equals(PartySendBinding.boundKey().displayName.string, ignoreCase = true) && CobblemonClient.battleOverlay.opacity == BattleOverlay.MAX_OPACITY && PartySendBinding.canAction()) {
|
||||
val battle = CobblemonClient.battle ?: return false
|
||||
battle.minimised = !battle.minimised
|
||||
PartySendBinding.actioned()
|
||||
return true
|
||||
return minimizeBattle()
|
||||
}
|
||||
return super.charTyped(chr, modifiers)
|
||||
}
|
||||
|
||||
override fun mouseClicked(mouseX: Double, mouseY: Double, button: Int): Boolean {
|
||||
if (button == PartySendBinding.boundKey().value && CobblemonClient.battleOverlay.opacity == BattleOverlay.MAX_OPACITY && PartySendBinding.canAction()) {
|
||||
return minimizeBattle()
|
||||
}
|
||||
|
||||
val battle = CobblemonClient.battle
|
||||
if (battle?.spectating == true && specBackButton.isHovered(mouseX, mouseY)) {
|
||||
RemoveSpectatorPacket(battle.battleId).sendToServer()
|
||||
@@ -200,4 +201,11 @@ class BattleGUI : Screen(battleLang("gui.title")), CobblemonRenderable {
|
||||
}
|
||||
return super.mouseClicked(mouseX, mouseY, button)
|
||||
}
|
||||
|
||||
private fun minimizeBattle(): Boolean {
|
||||
val battle = CobblemonClient.battle ?: return false
|
||||
battle.minimised = !battle.minimised
|
||||
PartySendBinding.actioned()
|
||||
return true
|
||||
}
|
||||
}
|
||||
@@ -70,6 +70,7 @@ import net.minecraft.world.InteractionResult
|
||||
import net.minecraft.world.damagesource.DamageSource
|
||||
import net.minecraft.world.entity.AgeableMob
|
||||
import net.minecraft.world.entity.Entity
|
||||
import net.minecraft.world.entity.EntityDimensions
|
||||
import net.minecraft.world.entity.Pose
|
||||
import net.minecraft.world.entity.ai.Brain
|
||||
import net.minecraft.world.entity.ai.attributes.AttributeSupplier
|
||||
@@ -101,6 +102,8 @@ class NPCEntity(world: Level) : AgeableMob(CobblemonEntities.NPC, world), Npc, P
|
||||
brain = makeBrain(brainDynamic ?: makeEmptyBrainDynamic())
|
||||
}
|
||||
}
|
||||
|
||||
this.refreshDimensions()
|
||||
}
|
||||
|
||||
val level: Int
|
||||
@@ -108,6 +111,8 @@ class NPCEntity(world: Level) : AgeableMob(CobblemonEntities.NPC, world), Npc, P
|
||||
|
||||
var skill: Int? = null // range from 0 - 5
|
||||
|
||||
var hitbox: EntityDimensions? = null
|
||||
|
||||
var party: NPCPartyStore? = null
|
||||
|
||||
var isMovable: Boolean? = null
|
||||
@@ -342,6 +347,14 @@ class NPCEntity(world: Level) : AgeableMob(CobblemonEntities.NPC, world), Npc, P
|
||||
it.putByteArray(DataKeys.NPC_PLAYER_TEXTURE_TEXTURE, playerTexture.texture)
|
||||
})
|
||||
}
|
||||
val hitbox = hitbox
|
||||
if (hitbox != null) {
|
||||
nbt.put(DataKeys.NPC_HITBOX, CompoundTag().also {
|
||||
it.putFloat(DataKeys.NPC_HITBOX_WIDTH, hitbox.width)
|
||||
it.putFloat(DataKeys.NPC_HITBOX_HEIGHT, hitbox.height)
|
||||
it.putBoolean(DataKeys.NPC_HITBOX_FIXED, hitbox.fixed)
|
||||
})
|
||||
}
|
||||
val isMovable = isMovable
|
||||
if (isMovable != null) {
|
||||
nbt.putBoolean(DataKeys.NPC_IS_MOVABLE, isMovable)
|
||||
@@ -361,9 +374,6 @@ class NPCEntity(world: Level) : AgeableMob(CobblemonEntities.NPC, world), Npc, P
|
||||
return nbt
|
||||
}
|
||||
|
||||
override fun hasCustomName() = true
|
||||
override fun isCustomNameVisible() = true
|
||||
|
||||
override fun load(nbt: CompoundTag) {
|
||||
npc = NPCClasses.getByIdentifier(ResourceLocation.parse(nbt.getString(DataKeys.NPC_CLASS))) ?: NPCClasses.classes.first()
|
||||
entityData.set(LEVEL, nbt.getInt(DataKeys.NPC_LEVEL).takeIf { it != 0 } ?: 1)
|
||||
@@ -396,7 +406,17 @@ class NPCEntity(world: Level) : AgeableMob(CobblemonEntities.NPC, world), Npc, P
|
||||
this.isInvulnerable = if (nbt.contains(DataKeys.NPC_IS_INVULNERABLE)) nbt.getBoolean(DataKeys.NPC_IS_INVULNERABLE) else null
|
||||
this.isLeashable = if (nbt.contains(DataKeys.NPC_IS_LEASHABLE)) nbt.getBoolean(DataKeys.NPC_IS_LEASHABLE) else null
|
||||
this.allowProjectileHits = if (nbt.contains(DataKeys.NPC_ALLOW_PROJECTILE_HITS)) nbt.getBoolean(DataKeys.NPC_ALLOW_PROJECTILE_HITS) else null
|
||||
this.hitbox = if (nbt.contains(DataKeys.NPC_HITBOX)) {
|
||||
val hitboxNBT = nbt.getCompound(DataKeys.NPC_HITBOX)
|
||||
|
||||
val width = hitboxNBT.getFloat(DataKeys.NPC_HITBOX_WIDTH)
|
||||
val height = hitboxNBT.getFloat(DataKeys.NPC_HITBOX_HEIGHT)
|
||||
val fixed = hitboxNBT.getBoolean(DataKeys.NPC_HITBOX_FIXED)
|
||||
|
||||
if (fixed) EntityDimensions.fixed(width, height) else EntityDimensions.scalable(width, height)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
updateAspects()
|
||||
}
|
||||
|
||||
@@ -426,9 +446,13 @@ class NPCEntity(world: Level) : AgeableMob(CobblemonEntities.NPC, world), Npc, P
|
||||
updateAspects()
|
||||
}
|
||||
|
||||
override fun hasCustomName() = true
|
||||
|
||||
override fun isCustomNameVisible() = true
|
||||
|
||||
override fun isPersistenceRequired() = !npc.canDespawn
|
||||
|
||||
override fun getDefaultDimensions(pose: Pose) = npc.hitbox
|
||||
override fun getDimensions(pose: Pose): EntityDimensions = hitbox ?: npc.hitbox
|
||||
|
||||
override fun isPushable(): Boolean {
|
||||
return isMovable ?: npc.isMovable
|
||||
|
||||
@@ -394,9 +394,10 @@ open class PokemonEntity(
|
||||
// Deploy a platform if a non-wild Pokemon is touching water but not underwater.
|
||||
// This can't be done in the BattleMovementGoal as the sleep goal will override it.
|
||||
if (ticksLived > 5 && platform == PlatformType.NONE
|
||||
&& this.ownerUUID != null
|
||||
&& ownerUUID != null
|
||||
&& isInWater && !isUnderWater
|
||||
&& !exposedForm.behaviour.moving.swim.canBreatheUnderwater && !exposedForm.behaviour.moving.swim.canWalkOnWater) {
|
||||
&& !exposedForm.behaviour.moving.swim.canBreatheUnderwater && !exposedForm.behaviour.moving.swim.canWalkOnWater
|
||||
&& !getBehaviourFlag(PokemonBehaviourFlag.FLYING)) {
|
||||
platform = PlatformType.getPlatformTypeForPokemon((exposedForm))
|
||||
}
|
||||
} else {
|
||||
@@ -744,6 +745,7 @@ open class PokemonEntity(
|
||||
goalSelector.addGoal(4, PokemonMoveIntoFluidGoal(this))
|
||||
goalSelector.addGoal(5, SleepOnTrainerGoal(this))
|
||||
goalSelector.addGoal(5, WildRestGoal(this))
|
||||
goalSelector.addGoal(5, PokemonHideInGrassGoal(this))
|
||||
|
||||
if (pokemon.getFeature<FlagSpeciesFeature>(DataKeys.HAS_BEEN_SHEARED) != null) {
|
||||
goalSelector.addGoal(5, EatBlockGoal(this))
|
||||
|
||||
+111
@@ -0,0 +1,111 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.entity.pokemon.ai.goals
|
||||
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.util.toVec3d
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.world.entity.ai.goal.Goal
|
||||
import net.minecraft.world.level.block.Blocks
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.phys.AABB
|
||||
|
||||
class PokemonHideInGrassGoal(private val pokemonEntity: PokemonEntity): Goal() {
|
||||
|
||||
companion object {
|
||||
private const val GRASS_SEARCH_HORIZONTAL_RANGE = 16.0
|
||||
private const val GRASS_SEARCH_VERTICAL_RANGE = 2.0
|
||||
private val SECONDS_IN_SAME_GRASS = 5 .. 10
|
||||
private val VALID_GRASS_BLOCKS = setOf(
|
||||
Blocks.SHORT_GRASS,
|
||||
Blocks.TALL_GRASS,
|
||||
Blocks.FERN,
|
||||
Blocks.LARGE_FERN,
|
||||
)
|
||||
}
|
||||
|
||||
private var pickedGrassBlockPos: BlockPos? = null
|
||||
private var ticksInGrass = 0
|
||||
private var wantedTicksInGrass = 0
|
||||
|
||||
override fun canUse(): Boolean =
|
||||
pokemonEntity.pokemon.species.behaviour.moving.hideInGrass
|
||||
&& pokemonEntity.pokemon.isWild()
|
||||
&& getNearbyGrassBlocks().isNotEmpty()
|
||||
|
||||
override fun start() {
|
||||
super.start()
|
||||
|
||||
pickedGrassBlockPos = getNearbyGrassBlocks().random()
|
||||
ticksInGrass = 0
|
||||
wantedTicksInGrass = pokemonEntity.random.nextIntBetweenInclusive(SECONDS_IN_SAME_GRASS.first, SECONDS_IN_SAME_GRASS.last) * 20
|
||||
}
|
||||
|
||||
override fun tick() {
|
||||
super.tick()
|
||||
|
||||
val grassBlockCenterPos = pickedGrassBlockPos?.bottomCenter ?: return stop()
|
||||
val couldMoveToGrass = pokemonEntity.navigation.moveTo(
|
||||
grassBlockCenterPos.x,
|
||||
grassBlockCenterPos.y,
|
||||
grassBlockCenterPos.z,
|
||||
1.0
|
||||
)
|
||||
|
||||
if (!couldMoveToGrass) return stop()
|
||||
|
||||
ticksInGrass++
|
||||
}
|
||||
|
||||
override fun canContinueToUse(): Boolean {
|
||||
if (ticksInGrass >= wantedTicksInGrass) return false
|
||||
|
||||
pickedGrassBlockPos?.let {
|
||||
val grassStillExists = isGrass(pokemonEntity.level().getBlockState(it))
|
||||
if (!grassStillExists) return false
|
||||
|
||||
val grassBox = AABB.ofSize(it.toVec3d(), 0.5, 0.5, 0.5)
|
||||
val isGrassOccupiedByAnotherEntity = pokemonEntity.level().getEntities(pokemonEntity, grassBox).isNotEmpty()
|
||||
if (isGrassOccupiedByAnotherEntity) {
|
||||
return false
|
||||
}
|
||||
} ?: return false
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun stop() {
|
||||
super.stop()
|
||||
|
||||
pickedGrassBlockPos = null
|
||||
ticksInGrass = 0
|
||||
pokemonEntity.navigation.stop()
|
||||
}
|
||||
|
||||
private fun getNearbyGrassBlocks(): List<BlockPos> {
|
||||
val searchBox = AABB.ofSize(
|
||||
pokemonEntity.position(),
|
||||
GRASS_SEARCH_HORIZONTAL_RANGE,
|
||||
GRASS_SEARCH_VERTICAL_RANGE,
|
||||
GRASS_SEARCH_HORIZONTAL_RANGE
|
||||
)
|
||||
|
||||
val grassBlocks: MutableList<BlockPos> = mutableListOf()
|
||||
BlockPos.betweenClosedStream(searchBox).forEach {
|
||||
val blockState = pokemonEntity.level().getBlockState(it)
|
||||
if (isGrass(blockState)) {
|
||||
grassBlocks.add(BlockPos(it))
|
||||
}
|
||||
}
|
||||
|
||||
return grassBlocks
|
||||
}
|
||||
|
||||
private fun isGrass(blockState: BlockState): Boolean = VALID_GRASS_BLOCKS.contains(blockState.block)
|
||||
}
|
||||
+1
-1
@@ -50,7 +50,7 @@ class PokemonInBattleMovementGoal(val entity: PokemonEntity, val range: Int) : G
|
||||
entity.navigation.moveTo(battlePos!!.x, battlePos!!.y, battlePos!!.z, 1.0)
|
||||
hasMovedToPos = true
|
||||
}
|
||||
if (entity.ticksLived > 1 && !entity.onGround() && !entity.getBehaviourFlag(PokemonBehaviourFlag.FLYING)) {
|
||||
if (entity.ticksLived > 1 && !entity.getBehaviourFlag(PokemonBehaviourFlag.FLYING) && entity.navigation.isAirborne(entity.level(), entity.blockPosition())) {
|
||||
// Let flyers fly in battle if they're in the air
|
||||
entity.setBehaviourFlag(PokemonBehaviourFlag.FLYING, true)
|
||||
}
|
||||
|
||||
@@ -23,4 +23,5 @@ class MoveBehaviour {
|
||||
val wanderSpeed = 1.0
|
||||
val canLook = true
|
||||
val looksAtEntities = true
|
||||
val hideInGrass = false
|
||||
}
|
||||
@@ -219,6 +219,10 @@ object DataKeys {
|
||||
const val NPC_IS_INVULNERABLE = "IsInvulnerable"
|
||||
const val NPC_IS_LEASHABLE = "IsLeashable"
|
||||
const val NPC_ALLOW_PROJECTILE_HITS = "AllowProjectileHits"
|
||||
const val NPC_HITBOX = "Hitbox"
|
||||
const val NPC_HITBOX_WIDTH = "Width"
|
||||
const val NPC_HITBOX_HEIGHT = "Height"
|
||||
const val NPC_HITBOX_FIXED = "Fixed"
|
||||
|
||||
// PokemonProperties
|
||||
const val ELEMENTAL_TYPE = "ElementalType"
|
||||
|
||||
@@ -6770,7 +6770,7 @@
|
||||
"cobblemon.ability.schooling": "Schooling",
|
||||
"cobblemon.ability.schooling.desc": "When it has a lot of HP, the Pokémon forms a powerful school. It stops schooling when its HP is low.",
|
||||
"cobblemon.ability.scrappy": "Scrappy",
|
||||
"cobblemon.ability.scrappy.desc": "The Pokémon can hit Ghost-type Pokémon with Normal- and Fighting-type moves.",
|
||||
"cobblemon.ability.scrappy.desc": "The Pokémon can hit Ghost-type Pokémon with Normal- and Fighting-type moves. It also grants immunity to Intimidate.",
|
||||
"cobblemon.ability.screencleaner": "Screen Cleaner",
|
||||
"cobblemon.ability.screencleaner.desc": "When the Pokémon enters a battle, the effects of Light Screen, Reflect, and Aurora Veil are nullified for both opposing and ally Pokémon.",
|
||||
"cobblemon.ability.seedsower": "Seed Sower",
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"item": "cobblemon:enigma_berry",
|
||||
"effects": [
|
||||
{
|
||||
"type": "cobblemon:ha_chance",
|
||||
"chance": 0.05
|
||||
}
|
||||
]
|
||||
}
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"item": "cobblemon:enigma_berry",
|
||||
"effects": [
|
||||
{
|
||||
"type": "cobblemon:ha_chance",
|
||||
"chance": 0.05
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"item": "cobblemon:berry_sweet",
|
||||
"effects": [
|
||||
{
|
||||
"type": "cobblemon:inert"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"item": "cobblemon:clover_sweet",
|
||||
"effects": [
|
||||
{
|
||||
"type": "cobblemon:inert"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"item": "cobblemon:flower_sweet",
|
||||
"effects": [
|
||||
{
|
||||
"type": "cobblemon:inert"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"item": "cobblemon:love_sweet",
|
||||
"effects": [
|
||||
{
|
||||
"type": "cobblemon:inert"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"item": "cobblemon:ribbon_sweet",
|
||||
"effects": [
|
||||
{
|
||||
"type": "cobblemon:inert"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"item": "cobblemon:star_sweet",
|
||||
"effects": [
|
||||
{
|
||||
"type": "cobblemon:inert"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"item": "cobblemon:strawberry_sweet",
|
||||
"effects": [
|
||||
{
|
||||
"type": "cobblemon:inert"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
"GCA",
|
||||
"ICA",
|
||||
"I "
|
||||
" GA",
|
||||
"GGA",
|
||||
"II "
|
||||
],
|
||||
"key": {
|
||||
"I": {
|
||||
@@ -12,9 +12,6 @@
|
||||
"G": {
|
||||
"item": "minecraft:gold_ingot"
|
||||
},
|
||||
"C": {
|
||||
"item": "minecraft:copper_ingot"
|
||||
},
|
||||
"A": {
|
||||
"item": "minecraft:amethyst_shard"
|
||||
}
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
" Q",
|
||||
"CPC",
|
||||
"Q "
|
||||
"IA",
|
||||
"CI",
|
||||
"C "
|
||||
],
|
||||
"key": {
|
||||
"Q": {
|
||||
"item": "minecraft:quartz"
|
||||
},
|
||||
"C": {
|
||||
"item": "minecraft:copper_ingot"
|
||||
},
|
||||
"P": {
|
||||
"item": "minecraft:ender_pearl"
|
||||
}
|
||||
"I": {
|
||||
"item": "minecraft:iron_ingot"
|
||||
},
|
||||
"C": {
|
||||
"item": "minecraft:copper_ingot"
|
||||
},
|
||||
"A": {
|
||||
"item": "minecraft:amethyst_shard"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"id": "cobblemon:wide_lens"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"type": "minecraft:crafting_shaped",
|
||||
"pattern": [
|
||||
"AGC",
|
||||
"GGC",
|
||||
"AGG",
|
||||
"GCC",
|
||||
" C"
|
||||
],
|
||||
"key": {
|
||||
|
||||
@@ -5,22 +5,7 @@
|
||||
],
|
||||
"maxY": 62,
|
||||
"neededNearbyBlocks": [
|
||||
"minecraft:chiseled_deepslate",
|
||||
"minecraft:cobbled_deepslate_wall",
|
||||
"minecraft:cracked_deepslate_bricks",
|
||||
"minecraft:cracked_deepslate_tiles",
|
||||
"minecraft:deepslate_brick_slab",
|
||||
"minecraft:deepslate_brick_stairs",
|
||||
"minecraft:deepslate_brick_wall",
|
||||
"minecraft:deepslate_bricks",
|
||||
"minecraft:deepslate_tile_slab",
|
||||
"minecraft:deepslate_tile_stairs",
|
||||
"minecraft:deepslate_tile_wall",
|
||||
"minecraft:deepslate_tiles",
|
||||
"minecraft:polished_basalt",
|
||||
"minecraft:polished_deepslate",
|
||||
"minecraft:polished_deepslate_slab",
|
||||
"minecraft:polished_deepslate_wall"
|
||||
"#cobblemon:ancient_city_blocks"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
{
|
||||
"condition": {
|
||||
"neededNearbyBlocks": [
|
||||
"cobblemon:black_apricorn",
|
||||
"cobblemon:blue_apricorn",
|
||||
"cobblemon:green_apricorn",
|
||||
"cobblemon:pink_apricorn",
|
||||
"cobblemon:red_apricorn",
|
||||
"cobblemon:white_apricorn",
|
||||
"cobblemon:yellow_apricorn"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
{
|
||||
"condition": {
|
||||
"neededNearbyBlocks": [
|
||||
"minecraft:blue_orchid",
|
||||
"minecraft:cornflower",
|
||||
"aether_redux:pink_prismatic_petals",
|
||||
"aether_redux:mixed_prismatic_petals",
|
||||
"aether_redux:teal_prismatic_petals",
|
||||
"biomesoplenty:blue_hydrangea",
|
||||
"biomesoplenty:blue_hydrangea_bottom",
|
||||
"biomesoplenty:blue_hydrangea_top",
|
||||
"biomesoplenty:icy_iris",
|
||||
"blue_skies:moonlit_bloom",
|
||||
"blue_skies:nightcress",
|
||||
"botania:blue_double_flower",
|
||||
"botania:blue_floating_flower",
|
||||
"botania:blue_mystical_flower",
|
||||
"botania:blue_shiny_flower",
|
||||
"botania:cyan_double_flower",
|
||||
"botania:cyan_floating_flower",
|
||||
"botania:cyan_mystical_flower",
|
||||
"botania:cyan_shiny_flower",
|
||||
"botania:floating_hydroangeas",
|
||||
"botania:floating_labellia",
|
||||
"botania:floating_manastar",
|
||||
"botania:floating_marimorphosis",
|
||||
"botania:floating_marimorphosis_chibi",
|
||||
"botania:floating_spectrolus",
|
||||
"botania:floating_tangleberrie",
|
||||
"botania:floating_tangleberrie_chibi",
|
||||
"botania:hydroangeas",
|
||||
"botania:hydroangeas_motif",
|
||||
"botania:labellia",
|
||||
"botania:light_blue_double_flower",
|
||||
"botania:light_blue_floating_flower",
|
||||
"botania:light_blue_mystical_flower",
|
||||
"botania:light_blue_shiny_flower",
|
||||
"botania:manastar",
|
||||
"botania:marimorphosis",
|
||||
"botania:marimorphosis_chibi",
|
||||
"botania:spectrolus",
|
||||
"botania:tangleberrie",
|
||||
"botania:tangleberrie_chibi",
|
||||
"etcetera:bouquet",
|
||||
"goodending:pastel_wildflowers",
|
||||
"goodending:twilight_wildflowers",
|
||||
"mythicbotany:aquapanthus",
|
||||
"mythicbotany:aquapanthus_floating",
|
||||
"mythicbotany:raindeletia",
|
||||
"mythicbotany:raindeletia_floating",
|
||||
"outer_end:azure_bud",
|
||||
"wilderwild:blue_giany_glory_of_the_snow"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -5,126 +5,7 @@
|
||||
},
|
||||
"anticondition": {
|
||||
"neededBaseBlocks": [
|
||||
"#minecraft:animals_spawnable_on",
|
||||
"#minecraft:crystal_sound_blocks",
|
||||
"#minecraft:base_stone_nether",
|
||||
"#minecraft:base_stone_overworld",
|
||||
"#minecraft:coal_ores",
|
||||
"#minecraft:copper_ores",
|
||||
"#minecraft:coral_blocks",
|
||||
"#minecraft:diamond_ores",
|
||||
"#minecraft:dirt",
|
||||
"#minecraft:dirt_like",
|
||||
"#minecraft:emerald_ores",
|
||||
"#minecraft:sculk_replaceable",
|
||||
"#minecraft:gold_ores",
|
||||
"#minecraft:grass",
|
||||
"#minecraft:gravel",
|
||||
"#minecraft:ice",
|
||||
"#minecraft:iron_ores",
|
||||
"#minecraft:lapis_ores",
|
||||
"#minecraft:logs",
|
||||
"#minecraft:nylium",
|
||||
"#minecraft:redstone_ores",
|
||||
"#minecraft:sand",
|
||||
"#minecraft:snow",
|
||||
"#minecraft:terracotta",
|
||||
"#minecraft:valid_spawn",
|
||||
"#c:adamantite_ores",
|
||||
"#c:aetherium_ores",
|
||||
"#c:aluminum_ores",
|
||||
"#c:amethyst_blocks",
|
||||
"#c:amethyst_ores",
|
||||
"#c:ancient_debris",
|
||||
"#c:antimony_ores",
|
||||
"#c:aquarium_ores",
|
||||
"#c:asterite_ores",
|
||||
"#c:asteroid_asterite_ores",
|
||||
"#c:banglum_ores",
|
||||
"#c:basalt",
|
||||
"#c:bauxite_ores",
|
||||
"#c:bone_blocks",
|
||||
"#c:carmot_ores",
|
||||
"#c:certus_quartz_ores",
|
||||
"#c:cinnabar_ores",
|
||||
"#c:cobalt_ores",
|
||||
"#c:coral_blocks",
|
||||
"#c:dirt",
|
||||
"#c:end_stones",
|
||||
"#c:galaxium_ores",
|
||||
"#c:galena_ores",
|
||||
"#c:gravel",
|
||||
"#c:galena_ores",
|
||||
"#c:kyber_ores",
|
||||
"#c:lead_ores",
|
||||
"#c:lignite_coal_ores",
|
||||
"#c:logs",
|
||||
"#c:lunum_ores",
|
||||
"#c:lutetium_ores",
|
||||
"#c:manganese_ores",
|
||||
"#c:meteor_metite_ores",
|
||||
"#c:metite_ores",
|
||||
"#c:midas_gold_ores",
|
||||
"#c:moon_lunum_ores",
|
||||
"#c:mozanite_ores",
|
||||
"#c:mythril_ores",
|
||||
"#c:natural_stones",
|
||||
"#c:netherrack",
|
||||
"#c:nether_mycelium",
|
||||
"#c:nickel_ores",
|
||||
"#c:nikolite_ores",
|
||||
"#c:ores",
|
||||
"#c:orichalcum_ores",
|
||||
"#c:osmium_ores",
|
||||
"#c:palladium_ores",
|
||||
"#c:peridot_ores",
|
||||
"#c:platinum_ores",
|
||||
"#c:prometheum_ores",
|
||||
"#c:pyrite_ores",
|
||||
"#c:quadrillum_ores",
|
||||
"#c:quartz_ores",
|
||||
"#c:raw_antimony_ores",
|
||||
"#c:raw_copper_ores",
|
||||
"#c:raw_gold_ores",
|
||||
"#c:raw_iridium_ores",
|
||||
"#c:raw_iron_ores",
|
||||
"#c:raw_lead_ores",
|
||||
"#c:raw_nickel_ores",
|
||||
"#c:raw_platinum_ores",
|
||||
"#c:raw_silver_ores",
|
||||
"#c:raw_tin_ores",
|
||||
"#c:raw_titanium_ores",
|
||||
"#c:raw_tungsten_ores",
|
||||
"#c:raw_uranium_ores",
|
||||
"#c:red_sandstones",
|
||||
"#c:ruby_ores",
|
||||
"#c:runite_ores",
|
||||
"#c:salt_ores",
|
||||
"#c:sand",
|
||||
"#c:sandstone",
|
||||
"#c:sandstones",
|
||||
"#c:sapphire_ores",
|
||||
"#c:sheldonite_ores",
|
||||
"#c:silver_ores",
|
||||
"#c:sodalite_ores",
|
||||
"#c:sphalerite_ores",
|
||||
"#c:starrite_ores",
|
||||
"#c:stellum_ores",
|
||||
"#c:stone",
|
||||
"#c:stormyx_ores",
|
||||
"#c:sulfur_ores",
|
||||
"#c:tantalite_ores",
|
||||
"#c:terracotta_blocks",
|
||||
"#c:tin_ores",
|
||||
"#c:titanium_ores",
|
||||
"#c:topaz_ores",
|
||||
"#c:truesilver_ores",
|
||||
"#c:tungsten_ores",
|
||||
"#c:unobtainium_ores",
|
||||
"#c:ur_ores",
|
||||
"#c:uranium_ores",
|
||||
"#c:vermiculite_ores",
|
||||
"#c:zinc_ores"
|
||||
"#cobblemon:natural"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -5,12 +5,7 @@
|
||||
],
|
||||
"minY": 62,
|
||||
"neededNearbyBlocks": [
|
||||
"minecraft:chiseled_sandstone",
|
||||
"minecraft:cut_sandstone",
|
||||
"minecraft:orange_terracotta",
|
||||
"minecraft:sandstone",
|
||||
"minecraft:sandstone_slab",
|
||||
"minecraft:sandstone_stairs"
|
||||
"#cobblemon:desert_pyramid_blocks"
|
||||
]
|
||||
},
|
||||
"anticondition": {
|
||||
|
||||
@@ -9,11 +9,7 @@
|
||||
"minecraft:purpur_pillar"
|
||||
],
|
||||
"neededNearbyBlocks": [
|
||||
"minecraft:end_stone_bricks",
|
||||
"minecraft:purpur_block",
|
||||
"minecraft:purpur_pillar",
|
||||
"minecraft:purpur_slab",
|
||||
"minecraft:purpur_stairs"
|
||||
"#cobblemon:end_city_blocks"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
{
|
||||
"condition": {
|
||||
"neededNearbyBlocks": [
|
||||
"#minecraft:flowers",
|
||||
"#c:flowers",
|
||||
"aether_redux:pink_prismatic_petals",
|
||||
"aether_redux:mixed_prismatic_petals",
|
||||
"aether_redux:teal_prismatic_petals",
|
||||
"deep_aether:aerlavender",
|
||||
"deep_aether:enchanted_blossom",
|
||||
"deep_aether:golden_flower",
|
||||
"deep_aether:radiant_orchid",
|
||||
"deep_aether:tall_aerlavender",
|
||||
"etcetera:bouquet",
|
||||
"mythicbotany:aquapanthus",
|
||||
"mythicbotany:aquapanthus_floating",
|
||||
"mythicbotany:exoblaze",
|
||||
"mythicbotany:exoblaze_floating",
|
||||
"mythicbotany:feysythia",
|
||||
"mythicbotany:feysythia_floating",
|
||||
"mythicbotany:hellebore",
|
||||
"mythicbotany:hellebore_floating",
|
||||
"mythicbotany:petrunia",
|
||||
"mythicbotany:petrunia_floating",
|
||||
"mythicbotany:raindeletia",
|
||||
"mythicbotany:raindeletia_floating",
|
||||
"mythicbotany:wither_aconite",
|
||||
"mythicbotany:wither_aconite_floating",
|
||||
"twilightforest:thorn_rose"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"condition": {
|
||||
"biomes": [
|
||||
"#cobblemon:is_freshwater"
|
||||
]
|
||||
},
|
||||
"anticondition": {
|
||||
"biomes": [
|
||||
"#cobblemon:is_freezing"
|
||||
]
|
||||
}
|
||||
}
|
||||
Loaded 100 of 463 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user