mirror of
https://gitlab.com/cable-mc/cobblemon.git
synced 2026-10-25 08:36:24 -04:00
Compare commits
9
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
608be25334 | ||
|
|
2928667500 | ||
|
|
1c528a909c | ||
|
|
9ca5d12f84 | ||
|
|
cc9bb528a8 | ||
|
|
f4c847fdd5 | ||
|
|
ec6e1403e7 | ||
|
|
10a4a03a8b | ||
|
|
e0a86f8794 |
@@ -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)
|
||||
|
||||
@@ -25,14 +25,24 @@ import net.minecraft.world.item.ItemStack
|
||||
* @author whatsy
|
||||
* @since September 4th, 2024
|
||||
* @param searchString The string to use when checking.
|
||||
* @param searchByType The type of search to perform
|
||||
* @param showOnlyDiscoveredSpecies Whether to include only species that have been discovered or all species
|
||||
*/
|
||||
class SearchFilter(val pokedexManager: AbstractPokedexManager, val searchString: String, val searchByType: SearchByType = SearchByType.SPECIES) : EntryFilter() {
|
||||
class SearchFilter(
|
||||
val pokedexManager: AbstractPokedexManager,
|
||||
val searchString: String,
|
||||
val searchByType: SearchByType = SearchByType.SPECIES,
|
||||
val showOnlyDiscoveredSpecies: Boolean,
|
||||
) : EntryFilter() {
|
||||
|
||||
override fun test(entry: PokedexEntry): Boolean {
|
||||
val pokedexEntryProgress = pokedexManager.getHighestKnowledgeFor(entry)
|
||||
|
||||
if (showOnlyDiscoveredSpecies && pokedexEntryProgress == PokedexEntryProgress.NONE) return false
|
||||
if (searchString == "") return true
|
||||
|
||||
val species = PokemonSpecies.getByIdentifier(entry.speciesId) ?: return false
|
||||
if (pokedexManager.getHighestKnowledgeFor(entry) == PokedexEntryProgress.NONE) return false
|
||||
if (pokedexEntryProgress == PokedexEntryProgress.NONE) return false
|
||||
|
||||
when(searchByType) {
|
||||
SearchByType.ABILITIES -> {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -54,6 +54,7 @@ import com.cobblemon.mod.common.net.messages.server.block.AdjustBlockEntityViewe
|
||||
import com.cobblemon.mod.common.pokemon.abilities.HiddenAbility
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import com.cobblemon.mod.common.util.lang
|
||||
import com.mojang.blaze3d.vertex.PoseStack
|
||||
import net.minecraft.client.Minecraft
|
||||
import net.minecraft.client.gui.GuiGraphics
|
||||
import net.minecraft.client.gui.components.Renderable
|
||||
@@ -63,6 +64,7 @@ import net.minecraft.client.gui.screens.Screen
|
||||
import net.minecraft.client.resources.sounds.SimpleSoundInstance
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.network.chat.Component
|
||||
import net.minecraft.network.chat.MutableComponent
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.sounds.SoundEvent
|
||||
|
||||
@@ -127,11 +129,13 @@ class PokedexGUI private constructor(
|
||||
|
||||
private lateinit var regionSelectWidgetUp: ScaledButton
|
||||
private lateinit var regionSelectWidgetDown: ScaledButton
|
||||
private lateinit var onlyDiscoveredSpeciesButton: ScaledButton
|
||||
private lateinit var searchByTypeButton: ScaledButton
|
||||
private lateinit var scrollScreen: EntriesScrollingWidget
|
||||
private lateinit var pokemonInfoWidget: PokemonInfoWidget
|
||||
private lateinit var searchWidget: SearchWidget
|
||||
|
||||
private var showOnlyDiscoveredSpecies: Boolean = false
|
||||
private var selectedSearchByType: SearchByType = SearchByType.SPECIES
|
||||
private val tabButtons: MutableList<ScaledButton> = mutableListOf()
|
||||
|
||||
@@ -171,7 +175,7 @@ class PokedexGUI private constructor(
|
||||
displaytabInfoElement(tabInfoIndex, false)
|
||||
|
||||
if (::searchWidget.isInitialized) removeWidget(searchWidget)
|
||||
searchWidget = SearchWidget(x + 26, y + 28, 128, HEADER_BAR_HEIGHT, update = ::updateFilters)
|
||||
searchWidget = SearchWidget(x + 26, y + 28, 120, HEADER_BAR_HEIGHT, update = ::updateFilters)
|
||||
addRenderableWidget(searchWidget)
|
||||
|
||||
if (::regionSelectWidgetUp.isInitialized) removeWidget(regionSelectWidgetUp)
|
||||
@@ -198,6 +202,21 @@ class PokedexGUI private constructor(
|
||||
)
|
||||
addRenderableWidget(regionSelectWidgetDown)
|
||||
|
||||
if (::onlyDiscoveredSpeciesButton.isInitialized) removeWidget(onlyDiscoveredSpeciesButton)
|
||||
onlyDiscoveredSpeciesButton = ScaledButton(
|
||||
buttonX = (x + 145.5).toFloat(),
|
||||
buttonY = (y + 29.5).toFloat(),
|
||||
buttonWidth = 16,
|
||||
buttonHeight = 16,
|
||||
scale = SCALE,
|
||||
resource = cobblemonResource("textures/gui/pokedex/tab_species.png"),
|
||||
clickAction = {
|
||||
showOnlyDiscoveredSpecies = !showOnlyDiscoveredSpecies
|
||||
updateFilters()
|
||||
}
|
||||
)
|
||||
addRenderableWidget(onlyDiscoveredSpeciesButton)
|
||||
|
||||
if (::searchByTypeButton.isInitialized) removeWidget(searchByTypeButton)
|
||||
searchByTypeButton = ScaledButton(
|
||||
buttonX = (x + 154.5).toFloat(),
|
||||
@@ -328,20 +347,28 @@ class PokedexGUI private constructor(
|
||||
|
||||
super.render(context, mouseX, mouseY, delta)
|
||||
|
||||
// Search type tooltip
|
||||
if (searchByTypeButton.isButtonHovered(mouseX, mouseY)) {
|
||||
matrices.pushPose()
|
||||
matrices.translate(0.0, 0.0, 1000.0)
|
||||
val searchTypeText = lang("ui.pokedex.search.search_by", lang("ui.pokedex.search.type.${selectedSearchByType.name.lowercase()}")).bold()
|
||||
val searchTypeTextWidth = Minecraft.getInstance().font.width(searchTypeText.font(CobblemonResources.DEFAULT_LARGE))
|
||||
val tooltipWidth = searchTypeTextWidth + 6
|
||||
|
||||
blitk(matrixStack = matrices, texture = tooltipEdge, x = mouseX - (tooltipWidth / 2) - 1, y = mouseY - 16, width = 1, height = 11)
|
||||
blitk(matrixStack = matrices, texture = tooltipBackground, x = mouseX - (tooltipWidth / 2), y = mouseY - 16, width = tooltipWidth, height = 11)
|
||||
blitk(matrixStack = matrices, texture = tooltipEdge, x = mouseX + (tooltipWidth / 2), y = mouseY - 16, width = 1, height = 11)
|
||||
drawScaledText(context = context, font = CobblemonResources.DEFAULT_LARGE, text = searchTypeText, x = mouseX, y = mouseY - 15, shadow = true, centered = true)
|
||||
matrices.popPose()
|
||||
if (onlyDiscoveredSpeciesButton.isButtonHovered(mouseX, mouseY)) {
|
||||
val text = lang("ui.pokedex.search.show_only_discovered").bold()
|
||||
renderPokedexStyledTooltip(context, matrices, mouseX, mouseY, text)
|
||||
}
|
||||
|
||||
if (searchByTypeButton.isButtonHovered(mouseX, mouseY)) {
|
||||
val searchTypeText = lang("ui.pokedex.search.search_by", lang("ui.pokedex.search.type.${selectedSearchByType.name.lowercase()}")).bold()
|
||||
renderPokedexStyledTooltip(context, matrices, mouseX, mouseY, searchTypeText)
|
||||
}
|
||||
}
|
||||
|
||||
private fun renderPokedexStyledTooltip(context: GuiGraphics, matrices: PoseStack, mouseX: Int, mouseY: Int, text: MutableComponent) {
|
||||
matrices.pushPose()
|
||||
matrices.translate(0.0, 0.0, 1000.0)
|
||||
val searchTypeTextWidth = Minecraft.getInstance().font.width(text.font(CobblemonResources.DEFAULT_LARGE))
|
||||
val tooltipWidth = searchTypeTextWidth + 6
|
||||
|
||||
blitk(matrixStack = matrices, texture = tooltipEdge, x = mouseX - (tooltipWidth / 2) - 1, y = mouseY - 16, width = 1, height = 11)
|
||||
blitk(matrixStack = matrices, texture = tooltipBackground, x = mouseX - (tooltipWidth / 2), y = mouseY - 16, width = tooltipWidth, height = 11)
|
||||
blitk(matrixStack = matrices, texture = tooltipEdge, x = mouseX + (tooltipWidth / 2), y = mouseY - 16, width = 1, height = 11)
|
||||
drawScaledText(context = context, font = CobblemonResources.DEFAULT_LARGE, text = text, x = mouseX, y = mouseY - 15, shadow = true, centered = true)
|
||||
matrices.popPose()
|
||||
}
|
||||
|
||||
override fun onClose() {
|
||||
@@ -435,7 +462,12 @@ class PokedexGUI private constructor(
|
||||
fun getFilters(): Collection<EntryFilter> {
|
||||
val filters: MutableList<EntryFilter> = mutableListOf()
|
||||
|
||||
filters.add(SearchFilter(CobblemonClient.clientPokedexData, searchWidget.value, selectedSearchByType))
|
||||
filters.add(SearchFilter(
|
||||
CobblemonClient.clientPokedexData,
|
||||
searchWidget.value,
|
||||
selectedSearchByType,
|
||||
showOnlyDiscoveredSpecies
|
||||
))
|
||||
|
||||
return filters
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
+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)
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -1041,6 +1041,7 @@
|
||||
"cobblemon.ui.pokedex.region.unknown": "Unknown",
|
||||
"cobblemon.ui.pokedex.region.unova": "Unova",
|
||||
|
||||
"cobblemon.ui.pokedex.search.show_only_discovered": "Show Only Discovered Species",
|
||||
"cobblemon.ui.pokedex.search.search_by": "Search by %1$s",
|
||||
"cobblemon.ui.pokedex.search.type.species": "Species Name",
|
||||
"cobblemon.ui.pokedex.search.type.abilities": "Ability",
|
||||
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user