Compare commits

...
Author SHA1 Message Date
Guilherme Pereira 24f5a314f5 add behaviour for wild pokemon to hide in grass #122 2024-12-18 01:22:03 -03:00
Polymeta 7ae20ccd60 Merge branch 'scrappy-lang-fix' into 'main'
Updated Scrappy's ability description

See merge request cable-mc/cobblemon!1389
2024-12-17 23:53:29 +00:00
Conan 621b867d14 Updated Scrappy's ability description 2024-12-17 21:46:24 +01:00
Polymeta 2928667500 Merge branch '1.6-spawns' into 'main'
Updated recipes for Scope Lens, Wide Lens, and Zoom Lens. Updated spawns....

See merge request cable-mc/cobblemon!1384
2024-12-16 23:50:04 +00:00
Veraxiel 1c528a909c Updated recipes for Scope Lens, Wide Lens, and Zoom Lens. Updated spawns.... 2024-12-16 23:50:04 +00:00
Hiroku 9ca5d12f84 Merge branch 'FixInBattleFlightFidgeting' into 'main'
FixInBattleFlightFidgeting

See merge request cable-mc/cobblemon!1383
2024-12-16 09:41:22 +00:00
Hiroku cc9bb528a8 Merge branch 'npc-hitbox' into 'main'
Fixed npcs not being able to take custom hitbox properties

See merge request cable-mc/cobblemon!1381
2024-12-16 09:40:46 +00:00
JazzMcNade f4c847fdd5 Replaced isGrounded with the more reliable isAirborne. Prevented pokemon from currently flying from receiving a raft. 2024-12-16 01:04:46 -06:00
Conan ec6e1403e7 Fixed npcs not being able to take custom hitbox properties 2024-12-16 05:24:26 +01:00
Hiroku 10a4a03a8b Merge branch 'close-battle-gui-with-mouse' into 'main'
Fix battle GUI not closing with mouse keybind

Closes #1093

See merge request cable-mc/cobblemon!1380
2024-12-16 03:06:46 +00:00
lion e0a86f8794 Fix battle GUI not closing with mouse keybind 2024-12-16 03:06:45 +00:00
463 changed files with 6608 additions and 6087 deletions

No files matched your search

+1
View File
@@ -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))
@@ -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)
}
@@ -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",
@@ -0,0 +1,9 @@
{
"item": "cobblemon:enigma_berry",
"effects": [
{
"type": "cobblemon:ha_chance",
"chance": 0.05
}
]
}
@@ -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