mirror of
https://gitlab.com/cable-mc/cobblemon.git
synced 2026-11-15 04:38:53 -05:00
Compare commits
28
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
341ed7ad38 | ||
|
|
be86d1962d | ||
|
|
19508df8d1 | ||
|
|
149c1f85e0 | ||
|
|
0725fa83d6 | ||
|
|
1f5bb78684 | ||
|
|
87c21d8906 | ||
|
|
cadaf00d08 | ||
|
|
30404192bd | ||
|
|
5b3566a2b5 | ||
|
|
1feeab6f87 | ||
|
|
49c22f951d | ||
|
|
a94cbc4eae | ||
|
|
5083af626c | ||
|
|
137bb37c29 | ||
|
|
eec578b312 | ||
|
|
b6abe9711d | ||
|
|
38c2e0d194 | ||
|
|
69566a97ca | ||
|
|
6866e9af9b | ||
|
|
e45f2c6261 | ||
|
|
d9bea49567 | ||
|
|
235b753a25 | ||
|
|
3d48432390 | ||
|
|
7b03940dab | ||
|
|
8d5d37c750 | ||
|
|
cdb9c80c0e | ||
|
|
a77f035617 |
No files matched your search
@@ -6,6 +6,7 @@
|
||||
- A Pokémon holding a Power item now gains 1 point in the corresponding riding stat every two minutes while being ridden. The interval is configurable, and can be disabled with `-1`.
|
||||
- Added sounds to Gigaton Hammer and Pyro Ball
|
||||
- Added stepsounds to Venusaur, Blastoise, Dewgong, Rhydon, Rhyhorn, Parasect and Mr. Mime.
|
||||
- Added the Copper Oven, Copper Fridge, Copper Washer, Copper Fan, and Copper Mower.
|
||||
|
||||
### Changes
|
||||
- Amethyst now grows from Typegem core blocks like typegems do
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
Spec Doc: https://docs.google.com/document/d/1hEKKrT4JEagJBykx-k9K2BoeNxiMGahUWXnf8YQ85xo/edit?tab=t.0
|
||||
Marshal: dhi_holo
|
||||
@@ -8,6 +8,10 @@
|
||||
|
||||
package com.cobblemon.mod.common
|
||||
|
||||
import com.cobblemon.mod.common.block.appliances.fridge.CopperFridgeBlockEntity
|
||||
import com.cobblemon.mod.common.block.appliances.mower.CopperMowerBlockEntity
|
||||
import com.cobblemon.mod.common.block.appliances.oven.CopperOvenBlockEntity
|
||||
import com.cobblemon.mod.common.block.appliances.washer.CopperWasherBlockEntity
|
||||
import com.cobblemon.mod.common.block.entity.*
|
||||
import com.cobblemon.mod.common.block.habitat.HabitatBlockEntity
|
||||
import com.cobblemon.mod.common.block.multiblock.FossilMultiblockBuilder
|
||||
@@ -126,4 +130,64 @@ object CobblemonBlockEntities : PlatformRegistry<Registry<BlockEntityType<*>>, R
|
||||
CobblemonBlocks.MISTLEAF
|
||||
).build(null)
|
||||
)
|
||||
|
||||
@JvmField
|
||||
val COPPER_FRIDGE: BlockEntityType<CopperFridgeBlockEntity> = this.create(
|
||||
"copper_fridge",
|
||||
BlockEntityType.Builder.of(::CopperFridgeBlockEntity,
|
||||
CobblemonBlocks.COPPER_FRIDGE,
|
||||
CobblemonBlocks.EXPOSED_COPPER_FRIDGE,
|
||||
CobblemonBlocks.WEATHERED_COPPER_FRIDGE,
|
||||
CobblemonBlocks.OXIDIZED_COPPER_FRIDGE,
|
||||
CobblemonBlocks.WAXED_COPPER_FRIDGE,
|
||||
CobblemonBlocks.WAXED_EXPOSED_COPPER_FRIDGE,
|
||||
CobblemonBlocks.WAXED_WEATHERED_COPPER_FRIDGE,
|
||||
CobblemonBlocks.WAXED_OXIDIZED_COPPER_FRIDGE
|
||||
).build(null)
|
||||
)
|
||||
|
||||
@JvmField
|
||||
val COPPER_WASHER: BlockEntityType<CopperWasherBlockEntity> = this.create(
|
||||
"copper_washer",
|
||||
BlockEntityType.Builder.of(::CopperWasherBlockEntity,
|
||||
CobblemonBlocks.COPPER_WASHER,
|
||||
CobblemonBlocks.EXPOSED_COPPER_WASHER,
|
||||
CobblemonBlocks.WEATHERED_COPPER_WASHER,
|
||||
CobblemonBlocks.OXIDIZED_COPPER_WASHER,
|
||||
CobblemonBlocks.WAXED_COPPER_WASHER,
|
||||
CobblemonBlocks.WAXED_EXPOSED_COPPER_WASHER,
|
||||
CobblemonBlocks.WAXED_WEATHERED_COPPER_WASHER,
|
||||
CobblemonBlocks.WAXED_OXIDIZED_COPPER_WASHER
|
||||
).build(null)
|
||||
)
|
||||
|
||||
@JvmField
|
||||
val COPPER_MOWER: BlockEntityType<CopperMowerBlockEntity> = this.create(
|
||||
"copper_mower",
|
||||
BlockEntityType.Builder.of(::CopperMowerBlockEntity,
|
||||
CobblemonBlocks.COPPER_MOWER,
|
||||
CobblemonBlocks.EXPOSED_COPPER_MOWER,
|
||||
CobblemonBlocks.WEATHERED_COPPER_MOWER,
|
||||
CobblemonBlocks.OXIDIZED_COPPER_MOWER,
|
||||
CobblemonBlocks.WAXED_COPPER_MOWER,
|
||||
CobblemonBlocks.WAXED_EXPOSED_COPPER_MOWER,
|
||||
CobblemonBlocks.WAXED_WEATHERED_COPPER_MOWER,
|
||||
CobblemonBlocks.WAXED_OXIDIZED_COPPER_MOWER
|
||||
).build(null)
|
||||
)
|
||||
|
||||
@JvmField
|
||||
val COPPER_OVEN: BlockEntityType<CopperOvenBlockEntity> = this.create(
|
||||
"copper_oven",
|
||||
BlockEntityType.Builder.of(::CopperOvenBlockEntity,
|
||||
CobblemonBlocks.COPPER_OVEN,
|
||||
CobblemonBlocks.EXPOSED_COPPER_OVEN,
|
||||
CobblemonBlocks.WEATHERED_COPPER_OVEN,
|
||||
CobblemonBlocks.OXIDIZED_COPPER_OVEN,
|
||||
CobblemonBlocks.WAXED_COPPER_OVEN,
|
||||
CobblemonBlocks.WAXED_EXPOSED_COPPER_OVEN,
|
||||
CobblemonBlocks.WAXED_WEATHERED_COPPER_OVEN,
|
||||
CobblemonBlocks.WAXED_OXIDIZED_COPPER_OVEN
|
||||
).build(null)
|
||||
)
|
||||
}
|
||||
@@ -13,6 +13,16 @@ import com.cobblemon.mod.common.api.pokemon.stats.Stats
|
||||
import com.cobblemon.mod.common.block.*
|
||||
import com.cobblemon.mod.common.block.LecternBlock
|
||||
import com.cobblemon.mod.common.block.MintBlock.MintType
|
||||
import com.cobblemon.mod.common.block.appliances.fan.CopperFanBlock
|
||||
import com.cobblemon.mod.common.block.appliances.fan.WeatheringCopperFanBlock
|
||||
import com.cobblemon.mod.common.block.appliances.fridge.CopperFridgeBlock
|
||||
import com.cobblemon.mod.common.block.appliances.fridge.WeatheringCopperFridgeBlock
|
||||
import com.cobblemon.mod.common.block.appliances.mower.CopperMowerBlock
|
||||
import com.cobblemon.mod.common.block.appliances.mower.WeatheringCopperMowerBlock
|
||||
import com.cobblemon.mod.common.block.appliances.oven.CopperOvenBlock
|
||||
import com.cobblemon.mod.common.block.appliances.oven.WeatheringCopperOvenBlock
|
||||
import com.cobblemon.mod.common.block.appliances.washer.CopperWasherBlock
|
||||
import com.cobblemon.mod.common.block.appliances.washer.WeatheringCopperWasherBlock
|
||||
import com.cobblemon.mod.common.block.campfirepot.CampfireBlock
|
||||
import com.cobblemon.mod.common.block.campfirepot.CampfirePotBlock
|
||||
import com.cobblemon.mod.common.block.chest.GildedChestBlock
|
||||
@@ -28,12 +38,7 @@ import com.cobblemon.mod.common.block.sign.CobblemonWallHangingSignBlock
|
||||
import com.cobblemon.mod.common.block.sign.CobblemonWallSignBlock
|
||||
import com.cobblemon.mod.common.block.tmmachine.TMMachineBlock
|
||||
import com.cobblemon.mod.common.block.general.MintLitterBlock
|
||||
import com.cobblemon.mod.common.mixin.invoker.BlocksInvoker
|
||||
import com.cobblemon.mod.common.mixin.invoker.DoorBlockInvoker
|
||||
import com.cobblemon.mod.common.mixin.invoker.FireBlockInvoker
|
||||
import com.cobblemon.mod.common.mixin.invoker.PressurePlateBlockInvoker
|
||||
import com.cobblemon.mod.common.mixin.invoker.StairsBlockInvoker
|
||||
import com.cobblemon.mod.common.mixin.invoker.TrapdoorBlockInvoker
|
||||
import com.cobblemon.mod.common.mixin.invoker.*
|
||||
import com.cobblemon.mod.common.platform.PlatformRegistry
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import net.minecraft.core.BlockPos
|
||||
@@ -792,6 +797,9 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, ResourceKey<Registry<
|
||||
@JvmField
|
||||
val RESTORATION_TANK = create("restoration_tank", RestorationTankBlock(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).sound(SoundType.GLASS).pushReaction(PushReaction.BLOCK).requiresCorrectToolForDrops().strength(5.0F, 6.0F).noOcclusion()))
|
||||
|
||||
@JvmField
|
||||
val ROTOM_MONITOR = create("rotom_data_monitor", RotomMonitorBlock(BlockBehaviour.Properties.ofFullCopy(MONITOR)))
|
||||
|
||||
@JvmField
|
||||
val HEALING_MACHINE = create("healing_machine", HealingMachineBlock(BlockBehaviour.Properties.of().mapColor(MapColor.METAL).sound(SoundType.METAL).pushReaction(PushReaction.BLOCK).strength(2F).noOcclusion().lightLevel { if (it.getValue(HealingMachineBlock.CHARGE_LEVEL) >= HealingMachineBlock.MAX_CHARGE_LEVEL) 12 else 5 }))
|
||||
|
||||
@@ -821,6 +829,237 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, ResourceKey<Registry<
|
||||
@JvmField
|
||||
val DISPLAY_CASE = create("display_case", DisplayCaseBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.DISPLAY_CASE_SOUNDS).noOcclusion().pushReaction(PushReaction.BLOCK).mapColor(MapColor.STONE).strength(0.3F).requiresCorrectToolForDrops()))
|
||||
|
||||
//Rotom Blocks
|
||||
//Oven
|
||||
@JvmField
|
||||
val COPPER_OVEN = create("copper_oven", WeatheringCopperOvenBlock(
|
||||
WeatheringCopper.WeatherState.UNAFFECTED,
|
||||
BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_ORANGE).requiresCorrectToolForDrops()
|
||||
.strength(3.0f, 6.0f).sound(
|
||||
CobblemonSounds.APPLIANCE_BLOCK_SOUNDS
|
||||
).pushReaction(PushReaction.BLOCK)
|
||||
.lightLevel { if (it.getValue(CopperOvenBlock.COOKING) == CopperOvenBlock.CookingState.COOKING) 12 else 0 }
|
||||
))
|
||||
@JvmField
|
||||
val EXPOSED_COPPER_OVEN = create("exposed_copper_oven",
|
||||
WeatheringCopperOvenBlock(
|
||||
WeatheringCopper.WeatherState.EXPOSED,
|
||||
BlockBehaviour.Properties.ofFullCopy(COPPER_OVEN).mapColor(MapColor.TERRACOTTA_LIGHT_GRAY)
|
||||
)
|
||||
)
|
||||
@JvmField
|
||||
val WEATHERED_COPPER_OVEN = create("weathered_copper_oven",
|
||||
WeatheringCopperOvenBlock(
|
||||
WeatheringCopper.WeatherState.WEATHERED,
|
||||
BlockBehaviour.Properties.ofFullCopy(COPPER_OVEN).mapColor(MapColor.WARPED_STEM)
|
||||
)
|
||||
)
|
||||
@JvmField
|
||||
val OXIDIZED_COPPER_OVEN = create("oxidized_copper_oven",
|
||||
WeatheringCopperOvenBlock(
|
||||
WeatheringCopper.WeatherState.OXIDIZED,
|
||||
BlockBehaviour.Properties.ofFullCopy(COPPER_OVEN).mapColor(MapColor.WARPED_NYLIUM)
|
||||
)
|
||||
)
|
||||
@JvmField
|
||||
val WAXED_COPPER_OVEN = create("waxed_copper_oven",
|
||||
CopperOvenBlock(BlockBehaviour.Properties.ofFullCopy(COPPER_OVEN))
|
||||
)
|
||||
@JvmField
|
||||
val WAXED_EXPOSED_COPPER_OVEN = create("waxed_exposed_copper_oven",
|
||||
CopperOvenBlock(BlockBehaviour.Properties.ofFullCopy(EXPOSED_COPPER_OVEN))
|
||||
)
|
||||
@JvmField
|
||||
val WAXED_WEATHERED_COPPER_OVEN = create("waxed_weathered_copper_oven",
|
||||
CopperOvenBlock(BlockBehaviour.Properties.ofFullCopy(WEATHERED_COPPER_OVEN))
|
||||
)
|
||||
@JvmField
|
||||
val WAXED_OXIDIZED_COPPER_OVEN = create("waxed_oxidized_copper_oven",
|
||||
CopperOvenBlock(BlockBehaviour.Properties.ofFullCopy(OXIDIZED_COPPER_OVEN))
|
||||
)
|
||||
//Washer
|
||||
@JvmField
|
||||
val COPPER_WASHER = create("copper_washer",
|
||||
WeatheringCopperWasherBlock(
|
||||
WeatheringCopper.WeatherState.UNAFFECTED,
|
||||
BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_ORANGE).requiresCorrectToolForDrops()
|
||||
.strength(3.0f, 6.0f).sound(CobblemonSounds.APPLIANCE_BLOCK_SOUNDS).pushReaction(PushReaction.BLOCK)
|
||||
)
|
||||
)
|
||||
@JvmField
|
||||
val EXPOSED_COPPER_WASHER = create("exposed_copper_washer",
|
||||
WeatheringCopperWasherBlock(
|
||||
WeatheringCopper.WeatherState.EXPOSED,
|
||||
BlockBehaviour.Properties.ofFullCopy(COPPER_WASHER).mapColor(MapColor.TERRACOTTA_LIGHT_GRAY)
|
||||
)
|
||||
)
|
||||
@JvmField
|
||||
val WEATHERED_COPPER_WASHER = create("weathered_copper_washer",
|
||||
WeatheringCopperWasherBlock(
|
||||
WeatheringCopper.WeatherState.WEATHERED,
|
||||
BlockBehaviour.Properties.ofFullCopy(COPPER_WASHER).mapColor(MapColor.WARPED_STEM)
|
||||
)
|
||||
)
|
||||
@JvmField
|
||||
val OXIDIZED_COPPER_WASHER = create("oxidized_copper_washer",
|
||||
WeatheringCopperWasherBlock(
|
||||
WeatheringCopper.WeatherState.OXIDIZED,
|
||||
BlockBehaviour.Properties.ofFullCopy(COPPER_WASHER).mapColor(MapColor.WARPED_NYLIUM)
|
||||
)
|
||||
)
|
||||
@JvmField
|
||||
val WAXED_COPPER_WASHER = create("waxed_copper_washer",
|
||||
CopperWasherBlock(BlockBehaviour.Properties.ofFullCopy(COPPER_WASHER))
|
||||
)
|
||||
@JvmField
|
||||
val WAXED_EXPOSED_COPPER_WASHER = create("waxed_exposed_copper_washer",
|
||||
CopperWasherBlock(BlockBehaviour.Properties.ofFullCopy(EXPOSED_COPPER_WASHER))
|
||||
)
|
||||
@JvmField
|
||||
val WAXED_WEATHERED_COPPER_WASHER = create("waxed_weathered_copper_washer",
|
||||
CopperWasherBlock(BlockBehaviour.Properties.ofFullCopy(WEATHERED_COPPER_WASHER))
|
||||
)
|
||||
@JvmField
|
||||
val WAXED_OXIDIZED_COPPER_WASHER = create("waxed_oxidized_copper_washer",
|
||||
CopperWasherBlock(BlockBehaviour.Properties.ofFullCopy(OXIDIZED_COPPER_WASHER))
|
||||
)
|
||||
//Fan
|
||||
@JvmField
|
||||
val COPPER_FAN = create("copper_fan",
|
||||
WeatheringCopperFanBlock(
|
||||
WeatheringCopper.WeatherState.UNAFFECTED,
|
||||
BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_ORANGE).requiresCorrectToolForDrops()
|
||||
.strength(3.0f, 6.0f).sound(CobblemonSounds.APPLIANCE_BLOCK_SOUNDS).pushReaction(PushReaction.DESTROY)
|
||||
)
|
||||
)
|
||||
@JvmField
|
||||
val EXPOSED_COPPER_FAN = create("exposed_copper_fan",
|
||||
WeatheringCopperFanBlock(
|
||||
WeatheringCopper.WeatherState.EXPOSED,
|
||||
BlockBehaviour.Properties.ofFullCopy(COPPER_FAN).mapColor(MapColor.TERRACOTTA_LIGHT_GRAY)
|
||||
)
|
||||
)
|
||||
@JvmField
|
||||
val WEATHERED_COPPER_FAN = create("weathered_copper_fan",
|
||||
WeatheringCopperFanBlock(
|
||||
WeatheringCopper.WeatherState.WEATHERED,
|
||||
BlockBehaviour.Properties.ofFullCopy(COPPER_FAN).mapColor(MapColor.WARPED_STEM)
|
||||
)
|
||||
)
|
||||
@JvmField
|
||||
val OXIDIZED_COPPER_FAN = create("oxidized_copper_fan",
|
||||
WeatheringCopperFanBlock(
|
||||
WeatheringCopper.WeatherState.OXIDIZED,
|
||||
BlockBehaviour.Properties.ofFullCopy(COPPER_FAN).mapColor(MapColor.WARPED_NYLIUM)
|
||||
)
|
||||
)
|
||||
@JvmField
|
||||
val WAXED_COPPER_FAN = create("waxed_copper_fan", CopperFanBlock(BlockBehaviour.Properties.ofFullCopy(COPPER_FAN)))
|
||||
@JvmField
|
||||
val WAXED_EXPOSED_COPPER_FAN = create("waxed_exposed_copper_fan",
|
||||
CopperFanBlock(BlockBehaviour.Properties.ofFullCopy(EXPOSED_COPPER_FAN))
|
||||
)
|
||||
@JvmField
|
||||
val WAXED_WEATHERED_COPPER_FAN = create("waxed_weathered_copper_fan",
|
||||
CopperFanBlock(BlockBehaviour.Properties.ofFullCopy(WEATHERED_COPPER_FAN))
|
||||
)
|
||||
@JvmField
|
||||
val WAXED_OXIDIZED_COPPER_FAN = create("waxed_oxidized_copper_fan",
|
||||
CopperFanBlock(BlockBehaviour.Properties.ofFullCopy(OXIDIZED_COPPER_FAN))
|
||||
)
|
||||
//Mower
|
||||
@JvmField
|
||||
val COPPER_MOWER = create("copper_mower",
|
||||
WeatheringCopperMowerBlock(
|
||||
WeatheringCopper.WeatherState.UNAFFECTED,
|
||||
BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_ORANGE).requiresCorrectToolForDrops()
|
||||
.strength(3.0f, 6.0f).sound(CobblemonSounds.APPLIANCE_BLOCK_SOUNDS).pushReaction(PushReaction.NORMAL)
|
||||
)
|
||||
)
|
||||
@JvmField
|
||||
val EXPOSED_COPPER_MOWER = create("exposed_copper_mower",
|
||||
WeatheringCopperMowerBlock(
|
||||
WeatheringCopper.WeatherState.EXPOSED,
|
||||
BlockBehaviour.Properties.ofFullCopy(COPPER_MOWER).mapColor(MapColor.TERRACOTTA_LIGHT_GRAY)
|
||||
)
|
||||
)
|
||||
@JvmField
|
||||
val WEATHERED_COPPER_MOWER = create("weathered_copper_mower",
|
||||
WeatheringCopperMowerBlock(
|
||||
WeatheringCopper.WeatherState.WEATHERED,
|
||||
BlockBehaviour.Properties.ofFullCopy(COPPER_MOWER).mapColor(MapColor.WARPED_STEM)
|
||||
)
|
||||
)
|
||||
@JvmField
|
||||
val OXIDIZED_COPPER_MOWER = create("oxidized_copper_mower",
|
||||
WeatheringCopperMowerBlock(
|
||||
WeatheringCopper.WeatherState.OXIDIZED,
|
||||
BlockBehaviour.Properties.ofFullCopy(COPPER_MOWER).mapColor(MapColor.WARPED_NYLIUM)
|
||||
)
|
||||
)
|
||||
@JvmField
|
||||
val WAXED_COPPER_MOWER = create("waxed_copper_mower",
|
||||
CopperMowerBlock(BlockBehaviour.Properties.ofFullCopy(COPPER_MOWER))
|
||||
)
|
||||
@JvmField
|
||||
val WAXED_EXPOSED_COPPER_MOWER = create("waxed_exposed_copper_mower",
|
||||
CopperMowerBlock(BlockBehaviour.Properties.ofFullCopy(EXPOSED_COPPER_MOWER))
|
||||
)
|
||||
@JvmField
|
||||
val WAXED_WEATHERED_COPPER_MOWER = create("waxed_weathered_copper_mower",
|
||||
CopperMowerBlock(BlockBehaviour.Properties.ofFullCopy(WEATHERED_COPPER_MOWER))
|
||||
)
|
||||
@JvmField
|
||||
val WAXED_OXIDIZED_COPPER_MOWER = create("waxed_oxidized_copper_mower",
|
||||
CopperMowerBlock(BlockBehaviour.Properties.ofFullCopy(OXIDIZED_COPPER_MOWER))
|
||||
)
|
||||
//Fridge
|
||||
@JvmField
|
||||
val COPPER_FRIDGE = create("copper_fridge",
|
||||
WeatheringCopperFridgeBlock(
|
||||
WeatheringCopper.WeatherState.UNAFFECTED,
|
||||
BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_ORANGE).requiresCorrectToolForDrops()
|
||||
.strength(3.0f, 6.0f).sound(CobblemonSounds.APPLIANCE_BLOCK_SOUNDS).pushReaction(PushReaction.BLOCK)
|
||||
)
|
||||
)
|
||||
@JvmField
|
||||
val EXPOSED_COPPER_FRIDGE = create("exposed_copper_fridge",
|
||||
WeatheringCopperFridgeBlock(
|
||||
WeatheringCopper.WeatherState.EXPOSED,
|
||||
BlockBehaviour.Properties.ofFullCopy(COPPER_FRIDGE).mapColor(MapColor.TERRACOTTA_LIGHT_GRAY)
|
||||
)
|
||||
)
|
||||
@JvmField
|
||||
val WEATHERED_COPPER_FRIDGE = create("weathered_copper_fridge",
|
||||
WeatheringCopperFridgeBlock(
|
||||
WeatheringCopper.WeatherState.WEATHERED,
|
||||
BlockBehaviour.Properties.ofFullCopy(COPPER_FRIDGE).mapColor(MapColor.WARPED_STEM)
|
||||
)
|
||||
)
|
||||
@JvmField
|
||||
val OXIDIZED_COPPER_FRIDGE = create("oxidized_copper_fridge",
|
||||
WeatheringCopperFridgeBlock(
|
||||
WeatheringCopper.WeatherState.OXIDIZED,
|
||||
BlockBehaviour.Properties.ofFullCopy(COPPER_FRIDGE).mapColor(MapColor.WARPED_NYLIUM)
|
||||
)
|
||||
)
|
||||
@JvmField
|
||||
val WAXED_COPPER_FRIDGE = create("waxed_copper_fridge",
|
||||
CopperFridgeBlock(BlockBehaviour.Properties.ofFullCopy(COPPER_FRIDGE))
|
||||
)
|
||||
@JvmField
|
||||
val WAXED_EXPOSED_COPPER_FRIDGE = create("waxed_exposed_copper_fridge",
|
||||
CopperFridgeBlock(BlockBehaviour.Properties.ofFullCopy(EXPOSED_COPPER_FRIDGE))
|
||||
)
|
||||
@JvmField
|
||||
val WAXED_WEATHERED_COPPER_FRIDGE = create("waxed_weathered_copper_fridge",
|
||||
CopperFridgeBlock(BlockBehaviour.Properties.ofFullCopy(WEATHERED_COPPER_FRIDGE))
|
||||
)
|
||||
@JvmField
|
||||
val WAXED_OXIDIZED_COPPER_FRIDGE = create("waxed_oxidized_copper_fridge",
|
||||
CopperFridgeBlock(BlockBehaviour.Properties.ofFullCopy(OXIDIZED_COPPER_FRIDGE))
|
||||
)
|
||||
|
||||
// TODO after 1.7
|
||||
// @JvmField
|
||||
// val INCENSE_SWEET = create("incense_sweet", SweetIncenseBlock(BlockBehaviour.Properties.of().sound(CobblemonSounds.DISPLAY_CASE_SOUNDS).noOcclusion().pushReaction(PushReaction.BLOCK).mapColor(MapColor.STONE).strength(0.3F)))
|
||||
@@ -849,7 +1088,6 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, ResourceKey<Registry<
|
||||
@JvmField
|
||||
val GALARICA_NUT_BUSH = this.create("galarica_nut_bush", NutBushBlock(BlockBehaviour.Properties.of().mapColor(MapColor.PLANT).randomTicks().noCollission().sound(SoundType.SWEET_BERRY_BUSH).pushReaction(PushReaction.DESTROY)))
|
||||
|
||||
|
||||
@JvmField
|
||||
val RED_MINT_LEAF_LITTER = this.mintLitter("red_mint_leaf_litter", MapColor.COLOR_RED)
|
||||
@JvmField
|
||||
@@ -927,6 +1165,57 @@ object CobblemonBlocks : PlatformRegistry<Registry<Block>, ResourceKey<Registry<
|
||||
SACCHARINE_LOG to STRIPPED_SACCHARINE_LOG,
|
||||
SACCHARINE_LOG_SLATHERED to STRIPPED_SACCHARINE_LOG
|
||||
)
|
||||
/**Same idea as above, but for Copper Oxidation over time (or when inverted, scraping with an axe)*/
|
||||
fun oxidizingBlocks(): Map<Block, Block> = mapOf(
|
||||
//Ovens
|
||||
COPPER_OVEN to EXPOSED_COPPER_OVEN,
|
||||
EXPOSED_COPPER_OVEN to WEATHERED_COPPER_OVEN,
|
||||
WEATHERED_COPPER_OVEN to OXIDIZED_COPPER_OVEN,
|
||||
//Washers
|
||||
COPPER_WASHER to EXPOSED_COPPER_WASHER,
|
||||
EXPOSED_COPPER_WASHER to WEATHERED_COPPER_WASHER,
|
||||
WEATHERED_COPPER_WASHER to OXIDIZED_COPPER_WASHER,
|
||||
//Fans
|
||||
COPPER_FAN to EXPOSED_COPPER_FAN,
|
||||
EXPOSED_COPPER_FAN to WEATHERED_COPPER_FAN,
|
||||
WEATHERED_COPPER_FAN to OXIDIZED_COPPER_FAN,
|
||||
//Fridges
|
||||
COPPER_FRIDGE to EXPOSED_COPPER_FRIDGE,
|
||||
EXPOSED_COPPER_FRIDGE to WEATHERED_COPPER_FRIDGE,
|
||||
WEATHERED_COPPER_FRIDGE to OXIDIZED_COPPER_FRIDGE,
|
||||
//Mowers
|
||||
COPPER_MOWER to EXPOSED_COPPER_MOWER,
|
||||
EXPOSED_COPPER_MOWER to WEATHERED_COPPER_MOWER,
|
||||
WEATHERED_COPPER_MOWER to OXIDIZED_COPPER_MOWER
|
||||
)
|
||||
/**Same idea as above, but for waxing blocks with Honeycomb (or unwaxing them with an axe)*/
|
||||
fun waxingBlocks(): Map<Block, Block> = mapOf(
|
||||
//Ovens
|
||||
COPPER_OVEN to WAXED_COPPER_OVEN,
|
||||
EXPOSED_COPPER_OVEN to WAXED_EXPOSED_COPPER_OVEN,
|
||||
WEATHERED_COPPER_OVEN to WAXED_WEATHERED_COPPER_OVEN,
|
||||
OXIDIZED_COPPER_OVEN to WAXED_OXIDIZED_COPPER_OVEN,
|
||||
//Washers
|
||||
COPPER_WASHER to WAXED_COPPER_WASHER,
|
||||
EXPOSED_COPPER_WASHER to WAXED_EXPOSED_COPPER_WASHER,
|
||||
WEATHERED_COPPER_WASHER to WAXED_WEATHERED_COPPER_WASHER,
|
||||
OXIDIZED_COPPER_WASHER to WAXED_OXIDIZED_COPPER_WASHER,
|
||||
//Fans
|
||||
COPPER_FAN to WAXED_COPPER_FAN,
|
||||
EXPOSED_COPPER_FAN to WAXED_EXPOSED_COPPER_FAN,
|
||||
WEATHERED_COPPER_FAN to WAXED_WEATHERED_COPPER_FAN,
|
||||
OXIDIZED_COPPER_FAN to WAXED_OXIDIZED_COPPER_FAN,
|
||||
//Fridges
|
||||
COPPER_FRIDGE to WAXED_COPPER_FRIDGE,
|
||||
EXPOSED_COPPER_FRIDGE to WAXED_EXPOSED_COPPER_FRIDGE,
|
||||
WEATHERED_COPPER_FRIDGE to WAXED_WEATHERED_COPPER_FRIDGE,
|
||||
OXIDIZED_COPPER_FRIDGE to WAXED_OXIDIZED_COPPER_FRIDGE,
|
||||
//Mowers
|
||||
COPPER_MOWER to WAXED_COPPER_MOWER,
|
||||
EXPOSED_COPPER_MOWER to WAXED_EXPOSED_COPPER_MOWER,
|
||||
WEATHERED_COPPER_MOWER to WAXED_WEATHERED_COPPER_MOWER,
|
||||
OXIDIZED_COPPER_MOWER to WAXED_OXIDIZED_COPPER_MOWER
|
||||
)
|
||||
|
||||
private fun apricornBlock(name: String, apricorn: Apricorn): ApricornBlock = this.create(name, ApricornBlock(BlockBehaviour.Properties.of().mapColor(apricorn.mapColor()).randomTicks().strength(Blocks.OAK_LOG.defaultDestroyTime(), Blocks.OAK_LOG.explosionResistance).sound(SoundType.WOOD).noOcclusion(), apricorn))
|
||||
|
||||
|
||||
@@ -454,6 +454,8 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val DAMAGED_MONITOR = blockItem("damaged_monitor", CobblemonBlocks.DAMAGED_MONITOR)
|
||||
@JvmField
|
||||
val ROTOM_MONITOR = blockItem("rotom_data_monitor", CobblemonBlocks.ROTOM_MONITOR)
|
||||
@JvmField
|
||||
val HEALING_MACHINE = blockItem("healing_machine", CobblemonBlocks.HEALING_MACHINE, Rarity.UNCOMMON)
|
||||
@JvmField
|
||||
val PC = blockItem("pc", CobblemonBlocks.PC)
|
||||
@@ -1517,6 +1519,87 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val BLANK_TM = this.create("blank_tm", CobblemonItem(Item.Properties()))
|
||||
|
||||
@JvmField
|
||||
val COPPER_OVEN = this.create("copper_oven", BlockItem(CobblemonBlocks.COPPER_OVEN, Item.Properties()))
|
||||
@JvmField
|
||||
val EXPOSED_COPPER_OVEN = this.create("exposed_copper_oven", BlockItem(CobblemonBlocks.EXPOSED_COPPER_OVEN, Item.Properties()))
|
||||
@JvmField
|
||||
val WEATHERED_COPPER_OVEN = this.create("weathered_copper_oven", BlockItem(CobblemonBlocks.WEATHERED_COPPER_OVEN, Item.Properties()))
|
||||
@JvmField
|
||||
val OXIDIZED_COPPER_OVEN = this.create("oxidized_copper_oven", BlockItem(CobblemonBlocks.OXIDIZED_COPPER_OVEN, Item.Properties()))
|
||||
@JvmField
|
||||
val WAXED_COPPER_OVEN = this.create("waxed_copper_oven", BlockItem(CobblemonBlocks.WAXED_COPPER_OVEN, Item.Properties()))
|
||||
@JvmField
|
||||
val WAXED_EXPOSED_COPPER_OVEN = this.create("waxed_exposed_copper_oven", BlockItem(CobblemonBlocks.WAXED_EXPOSED_COPPER_OVEN, Item.Properties()))
|
||||
@JvmField
|
||||
val WAXED_WEATHERED_COPPER_OVEN = this.create("waxed_weathered_copper_oven", BlockItem(CobblemonBlocks.WAXED_WEATHERED_COPPER_OVEN, Item.Properties()))
|
||||
@JvmField
|
||||
val WAXED_OXIDIZED_COPPER_OVEN = this.create("waxed_oxidized_copper_oven", BlockItem(CobblemonBlocks.WAXED_OXIDIZED_COPPER_OVEN, Item.Properties()))
|
||||
@JvmField
|
||||
val COPPER_WASHER = this.create("copper_washer", BlockItem(CobblemonBlocks.COPPER_WASHER, Item.Properties()))
|
||||
@JvmField
|
||||
val EXPOSED_COPPER_WASHER = this.create("exposed_copper_washer", BlockItem(CobblemonBlocks.EXPOSED_COPPER_WASHER, Item.Properties()))
|
||||
@JvmField
|
||||
val WEATHERED_COPPER_WASHER = this.create("weathered_copper_washer", BlockItem(CobblemonBlocks.WEATHERED_COPPER_WASHER, Item.Properties()))
|
||||
@JvmField
|
||||
val OXIDIZED_COPPER_WASHER = this.create("oxidized_copper_washer", BlockItem(CobblemonBlocks.OXIDIZED_COPPER_WASHER, Item.Properties()))
|
||||
@JvmField
|
||||
val WAXED_COPPER_WASHER = this.create("waxed_copper_washer", BlockItem(CobblemonBlocks.WAXED_COPPER_WASHER, Item.Properties()))
|
||||
@JvmField
|
||||
val WAXED_EXPOSED_COPPER_WASHER = this.create("waxed_exposed_copper_washer", BlockItem(CobblemonBlocks.WAXED_EXPOSED_COPPER_WASHER, Item.Properties()))
|
||||
@JvmField
|
||||
val WAXED_WEATHERED_COPPER_WASHER = this.create("waxed_weathered_copper_washer", BlockItem(CobblemonBlocks.WAXED_WEATHERED_COPPER_WASHER, Item.Properties()))
|
||||
@JvmField
|
||||
val WAXED_OXIDIZED_COPPER_WASHER = this.create("waxed_oxidized_copper_washer", BlockItem(CobblemonBlocks.WAXED_OXIDIZED_COPPER_WASHER, Item.Properties()))
|
||||
@JvmField
|
||||
val COPPER_FAN = this.create("copper_fan", BlockItem(CobblemonBlocks.COPPER_FAN, Item.Properties()))
|
||||
@JvmField
|
||||
val EXPOSED_COPPER_FAN = this.create("exposed_copper_fan", BlockItem(CobblemonBlocks.EXPOSED_COPPER_FAN, Item.Properties()))
|
||||
@JvmField
|
||||
val WEATHERED_COPPER_FAN = this.create("weathered_copper_fan", BlockItem(CobblemonBlocks.WEATHERED_COPPER_FAN, Item.Properties()))
|
||||
@JvmField
|
||||
val OXIDIZED_COPPER_FAN = this.create("oxidized_copper_fan", BlockItem(CobblemonBlocks.OXIDIZED_COPPER_FAN, Item.Properties()))
|
||||
@JvmField
|
||||
val WAXED_COPPER_FAN = this.create("waxed_copper_fan", BlockItem(CobblemonBlocks.WAXED_COPPER_FAN, Item.Properties()))
|
||||
@JvmField
|
||||
val WAXED_EXPOSED_COPPER_FAN = this.create("waxed_exposed_copper_fan", BlockItem(CobblemonBlocks.WAXED_EXPOSED_COPPER_FAN, Item.Properties()))
|
||||
@JvmField
|
||||
val WAXED_WEATHERED_COPPER_FAN = this.create("waxed_weathered_copper_fan", BlockItem(CobblemonBlocks.WAXED_WEATHERED_COPPER_FAN, Item.Properties()))
|
||||
@JvmField
|
||||
val WAXED_OXIDIZED_COPPER_FAN = this.create("waxed_oxidized_copper_fan", BlockItem(CobblemonBlocks.WAXED_OXIDIZED_COPPER_FAN, Item.Properties()))
|
||||
@JvmField
|
||||
val COPPER_MOWER = this.create("copper_mower", BlockItem(CobblemonBlocks.COPPER_MOWER, Item.Properties()))
|
||||
@JvmField
|
||||
val EXPOSED_COPPER_MOWER = this.create("exposed_copper_mower", BlockItem(CobblemonBlocks.EXPOSED_COPPER_MOWER, Item.Properties()))
|
||||
@JvmField
|
||||
val WEATHERED_COPPER_MOWER = this.create("weathered_copper_mower", BlockItem(CobblemonBlocks.WEATHERED_COPPER_MOWER, Item.Properties()))
|
||||
@JvmField
|
||||
val OXIDIZED_COPPER_MOWER = this.create("oxidized_copper_mower", BlockItem(CobblemonBlocks.OXIDIZED_COPPER_MOWER, Item.Properties()))
|
||||
@JvmField
|
||||
val WAXED_COPPER_MOWER = this.create("waxed_copper_mower", BlockItem(CobblemonBlocks.WAXED_COPPER_MOWER, Item.Properties()))
|
||||
@JvmField
|
||||
val WAXED_EXPOSED_COPPER_MOWER = this.create("waxed_exposed_copper_mower", BlockItem(CobblemonBlocks.WAXED_EXPOSED_COPPER_MOWER, Item.Properties()))
|
||||
@JvmField
|
||||
val WAXED_WEATHERED_COPPER_MOWER = this.create("waxed_weathered_copper_mower", BlockItem(CobblemonBlocks.WAXED_WEATHERED_COPPER_MOWER, Item.Properties()))
|
||||
@JvmField
|
||||
val WAXED_OXIDIZED_COPPER_MOWER = this.create("waxed_oxidized_copper_mower", BlockItem(CobblemonBlocks.WAXED_OXIDIZED_COPPER_MOWER, Item.Properties()))
|
||||
@JvmField
|
||||
val COPPER_FRIDGE = this.create("copper_fridge", BlockItem(CobblemonBlocks.COPPER_FRIDGE, Item.Properties()))
|
||||
@JvmField
|
||||
val EXPOSED_COPPER_FRIDGE = this.create("exposed_copper_fridge", BlockItem(CobblemonBlocks.EXPOSED_COPPER_FRIDGE, Item.Properties()))
|
||||
@JvmField
|
||||
val WEATHERED_COPPER_FRIDGE = this.create("weathered_copper_fridge", BlockItem(CobblemonBlocks.WEATHERED_COPPER_FRIDGE, Item.Properties()))
|
||||
@JvmField
|
||||
val OXIDIZED_COPPER_FRIDGE = this.create("oxidized_copper_fridge", BlockItem(CobblemonBlocks.OXIDIZED_COPPER_FRIDGE, Item.Properties()))
|
||||
@JvmField
|
||||
val WAXED_COPPER_FRIDGE = this.create("waxed_copper_fridge", BlockItem(CobblemonBlocks.WAXED_COPPER_FRIDGE, Item.Properties()))
|
||||
@JvmField
|
||||
val WAXED_EXPOSED_COPPER_FRIDGE = this.create("waxed_exposed_copper_fridge", BlockItem(CobblemonBlocks.WAXED_EXPOSED_COPPER_FRIDGE, Item.Properties()))
|
||||
@JvmField
|
||||
val WAXED_WEATHERED_COPPER_FRIDGE = this.create("waxed_weathered_copper_fridge", BlockItem(CobblemonBlocks.WAXED_WEATHERED_COPPER_FRIDGE, Item.Properties()))
|
||||
@JvmField
|
||||
val WAXED_OXIDIZED_COPPER_FRIDGE = this.create("waxed_oxidized_copper_fridge", BlockItem(CobblemonBlocks.WAXED_OXIDIZED_COPPER_FRIDGE, Item.Properties()))
|
||||
|
||||
// Type Gems
|
||||
@JvmField
|
||||
val NORMAL_GEM = this.create("normal_gem", GemItem(Item.Properties(), CobblemonBlocks.TYPE_GEM_CLUSTER_NORMAL))
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
package com.cobblemon.mod.common
|
||||
|
||||
|
||||
import com.cobblemon.mod.common.block.appliances.oven.CopperOvenMenu
|
||||
import com.cobblemon.mod.common.block.campfirepot.CookingPotMenu
|
||||
import com.cobblemon.mod.common.block.tmmachine.TMMachineMenu
|
||||
import com.cobblemon.mod.common.platform.PlatformRegistry
|
||||
@@ -22,6 +23,7 @@ object CobblemonMenuType : PlatformRegistry<Registry<MenuType<*>>, ResourceKey<R
|
||||
|
||||
val COOKING_POT = MenuType.register("cooking_pot_menu", ::CookingPotMenu)
|
||||
val TM_MACHINE = MenuType.register("tm_machine_menu", ::TMMachineMenu)
|
||||
val COPPER_OVEN = MenuType.register("copper_oven_menu", ::CopperOvenMenu)
|
||||
|
||||
override val registry: Registry<MenuType<*>>
|
||||
get() = BuiltInRegistries.MENU
|
||||
|
||||
@@ -18,6 +18,7 @@ import com.cobblemon.mod.common.client.net.callback.move.OpenMoveCallbackHandler
|
||||
import com.cobblemon.mod.common.client.net.callback.party.OpenPartyCallbackHandler
|
||||
import com.cobblemon.mod.common.client.net.callback.partymove.OpenPartyMoveCallbackHandler
|
||||
import com.cobblemon.mod.common.client.net.cooking.ToggleCookingPotLidHandler
|
||||
import com.cobblemon.mod.common.client.net.appliances.SetCopperOvenDoorHandler
|
||||
import com.cobblemon.mod.common.client.net.data.CobblemonMechanicsSyncHandler
|
||||
import com.cobblemon.mod.common.client.net.data.DataRegistrySyncPacketHandler
|
||||
import com.cobblemon.mod.common.client.net.data.RideSettingsSyncHandler
|
||||
@@ -82,6 +83,7 @@ import com.cobblemon.mod.common.net.messages.client.callback.OpenPartyCallbackPa
|
||||
import com.cobblemon.mod.common.net.messages.client.callback.OpenPartyMoveCallbackPacket
|
||||
import com.cobblemon.mod.common.net.messages.client.cooking.SeasoningRegistrySyncPacket
|
||||
import com.cobblemon.mod.common.net.messages.client.cooking.ToggleCookingPotLidPacket
|
||||
import com.cobblemon.mod.common.net.messages.client.appliances.SetCopperOvenDoorPacket
|
||||
import com.cobblemon.mod.common.net.messages.client.data.*
|
||||
import com.cobblemon.mod.common.net.messages.client.debug.RequestOpenRidingStatsDebugGUIPacket
|
||||
import com.cobblemon.mod.common.net.messages.client.dialogue.DialogueClosedPacket
|
||||
@@ -635,6 +637,7 @@ object CobblemonNetwork {
|
||||
|
||||
// Cooking
|
||||
list.add(PacketRegisterInfo(ToggleCookingPotLidPacket.ID, ToggleCookingPotLidPacket::decode, ToggleCookingPotLidHandler))
|
||||
list.add(PacketRegisterInfo(SetCopperOvenDoorPacket.ID, SetCopperOvenDoorPacket::decode, SetCopperOvenDoorHandler))
|
||||
|
||||
// TM Machine
|
||||
list.add(PacketRegisterInfo(SetActiveTMPacket.ID, SetActiveTMPacket::decode, SetActiveTMPacketHandler))
|
||||
|
||||
@@ -12,6 +12,7 @@ package com.cobblemon.mod.common
|
||||
import com.cobblemon.mod.common.item.crafting.CookingPotRecipe
|
||||
import com.cobblemon.mod.common.item.crafting.CookingPotShapelessRecipe
|
||||
import com.cobblemon.mod.common.item.crafting.brewingstand.BrewingStandRecipe
|
||||
import com.cobblemon.mod.common.item.crafting.washer.WasherRecipe
|
||||
import com.cobblemon.mod.common.platform.PlatformRegistry
|
||||
import net.minecraft.core.Registry
|
||||
import net.minecraft.core.registries.BuiltInRegistries
|
||||
@@ -26,7 +27,9 @@ object CobblemonRecipeSerializers : PlatformRegistry<Registry<RecipeSerializer<*
|
||||
val COOKING_POT_SHAPELESS: RecipeSerializer<*> = register("cobblemon:cooking_pot_shapeless", CookingPotShapelessRecipe.Serializer())
|
||||
|
||||
val BREWING_STAND: RecipeSerializer<*> = register("cobblemon:brewing_stand", BrewingStandRecipe.Serializer())
|
||||
|
||||
|
||||
val WASHER: RecipeSerializer<*> = register("cobblemon:washer", WasherRecipe.Serializer())
|
||||
|
||||
override val registry: Registry<RecipeSerializer<*>>
|
||||
get() = BuiltInRegistries.RECIPE_SERIALIZER
|
||||
override val resourceKey: ResourceKey<Registry<RecipeSerializer<*>>>
|
||||
|
||||
@@ -12,6 +12,7 @@ package com.cobblemon.mod.common
|
||||
import com.cobblemon.mod.common.item.crafting.CookingPotRecipe
|
||||
import com.cobblemon.mod.common.item.crafting.CookingPotShapelessRecipe
|
||||
import com.cobblemon.mod.common.item.crafting.brewingstand.BrewingStandRecipe
|
||||
import com.cobblemon.mod.common.item.crafting.washer.WasherRecipe
|
||||
import com.cobblemon.mod.common.platform.PlatformRegistry
|
||||
import net.minecraft.core.Registry
|
||||
import net.minecraft.core.registries.BuiltInRegistries
|
||||
@@ -26,7 +27,9 @@ object CobblemonRecipeTypes : PlatformRegistry<Registry<RecipeType<*>>, Resource
|
||||
val COOKING_POT_SHAPELESS: RecipeType<CookingPotShapelessRecipe> = register("cobblemon:cooking_pot_shapeless")
|
||||
|
||||
val BREWING_STAND: RecipeType<BrewingStandRecipe> = register("cobblemon:brewing_stand")
|
||||
|
||||
|
||||
val WASHER: RecipeType<WasherRecipe> = register("cobblemon:washer")
|
||||
|
||||
override val registry: Registry<RecipeType<*>>
|
||||
get() = BuiltInRegistries.RECIPE_TYPE
|
||||
override val resourceKey: ResourceKey<Registry<RecipeType<*>>>
|
||||
|
||||
@@ -404,6 +404,25 @@ object CobblemonSounds : PlatformRegistry<Registry<SoundEvent>, ResourceKey<Regi
|
||||
@JvmField
|
||||
val IMPACT_WATER = this.create("impact.water")
|
||||
|
||||
@JvmField
|
||||
val APPLIANCE_STEP = this.create("block.appliance.roto_appliance_step")
|
||||
@JvmField
|
||||
val APPLIANCE_PLACE = this.create("block.appliance.roto_appliance_place")
|
||||
@JvmField
|
||||
val APPLIANCE_HIT = this.create("block.appliance.roto_appliance_hit")
|
||||
@JvmField
|
||||
val APPLIANCE_BREAK = this.create("block.appliance.roto_appliance_break")
|
||||
@JvmField
|
||||
val MOWER_CUT = this.create("block.appliance.roto_mower_cut")
|
||||
@JvmField
|
||||
val WASHER_WASH = this.create("block.appliance.roto_washer_wash")
|
||||
@JvmField
|
||||
val FAN_BLOW = this.create("block.appliance.roto_fan_blow")
|
||||
@JvmField
|
||||
val FAN_START = this.create("block.appliance.roto_fan_start")
|
||||
@JvmField
|
||||
val FAN_STOP = this.create("block.appliance.roto_fan_stop")
|
||||
|
||||
// Note to self or whoever's peeking, block sounds have to be at 1.1f pitch
|
||||
// For some reason, the game pitches them down and compensating for it here returns them to normal
|
||||
@JvmField
|
||||
@@ -424,6 +443,15 @@ object CobblemonSounds : PlatformRegistry<Registry<SoundEvent>, ResourceKey<Regi
|
||||
TUMBLESTONE_STEP
|
||||
)
|
||||
|
||||
@JvmField
|
||||
val APPLIANCE_BLOCK_SOUNDS = SoundType(1f, 1.0f,
|
||||
APPLIANCE_BREAK,
|
||||
APPLIANCE_STEP,
|
||||
APPLIANCE_PLACE,
|
||||
APPLIANCE_HIT,
|
||||
APPLIANCE_STEP
|
||||
)
|
||||
|
||||
@JvmField
|
||||
val TYPE_GEM_BLOCK_BREAK = this.create("block.type_gem_block.break")
|
||||
@JvmField
|
||||
|
||||
@@ -35,6 +35,7 @@ import net.minecraft.world.level.block.entity.BlockEntityType
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING
|
||||
import net.minecraft.world.level.block.state.properties.BooleanProperty
|
||||
import net.minecraft.world.level.block.state.properties.EnumProperty
|
||||
import net.minecraft.world.level.pathfinder.PathComputationType
|
||||
import net.minecraft.world.phys.BlockHitResult
|
||||
@@ -46,7 +47,10 @@ class MonitorBlock(settings: Properties) : MultiblockBlock(settings) {
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(HORIZONTAL_FACING, Direction.NORTH)
|
||||
.setValue(SCREEN, MonitorScreen.OFF))
|
||||
.setValue(SCREEN, MonitorScreen.OFF)
|
||||
.setValue(NATURAL, false)
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
override fun createMultiBlockEntity(
|
||||
@@ -110,6 +114,7 @@ class MonitorBlock(settings: Properties) : MultiblockBlock(settings) {
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(HORIZONTAL_FACING)
|
||||
builder.add(SCREEN)
|
||||
builder.add(NATURAL)
|
||||
}
|
||||
|
||||
override fun hasAnalogOutputSignal(state: BlockState): Boolean {
|
||||
@@ -163,6 +168,7 @@ class MonitorBlock(settings: Properties) : MultiblockBlock(settings) {
|
||||
|
||||
//0 is off
|
||||
val SCREEN = EnumProperty.create("screen", MonitorScreen::class.java)
|
||||
val NATURAL = BooleanProperty.create("natural")
|
||||
val HITBOX_SOUTH = Shapes.or(
|
||||
Shapes.box(0.0625, 0.0, 0.0625, 0.9375, 0.375, 0.9375),
|
||||
Shapes.box(0.0625, 0.875, 0.0625, 0.9375, 1.0, 0.9375),
|
||||
|
||||
@@ -0,0 +1,169 @@
|
||||
/*
|
||||
* 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.block
|
||||
|
||||
import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.api.pokemon.PokemonProperties
|
||||
import com.cobblemon.mod.common.api.scheduling.afterOnServer
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.util.math.FloatRange
|
||||
import com.cobblemon.mod.common.util.party
|
||||
import com.cobblemon.mod.common.util.toVec3d
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.sounds.SoundEvent
|
||||
import net.minecraft.sounds.SoundSource
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.world.InteractionResult
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.block.Blocks
|
||||
import net.minecraft.world.level.block.HorizontalDirectionalBlock
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.phys.Vec3
|
||||
|
||||
/**
|
||||
* A block that can transform into a [PokemonEntity].
|
||||
* Call [spawnPokemon] to spawn.
|
||||
*
|
||||
* @author whatsy
|
||||
*/
|
||||
interface PokemonDisguiseBlock {
|
||||
|
||||
private val facingToYaw: HashMap<Direction, Float>
|
||||
get() = hashMapOf(
|
||||
Direction.NORTH to -179.0F,
|
||||
Direction.WEST to 90.0F,
|
||||
Direction.SOUTH to 0.0F,
|
||||
Direction.EAST to -90.0F
|
||||
)
|
||||
|
||||
/**
|
||||
* An [IntRange] representing the possible level of the spawned Pokémon.
|
||||
*/
|
||||
val levelRange: IntRange
|
||||
|
||||
/**
|
||||
* A [String] representing the [PokemonProperties] of the spawned Pokémon.
|
||||
* Do not include level, scale, shiny, or alpha;
|
||||
* Those are defined using [levelRange], [scaleRange], [shinyRate] and [alphaRate] respectively.
|
||||
*/
|
||||
val pokemonArgs: String
|
||||
|
||||
/**
|
||||
* The chance of the spawned Pokémon being a shiny.
|
||||
* Leave null if impossible.
|
||||
* Defaults to [Cobblemon.config.shinyRate]
|
||||
*/
|
||||
val shinyRate: Float?
|
||||
get() = Cobblemon.config.shinyRate
|
||||
|
||||
/**
|
||||
* The chance of the spawned Pokémon being an Alpha.
|
||||
* Leave null if impossible.
|
||||
* Defaults to null
|
||||
*/
|
||||
val alphaRate: Float?
|
||||
get() = null
|
||||
|
||||
/**
|
||||
* The [BlockState] to replace the block with on interaction.
|
||||
* Defaults to [Blocks.AIR]
|
||||
* Leave null to leave the block unaltered.
|
||||
*
|
||||
* @param originalState The [BlockState] of the block being interacted with. Use to transfer properties to a new block.
|
||||
*/
|
||||
fun getReplacementBlock(originalState: BlockState): BlockState? = Blocks.AIR.defaultBlockState()
|
||||
|
||||
/**
|
||||
* Whether or not a battle should be initiated when the Pokémon spawns.
|
||||
* Defaults to true.
|
||||
* Does not affect players in creative mode.
|
||||
*/
|
||||
val shouldInitiateBattle: Boolean
|
||||
get() = true
|
||||
|
||||
/**
|
||||
* The [SoundEvent], if any, to play when the Pokémon spawns.
|
||||
* Defaults to null.
|
||||
*/
|
||||
val spawnSound: SoundEvent?
|
||||
get() = null
|
||||
|
||||
/**
|
||||
* A [FloatRange] representing the possible scale of the spawned Pokémon.
|
||||
* Defaults to config values.
|
||||
*/
|
||||
val scaleRange: FloatRange
|
||||
get() = FloatRange(Cobblemon.config.pokemonIntrinsicSizeMin, Cobblemon.config.pokemonIntrinsicSizeMax)
|
||||
|
||||
/**
|
||||
* Defines a [Vec3] offset for where the Pokémon will spawn.
|
||||
* Defaults to 0, 0, 0
|
||||
*/
|
||||
val offset: Vec3
|
||||
get() = Vec3(0.0, 0.0, 0.0)
|
||||
|
||||
/**
|
||||
* Returns the direction the Pokémon should be facing upon spawning.
|
||||
* Defaults to the
|
||||
*/
|
||||
fun getPokemonFacing(state: BlockState): Direction
|
||||
|
||||
/**
|
||||
* Spawn a Pokémon from this block.
|
||||
*
|
||||
* @param level The [Level] to spawn this Pokémon in.
|
||||
* @param pos The [BlockPos] to spawn this Pokémon at.
|
||||
* @param state The [BlockState] of the block at time of spawning.
|
||||
* @param player The [ServerPlayer] to initiate the battle against.
|
||||
*/
|
||||
fun spawnPokemon(level: Level, pos: BlockPos, state: BlockState, player: ServerPlayer): InteractionResult {
|
||||
val random = RandomSource.create()
|
||||
val isShiny = shinyRate?.let { random.nextInt(it.toInt()) == 0 } ?: false
|
||||
val isAlpha = alphaRate?.let { random.nextInt(it.toInt()) == 0 } ?: false
|
||||
val properties = "$pokemonArgs lvl=${levelRange.random()} scale_modifier=${scaleRange.random()} alpha=${isAlpha} shiny=${isShiny}"
|
||||
val pokemon = PokemonProperties.parse(properties)
|
||||
val entity = pokemon.createEntity(level)
|
||||
|
||||
// The yaw based on the block's facing direction
|
||||
val yaw = facingToYaw[getPokemonFacing(state)] ?: 0.0F
|
||||
|
||||
entity.entityData.set(PokemonEntity.SPAWN_DIRECTION, yaw)
|
||||
val offsetDir = state.getValue(HorizontalDirectionalBlock.FACING)
|
||||
val vec = pos.toVec3d()
|
||||
.add(offsetDir.stepX * 0.1 + 0.5, 0.0, offsetDir.stepZ * 0.1 + 0.5)
|
||||
.add(offset)
|
||||
entity.moveTo(vec.x, vec.y, vec.z, yaw, entity.xRot)
|
||||
entity.yBodyRot = yaw
|
||||
entity.yBodyRotO = yaw
|
||||
entity.yHeadRot = yaw
|
||||
entity.yHeadRotO = yaw
|
||||
level.addFreshEntity(entity)
|
||||
|
||||
if (getReplacementBlock(state) == Blocks.AIR) {
|
||||
level.removeBlock(pos, false)
|
||||
} else {
|
||||
getReplacementBlock(state)?.let {
|
||||
level.setBlockAndUpdate(pos, it)
|
||||
}
|
||||
}
|
||||
afterOnServer(seconds = 0.1F) {
|
||||
if (player !in player.level().players()) {
|
||||
return@afterOnServer
|
||||
}
|
||||
if (!player.isCreative && shouldInitiateBattle) {
|
||||
entity.forceBattle(player)
|
||||
} else {
|
||||
spawnSound?.let { level.playSound(null, pos, it, SoundSource.NEUTRAL) }
|
||||
}
|
||||
}
|
||||
return InteractionResult.SUCCESS
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* 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.block
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonBlocks
|
||||
import com.cobblemon.mod.common.CobblemonSounds
|
||||
import com.cobblemon.mod.common.block.DamagedMonitorBlock.BrokenMonitorScreen
|
||||
import com.cobblemon.mod.common.block.DamagedMonitorBlock.Companion.HITBOX_EAST
|
||||
import com.cobblemon.mod.common.block.DamagedMonitorBlock.Companion.HITBOX_NORTH
|
||||
import com.cobblemon.mod.common.block.DamagedMonitorBlock.Companion.HITBOX_SOUTH
|
||||
import com.cobblemon.mod.common.block.DamagedMonitorBlock.Companion.HITBOX_WEST
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.world.InteractionResult
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.HorizontalDirectionalBlock
|
||||
import net.minecraft.world.level.block.state.BlockBehaviour
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING
|
||||
import net.minecraft.world.phys.BlockHitResult
|
||||
import net.minecraft.world.phys.Vec3
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
|
||||
class RotomMonitorBlock(settings: Properties) : Block(settings), PokemonDisguiseBlock {
|
||||
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(HorizontalDirectionalBlock.FACING, Direction.NORTH)
|
||||
.setValue(MonitorBlock.SCREEN, MonitorBlock.MonitorScreen.OFF)
|
||||
)
|
||||
}
|
||||
|
||||
override fun getStateForPlacement(context: BlockPlaceContext): BlockState? {
|
||||
return defaultBlockState().setValue(HorizontalDirectionalBlock.FACING, context.horizontalDirection)
|
||||
}
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block?, BlockState?>) {
|
||||
builder.add(HorizontalDirectionalBlock.FACING)
|
||||
builder.add(MonitorBlock.SCREEN)
|
||||
}
|
||||
|
||||
override fun playerWillDestroy(level: Level, pos: BlockPos, state: BlockState, player: Player): BlockState? {
|
||||
if (!level.isClientSide) {
|
||||
spawnPokemon(level, pos, state, player as ServerPlayer)
|
||||
}
|
||||
return super.playerWillDestroy(level, pos, state, player)
|
||||
}
|
||||
|
||||
override fun getShape(
|
||||
state: BlockState,
|
||||
level: BlockGetter,
|
||||
pos: BlockPos,
|
||||
context: CollisionContext
|
||||
): VoxelShape {
|
||||
return when (state.getValue(HorizontalDirectionalBlock.FACING)) {
|
||||
Direction.WEST -> HITBOX_WEST
|
||||
Direction.EAST -> HITBOX_EAST
|
||||
Direction.SOUTH -> HITBOX_SOUTH
|
||||
else -> HITBOX_NORTH
|
||||
}
|
||||
}
|
||||
|
||||
override fun useWithoutItem(
|
||||
state: BlockState,
|
||||
level: Level,
|
||||
pos: BlockPos,
|
||||
player: Player,
|
||||
hitResult: BlockHitResult
|
||||
): InteractionResult {
|
||||
return if (player is ServerPlayer) {
|
||||
spawnPokemon(level, pos, state, player)
|
||||
} else {
|
||||
InteractionResult.SUCCESS
|
||||
}
|
||||
}
|
||||
|
||||
override val levelRange = 35..60
|
||||
override val pokemonArgs = "rotom"
|
||||
override val spawnSound = CobblemonSounds.MONITOR_BREAK
|
||||
override val offset = Vec3(0.0, 1.0, 0.0)
|
||||
override fun getReplacementBlock(originalState: BlockState): BlockState =
|
||||
CobblemonBlocks.MONITOR.defaultBlockState()
|
||||
.setValue(HorizontalDirectionalBlock.FACING, originalState.getValue(HorizontalDirectionalBlock.FACING))
|
||||
.setValue(MonitorBlock.NATURAL, true)
|
||||
override fun getPokemonFacing(state: BlockState): Direction = state.getValue(HORIZONTAL_FACING).opposite
|
||||
}
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
/*
|
||||
* 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.block.appliances
|
||||
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.world.Container
|
||||
import net.minecraft.world.Containers
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.block.EntityBlock
|
||||
import net.minecraft.world.level.block.WeatheringCopper
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.properties.Property
|
||||
|
||||
|
||||
interface WeatheringCopperAppliance : WeatheringCopper {
|
||||
val weatherState: WeatheringCopper.WeatherState
|
||||
|
||||
companion object {
|
||||
private const val OXIDATION_CHANCE = 0.05688889F
|
||||
|
||||
/**
|
||||
* Waxing/unwaxing causes container data to be lost. Run this in onRemove() to fix.
|
||||
*/
|
||||
fun handleOnRemove(
|
||||
oldState: BlockState,
|
||||
level: Level,
|
||||
pos: BlockPos,
|
||||
newState: BlockState,
|
||||
movedByPiston: Boolean
|
||||
) {
|
||||
val oldBlockEntityType = level.getBlockEntity(pos)?.type
|
||||
val newBlockEntityType = (newState.block as? EntityBlock)?.newBlockEntity(pos, newState)?.type
|
||||
if (!oldState.`is`(newState.block) && oldState.hasBlockEntity() && oldBlockEntityType != newBlockEntityType) {
|
||||
val blockEntity = level.getBlockEntity(pos) as? Container
|
||||
if (blockEntity != null) {
|
||||
Containers.dropContents(level, pos, blockEntity)
|
||||
level.updateNeighbourForOutputSignal(pos, oldState.block)
|
||||
}
|
||||
|
||||
level.removeBlockEntity(pos)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun getAge() = this.weatherState
|
||||
|
||||
override fun changeOverTime(state: BlockState, level: ServerLevel, pos: BlockPos, random: RandomSource) {
|
||||
if (random.nextFloat() >= OXIDATION_CHANCE) return
|
||||
|
||||
getNextState(state, level, pos, random).ifPresent { nextState ->
|
||||
val currentState = level.getBlockState(pos)
|
||||
val blockEntityTag = level.getBlockEntity(pos)?.saveWithFullMetadata(level.registryAccess())
|
||||
var transferredState = nextState
|
||||
currentState.values.keys.forEach { property ->
|
||||
if (transferredState.hasProperty(property)) {
|
||||
transferredState = copyProperty(currentState, transferredState, property)
|
||||
}
|
||||
}
|
||||
level.setBlock(pos, transferredState, 3)
|
||||
if (blockEntityTag != null) {
|
||||
level.getBlockEntity(pos)?.let { blockEntity ->
|
||||
blockEntity.loadWithComponents(blockEntityTag, level.registryAccess())
|
||||
blockEntity.setChanged()
|
||||
val restoredState = level.getBlockState(pos)
|
||||
level.sendBlockUpdated(pos, restoredState, restoredState, 3)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun <T : Comparable<T>> copyProperty(
|
||||
source: BlockState,
|
||||
target: BlockState,
|
||||
property: Property<T>
|
||||
): BlockState {
|
||||
return target.setValue(property, source.getValue(property))
|
||||
}
|
||||
|
||||
}
|
||||
+176
@@ -0,0 +1,176 @@
|
||||
/*
|
||||
* 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.block.appliances.fan
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonSounds
|
||||
import com.cobblemon.mod.common.client.sound.BlockEntitySoundTracker
|
||||
import com.cobblemon.mod.common.client.sound.instances.CancellableSoundInstance
|
||||
import com.cobblemon.mod.common.util.rotateShape
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.sounds.SoundSource
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.world.InteractionResult
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.block.*
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.WATERLOGGED
|
||||
import net.minecraft.world.level.block.state.properties.BooleanProperty
|
||||
import net.minecraft.world.level.material.FluidState
|
||||
import net.minecraft.world.level.material.Fluids
|
||||
import net.minecraft.world.phys.AABB
|
||||
import net.minecraft.world.phys.BlockHitResult
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
//TODO: All the Fan appliance stuff
|
||||
//TODO: Able to place the Fan on Walls, models and hitbox are there (blockstate would need edits to support it)
|
||||
open class CopperFanBlock(settings: Properties) : HorizontalDirectionalBlock(settings), SimpleWaterloggedBlock {
|
||||
|
||||
companion object {
|
||||
val CODEC: MapCodec<CopperFanBlock> = RecordCodecBuilder.mapCodec {
|
||||
it.group(propertiesCodec()).apply(it, ::CopperFanBlock) }
|
||||
//val FACE = //TODO: Floor/Wall
|
||||
val POWER = BlockStateProperties.POWER;
|
||||
val PUSH = BooleanProperty.create("push")
|
||||
|
||||
val FLOOR_HITBOX = Shapes.or(
|
||||
Shapes.box(0.0625, 0.125, 0.4375, 0.9375, 1.0, 0.5625),
|
||||
Shapes.box(0.375, 0.0, 0.375, 0.625, 0.125, 0.625))
|
||||
val WALL_HITBOX = Shapes.box(0.0625, 0.0625, 0.875, 0.9375, 0.9375, 1.0)
|
||||
}
|
||||
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(HORIZONTAL_FACING, Direction.NORTH)
|
||||
.setValue(WATERLOGGED, false)
|
||||
//.setValue(FACE, AttachFace.FLOOR)
|
||||
.setValue(POWER, 0)
|
||||
.setValue(PUSH, true) //If True, fan pushes entities, If False, fan is cosmetic only
|
||||
)
|
||||
}
|
||||
|
||||
override fun useWithoutItem(
|
||||
state: BlockState,
|
||||
level: Level,
|
||||
pos: BlockPos,
|
||||
player: Player,
|
||||
hitResult: BlockHitResult
|
||||
): InteractionResult {
|
||||
if (!level.isClientSide) {
|
||||
level.setBlockAndUpdate(pos, state.setValue(PUSH, !state.getValue(PUSH)))
|
||||
if (state.getValue(PUSH)) {
|
||||
level.playSound(null, pos, CobblemonSounds.FAN_START, SoundSource.BLOCKS)
|
||||
} else {
|
||||
level.playSound(null, pos, CobblemonSounds.FAN_STOP, SoundSource.BLOCKS)
|
||||
}
|
||||
}
|
||||
return InteractionResult.SUCCESS
|
||||
}
|
||||
|
||||
override fun codec(): MapCodec<CopperFanBlock> = CODEC
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(HORIZONTAL_FACING, WATERLOGGED, /*FACE,*/ POWER, PUSH)
|
||||
}
|
||||
|
||||
override fun getFluidState(blockState: BlockState): FluidState? = if (blockState.getValue(WATERLOGGED)) Fluids.WATER.getSource(false) else super.getFluidState(blockState)
|
||||
|
||||
override fun updateShape(state: BlockState, direction: Direction, neighborState: BlockState, world: LevelAccessor, pos: BlockPos, neighborPos: BlockPos): BlockState {
|
||||
if (state.getValue(WATERLOGGED)) {
|
||||
world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world))
|
||||
}
|
||||
return if (state.getValue(HORIZONTAL_FACING).opposite == direction && !state.canSurvive(world, pos)) Blocks.AIR.defaultBlockState()
|
||||
else super.updateShape(state, direction, neighborState, world, pos, neighborPos)
|
||||
}
|
||||
|
||||
override fun getCollisionShape(state: BlockState, level: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape {
|
||||
val direction = state.getValue(HORIZONTAL_FACING)
|
||||
return rotateShape(Direction.NORTH, direction, FLOOR_HITBOX)
|
||||
}
|
||||
|
||||
override fun neighborChanged(
|
||||
state: BlockState,
|
||||
level: Level,
|
||||
pos: BlockPos,
|
||||
neighborBlock: Block,
|
||||
neighborPos: BlockPos,
|
||||
movedByPiston: Boolean
|
||||
) {
|
||||
val power = level.getBestNeighborSignal(pos)
|
||||
if (power != state.getValue(POWER)) {
|
||||
level.setBlock(pos, state.setValue(POWER, power), UPDATE_CLIENTS)
|
||||
if (power > 0) {
|
||||
level.scheduleTick(pos, this, 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun tick(state: BlockState, level: ServerLevel, pos: BlockPos, random: RandomSource) {
|
||||
val facing = state.getValue(HORIZONTAL_FACING)
|
||||
val power = state.getValue(POWER)
|
||||
|
||||
if (power == 0) {
|
||||
if (BlockEntitySoundTracker.isActive(pos, CobblemonSounds.FAN_BLOW.location)) {
|
||||
BlockEntitySoundTracker.stop(pos, CobblemonSounds.FAN_BLOW.location)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
val sound = CancellableSoundInstance(
|
||||
sound = CobblemonSounds.FAN_BLOW,
|
||||
pos = pos,
|
||||
repeat = true
|
||||
)
|
||||
|
||||
if (!BlockEntitySoundTracker.isActive(pos, CobblemonSounds.FAN_BLOW.location)) {
|
||||
BlockEntitySoundTracker.play(pos, sound)
|
||||
}
|
||||
|
||||
if (state.getValue(PUSH)) {
|
||||
val area = AABB(pos.relative(facing)).expandTowards(
|
||||
facing.stepX.toDouble() * (power - 1),
|
||||
0.0,
|
||||
facing.stepZ.toDouble() * (power - 1)
|
||||
)
|
||||
val entities = level.getEntities(null, area)
|
||||
val pushForce = 0.05
|
||||
entities.forEach { entity ->
|
||||
val motion = entity.deltaMovement
|
||||
entity.setDeltaMovement(
|
||||
motion.x + facing.stepX * pushForce,
|
||||
motion.y,
|
||||
motion.z + facing.stepZ * pushForce
|
||||
)
|
||||
entity.hurtMarked = true
|
||||
}
|
||||
}
|
||||
|
||||
level.scheduleTick(pos, this, 1)
|
||||
}
|
||||
|
||||
override fun getShape(state: BlockState, level: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape {
|
||||
return getCollisionShape(state, level, pos, context)
|
||||
}
|
||||
|
||||
override fun getStateForPlacement(context: BlockPlaceContext): BlockState? {
|
||||
val fluidState = context.level.getFluidState(context.clickedPos)
|
||||
return super.getStateForPlacement(context)?.setValue(HORIZONTAL_FACING, context.horizontalDirection.opposite)?.setValue(WATERLOGGED, fluidState.type === Fluids.WATER)
|
||||
}
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* 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.block.appliances.fan
|
||||
|
||||
import com.cobblemon.mod.common.block.appliances.WeatheringCopperAppliance
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.world.level.block.WeatheringCopper
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
|
||||
class WeatheringCopperFanBlock(override val weatherState: WeatheringCopper.WeatherState, properties: Properties) :
|
||||
CopperFanBlock(properties), WeatheringCopperAppliance {
|
||||
|
||||
override fun randomTick(state: BlockState, level: ServerLevel, pos: BlockPos, random: RandomSource) {
|
||||
this.changeOverTime(state, level, pos, random)
|
||||
}
|
||||
|
||||
override fun isRandomlyTicking(state: BlockState): Boolean {
|
||||
return WeatheringCopper.getNext(state.getBlock()).isPresent()
|
||||
}
|
||||
|
||||
override fun getAge(): WeatheringCopper.WeatherState {
|
||||
return this.weatherState
|
||||
}
|
||||
}
|
||||
+302
@@ -0,0 +1,302 @@
|
||||
/*
|
||||
* 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.block.appliances.fridge
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonBlockEntities
|
||||
import com.cobblemon.mod.common.block.appliances.WeatheringCopperAppliance
|
||||
import com.cobblemon.mod.common.util.isServerSide
|
||||
import com.cobblemon.mod.common.util.rotateShape
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.sounds.SoundEvents
|
||||
import net.minecraft.sounds.SoundSource
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.world.InteractionHand
|
||||
import net.minecraft.world.ItemInteractionResult
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
import net.minecraft.world.entity.item.ItemEntity
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.LevelReader
|
||||
import net.minecraft.world.level.block.*
|
||||
import net.minecraft.world.level.block.entity.BlockEntity
|
||||
import net.minecraft.world.level.block.entity.BlockEntityTicker
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.WATERLOGGED
|
||||
import net.minecraft.world.level.block.state.properties.BooleanProperty
|
||||
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf
|
||||
import net.minecraft.world.level.block.state.properties.EnumProperty
|
||||
import net.minecraft.world.level.material.FluidState
|
||||
import net.minecraft.world.level.material.Fluids
|
||||
import net.minecraft.world.phys.BlockHitResult
|
||||
import net.minecraft.world.phys.Vec3
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
//TODO: Oxidation/Waxing/Scraping not breaking the blocks
|
||||
//TODO: All the Fridge appliance stuff
|
||||
open class CopperFridgeBlock(settings: Properties) : BaseEntityBlock(settings), SimpleWaterloggedBlock {
|
||||
|
||||
fun getBlockEntity(level: ServerLevel, pos: BlockPos) = level.getBlockEntity(getBottomPos(level, pos)) as CopperFridgeBlockEntity
|
||||
|
||||
companion object {
|
||||
val CODEC: MapCodec<CopperFridgeBlock> = RecordCodecBuilder.mapCodec {
|
||||
it.group(propertiesCodec()).apply(it, ::CopperFridgeBlock) }
|
||||
val HALF: EnumProperty<DoubleBlockHalf> = BlockStateProperties.DOUBLE_BLOCK_HALF
|
||||
val POWERED = BooleanProperty.create("powered")
|
||||
val FACING = HorizontalDirectionalBlock.FACING
|
||||
|
||||
val LOWER_HITBOX = Shapes.or(
|
||||
Shapes.box(0.0625, 0.0, 0.125, 0.9375, 0.0625, 0.9375),
|
||||
Shapes.box(0.0, 0.0625, 0.0625, 1.0, 1.0, 1.0))
|
||||
val UPPER_HITBOX = Shapes.or(
|
||||
Shapes.box(0.0, 0.0, 0.0625, 1.0, 1.0, 1.0),
|
||||
Shapes.box(0.25, 0.125, 0.0, 0.375, 0.3125, 0.0625),
|
||||
Shapes.box(0.625, 0.125, 0.0, 0.75, 0.3125, 0.0625))
|
||||
val UPPER_COLLISSIONBOX = Shapes.box(0.0, 0.0, 0.0625, 1.0, 1.0, 1.0)
|
||||
//The handles get ignored by entity collission, because it feels nicer, but still count as part of the hitbox
|
||||
}
|
||||
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(HORIZONTAL_FACING, Direction.NORTH)
|
||||
.setValue(HALF, DoubleBlockHalf.LOWER)
|
||||
.setValue(WATERLOGGED, false)
|
||||
.setValue(POWERED, false)
|
||||
)
|
||||
}
|
||||
|
||||
override fun codec(): MapCodec<CopperFridgeBlock> = CODEC
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(HORIZONTAL_FACING, HALF, WATERLOGGED, POWERED)
|
||||
}
|
||||
|
||||
override fun getFluidState(blockState: BlockState): FluidState? = if (blockState.getValue(WATERLOGGED)) Fluids.WATER.getSource(false) else super.getFluidState(blockState)
|
||||
|
||||
override fun updateShape(state: BlockState, direction: Direction, neighborState: BlockState, world: LevelAccessor, pos: BlockPos, neighborPos: BlockPos): BlockState {
|
||||
if (state.getValue(WATERLOGGED)) {
|
||||
world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world))
|
||||
}
|
||||
|
||||
val isFridge = neighborState.block is CopperFridgeBlock
|
||||
val half = state.getValue(HALF)
|
||||
if (!isFridge && half == DoubleBlockHalf.UPPER && neighborPos == pos.below()) {
|
||||
return Blocks.AIR.defaultBlockState()
|
||||
} else if (!isFridge && half == DoubleBlockHalf.LOWER && neighborPos == pos.above()) {
|
||||
return Blocks.AIR.defaultBlockState()
|
||||
}
|
||||
return state
|
||||
}
|
||||
|
||||
override fun getCollisionShape(state: BlockState, level: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape {
|
||||
val direction = state.getValue(HORIZONTAL_FACING)
|
||||
return if (state.getValue(HALF) == DoubleBlockHalf.LOWER) {
|
||||
rotateShape(Direction.NORTH, direction, LOWER_HITBOX)
|
||||
} else {
|
||||
rotateShape(Direction.NORTH, direction, UPPER_COLLISSIONBOX)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getShape(state: BlockState, level: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape {
|
||||
val direction = state.getValue(HORIZONTAL_FACING)
|
||||
return if (state.getValue(HALF) == DoubleBlockHalf.LOWER) {
|
||||
rotateShape(Direction.NORTH, direction, LOWER_HITBOX)
|
||||
} else {
|
||||
rotateShape(Direction.NORTH, direction, UPPER_HITBOX)
|
||||
}
|
||||
}
|
||||
|
||||
override fun setPlacedBy(world: Level, pos: BlockPos, state: BlockState, placer: LivingEntity?, itemStack: ItemStack) {
|
||||
world.setBlock(pos.above(),
|
||||
state
|
||||
.setValue(HALF, DoubleBlockHalf.UPPER)
|
||||
.setValue(WATERLOGGED, world.getFluidState((pos.above())).type == Fluids.WATER)
|
||||
, 3)
|
||||
world.blockUpdated(pos, Blocks.AIR)
|
||||
state.updateNeighbourShapes(world, pos, 3)
|
||||
}
|
||||
|
||||
override fun getStateForPlacement(blockPlaceContext: BlockPlaceContext): BlockState? {
|
||||
val abovePosition = blockPlaceContext.clickedPos.above()
|
||||
val world = blockPlaceContext.level
|
||||
if (world.getBlockState(abovePosition).canBeReplaced(blockPlaceContext) && !world.isOutsideBuildHeight(abovePosition)) {
|
||||
return defaultBlockState()
|
||||
.setValue(FACING, blockPlaceContext.horizontalDirection.opposite)
|
||||
.setValue(HALF, DoubleBlockHalf.LOWER)
|
||||
.setValue(WATERLOGGED, blockPlaceContext.level.getFluidState(blockPlaceContext.clickedPos).type == Fluids.WATER)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
override fun getRenderShape(state: BlockState) = RenderShape.MODEL
|
||||
|
||||
override fun canSurvive(state: BlockState, world: LevelReader, pos: BlockPos): Boolean {
|
||||
val blockPos = pos.below()
|
||||
val blockState = world.getBlockState(blockPos)
|
||||
return if (state.getValue(HALF) == DoubleBlockHalf.LOWER) blockState.isFaceSturdy(world, blockPos, Direction.UP) else blockState.`is`(this)
|
||||
}
|
||||
|
||||
override fun playerWillDestroy(world: Level, pos: BlockPos, state: BlockState, player: Player): BlockState {
|
||||
if (!world.isClientSide && player.isCreative) {
|
||||
var blockPos: BlockPos = BlockPos.ZERO
|
||||
var blockState: BlockState = state
|
||||
val half = state.getValue(HALF)
|
||||
if (half == DoubleBlockHalf.UPPER && world.getBlockState(pos.below().also { blockPos = it }).also { blockState = it }.`is`(state.block) && blockState.getValue(
|
||||
HALF
|
||||
) == DoubleBlockHalf.LOWER) {
|
||||
val blockState2 = if (blockState.fluidState.`is`(Fluids.WATER)) Blocks.WATER.defaultBlockState() else Blocks.AIR.defaultBlockState()
|
||||
world.setBlock(blockPos, blockState2, UPDATE_ALL or UPDATE_SUPPRESS_DROPS)
|
||||
world.levelEvent(player, LevelEvent.PARTICLES_DESTROY_BLOCK, blockPos, getId(blockState))
|
||||
}
|
||||
}
|
||||
return super.playerWillDestroy(world, pos, state, player)
|
||||
}
|
||||
|
||||
override fun hasAnalogOutputSignal(state: BlockState) = true
|
||||
|
||||
override fun useItemOn(
|
||||
stack: ItemStack,
|
||||
state: BlockState,
|
||||
level: Level,
|
||||
pos: BlockPos,
|
||||
player: Player,
|
||||
hand: InteractionHand,
|
||||
hitResult: BlockHitResult
|
||||
): ItemInteractionResult {
|
||||
if (level.isServerSide()) {
|
||||
val handStack = player.getItemInHand(hand)
|
||||
val stack = getBlockEntity(level as ServerLevel, pos).theItem
|
||||
|
||||
when (stack.item) {
|
||||
Items.AIR -> {
|
||||
if (handStack.`is`(Items.WATER_BUCKET)) {
|
||||
if (!player.isCreative) player.setItemInHand(hand, Items.BUCKET.defaultInstance)
|
||||
getBlockEntity(level, pos).timer = 100
|
||||
getBlockEntity(level, pos).theItem = Items.WATER_BUCKET.defaultInstance
|
||||
level.playSound(null, pos, SoundEvents.BUCKET_EMPTY, SoundSource.BLOCKS, 1.0f, 1.0f)
|
||||
return ItemInteractionResult.SUCCESS
|
||||
} else {
|
||||
return ItemInteractionResult.FAIL
|
||||
}
|
||||
}
|
||||
|
||||
Items.WATER_BUCKET -> {
|
||||
if (handStack.`is`(Items.BUCKET)) {
|
||||
player.setItemInHand(hand, Items.WATER_BUCKET.defaultInstance)
|
||||
getBlockEntity(level, pos).theItem = Items.AIR.defaultInstance
|
||||
getBlockEntity(level, pos).timer = 0
|
||||
level.playSound(null, pos, SoundEvents.BUCKET_FILL, SoundSource.BLOCKS, 1.0f, 1.0f)
|
||||
return ItemInteractionResult.SUCCESS
|
||||
} else {
|
||||
return ItemInteractionResult.FAIL
|
||||
}
|
||||
}
|
||||
|
||||
Items.ICE -> {
|
||||
val facing = state.getValue(HORIZONTAL_FACING)
|
||||
val spawnPos = getBottomPos(level, pos)
|
||||
val itemEntity =
|
||||
ItemEntity(level, spawnPos.x + 0.5, spawnPos.y + 0.5, spawnPos.z + 0.5, Items.ICE.defaultInstance)
|
||||
itemEntity.deltaMovement = Vec3(facing.stepX.toDouble(), 0.0, facing.stepZ.toDouble()).scale(0.2)
|
||||
level.addFreshEntity(itemEntity)
|
||||
getBlockEntity(level, pos).theItem = Items.AIR.defaultInstance
|
||||
return ItemInteractionResult.SUCCESS
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return if (stack.`is`(Items.WATER_BUCKET)) ItemInteractionResult.SUCCESS
|
||||
else ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION
|
||||
}
|
||||
return ItemInteractionResult.SUCCESS // should not be reachable, but intellij doesnt like that its not there
|
||||
}
|
||||
|
||||
override fun getAnalogOutputSignal(state: BlockState, level: Level, pos: BlockPos): Int {
|
||||
if (level.isClientSide) return 0
|
||||
return when (getBlockEntity(level as ServerLevel, pos).theItem.item) {
|
||||
Items.WATER_BUCKET -> 1
|
||||
Items.ICE -> 2
|
||||
else -> 0
|
||||
}
|
||||
}
|
||||
|
||||
override fun tick(state: BlockState, level: ServerLevel, pos: BlockPos, random: RandomSource) {
|
||||
(level.getBlockEntity(pos) as CopperFridgeBlockEntity).processTick()
|
||||
super.tick(state, level, pos, random)
|
||||
}
|
||||
|
||||
override fun newBlockEntity(pos: BlockPos, state: BlockState) = if (state.getValue(HALF) == DoubleBlockHalf.LOWER) CopperFridgeBlockEntity(pos, state) else null
|
||||
|
||||
override fun neighborChanged(
|
||||
state: BlockState,
|
||||
level: Level,
|
||||
pos: BlockPos,
|
||||
neighborBlock: Block,
|
||||
neighborPos: BlockPos,
|
||||
movedByPiston: Boolean
|
||||
) {
|
||||
if (!level.isClientSide) {
|
||||
val otherPos = if (state.getValue(HALF) == DoubleBlockHalf.LOWER) pos.above() else pos.below()
|
||||
val powered = level.hasNeighborSignal(pos) || level.hasNeighborSignal(otherPos)
|
||||
|
||||
if (state.getValue(POWERED) != powered) {
|
||||
level.setBlock(pos, state.setValue(POWERED, powered), 3)
|
||||
}
|
||||
|
||||
val otherState = level.getBlockState(otherPos)
|
||||
if (otherState.`is`(this) && otherState.getValue(POWERED) != powered) {
|
||||
level.setBlock(otherPos, otherState.setValue(POWERED, powered), 3)
|
||||
}
|
||||
}
|
||||
super.neighborChanged(state, level, pos, neighborBlock, neighborPos, movedByPiston)
|
||||
}
|
||||
|
||||
override fun <T : BlockEntity> getTicker(
|
||||
level: Level,
|
||||
state: BlockState,
|
||||
blockEntityType: BlockEntityType<T>
|
||||
): BlockEntityTicker<T>? {
|
||||
return if (level.isClientSide)
|
||||
null
|
||||
else
|
||||
createTickerHelper(blockEntityType, CobblemonBlockEntities.COPPER_FRIDGE, CopperFridgeBlockEntity.TICKER::tick)
|
||||
}
|
||||
|
||||
fun getBottomPos(level: Level, pos: BlockPos) = if (level.getBlockState(pos).getValue(HALF) == DoubleBlockHalf.UPPER) pos.below() else pos
|
||||
|
||||
override fun onRemove(
|
||||
state: BlockState,
|
||||
level: Level,
|
||||
pos: BlockPos,
|
||||
newState: BlockState,
|
||||
movedByPiston: Boolean
|
||||
) {
|
||||
val replacementBlock = newState.block as? CopperFridgeBlock
|
||||
if (state.block != replacementBlock && replacementBlock != null) {
|
||||
val otherPos = if (state.getValue(HALF) == DoubleBlockHalf.LOWER) pos.above() else pos.below()
|
||||
val otherState = level.getBlockState(otherPos)
|
||||
if (otherState.block == state.block && otherState.getValue(HALF) != state.getValue(HALF)) {
|
||||
level.setBlock(otherPos, replacementBlock.withPropertiesOf(otherState), UPDATE_ALL)
|
||||
}
|
||||
}
|
||||
WeatheringCopperAppliance.handleOnRemove(state, level, pos, newState, movedByPiston)
|
||||
}
|
||||
}
|
||||
+110
@@ -0,0 +1,110 @@
|
||||
/*
|
||||
* 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.block.appliances.fridge
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonBlockEntities
|
||||
import com.cobblemon.mod.common.CobblemonNetwork.sendPacket
|
||||
import com.cobblemon.mod.common.net.messages.client.effect.SpawnSnowstormParticlePacket
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.core.HolderLookup
|
||||
import net.minecraft.nbt.CompoundTag
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.world.Container
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraft.world.level.block.entity.BlockEntity
|
||||
import net.minecraft.world.level.block.entity.BlockEntityTicker
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.phys.Vec3
|
||||
import net.minecraft.world.ticks.ContainerSingleItem
|
||||
|
||||
class CopperFridgeBlockEntity(val pos: BlockPos, val state: BlockState) : BlockEntity(
|
||||
CobblemonBlockEntities.COPPER_FRIDGE, pos, state
|
||||
), ContainerSingleItem.BlockContainerSingleItem {
|
||||
|
||||
private var item: ItemStack = Items.AIR.defaultInstance
|
||||
private var spawnedReadyParticle = false
|
||||
var timer: Int = -1
|
||||
|
||||
fun processTick() {
|
||||
val serverLevel = level as? ServerLevel ?: return
|
||||
|
||||
if (item.`is`(Items.ICE) && !spawnedReadyParticle) {
|
||||
val facing = state.getValue(CopperFridgeBlock.FACING)
|
||||
val particlePosition = Vec3(
|
||||
pos.x + 0.5,
|
||||
pos.y + 1.5,
|
||||
pos.z + 0.5
|
||||
)
|
||||
val rotation = when (facing) {
|
||||
Direction.NORTH -> 180F
|
||||
Direction.EAST -> 90F
|
||||
Direction.SOUTH -> 0F
|
||||
Direction.WEST -> 270F
|
||||
else -> 0F
|
||||
}
|
||||
val packet = SpawnSnowstormParticlePacket(cobblemonResource("rotomfridge_doorready"), particlePosition, rotation)
|
||||
|
||||
serverLevel.players()
|
||||
.filter { it.distanceToSqr(particlePosition.x, particlePosition.y, particlePosition.z) <= 32.0 * 32.0 }
|
||||
.forEach { it.sendPacket(packet) }
|
||||
spawnedReadyParticle = true
|
||||
} else if (!item.`is`(Items.ICE)) {
|
||||
spawnedReadyParticle = false
|
||||
}
|
||||
|
||||
if (!serverLevel.getBlockState(pos).getValue(CopperFridgeBlock.POWERED)) return
|
||||
if (timer > 0) timer--
|
||||
if (timer == 0 && item.item == Items.WATER_BUCKET) {
|
||||
theItem = Items.ICE.defaultInstance
|
||||
timer = -1
|
||||
}
|
||||
}
|
||||
|
||||
override fun getContainerBlockEntity() = this
|
||||
override fun getTheItem() = item
|
||||
|
||||
override fun setTheItem(item: ItemStack) {
|
||||
this.item = item
|
||||
level?.updateNeighborsAt(pos, state.block)
|
||||
setChanged()
|
||||
}
|
||||
|
||||
override fun canTakeItem(target: Container, slot: Int, stack: ItemStack): Boolean {
|
||||
return stack.item == Items.ICE
|
||||
}
|
||||
|
||||
override fun saveAdditional(tag: CompoundTag, registries: HolderLookup.Provider) {
|
||||
super.saveAdditional(tag, registries)
|
||||
if (!theItem.isEmpty) {
|
||||
tag.put("Item", theItem.save(registries))
|
||||
}
|
||||
tag.putInt("Timer", timer)
|
||||
}
|
||||
|
||||
override fun loadAdditional(tag: CompoundTag, registries: HolderLookup.Provider) {
|
||||
super.loadAdditional(tag, registries)
|
||||
theItem = if (tag.contains("Item")) {
|
||||
ItemStack.parse(registries, tag.get("Item")).orElse(ItemStack.EMPTY)
|
||||
} else {
|
||||
ItemStack.EMPTY
|
||||
}
|
||||
timer = if (tag.contains("Timer")) tag.getInt("Timer") else -1
|
||||
}
|
||||
|
||||
companion object {
|
||||
internal val TICKER = BlockEntityTicker<CopperFridgeBlockEntity> { level, pos, state, entity ->
|
||||
if (!level.isClientSide) {
|
||||
entity.processTick()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* 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.block.appliances.fridge
|
||||
|
||||
import com.cobblemon.mod.common.block.appliances.WeatheringCopperAppliance
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.block.WeatheringCopper
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties
|
||||
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf
|
||||
|
||||
class WeatheringCopperFridgeBlock(override val weatherState: WeatheringCopper.WeatherState, properties: Properties) :
|
||||
CopperFridgeBlock(properties), WeatheringCopperAppliance {
|
||||
|
||||
override fun randomTick(state: BlockState, level: ServerLevel, pos: BlockPos, random: RandomSource) {
|
||||
if (state.getValue(HALF) == DoubleBlockHalf.LOWER) {
|
||||
this.changeOverTime(state, level, pos, random)
|
||||
}
|
||||
}
|
||||
|
||||
override fun changeOverTime(state: BlockState, level: ServerLevel, pos: BlockPos, random: RandomSource) {
|
||||
val upperPos = pos.above()
|
||||
val upperState = level.getBlockState(upperPos)
|
||||
if (upperState.block != this || upperState.getValue(HALF) != DoubleBlockHalf.UPPER) {
|
||||
return
|
||||
}
|
||||
|
||||
if (random.nextFloat() < 0.05688889F) {
|
||||
getNextState(state, level, pos, random).ifPresent { nextState ->
|
||||
val blockEntityTag = level.getBlockEntity(pos)?.saveWithFullMetadata(level.registryAccess())
|
||||
val nextLowerState = nextState.setValue(HALF, DoubleBlockHalf.LOWER)
|
||||
val nextUpperState = nextState
|
||||
.setValue(HALF, DoubleBlockHalf.UPPER)
|
||||
.setValue(FACING, upperState.getValue(FACING))
|
||||
.setValue(BlockStateProperties.WATERLOGGED, upperState.getValue(BlockStateProperties.WATERLOGGED))
|
||||
.setValue(POWERED, upperState.getValue(POWERED))
|
||||
|
||||
level.setBlock(pos, nextLowerState, UPDATE_CLIENTS)
|
||||
level.setBlock(upperPos, nextUpperState, UPDATE_ALL)
|
||||
blockEntityTag?.let { tag ->
|
||||
level.getBlockEntity(pos)?.let { blockEntity ->
|
||||
blockEntity.loadWithComponents(tag, level.registryAccess())
|
||||
blockEntity.setChanged()
|
||||
val restoredState = level.getBlockState(pos)
|
||||
level.sendBlockUpdated(pos, restoredState, restoredState, UPDATE_ALL)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun isRandomlyTicking(state: BlockState): Boolean {
|
||||
return WeatheringCopper.getNext(state.block).isPresent
|
||||
}
|
||||
|
||||
override fun getAge(): WeatheringCopper.WeatherState {
|
||||
return this.weatherState
|
||||
}
|
||||
}
|
||||
+165
@@ -0,0 +1,165 @@
|
||||
/*
|
||||
* 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.block.appliances.mower
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonSounds
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import com.cobblemon.mod.common.util.rotateShape
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.core.registries.BuiltInRegistries
|
||||
import net.minecraft.core.registries.Registries
|
||||
import net.minecraft.resources.ResourceKey
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.sounds.SoundSource
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.world.entity.item.ItemEntity
|
||||
import net.minecraft.world.item.BlockItem
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.block.*
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.WATERLOGGED
|
||||
import net.minecraft.world.level.block.state.properties.BooleanProperty
|
||||
import net.minecraft.world.level.material.FluidState
|
||||
import net.minecraft.world.level.material.Fluids
|
||||
import net.minecraft.world.level.storage.loot.LootParams
|
||||
import net.minecraft.world.level.storage.loot.LootTable
|
||||
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets
|
||||
import net.minecraft.world.level.storage.loot.parameters.LootContextParams
|
||||
import net.minecraft.world.phys.Vec3
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
//TODO: All the Mower appliance stuff
|
||||
open class CopperMowerBlock(settings: Properties) : HorizontalDirectionalBlock(settings), SimpleWaterloggedBlock {
|
||||
|
||||
companion object {
|
||||
val CODEC: MapCodec<CopperMowerBlock> = RecordCodecBuilder.mapCodec {
|
||||
it.group(propertiesCodec()).apply(it, ::CopperMowerBlock) }
|
||||
val TRIGGERED = BooleanProperty.create("triggered")
|
||||
|
||||
val COLLISIONBOX = Shapes.or(
|
||||
Shapes.box(0.1875, 0.0, 0.0, 0.8125, 0.375, 0.625),
|
||||
Shapes.box(0.0625, 0.0, 0.625, 0.9375, 0.625, 1.0),
|
||||
Shapes.box(0.125, 0.0, 0.1875, 0.875, 0.3125, 0.5),
|
||||
//The next three lines are just so the handle does have collision, it feels awkward without it but it looks bad as hitbox
|
||||
Shapes.box(0.375, 0.375, 0.375, 0.625, 0.625, 0.5625),
|
||||
Shapes.box(0.4375, 0.5625, 0.5, 0.5625, 0.875, 0.625),
|
||||
Shapes.box(0.25, 0.875, 0.5625, 0.75, 1.0, 0.6875)
|
||||
)
|
||||
val HITBOX = Shapes.or(
|
||||
Shapes.box(0.1875, 0.0, 0.0, 0.8125, 0.375, 0.625),
|
||||
Shapes.box(0.0625, 0.0, 0.625, 0.9375, 0.625, 1.0),
|
||||
Shapes.box(0.125, 0.0, 0.1875, 0.875, 0.3125, 0.5)
|
||||
)
|
||||
}
|
||||
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(HORIZONTAL_FACING, Direction.NORTH)
|
||||
.setValue(WATERLOGGED, false)
|
||||
.setValue(TRIGGERED, false)
|
||||
)
|
||||
}
|
||||
|
||||
override fun neighborChanged(
|
||||
state: BlockState,
|
||||
level: Level,
|
||||
pos: BlockPos,
|
||||
sourceBlock: Block,
|
||||
sourcePos: BlockPos,
|
||||
notify: Boolean
|
||||
) {
|
||||
val powered = level.hasNeighborSignal(pos) || level.hasNeighborSignal(pos.above())
|
||||
val triggered = state.getValue(TRIGGERED)
|
||||
|
||||
if (powered && !triggered) {
|
||||
level.setBlock(pos, state.setValue(TRIGGERED, true), UPDATE_CLIENTS)
|
||||
level.scheduleTick(pos, this, 1)
|
||||
} else if (!powered && triggered) {
|
||||
level.setBlock(pos, state.setValue(TRIGGERED, false), UPDATE_CLIENTS)
|
||||
}
|
||||
}
|
||||
|
||||
override fun hasAnalogOutputSignal(state: BlockState) = true
|
||||
|
||||
override fun tick(state: BlockState, level: ServerLevel, pos: BlockPos, random: RandomSource) {
|
||||
val blockKey = BuiltInRegistries.BLOCK.getKey(level.getBlockState(pos.below()).block)
|
||||
val tableKey = ResourceKey.create(Registries.LOOT_TABLE, cobblemonResource("mower/${blockKey.path}"))
|
||||
val lootTable = level.server.reloadableRegistries().getLootTable(tableKey)
|
||||
if (lootTable == LootTable.EMPTY) return
|
||||
val params = LootParams.Builder(level)
|
||||
.withParameter(LootContextParams.ORIGIN, Vec3.atCenterOf(pos.below()))
|
||||
.withParameter(LootContextParams.BLOCK_STATE, level.getBlockState(pos.below()))
|
||||
.withParameter(LootContextParams.TOOL, ItemStack.EMPTY)
|
||||
.create(LootContextParamSets.BLOCK)
|
||||
|
||||
val result = lootTable.getRandomItems(params, random)
|
||||
val block = result.getOrNull(0)?.item as? BlockItem
|
||||
val item = result.getOrNull(1)
|
||||
|
||||
if (block == null || block == Blocks.AIR) {
|
||||
level.destroyBlock(pos.below(), false)
|
||||
} else {
|
||||
level.setBlockAndUpdate(pos.below(), block.block.defaultBlockState())
|
||||
}
|
||||
item?.let {
|
||||
val facing = state.getValue(HORIZONTAL_FACING).opposite
|
||||
val itemEntity =
|
||||
ItemEntity(level,
|
||||
pos.x + 0.5, pos.y + 0.5, pos.z + 0.5,
|
||||
it
|
||||
)
|
||||
itemEntity.deltaMovement = Vec3(facing.stepX.toDouble(), 0.0, facing.stepZ.toDouble()).scale(0.2)
|
||||
level.addFreshEntity(itemEntity)
|
||||
}
|
||||
level.playSound(null, pos, CobblemonSounds.MOWER_CUT, SoundSource.BLOCKS)
|
||||
}
|
||||
|
||||
override fun getRenderShape(state: BlockState) = RenderShape.MODEL
|
||||
|
||||
override fun codec(): MapCodec<CopperMowerBlock> = CODEC
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(HORIZONTAL_FACING, WATERLOGGED, TRIGGERED)
|
||||
}
|
||||
|
||||
override fun getFluidState(blockState: BlockState): FluidState? = if (blockState.getValue(WATERLOGGED)) Fluids.WATER.getSource(false) else super.getFluidState(blockState)
|
||||
|
||||
override fun updateShape(state: BlockState, direction: Direction, neighborState: BlockState, world: LevelAccessor, pos: BlockPos, neighborPos: BlockPos): BlockState {
|
||||
if (state.getValue(WATERLOGGED)) {
|
||||
world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world))
|
||||
}
|
||||
return if (state.getValue(HORIZONTAL_FACING).opposite == direction && !state.canSurvive(world, pos)) Blocks.AIR.defaultBlockState()
|
||||
else super.updateShape(state, direction, neighborState, world, pos, neighborPos)
|
||||
}
|
||||
|
||||
override fun getCollisionShape(state: BlockState, level: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape {
|
||||
val direction = state.getValue(HORIZONTAL_FACING)
|
||||
return rotateShape(Direction.NORTH, direction, COLLISIONBOX)
|
||||
}
|
||||
|
||||
override fun getShape(state: BlockState, level: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape {
|
||||
val direction = state.getValue(HORIZONTAL_FACING)
|
||||
return rotateShape(Direction.NORTH, direction, HITBOX)
|
||||
}
|
||||
|
||||
override fun getStateForPlacement(context: BlockPlaceContext): BlockState? {
|
||||
val fluidState = context.level.getFluidState(context.clickedPos)
|
||||
return super.getStateForPlacement(context)?.setValue(HORIZONTAL_FACING, context.horizontalDirection.opposite)?.setValue(WATERLOGGED, fluidState.type === Fluids.WATER)
|
||||
}
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* 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.block.appliances.mower
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonBlockEntities
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.world.level.block.entity.BlockEntity
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
|
||||
class CopperMowerBlockEntity(val pos: BlockPos, val state: BlockState) : BlockEntity(
|
||||
CobblemonBlockEntities.COPPER_MOWER,
|
||||
pos, state
|
||||
) {
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* 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.block.appliances.mower
|
||||
|
||||
import com.cobblemon.mod.common.block.appliances.WeatheringCopperAppliance
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.world.level.block.WeatheringCopper
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
|
||||
class WeatheringCopperMowerBlock(override val weatherState: WeatheringCopper.WeatherState, properties: Properties) :
|
||||
CopperMowerBlock(properties), WeatheringCopperAppliance {
|
||||
|
||||
override fun randomTick(state: BlockState, level: ServerLevel, pos: BlockPos, random: RandomSource) {
|
||||
this.changeOverTime(state, level, pos, random)
|
||||
}
|
||||
|
||||
override fun isRandomlyTicking(state: BlockState): Boolean {
|
||||
return WeatheringCopper.getNext(state.getBlock()).isPresent()
|
||||
}
|
||||
|
||||
override fun getAge(): WeatheringCopper.WeatherState {
|
||||
return this.weatherState
|
||||
}
|
||||
}
|
||||
+184
@@ -0,0 +1,184 @@
|
||||
/*
|
||||
* 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.block.appliances.oven
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonBlockEntities
|
||||
import com.cobblemon.mod.common.block.appliances.WeatheringCopperAppliance
|
||||
import com.cobblemon.mod.common.util.rotateShape
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.util.StringRepresentable
|
||||
import net.minecraft.world.InteractionResult
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.block.*
|
||||
import net.minecraft.world.level.block.entity.BlockEntity
|
||||
import net.minecraft.world.level.block.entity.BlockEntityTicker
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.WATERLOGGED
|
||||
import net.minecraft.world.level.block.state.properties.BooleanProperty
|
||||
import net.minecraft.world.level.block.state.properties.EnumProperty
|
||||
import net.minecraft.world.level.material.FluidState
|
||||
import net.minecraft.world.level.material.Fluids
|
||||
import net.minecraft.world.phys.BlockHitResult
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
import org.jetbrains.annotations.Nullable
|
||||
|
||||
//TODO: All the Oven appliance stuff - Good Luck Coders
|
||||
open class CopperOvenBlock(settings: Properties) : BaseEntityBlock(settings), SimpleWaterloggedBlock {
|
||||
|
||||
companion object {
|
||||
val CODEC: MapCodec<CopperOvenBlock> = RecordCodecBuilder.mapCodec {
|
||||
it.group(propertiesCodec()).apply(it, ::CopperOvenBlock) }
|
||||
val EJECTING = BooleanProperty.create("ejecting")
|
||||
val COOKING = EnumProperty.create("cooking", CookingState::class.java)
|
||||
|
||||
val HITBOX = Shapes.box(0.0625, 0.0, 0.3125, 0.9375, 0.625, 0.9375)
|
||||
}
|
||||
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(HORIZONTAL_FACING, Direction.NORTH)
|
||||
.setValue(WATERLOGGED, false)
|
||||
.setValue(COOKING, CookingState.CLOSED)
|
||||
.setValue(EJECTING, false)
|
||||
)
|
||||
}
|
||||
enum class CookingState : StringRepresentable {
|
||||
CLOSED, //Door is closed
|
||||
OPEN, //Door is open
|
||||
COOKING; //Door is locked closed and the light level is cranked up, as long as the block is powered by redstone. Acts as closed lid in the original Campfire Pot
|
||||
override fun getSerializedName(): String = this.name.lowercase()
|
||||
}
|
||||
|
||||
override fun codec(): MapCodec<CopperOvenBlock> = CODEC
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(HORIZONTAL_FACING, WATERLOGGED, COOKING, EJECTING)
|
||||
}
|
||||
|
||||
override fun getFluidState(blockState: BlockState): FluidState? = if (blockState.getValue(WATERLOGGED)) Fluids.WATER.getSource(false) else super.getFluidState(blockState)
|
||||
|
||||
override fun updateShape(state: BlockState, direction: Direction, neighborState: BlockState, world: LevelAccessor, pos: BlockPos, neighborPos: BlockPos): BlockState {
|
||||
if (state.getValue(WATERLOGGED)) {
|
||||
world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world))
|
||||
}
|
||||
val powered = world.hasNeighborSignal(pos)
|
||||
if (powered) {
|
||||
world.setBlock(pos, state.setValue(COOKING, CookingState.COOKING), 3)
|
||||
} else {
|
||||
world.setBlock(pos, state.setValue(COOKING, CookingState.CLOSED), 3)
|
||||
}
|
||||
|
||||
if (state.getValue(HORIZONTAL_FACING).opposite == direction && !state.canSurvive(world, pos)) return Blocks.AIR.defaultBlockState()
|
||||
return super.updateShape(state, direction, neighborState, world, pos, neighborPos)
|
||||
}
|
||||
|
||||
override fun getCollisionShape(state: BlockState, level: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape {
|
||||
val direction = state.getValue(HORIZONTAL_FACING)
|
||||
return rotateShape(Direction.NORTH, direction, HITBOX)
|
||||
}
|
||||
|
||||
override fun getShape(state: BlockState, level: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape {
|
||||
return getCollisionShape(state, level, pos, context).singleEncompassing()
|
||||
}
|
||||
|
||||
override fun getStateForPlacement(context: BlockPlaceContext): BlockState? {
|
||||
val fluidState = context.level.getFluidState(context.clickedPos)
|
||||
return super.getStateForPlacement(context)?.setValue(HORIZONTAL_FACING, context.horizontalDirection.opposite)?.setValue(WATERLOGGED, fluidState.type === Fluids.WATER)
|
||||
}
|
||||
|
||||
override fun newBlockEntity(
|
||||
pos: BlockPos,
|
||||
state: BlockState
|
||||
): BlockEntity? {
|
||||
return CopperOvenBlockEntity(pos, state)
|
||||
}
|
||||
|
||||
override fun useWithoutItem(
|
||||
state: BlockState,
|
||||
level: Level,
|
||||
pos: BlockPos,
|
||||
player: Player,
|
||||
hitResult: BlockHitResult
|
||||
): InteractionResult {
|
||||
val blockEntity = level.getBlockEntity(pos)
|
||||
if (blockEntity !is CopperOvenBlockEntity) return InteractionResult.PASS
|
||||
val cooking = level.getBlockState(pos).getValue(COOKING)
|
||||
if (!level.isClientSide && cooking != CookingState.COOKING) {
|
||||
if (player.isCrouching) {
|
||||
if (cooking == CookingState.OPEN) {
|
||||
level.setBlockAndUpdate(pos, state.setValue(COOKING, CookingState.CLOSED))
|
||||
} else {
|
||||
level.setBlockAndUpdate(pos, state.setValue(COOKING, CookingState.OPEN))
|
||||
}
|
||||
} else {
|
||||
openContainer(level, pos, player)
|
||||
}
|
||||
}
|
||||
return InteractionResult.SUCCESS
|
||||
}
|
||||
|
||||
fun openContainer(level: Level, pos: BlockPos, player: Player) {
|
||||
val blockEntity = level.getBlockEntity(pos)
|
||||
if (blockEntity is CopperOvenBlockEntity) player.openMenu(blockEntity)
|
||||
}
|
||||
|
||||
override fun getRenderShape(state: BlockState) = RenderShape.MODEL
|
||||
|
||||
override fun <T : BlockEntity?> getTicker(
|
||||
level: Level,
|
||||
state: BlockState,
|
||||
blockEntityType: BlockEntityType<T>
|
||||
): BlockEntityTicker<T?>? {
|
||||
return createOvenTicker(level, blockEntityType as BlockEntityType<*>, CobblemonBlockEntities.COPPER_OVEN) as BlockEntityTicker<T?>?
|
||||
}
|
||||
|
||||
@Nullable
|
||||
protected fun <T : BlockEntity> createOvenTicker(
|
||||
level: Level,
|
||||
serverType: BlockEntityType<T>,
|
||||
clientType: BlockEntityType<out CopperOvenBlockEntity>
|
||||
): BlockEntityTicker<T>? {
|
||||
return if (level.isClientSide) createTickerHelper(serverType, clientType, CopperOvenBlockEntity::clientTick)
|
||||
else createTickerHelper(serverType, clientType, CopperOvenBlockEntity::serverTick)
|
||||
}
|
||||
|
||||
override fun onRemove(
|
||||
state: BlockState,
|
||||
level: Level,
|
||||
pos: BlockPos,
|
||||
newState: BlockState,
|
||||
movedByPiston: Boolean
|
||||
) {
|
||||
WeatheringCopperAppliance.handleOnRemove(state, level, pos, newState, movedByPiston)
|
||||
}
|
||||
|
||||
override fun hasAnalogOutputSignal(state: BlockState) = true
|
||||
|
||||
override fun getAnalogOutputSignal(state: BlockState, level: Level, pos: BlockPos): Int {
|
||||
val entity = level.getBlockEntity(pos) as CopperOvenBlockEntity
|
||||
val itemCount = entity.items.count { !it.isEmpty }
|
||||
var disabledSlotCount = 0
|
||||
for (slot in 1..12) {
|
||||
if (entity.isSlotDisabled(slot)) disabledSlotCount++
|
||||
}
|
||||
return itemCount + disabledSlotCount
|
||||
}
|
||||
}
|
||||
+579
@@ -0,0 +1,579 @@
|
||||
/*
|
||||
* 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.block.appliances.oven
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonBlockEntities
|
||||
import com.cobblemon.mod.common.CobblemonRecipeTypes
|
||||
import com.cobblemon.mod.common.CobblemonSounds
|
||||
import com.cobblemon.mod.common.api.cooking.Seasonings
|
||||
import com.cobblemon.mod.common.item.crafting.CookingPotRecipeBase
|
||||
import com.cobblemon.mod.common.util.lang
|
||||
import com.cobblemon.mod.common.util.playSoundServer
|
||||
import it.unimi.dsi.fastutil.ints.IntArrayList
|
||||
import it.unimi.dsi.fastutil.ints.IntList
|
||||
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.core.HolderLookup
|
||||
import net.minecraft.core.NonNullList
|
||||
import net.minecraft.nbt.CompoundTag
|
||||
import net.minecraft.nbt.ListTag
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.sounds.SoundEvent
|
||||
import net.minecraft.sounds.SoundEvents
|
||||
import net.minecraft.sounds.SoundSource
|
||||
import net.minecraft.world.Container
|
||||
import net.minecraft.world.ContainerHelper
|
||||
import net.minecraft.world.WorldlyContainer
|
||||
import net.minecraft.world.entity.item.ItemEntity
|
||||
import net.minecraft.world.entity.player.Inventory
|
||||
import net.minecraft.world.entity.player.StackedContents
|
||||
import net.minecraft.world.inventory.*
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.crafting.CraftingInput
|
||||
import net.minecraft.world.item.crafting.RecipeHolder
|
||||
import net.minecraft.world.item.crafting.RecipeType
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.HorizontalDirectionalBlock
|
||||
import net.minecraft.world.level.block.entity.BaseContainerBlockEntity
|
||||
import net.minecraft.world.level.block.entity.HopperBlockEntity
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.phys.Vec3
|
||||
import java.util.*
|
||||
|
||||
class CopperOvenBlockEntity(pos: BlockPos, state: BlockState) : BaseContainerBlockEntity(
|
||||
CobblemonBlockEntities.COPPER_OVEN,
|
||||
pos, state
|
||||
), WorldlyContainer, CraftingContainer, StackedContentsCompatible, RecipeCraftingHolder {
|
||||
|
||||
companion object {
|
||||
|
||||
const val RESULT_SLOT = 0
|
||||
val CRAFTING_GRID_SLOTS = 1..9
|
||||
val SEASONING_SLOTS = 10..12
|
||||
const val ITEMS_SIZE = 13
|
||||
|
||||
val PLAYER_INVENTORY_SLOTS = 13..39
|
||||
val PLAYER_HOTBAR_SLOTS = 40..48
|
||||
|
||||
const val CRAFTING_GRID_WIDTH = 3
|
||||
const val PLAYER_INVENTORY_WIDTH = 9
|
||||
|
||||
const val COOKING_TOTAL_TIME = 200
|
||||
const val COOKING_PROGRESS_PER_TICK = 2
|
||||
const val EJECT_DELAY_TICKS = 4
|
||||
const val NO_EJECT_PENDING = -1
|
||||
|
||||
const val COOKING_PROGRESS_INDEX = 0
|
||||
const val COOKING_PROGRESS_TOTAL_TIME_INDEX = 1
|
||||
const val IS_DOOR_OPEN_INDEX = 2
|
||||
const val COOKING_POT_COLOR_INDEX = 3
|
||||
const val DISABLED_SLOTS_INDEX = 4
|
||||
|
||||
fun clientTick(level: Level, pos: BlockPos, state: BlockState, ovenBlockEntity: CopperOvenBlockEntity) {
|
||||
if (!level.isClientSide) return
|
||||
|
||||
val isCooking = state.getValue(CopperOvenBlock.COOKING) == CopperOvenBlock.CookingState.COOKING
|
||||
// val isRunningSoundActive = BlockEntitySoundTracker.isActive(pos, campfireBlockEntity.runningSound.location)
|
||||
val containsItems = ovenBlockEntity.getSeasonings().isNotEmpty() || ovenBlockEntity.getIngredients().isNotEmpty()
|
||||
|
||||
// if (containsItems) {
|
||||
// if (isCooking) {
|
||||
//// if (!isRunningSoundActive) BlockEntitySoundTracker.play(pos, CancellableSoundInstance(campfireBlockEntity.runningSound, pos, true, 1.0f, 1.0f))
|
||||
// } else {
|
||||
//// BlockEntitySoundTracker.stop(pos, campfireBlockEntity.runningSound.location)
|
||||
// }
|
||||
// } else {
|
||||
//// BlockEntitySoundTracker.stop(pos, campfireBlockEntity.runningSound.location)
|
||||
// }
|
||||
}
|
||||
|
||||
fun serverTick(level: Level, pos: BlockPos, state: BlockState, ovenBlockEntity: CopperOvenBlockEntity) {
|
||||
if (level.isClientSide) return
|
||||
|
||||
if (ovenBlockEntity.closeDelay > 0) ovenBlockEntity.closeDelay--
|
||||
var hasChanged = false
|
||||
val craftingInput = CraftingInput.of(3, 3, ovenBlockEntity.items.subList(1, 10))
|
||||
|
||||
val powered = level.hasNeighborSignal(pos)
|
||||
val wasCooking = state.getValue(CopperOvenBlock.COOKING) == CopperOvenBlock.CookingState.COOKING
|
||||
val cookingState = if (powered) {
|
||||
CopperOvenBlock.CookingState.COOKING
|
||||
} else {
|
||||
CopperOvenBlock.CookingState.CLOSED
|
||||
}
|
||||
if (powered) {
|
||||
level.setBlockAndUpdate(pos, state.setValue(CopperOvenBlock.COOKING, cookingState))
|
||||
}
|
||||
|
||||
val previousEjectDelay = ovenBlockEntity.ejectDelay
|
||||
if (powered) {
|
||||
ovenBlockEntity.ejectDelay = NO_EJECT_PENDING
|
||||
} else if (wasCooking) {
|
||||
ovenBlockEntity.ejectDelay = EJECT_DELAY_TICKS
|
||||
} else if (ovenBlockEntity.ejectDelay in 1..EJECT_DELAY_TICKS) {
|
||||
ovenBlockEntity.ejectDelay--
|
||||
}
|
||||
if (ovenBlockEntity.ejectDelay != previousEjectDelay) {
|
||||
ovenBlockEntity.setChanged()
|
||||
}
|
||||
|
||||
fun <T : CookingPotRecipeBase> fetchRecipe(
|
||||
recipeType: RecipeType<T>
|
||||
): Optional<RecipeHolder<CookingPotRecipeBase>> {
|
||||
val optional = level.recipeManager.getRecipeFor(recipeType, craftingInput, level)
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return optional.map { it as RecipeHolder<CookingPotRecipeBase> }
|
||||
}
|
||||
|
||||
val isCookingBefore = ovenBlockEntity.cookingProgress > 0
|
||||
|
||||
// Check for all Cooking Pot Recipe Types recipes
|
||||
val optionalRecipe = fetchRecipe(CobblemonRecipeTypes.COOKING_POT_COOKING)
|
||||
.orElseGet { fetchRecipe(CobblemonRecipeTypes.COOKING_POT_SHAPELESS).orElse(null) }
|
||||
|
||||
if (optionalRecipe == null) {
|
||||
ovenBlockEntity.cookingProgress = 0
|
||||
}
|
||||
else {
|
||||
val recipe = optionalRecipe.value()
|
||||
val cookedItem = recipe.assemble(craftingInput, level.registryAccess())
|
||||
val resultSlotItem = ovenBlockEntity.getItem(0)
|
||||
|
||||
recipe.applySeasoning(cookedItem, ovenBlockEntity.getSeasonings().filter { it.`is`(recipe.seasoningTag) })
|
||||
|
||||
if (!powered) {
|
||||
ovenBlockEntity.cookingProgress = 0
|
||||
} else {
|
||||
val resultCanAccept = resultSlotItem.isEmpty ||
|
||||
(ItemStack.isSameItemSameComponents(resultSlotItem, cookedItem) &&
|
||||
resultSlotItem.count + cookedItem.count <= resultSlotItem.maxStackSize)
|
||||
|
||||
if (!resultCanAccept) {
|
||||
ovenBlockEntity.cookingProgress = 0
|
||||
} else {
|
||||
ovenBlockEntity.cookingProgress += COOKING_PROGRESS_PER_TICK
|
||||
if (ovenBlockEntity.cookingProgress == ovenBlockEntity.cookingTotalTime) {
|
||||
ovenBlockEntity.cookingProgress = 0
|
||||
|
||||
if (!cookedItem.isEmpty) {
|
||||
(ovenBlockEntity as RecipeCraftingHolder).recipeUsed = optionalRecipe
|
||||
|
||||
if (resultSlotItem.isEmpty) {
|
||||
ovenBlockEntity.setItem(0, cookedItem)
|
||||
} else {
|
||||
resultSlotItem.grow(cookedItem.count)
|
||||
}
|
||||
|
||||
val remainders = recipe.getRemainingItems(craftingInput)
|
||||
ovenBlockEntity.queueRemainders(remainders)
|
||||
ovenBlockEntity.consumeCraftingIngredients(
|
||||
recipe,
|
||||
level,
|
||||
pos,
|
||||
state,
|
||||
ovenBlockEntity
|
||||
)
|
||||
|
||||
level.playSoundServer(
|
||||
position = pos.bottomCenter,
|
||||
sound = CobblemonSounds.CAMPFIRE_POT_COOK,
|
||||
)
|
||||
|
||||
hasChanged = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val isCookingNow = ovenBlockEntity.cookingProgress > 0
|
||||
|
||||
// if (isCookingBefore != isCookingNow) {
|
||||
// hasChanged = true
|
||||
// val newCookingState = if (isCookingNow) CopperOvenBlock.CookingState.COOKING else CopperOvenBlock.CookingState.CLOSED
|
||||
// level.setBlock(pos, state.setValue(CopperOvenBlock.COOKING, newCookingState), 3)
|
||||
// }
|
||||
|
||||
if (ovenBlockEntity.ejectDelay == 0 && ovenBlockEntity.getItem(RESULT_SLOT).isEmpty) {
|
||||
ovenBlockEntity.ejectDelay = NO_EJECT_PENDING
|
||||
ovenBlockEntity.setChanged()
|
||||
}
|
||||
|
||||
if (!powered && ovenBlockEntity.ejectDelay == 0 && !ovenBlockEntity.getItem(RESULT_SLOT).isEmpty) {
|
||||
ovenBlockEntity.eject(level as ServerLevel, state, pos)
|
||||
} else if (level.getBlockState(pos).getValue(CopperOvenBlock.EJECTING) && ovenBlockEntity.closeDelay == 0) {
|
||||
level.setBlockAndUpdate(pos, state.setValue(CopperOvenBlock.EJECTING, false))
|
||||
}
|
||||
|
||||
if (hasChanged) setChanged(level, pos, state)
|
||||
}
|
||||
}
|
||||
|
||||
private val recipesUsed: Object2IntOpenHashMap<ResourceLocation> = Object2IntOpenHashMap()
|
||||
private var recipe: RecipeHolder<*>? = null
|
||||
private var items: NonNullList<ItemStack> = NonNullList.withSize(ITEMS_SIZE, ItemStack.EMPTY)
|
||||
private val pendingRemainders: MutableList<ItemStack> = mutableListOf()
|
||||
private var cookingProgress: Int = 0
|
||||
private var cookingTotalTime: Int = COOKING_TOTAL_TIME
|
||||
private var ejectDelay: Int = NO_EJECT_PENDING
|
||||
var time: Int = 0
|
||||
private val disabledSlots = BooleanArray(12)
|
||||
var closeDelay: Int = 0
|
||||
|
||||
val dataAccess: ContainerData = object : ContainerData {
|
||||
override fun get(index: Int): Int = when (index) {
|
||||
COOKING_PROGRESS_INDEX -> cookingProgress
|
||||
COOKING_PROGRESS_TOTAL_TIME_INDEX -> cookingTotalTime
|
||||
IS_DOOR_OPEN_INDEX -> if (blockState.getValue(CopperOvenBlock.COOKING) == CopperOvenBlock.CookingState.OPEN) 1 else 0
|
||||
COOKING_POT_COLOR_INDEX -> 0
|
||||
DISABLED_SLOTS_INDEX -> {
|
||||
disabledSlots.indices.fold(0) { mask, slot ->
|
||||
if (disabledSlots[slot]) mask or (1 shl slot) else mask
|
||||
}
|
||||
}
|
||||
else -> 0
|
||||
}
|
||||
|
||||
override fun set(index: Int, value: Int) {
|
||||
when (index) {
|
||||
COOKING_PROGRESS_INDEX -> cookingProgress = value
|
||||
COOKING_PROGRESS_TOTAL_TIME_INDEX -> cookingTotalTime = value
|
||||
DISABLED_SLOTS_INDEX -> {
|
||||
disabledSlots.indices.forEach { index ->
|
||||
disabledSlots[index] = value and (1 shl index) != 0
|
||||
}
|
||||
setChanged()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun getCount() = 5
|
||||
}
|
||||
|
||||
fun eject(level: ServerLevel, state: BlockState, pos: BlockPos) {
|
||||
val result = items[RESULT_SLOT]
|
||||
if (result.isEmpty) return
|
||||
|
||||
val dispenseCount = result.count
|
||||
val facing = level.getBlockState(pos).getValue(HorizontalDirectionalBlock.FACING)
|
||||
val container = level.getBlockEntity(pos.relative(facing)) as? Container
|
||||
val remaining = result.copyWithCount(dispenseCount)
|
||||
|
||||
if (container != null) {
|
||||
for (slot in 0 until container.containerSize) {
|
||||
if (!container.canPlaceItem(slot, remaining)) continue
|
||||
|
||||
val slotStack = container.getItem(slot)
|
||||
if (slotStack.isEmpty) {
|
||||
val count = minOf(remaining.count, remaining.maxStackSize, container.maxStackSize)
|
||||
if (count > 0) {
|
||||
container.setItem(slot, remaining.copyWithCount(count))
|
||||
remaining.shrink(count)
|
||||
}
|
||||
} else if (ItemStack.isSameItemSameComponents(slotStack, remaining)) {
|
||||
val count = minOf(
|
||||
remaining.count,
|
||||
slotStack.maxStackSize - slotStack.count,
|
||||
container.maxStackSize - slotStack.count
|
||||
)
|
||||
if (count > 0) {
|
||||
slotStack.grow(count)
|
||||
remaining.shrink(count)
|
||||
}
|
||||
}
|
||||
|
||||
if (remaining.isEmpty) break
|
||||
}
|
||||
}
|
||||
|
||||
if (!remaining.isEmpty) {
|
||||
val spawnPos = Vec3.atCenterOf(pos).add(Vec3.atLowerCornerOf(facing.normal).scale(0.6))
|
||||
|
||||
val entity = ItemEntity(level, spawnPos.x, spawnPos.y, spawnPos.z, remaining.copy())
|
||||
entity.deltaMovement = Vec3.atLowerCornerOf(facing.normal).scale(0.2)
|
||||
if (!level.addFreshEntity(entity)) {
|
||||
val insertedCount = dispenseCount - remaining.count
|
||||
if (insertedCount > 0) {
|
||||
result.shrink(insertedCount)
|
||||
if (result.isEmpty) items[RESULT_SLOT] = ItemStack.EMPTY
|
||||
container?.setChanged()
|
||||
onItemUpdate(level)
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
result.shrink(dispenseCount)
|
||||
if (result.isEmpty) items[RESULT_SLOT] = ItemStack.EMPTY
|
||||
container?.setChanged()
|
||||
dispenseRemainders(level, pos, container, facing)
|
||||
level.setBlockAndUpdate(pos, level.getBlockState(pos).setValue(CopperOvenBlock.EJECTING, true))
|
||||
level.playSound(null, pos, SoundEvents.DISPENSER_DISPENSE, SoundSource.BLOCKS)
|
||||
closeDelay = 10
|
||||
onItemUpdate(level)
|
||||
}
|
||||
|
||||
fun isSlotDisabled(slot: Int): Boolean {
|
||||
if (slot !in 1..12) return false
|
||||
val mask = dataAccess.get(DISABLED_SLOTS_INDEX)
|
||||
return mask and (1 shl (slot - 1)) != 0
|
||||
}
|
||||
|
||||
override fun getDefaultName() = lang("container.copper_oven")
|
||||
|
||||
override fun createMenu(
|
||||
containerId: Int,
|
||||
inventory: Inventory
|
||||
): AbstractContainerMenu {
|
||||
return CopperOvenMenu(containerId, inventory, this, dataAccess)
|
||||
}
|
||||
|
||||
override fun getWidth() = 3
|
||||
override fun getHeight() = 3
|
||||
|
||||
override fun getItems(): NonNullList<ItemStack> {
|
||||
return this.items
|
||||
}
|
||||
|
||||
override fun setItems(items: NonNullList<ItemStack>) {
|
||||
val copiedItems = items.map(ItemStack::copy)
|
||||
this.items.clear()
|
||||
this.items.addAll(copiedItems)
|
||||
level?.let { onItemUpdate(it) }
|
||||
}
|
||||
|
||||
override fun saveAdditional(tag: CompoundTag, registries: HolderLookup.Provider) {
|
||||
super.saveAdditional(tag, registries)
|
||||
ContainerHelper.saveAllItems(tag, items, registries)
|
||||
val remainderList = ListTag()
|
||||
pendingRemainders.filterNot(ItemStack::isEmpty).forEach { remainderList.add(it.save(registries)) }
|
||||
tag.put("PendingRemainders", remainderList)
|
||||
tag.putInt("CookingProgress", cookingProgress)
|
||||
tag.putInt("EjectDelay", ejectDelay)
|
||||
val intList: IntList = IntArrayList()
|
||||
|
||||
for (slot in 1..12) {
|
||||
if (this.isSlotDisabled(slot)) {
|
||||
intList.add(slot)
|
||||
}
|
||||
}
|
||||
|
||||
tag.putIntArray("DisabledSlots", intList)
|
||||
}
|
||||
|
||||
override fun loadAdditional(tag: CompoundTag, registries: HolderLookup.Provider) {
|
||||
super.loadAdditional(tag, registries)
|
||||
items.clear()
|
||||
ContainerHelper.loadAllItems(tag, items, registries)
|
||||
pendingRemainders.clear()
|
||||
val remainderList = tag.getList("PendingRemainders", CompoundTag.TAG_COMPOUND.toInt())
|
||||
remainderList.forEach { encoded ->
|
||||
ItemStack.parse(registries, encoded as CompoundTag).orElse(ItemStack.EMPTY)
|
||||
.takeUnless(ItemStack::isEmpty)
|
||||
?.let(pendingRemainders::add)
|
||||
}
|
||||
cookingProgress = tag.getInt("CookingProgress")
|
||||
ejectDelay = if (tag.contains("EjectDelay")) {
|
||||
tag.getInt("EjectDelay").coerceIn(NO_EJECT_PENDING, EJECT_DELAY_TICKS)
|
||||
} else {
|
||||
NO_EJECT_PENDING
|
||||
}
|
||||
val slots = tag.getIntArray("DisabledSlots")
|
||||
|
||||
disabledSlots.fill(false)
|
||||
for (slot in slots) {
|
||||
if (slot in 1..12) {
|
||||
disabledSlots[slot - 1] = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun setDoorOpen(open: Boolean) {
|
||||
val level = level ?: return
|
||||
if (level.isClientSide) return
|
||||
|
||||
val state = level.getBlockState(worldPosition)
|
||||
if (state.block !is CopperOvenBlock) return
|
||||
|
||||
val newCookingState = if (open) CopperOvenBlock.CookingState.OPEN else CopperOvenBlock.CookingState.CLOSED
|
||||
if (state.getValue(CopperOvenBlock.COOKING) != newCookingState) {
|
||||
level.setBlock(worldPosition, state.setValue(CopperOvenBlock.COOKING, newCookingState), Block.UPDATE_ALL)
|
||||
setChanged()
|
||||
}
|
||||
}
|
||||
|
||||
override fun getContainerSize() = items.size
|
||||
|
||||
override fun getSlotsForFace(side: Direction): IntArray {
|
||||
val inputSlots = (CRAFTING_GRID_SLOTS + SEASONING_SLOTS).toList()
|
||||
return if (side == Direction.DOWN) {
|
||||
inputSlots.toIntArray()
|
||||
} else {
|
||||
(inputSlots + RESULT_SLOT).toIntArray()
|
||||
}
|
||||
}
|
||||
|
||||
override fun canPlaceItemThroughFace(index: Int, itemStack: ItemStack, direction: Direction?): Boolean {
|
||||
return (index in CRAFTING_GRID_SLOTS || index in SEASONING_SLOTS) &&
|
||||
!isSlotDisabled(index)
|
||||
}
|
||||
|
||||
override fun canTakeItemThroughFace(index: Int, stack: ItemStack, direction: Direction): Boolean {
|
||||
return if (direction == Direction.DOWN) {
|
||||
index in CRAFTING_GRID_SLOTS || index in SEASONING_SLOTS
|
||||
} else {
|
||||
index == RESULT_SLOT
|
||||
}
|
||||
}
|
||||
|
||||
override fun fillStackedContents(contents: StackedContents) {
|
||||
for (itemStack in this.items) {
|
||||
contents.accountSimpleStack(itemStack);
|
||||
}
|
||||
}
|
||||
|
||||
override fun setRecipeUsed(recipe: RecipeHolder<*>?) {
|
||||
this.recipe = recipe
|
||||
if (recipe != null) {
|
||||
val resourceLocation = recipe.id()
|
||||
this.recipesUsed.addTo(resourceLocation, 1)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getRecipeUsed() = null
|
||||
|
||||
override fun setChanged() {
|
||||
super.setChanged()
|
||||
level?.let { level ->
|
||||
val state = level.getBlockState(worldPosition)
|
||||
level.updateNeighborsAt(worldPosition, state.block)
|
||||
level.updateNeighbourForOutputSignal(worldPosition, state.block)
|
||||
}
|
||||
}
|
||||
|
||||
private fun onItemUpdate(level: Level) {
|
||||
val oldState = level.getBlockState(blockPos)
|
||||
level.sendBlockUpdated(blockPos, oldState, level.getBlockState(blockPos), Block.UPDATE_ALL)
|
||||
setChanged()
|
||||
level.sendBlockUpdated(blockPos, oldState, level.getBlockState(blockPos), Block.UPDATE_ALL)
|
||||
}
|
||||
|
||||
fun consumeCraftingIngredients(recipe: CookingPotRecipeBase, level: Level, pos: BlockPos, state: BlockState, ovenBlockEntity: CopperOvenBlockEntity) {
|
||||
fun consumeItem(slot: Int) {
|
||||
val itemInSlot = getItem(slot)
|
||||
if (!itemInSlot.isEmpty) {
|
||||
itemInSlot.shrink(1)
|
||||
if (itemInSlot.count <= 0) setItem(slot, ItemStack.EMPTY)
|
||||
}
|
||||
}
|
||||
|
||||
for (i in CRAFTING_GRID_SLOTS.first..CRAFTING_GRID_SLOTS.last) {
|
||||
if (!Seasonings.isSeasoning(getItem(i))) consumeItem(i)
|
||||
}
|
||||
for (i in 1..12) {
|
||||
if (getItem(i).`is`(recipe.seasoningTag) && recipe.seasoningProcessors.any { it.consumesItem(getItem(i)) }) consumeItem(i)
|
||||
}
|
||||
}
|
||||
|
||||
private fun queueRemainders(remainders: List<ItemStack>) {
|
||||
for (remainder in remainders) {
|
||||
if (remainder.isEmpty) continue
|
||||
var remaining = remainder.copy()
|
||||
for (pending in pendingRemainders) {
|
||||
if (!ItemStack.isSameItemSameComponents(pending, remaining)) continue
|
||||
val count = minOf(remaining.count, pending.maxStackSize - pending.count)
|
||||
if (count > 0) {
|
||||
pending.grow(count)
|
||||
remaining.shrink(count)
|
||||
}
|
||||
if (remaining.isEmpty) break
|
||||
}
|
||||
while (!remaining.isEmpty) {
|
||||
val count = minOf(remaining.count, remaining.maxStackSize)
|
||||
pendingRemainders.add(remaining.copyWithCount(count))
|
||||
remaining.shrink(count)
|
||||
}
|
||||
}
|
||||
setChanged()
|
||||
}
|
||||
|
||||
private fun dispenseRemainders(
|
||||
level: ServerLevel,
|
||||
pos: BlockPos,
|
||||
container: Container?,
|
||||
facing: Direction
|
||||
) {
|
||||
val remainderPos = Vec3.atCenterOf(pos).add(Vec3.atLowerCornerOf(facing.normal).scale(0.6))
|
||||
val iterator = pendingRemainders.iterator()
|
||||
while (iterator.hasNext()) {
|
||||
val pending = iterator.next()
|
||||
var remaining = pending.copy()
|
||||
if (container != null) {
|
||||
remaining = HopperBlockEntity.addItem(this, container, remaining, facing.opposite)
|
||||
}
|
||||
if (remaining.isEmpty) {
|
||||
iterator.remove()
|
||||
continue
|
||||
}
|
||||
|
||||
val itemEntity = ItemEntity(level, remainderPos.x, remainderPos.y, remainderPos.z, remaining.copy())
|
||||
itemEntity.deltaMovement = Vec3.atLowerCornerOf(facing.normal).scale(0.2)
|
||||
if (level.addFreshEntity(itemEntity)) {
|
||||
iterator.remove()
|
||||
} else {
|
||||
pending.shrink(pending.count - remaining.count)
|
||||
}
|
||||
}
|
||||
|
||||
container?.setChanged()
|
||||
setChanged()
|
||||
}
|
||||
|
||||
fun getSeasonings(): List<ItemStack> =
|
||||
items.subList(1, ITEMS_SIZE)
|
||||
.filter { !it.isEmpty && Seasonings.isSeasoning(it) }
|
||||
|
||||
fun getIngredients(): List<ItemStack> =
|
||||
items.subList(CRAFTING_GRID_SLOTS.first, CRAFTING_GRID_SLOTS.last + 1)
|
||||
.filter { it != null && !it.isEmpty }
|
||||
|
||||
override fun canPlaceItem(slot: Int, stack: ItemStack): Boolean {
|
||||
return if (
|
||||
slot !in CRAFTING_GRID_SLOTS && slot !in SEASONING_SLOTS ||
|
||||
isSlotDisabled(slot)
|
||||
) {
|
||||
false
|
||||
} else {
|
||||
val itemStack = this.items[slot]
|
||||
val i = itemStack.count
|
||||
i < itemStack.maxStackSize && (itemStack.isEmpty || !this.smallerStackExist(i, itemStack, slot))
|
||||
}
|
||||
}
|
||||
|
||||
private fun smallerStackExist(currentSize: Int, stack: ItemStack, slot: Int): Boolean {
|
||||
val lastSlot = if (slot in CRAFTING_GRID_SLOTS) CRAFTING_GRID_SLOTS.last else SEASONING_SLOTS.last
|
||||
for (i in slot + 1..lastSlot) {
|
||||
if (!this.isSlotDisabled(i)) {
|
||||
val itemStack = this.getItem(i)
|
||||
if (itemStack.isEmpty || itemStack.count < currentSize && ItemStack.isSameItemSameComponents(
|
||||
itemStack,
|
||||
stack
|
||||
)
|
||||
) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
}
|
||||
+74
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* 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.block.appliances.oven
|
||||
|
||||
import net.minecraft.core.NonNullList
|
||||
import net.minecraft.world.ContainerHelper
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.entity.player.StackedContents
|
||||
import net.minecraft.world.inventory.TransientCraftingContainer
|
||||
import net.minecraft.world.item.ItemStack
|
||||
|
||||
class CopperOvenContainer : TransientCraftingContainer {
|
||||
val menu : CopperOvenMenu?
|
||||
val items : NonNullList<ItemStack>
|
||||
|
||||
constructor(menu : CopperOvenMenu, width: Int, height: Int) : super(menu, width, height) {
|
||||
this.menu = menu
|
||||
this.items = NonNullList.withSize(CopperOvenBlockEntity.ITEMS_SIZE, ItemStack.EMPTY)
|
||||
}
|
||||
|
||||
override fun getContainerSize() = this.items.size
|
||||
override fun isEmpty(): Boolean {
|
||||
for (itemStack in this.items) {
|
||||
if (!itemStack.isEmpty) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override fun getItem(slot: Int) = if (slot >= this.containerSize) {
|
||||
ItemStack.EMPTY
|
||||
} else {
|
||||
this.items[slot]
|
||||
}
|
||||
|
||||
override fun setItem(slot: Int, stack: ItemStack) {
|
||||
this.items[slot] = stack
|
||||
this.menu?.slotsChanged(this)
|
||||
}
|
||||
|
||||
override fun removeItemNoUpdate(slot: Int) = ContainerHelper.takeItem(this.items, slot)
|
||||
override fun removeItem(slot: Int, amount: Int): ItemStack {
|
||||
val itemStack = ContainerHelper.removeItem(this.items, slot, amount)
|
||||
if (!itemStack.isEmpty) {
|
||||
this.menu?.slotsChanged(this)
|
||||
}
|
||||
return itemStack
|
||||
}
|
||||
|
||||
override fun setChanged() {}
|
||||
override fun stillValid(player: Player) = true
|
||||
|
||||
override fun clearContent() {
|
||||
for (index in 0 until this.items.size) {
|
||||
this.items[index] = ItemStack.EMPTY
|
||||
}
|
||||
}
|
||||
|
||||
override fun getHeight() = CopperOvenBlockEntity.CRAFTING_GRID_WIDTH
|
||||
override fun getWidth() = CopperOvenBlockEntity.CRAFTING_GRID_WIDTH
|
||||
override fun getItems() = this.items.toList()
|
||||
override fun fillStackedContents(contents: StackedContents) {
|
||||
for (itemStack in this.items) {
|
||||
contents.accountSimpleStack(itemStack)
|
||||
}
|
||||
}
|
||||
}
|
||||
+312
@@ -0,0 +1,312 @@
|
||||
/*
|
||||
* 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.block.appliances.oven
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonMenuType
|
||||
import com.cobblemon.mod.common.CobblemonRecipeBookTypes.COOKING_POT
|
||||
import com.cobblemon.mod.common.CobblemonRecipeTypes
|
||||
import com.cobblemon.mod.common.api.cooking.Seasonings
|
||||
import com.cobblemon.mod.common.item.crafting.CookingPotRecipe
|
||||
import com.cobblemon.mod.common.item.crafting.CookingPotRecipeBase
|
||||
import net.minecraft.recipebook.ServerPlaceRecipe
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.sounds.SoundEvents
|
||||
import net.minecraft.util.Mth
|
||||
import net.minecraft.world.entity.player.Inventory
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.entity.player.StackedContents
|
||||
import net.minecraft.world.inventory.*
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.crafting.CraftingInput
|
||||
import net.minecraft.world.item.crafting.RecipeHolder
|
||||
import net.minecraft.world.item.crafting.RecipeManager
|
||||
import net.minecraft.world.item.crafting.RecipeType
|
||||
import net.minecraft.world.level.Level
|
||||
import java.util.*
|
||||
|
||||
class CopperOvenMenu : RecipeBookMenu<CraftingInput, CookingPotRecipeBase>, ContainerListener {
|
||||
|
||||
private val player: Player
|
||||
private val level: Level
|
||||
private val playerInventory: Inventory
|
||||
val container: CraftingContainer
|
||||
val containerData: ContainerData
|
||||
private val recipeType: RecipeType<CookingPotRecipe> = CobblemonRecipeTypes.COOKING_POT_COOKING
|
||||
private val quickCheck = RecipeManager.createCheck(CobblemonRecipeTypes.COOKING_POT_COOKING)
|
||||
var currentActiveRecipe: RecipeHolder<CookingPotRecipeBase>? = null
|
||||
var previewItem = ItemStack.EMPTY
|
||||
|
||||
constructor(containerId: Int, playerInventory: Inventory) : super(CobblemonMenuType.COPPER_OVEN, containerId) {
|
||||
this.playerInventory = playerInventory
|
||||
this.container = CopperOvenContainer(this,
|
||||
CopperOvenBlockEntity.CRAFTING_GRID_WIDTH,
|
||||
CopperOvenBlockEntity.CRAFTING_GRID_WIDTH
|
||||
)
|
||||
this.containerData = SimpleContainerData(5)
|
||||
this.addDataSlots(containerData)
|
||||
this.player = playerInventory.player
|
||||
this.level = playerInventory.player.level()
|
||||
initializeSlots(playerInventory)
|
||||
this.addSlotListener(this)
|
||||
}
|
||||
|
||||
constructor(containerId: Int, playerInventory: Inventory, container: CraftingContainer, containerData: ContainerData) : super(
|
||||
CobblemonMenuType.COPPER_OVEN, containerId) {
|
||||
this.playerInventory = playerInventory
|
||||
this.container = container
|
||||
this.containerData = containerData
|
||||
this.addDataSlots(containerData)
|
||||
this.player = playerInventory.player
|
||||
this.level = playerInventory.player.level()
|
||||
container.startOpen(playerInventory.player)
|
||||
initializeSlots(playerInventory)
|
||||
this.addSlotListener(this)
|
||||
}
|
||||
|
||||
fun setSlotState(slot: Int, enabled: Boolean) {
|
||||
if (slot !in 1..12) return
|
||||
|
||||
val maskIndex = CopperOvenBlockEntity.DISABLED_SLOTS_INDEX
|
||||
val slotMask = 1 shl (slot - 1)
|
||||
val disabledSlots = containerData.get(maskIndex)
|
||||
containerData.set(maskIndex,
|
||||
if (enabled) disabledSlots and slotMask.inv() else disabledSlots or slotMask
|
||||
)
|
||||
this.broadcastChanges()
|
||||
}
|
||||
|
||||
fun isSlotDisabled(slot: Int): Boolean {
|
||||
if (slot !in 1..12) return false
|
||||
val mask = containerData.get(CopperOvenBlockEntity.DISABLED_SLOTS_INDEX)
|
||||
return mask and (1 shl (slot - 1)) != 0
|
||||
}
|
||||
|
||||
override fun clicked(slotId: Int, button: Int, clickType: ClickType, player: Player) {
|
||||
val slot = slots.getOrNull(slotId)
|
||||
if (slot !is OvenInputSlot
|
||||
|| clickType != ClickType.PICKUP
|
||||
|| player.isSpectator
|
||||
|| slot.hasItem()) {
|
||||
super.clicked(slotId, button, clickType, player)
|
||||
return
|
||||
}
|
||||
|
||||
if (carried.isEmpty) {
|
||||
if (isSlotDisabled(slot.index)) {
|
||||
setSlotState(slot.index, true)
|
||||
player.playSound(SoundEvents.UI_BUTTON_CLICK.value())
|
||||
} else {
|
||||
setSlotState(slot.index, false)
|
||||
player.playSound(SoundEvents.UI_BUTTON_CLICK.value(), 1.0f, 0.75f)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if (isSlotDisabled(slot.index)) {
|
||||
setSlotState(slot.index, true)
|
||||
player.playSound(SoundEvents.UI_BUTTON_CLICK.value())
|
||||
}
|
||||
super.clicked(slotId, button, clickType, player)
|
||||
}
|
||||
|
||||
private fun initializeSlots(playerInventory: Inventory) {
|
||||
for ((index, slotIndex) in CopperOvenBlockEntity.CRAFTING_GRID_SLOTS.withIndex()) {
|
||||
val i = index / CopperOvenBlockEntity.CRAFTING_GRID_WIDTH
|
||||
val j = index % CopperOvenBlockEntity.CRAFTING_GRID_WIDTH
|
||||
addSlot(OvenIngredientSlot(this.container, slotIndex, 33 + j * 18, 18 + i * 18, this))
|
||||
}
|
||||
|
||||
for ((index, slotIndex) in CopperOvenBlockEntity.SEASONING_SLOTS.withIndex()) {
|
||||
addSlot(OvenSeasoningSlot(this, this.container, slotIndex, 110 + index * 18, 18))
|
||||
}
|
||||
|
||||
for ((index, _) in CopperOvenBlockEntity.PLAYER_INVENTORY_SLOTS.withIndex()) {
|
||||
val i = index / CopperOvenBlockEntity.PLAYER_INVENTORY_WIDTH
|
||||
val j = index % CopperOvenBlockEntity.PLAYER_INVENTORY_WIDTH
|
||||
addSlot(Slot(playerInventory, index + 9, 8 + j * 18, 84 + i * 18))
|
||||
}
|
||||
|
||||
for ((index, _) in CopperOvenBlockEntity.PLAYER_HOTBAR_SLOTS.withIndex()) {
|
||||
addSlot(Slot(playerInventory, index, 8 + index * 18, 142))
|
||||
}
|
||||
}
|
||||
|
||||
override fun fillCraftSlotsStackedContents(itemHelper: StackedContents) {
|
||||
this.container.fillStackedContents(itemHelper)
|
||||
}
|
||||
|
||||
override fun clearCraftingContent() {
|
||||
container.clearContent()
|
||||
}
|
||||
|
||||
override fun recipeMatches(recipe: RecipeHolder<CookingPotRecipeBase>): Boolean {
|
||||
val craftInput = CraftingInput.of(3,3, container.items.subList(1,10))
|
||||
val recipeValue = recipe.value()
|
||||
return if (recipeValue is CookingPotRecipeBase) {
|
||||
recipeValue.matches(craftInput, level)
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
private fun recalculateRecipe() {
|
||||
val craftInput = CraftingInput.of(3,3, container.items.subList(1,10))
|
||||
fun <T : CookingPotRecipeBase> fetchRecipe(
|
||||
recipeType: RecipeType<T>
|
||||
): Optional<RecipeHolder<CookingPotRecipeBase>> {
|
||||
val optional = level.recipeManager.getRecipeFor(recipeType, craftInput, level)
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return optional.map { it as RecipeHolder<CookingPotRecipeBase> }
|
||||
}
|
||||
|
||||
val recipe = fetchRecipe(CobblemonRecipeTypes.COOKING_POT_COOKING)
|
||||
.orElseGet { fetchRecipe(CobblemonRecipeTypes.COOKING_POT_SHAPELESS).orElse(null) }
|
||||
|
||||
currentActiveRecipe = recipe
|
||||
if (recipe != null) {
|
||||
previewItem = recipe.value.assemble(craftInput, level.registryAccess())
|
||||
// Apply seasoning to the preview item
|
||||
recipe.value.applySeasoning(
|
||||
previewItem,
|
||||
container.items.subList(CopperOvenBlockEntity.SEASONING_SLOTS.first,
|
||||
CopperOvenBlockEntity.SEASONING_SLOTS.last + 1)
|
||||
.filterNotNull()
|
||||
.filter { !it.isEmpty && it.`is`(recipe.value.seasoningTag) })
|
||||
|
||||
} else previewItem = ItemStack.EMPTY
|
||||
}
|
||||
|
||||
override fun getResultSlotIndex(): Int {
|
||||
return -1
|
||||
}
|
||||
|
||||
override fun getGridWidth(): Int {
|
||||
return CopperOvenBlockEntity.CRAFTING_GRID_WIDTH
|
||||
}
|
||||
|
||||
override fun getGridHeight(): Int {
|
||||
return CopperOvenBlockEntity.CRAFTING_GRID_WIDTH
|
||||
}
|
||||
|
||||
override fun getSize(): Int {
|
||||
return CopperOvenBlockEntity.CRAFTING_GRID_SLOTS.count() +
|
||||
CopperOvenBlockEntity.SEASONING_SLOTS.count()
|
||||
}
|
||||
|
||||
override fun getRecipeBookType(): RecipeBookType {
|
||||
return COOKING_POT
|
||||
}
|
||||
|
||||
override fun shouldMoveToInventory(slotIndex: Int): Boolean {
|
||||
val containerSlot = slotIndex + CopperOvenBlockEntity.CRAFTING_GRID_SLOTS.first
|
||||
return containerSlot !in CopperOvenBlockEntity.SEASONING_SLOTS
|
||||
}
|
||||
|
||||
override fun quickMoveStack(
|
||||
player: Player,
|
||||
index: Int
|
||||
): ItemStack {
|
||||
var itemStack = ItemStack.EMPTY
|
||||
val slot = slots.getOrNull(index) ?: return ItemStack.EMPTY
|
||||
|
||||
if (slot.hasItem()) {
|
||||
val slotItemStack = slot.item
|
||||
itemStack = slotItemStack.copy()
|
||||
|
||||
val gridStart = 0
|
||||
val gridEnd = gridStart + CopperOvenBlockEntity.CRAFTING_GRID_SLOTS.count()
|
||||
val seasoningEnd = gridEnd + CopperOvenBlockEntity.SEASONING_SLOTS.count()
|
||||
val playerInventoryStart = seasoningEnd
|
||||
if (index >= playerInventoryStart) {
|
||||
if (Seasonings.isSeasoning(slotItemStack)) {
|
||||
if (!this.moveItemStackTo(slotItemStack, gridStart, gridEnd, false) &&
|
||||
!this.moveItemStackTo(slotItemStack, gridEnd, seasoningEnd, false)
|
||||
) {
|
||||
return ItemStack.EMPTY
|
||||
}
|
||||
} else if (!this.moveItemStackTo(slotItemStack, gridStart, gridEnd, false)) {
|
||||
return ItemStack.EMPTY
|
||||
}
|
||||
} else if (index in gridStart until seasoningEnd &&
|
||||
!this.moveItemStackTo(slotItemStack, playerInventoryStart, slots.size, false)
|
||||
) {
|
||||
return ItemStack.EMPTY
|
||||
}
|
||||
|
||||
if (slotItemStack.isEmpty) {
|
||||
slot.setByPlayer(ItemStack.EMPTY)
|
||||
} else {
|
||||
slot.setChanged()
|
||||
}
|
||||
|
||||
if (slotItemStack.count == itemStack.count) {
|
||||
return ItemStack.EMPTY
|
||||
}
|
||||
|
||||
slot.onTake(player, slotItemStack)
|
||||
}
|
||||
|
||||
return itemStack
|
||||
}
|
||||
|
||||
override fun stillValid(player: Player): Boolean {
|
||||
return this.container.stillValid(player)
|
||||
}
|
||||
|
||||
override fun slotChanged(
|
||||
containerToSend: AbstractContainerMenu,
|
||||
dataSlotIndex: Int,
|
||||
stack: ItemStack
|
||||
) {
|
||||
if (CopperOvenBlockEntity.CRAFTING_GRID_SLOTS.contains(dataSlotIndex) || CopperOvenBlockEntity.SEASONING_SLOTS.contains(dataSlotIndex)) recalculateRecipe()
|
||||
broadcastChanges()
|
||||
}
|
||||
|
||||
override fun dataChanged(
|
||||
containerMenu: AbstractContainerMenu,
|
||||
dataSlotIndex: Int,
|
||||
value: Int
|
||||
) {
|
||||
}
|
||||
|
||||
override fun handlePlacement(placeAll: Boolean, recipe: RecipeHolder<*>, player: ServerPlayer) {
|
||||
val recipeValue = recipe.value()
|
||||
if (recipeValue is CookingPotRecipeBase) {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val castedRecipe = recipe as RecipeHolder<CookingPotRecipeBase>
|
||||
|
||||
// Save seasoning contents
|
||||
val seasoningSlots = CopperOvenBlockEntity.SEASONING_SLOTS
|
||||
val preservedSeasonings = seasoningSlots.map { container.getItem(it).copy() }
|
||||
|
||||
this.beginPlacingRecipe()
|
||||
try {
|
||||
val serverPlaceRecipe = ServerPlaceRecipe(this)
|
||||
serverPlaceRecipe.recipeClicked(player, castedRecipe, placeAll)
|
||||
} finally {
|
||||
this.finishPlacingRecipe(castedRecipe)
|
||||
}
|
||||
|
||||
seasoningSlots.forEachIndexed { index, slot ->
|
||||
container.setItem(slot, preservedSeasonings[index])
|
||||
}
|
||||
} else {
|
||||
throw IllegalArgumentException("Unsupported recipe type: ${recipeValue::class.java.name}")
|
||||
}
|
||||
}
|
||||
|
||||
fun getBurnProgress(): Float {
|
||||
val i = this.containerData.get(0)
|
||||
val j = this.containerData.get(1)
|
||||
return if (j != 0 && i != 0) {
|
||||
Mth.clamp((i.toFloat() / j.toFloat()), 0.0F, 1.0F)
|
||||
} else {
|
||||
0.0F;
|
||||
}
|
||||
}
|
||||
}
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* 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.block.appliances.oven
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonItemComponents
|
||||
import com.cobblemon.mod.common.CobblemonSounds
|
||||
import net.minecraft.sounds.SoundSource
|
||||
import net.minecraft.world.Container
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.inventory.CraftingContainer
|
||||
import net.minecraft.world.inventory.Slot
|
||||
import net.minecraft.world.item.ItemStack
|
||||
|
||||
abstract class OvenInputSlot(
|
||||
container: Container, slot: Int, x: Int, y: Int, val menu: CopperOvenMenu
|
||||
) : Slot(container, slot, x, y) {
|
||||
override fun setChanged() {
|
||||
super.setChanged()
|
||||
this.menu.slotsChanged(this.container)
|
||||
}
|
||||
}
|
||||
|
||||
class OvenSeasoningSlot(menu: CopperOvenMenu, container: Container, slot: Int, x: Int, y: Int) : OvenInputSlot(container, slot, x, y, menu) {
|
||||
override fun mayPlace(stack: ItemStack): Boolean {
|
||||
val recipe = menu.currentActiveRecipe?.value() ?: return false
|
||||
return stack.`is`(recipe.seasoningTag) && super.mayPlace(stack)
|
||||
}
|
||||
}
|
||||
|
||||
class OvenIngredientSlot(container: Container, slot: Int, x: Int, y: Int, menu: CopperOvenMenu) : OvenInputSlot(container, slot, x, y, menu) {
|
||||
override fun mayPlace(stack: ItemStack): Boolean {
|
||||
return !this.menu.isSlotDisabled(this.index) && super.mayPlace(stack)
|
||||
}
|
||||
}
|
||||
|
||||
class OvenResultSlot(
|
||||
container: CraftingContainer,
|
||||
index: Int,
|
||||
x: Int,
|
||||
y: Int
|
||||
) : Slot(container, index, x, y) {
|
||||
|
||||
override fun onTake(player: Player, stack: ItemStack) {
|
||||
if (stack.has(CobblemonItemComponents.FLAVOUR)) {
|
||||
stack.set(CobblemonItemComponents.CRAFTED, true)
|
||||
}
|
||||
|
||||
val menu = player.containerMenu
|
||||
if (menu is CopperOvenMenu) {
|
||||
menu.broadcastChanges()
|
||||
player.playNotifySound(CobblemonSounds.CAMPFIRE_POT_TAKE_ITEM, SoundSource.MASTER, 1.0f, 1.0f)
|
||||
}
|
||||
|
||||
super.onTake(player, stack)
|
||||
}
|
||||
override fun mayPlace(stack: ItemStack): Boolean = false
|
||||
}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* 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.block.appliances.oven
|
||||
|
||||
import com.cobblemon.mod.common.block.appliances.WeatheringCopperAppliance
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.world.level.block.state.properties.Property
|
||||
import net.minecraft.world.level.block.WeatheringCopper
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
|
||||
class WeatheringCopperOvenBlock(override val weatherState: WeatheringCopper.WeatherState, properties: Properties) :
|
||||
CopperOvenBlock(properties), WeatheringCopperAppliance {
|
||||
|
||||
override fun randomTick(state: BlockState, level: ServerLevel, pos: BlockPos, random: RandomSource) {
|
||||
this.changeOverTime(state, level, pos, random)
|
||||
}
|
||||
|
||||
override fun isRandomlyTicking(state: BlockState): Boolean {
|
||||
return WeatheringCopper.getNext(state.block).isPresent
|
||||
}
|
||||
|
||||
override fun getAge(): WeatheringCopper.WeatherState {
|
||||
return this.weatherState
|
||||
}
|
||||
}
|
||||
+142
@@ -0,0 +1,142 @@
|
||||
/*
|
||||
* 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.block.appliances.washer
|
||||
|
||||
import com.cobblemon.mod.common.block.appliances.WeatheringCopperAppliance
|
||||
import com.cobblemon.mod.common.util.isServerSide
|
||||
import com.cobblemon.mod.common.util.rotateShape
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.sounds.SoundEvents
|
||||
import net.minecraft.sounds.SoundSource
|
||||
import net.minecraft.world.InteractionHand
|
||||
import net.minecraft.world.ItemInteractionResult
|
||||
import net.minecraft.world.entity.item.ItemEntity
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.context.BlockPlaceContext
|
||||
import net.minecraft.world.level.BlockGetter
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.LevelAccessor
|
||||
import net.minecraft.world.level.block.*
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.level.block.state.StateDefinition
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.HORIZONTAL_FACING
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties.WATERLOGGED
|
||||
import net.minecraft.world.level.block.state.properties.BooleanProperty
|
||||
import net.minecraft.world.level.material.FluidState
|
||||
import net.minecraft.world.level.material.Fluids
|
||||
import net.minecraft.world.phys.BlockHitResult
|
||||
import net.minecraft.world.phys.Vec3
|
||||
import net.minecraft.world.phys.shapes.CollisionContext
|
||||
import net.minecraft.world.phys.shapes.Shapes
|
||||
import net.minecraft.world.phys.shapes.VoxelShape
|
||||
|
||||
open class CopperWasherBlock(settings: Properties) : BaseEntityBlock(settings), SimpleWaterloggedBlock {
|
||||
|
||||
companion object {
|
||||
val CODEC: MapCodec<CopperWasherBlock> = RecordCodecBuilder.mapCodec {
|
||||
it.group(propertiesCodec()).apply(it, ::CopperWasherBlock) }
|
||||
val POWERED = BooleanProperty.create("powered")
|
||||
|
||||
val HITBOX = Shapes.box(0.0625, 0.0, 0.125, 0.9375, 1.0, 1.0)
|
||||
}
|
||||
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
.setValue(HORIZONTAL_FACING, Direction.NORTH)
|
||||
.setValue(WATERLOGGED, false)
|
||||
.setValue(POWERED, false)
|
||||
)
|
||||
}
|
||||
|
||||
override fun codec(): MapCodec<CopperWasherBlock> = CODEC
|
||||
|
||||
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
|
||||
builder.add(HORIZONTAL_FACING, WATERLOGGED, POWERED)
|
||||
}
|
||||
|
||||
override fun getFluidState(blockState: BlockState): FluidState? = if (blockState.getValue(WATERLOGGED)) Fluids.WATER.getSource(false) else super.getFluidState(blockState)
|
||||
|
||||
override fun updateShape(state: BlockState, direction: Direction, neighborState: BlockState, world: LevelAccessor, pos: BlockPos, neighborPos: BlockPos): BlockState {
|
||||
if (state.getValue(WATERLOGGED)) {
|
||||
world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world))
|
||||
}
|
||||
return if (state.getValue(HORIZONTAL_FACING).opposite == direction && !state.canSurvive(world, pos)) Blocks.AIR.defaultBlockState()
|
||||
else super.updateShape(state, direction, neighborState, world, pos, neighborPos)
|
||||
}
|
||||
|
||||
override fun getCollisionShape(state: BlockState, level: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape {
|
||||
val direction = state.getValue(HORIZONTAL_FACING)
|
||||
return rotateShape(Direction.NORTH, direction, HITBOX)
|
||||
}
|
||||
|
||||
override fun getShape(state: BlockState, level: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape {
|
||||
return getCollisionShape(state, level, pos, context).singleEncompassing()
|
||||
}
|
||||
|
||||
override fun getStateForPlacement(context: BlockPlaceContext): BlockState? {
|
||||
val fluidState = context.level.getFluidState(context.clickedPos)
|
||||
return super.getStateForPlacement(context)?.setValue(HORIZONTAL_FACING, context.horizontalDirection.opposite)?.setValue(WATERLOGGED, fluidState.type === Fluids.WATER)
|
||||
}
|
||||
|
||||
override fun newBlockEntity(pos: BlockPos, state: BlockState) = CopperWasherBlockEntity(pos, state)
|
||||
|
||||
override fun getRenderShape(state: BlockState) = RenderShape.MODEL
|
||||
|
||||
override fun hasAnalogOutputSignal(state: BlockState) = true
|
||||
|
||||
override fun getAnalogOutputSignal(state: BlockState, level: Level, pos: BlockPos): Int {
|
||||
return if ((level.getBlockEntity(pos) as CopperWasherBlockEntity).theItem != ItemStack.EMPTY) 1 else 0
|
||||
}
|
||||
|
||||
override fun useItemOn(
|
||||
stack: ItemStack,
|
||||
state: BlockState,
|
||||
level: Level,
|
||||
pos: BlockPos,
|
||||
player: Player,
|
||||
hand: InteractionHand,
|
||||
hitResult: BlockHitResult
|
||||
): ItemInteractionResult {
|
||||
val entity = level.getBlockEntity(pos) as CopperWasherBlockEntity
|
||||
val item = entity.theItem
|
||||
if (item == ItemStack.EMPTY) {
|
||||
if (level.isServerSide()) {
|
||||
entity.theItem = stack.copyWithCount(1)
|
||||
if (!player.isCreative) stack.shrink(1)
|
||||
entity.craft()
|
||||
}
|
||||
return ItemInteractionResult.SUCCESS
|
||||
} else {
|
||||
if (level.isServerSide()) {
|
||||
val facing = state.getValue(HORIZONTAL_FACING)
|
||||
val itemEntity =
|
||||
ItemEntity(level, pos.x + 0.5, pos.y + 0.5, pos.z + 0.5, entity.theItem)
|
||||
itemEntity.deltaMovement = Vec3(facing.stepX.toDouble(), 0.0, facing.stepZ.toDouble()).scale(0.2)
|
||||
level.addFreshEntity(itemEntity)
|
||||
entity.theItem = ItemStack.EMPTY
|
||||
level.playSound(null, pos, SoundEvents.ITEM_FRAME_REMOVE_ITEM, SoundSource.BLOCKS)
|
||||
}
|
||||
return ItemInteractionResult.SUCCESS
|
||||
}
|
||||
}
|
||||
|
||||
override fun onRemove(
|
||||
state: BlockState,
|
||||
level: Level,
|
||||
pos: BlockPos,
|
||||
newState: BlockState,
|
||||
movedByPiston: Boolean
|
||||
) {
|
||||
WeatheringCopperAppliance.handleOnRemove(state, level, pos, newState, movedByPiston)
|
||||
}
|
||||
}
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* 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.block.appliances.washer
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonBlockEntities
|
||||
import com.cobblemon.mod.common.CobblemonRecipeTypes
|
||||
import com.cobblemon.mod.common.CobblemonSounds
|
||||
import com.cobblemon.mod.common.item.crafting.washer.WasherInput
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.HolderLookup
|
||||
import net.minecraft.core.NonNullList
|
||||
import net.minecraft.nbt.CompoundTag
|
||||
import net.minecraft.sounds.SoundSource
|
||||
import net.minecraft.world.ContainerHelper
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.level.block.entity.BlockEntity
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraft.world.ticks.ContainerSingleItem
|
||||
|
||||
class CopperWasherBlockEntity(val pos: BlockPos, val state: BlockState): BlockEntity(
|
||||
CobblemonBlockEntities.COPPER_WASHER,
|
||||
pos, state
|
||||
), ContainerSingleItem.BlockContainerSingleItem {
|
||||
|
||||
private var item: ItemStack = ItemStack.EMPTY
|
||||
|
||||
override fun getContainerBlockEntity() = this
|
||||
override fun getTheItem() = item
|
||||
override fun setTheItem(item: ItemStack) {
|
||||
this.item = item
|
||||
level?.updateNeighborsAt(pos, state.block)
|
||||
setChanged()
|
||||
}
|
||||
|
||||
fun craft() {
|
||||
val level = level ?: return
|
||||
if (level.isClientSide || theItem.isEmpty) return
|
||||
|
||||
val input = WasherInput(theItem.copyWithCount(1))
|
||||
val recipe = level.recipeManager
|
||||
.getRecipeFor(CobblemonRecipeTypes.WASHER, input, level)
|
||||
.orElse(null) ?: return
|
||||
|
||||
theItem = recipe.value().assemble(input, level.registryAccess())
|
||||
setChanged()
|
||||
level.playSound(null, pos, CobblemonSounds.WASHER_WASH, SoundSource.BLOCKS)
|
||||
level.sendBlockUpdated(worldPosition, blockState, blockState, 3)
|
||||
}
|
||||
|
||||
override fun saveAdditional(tag: CompoundTag, registries: HolderLookup.Provider) {
|
||||
super.saveAdditional(tag, registries)
|
||||
if (!theItem.isEmpty) {
|
||||
tag.put("Item", theItem.save(registries))
|
||||
}
|
||||
}
|
||||
|
||||
override fun loadAdditional(tag: CompoundTag, registries: HolderLookup.Provider) {
|
||||
super.loadAdditional(tag, registries)
|
||||
theItem = if (tag.contains("Item")) {
|
||||
ItemStack.parse(registries, tag.get("Item")).orElse(ItemStack.EMPTY)
|
||||
} else {
|
||||
ItemStack.EMPTY
|
||||
}
|
||||
}
|
||||
}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* 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.block.appliances.washer
|
||||
|
||||
import com.cobblemon.mod.common.block.appliances.WeatheringCopperAppliance
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraft.world.level.block.WeatheringCopper
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
|
||||
class WeatheringCopperWasherBlock(override val weatherState: WeatheringCopper.WeatherState, properties: Properties) :
|
||||
CopperWasherBlock(properties), WeatheringCopperAppliance {
|
||||
|
||||
override fun randomTick(state: BlockState, level: ServerLevel, pos: BlockPos, random: RandomSource) {
|
||||
this.changeOverTime(state, level, pos, random)
|
||||
}
|
||||
|
||||
override fun isRandomlyTicking(state: BlockState): Boolean {
|
||||
return WeatheringCopper.getNext(state.block).isPresent
|
||||
}
|
||||
|
||||
override fun getAge(): WeatheringCopper.WeatherState {
|
||||
return this.weatherState
|
||||
}
|
||||
}
|
||||
@@ -11,9 +11,11 @@ package com.cobblemon.mod.common.block.chest
|
||||
import com.cobblemon.mod.common.CobblemonSounds
|
||||
import com.cobblemon.mod.common.api.pokemon.PokemonProperties
|
||||
import com.cobblemon.mod.common.api.scheduling.afterOnServer
|
||||
import com.cobblemon.mod.common.block.PokemonDisguiseBlock
|
||||
import com.cobblemon.mod.common.block.entity.GildedChestBlockEntity
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import com.cobblemon.mod.common.util.math.FloatRange
|
||||
import com.cobblemon.mod.common.util.party
|
||||
import com.cobblemon.mod.common.util.toVec3d
|
||||
import com.mojang.serialization.MapCodec
|
||||
@@ -25,6 +27,7 @@ import net.minecraft.network.chat.MutableComponent
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.sounds.SoundEvent
|
||||
import net.minecraft.sounds.SoundSource
|
||||
import net.minecraft.util.RandomSource
|
||||
import net.minecraft.util.StringRepresentable
|
||||
@@ -54,7 +57,7 @@ import net.minecraft.world.phys.shapes.VoxelShape
|
||||
|
||||
@Suppress("OVERRIDE_DEPRECATION")
|
||||
class GildedChestBlock(settings: Properties, val type: Type = Type.RED) : BaseEntityBlock(settings),
|
||||
SimpleWaterloggedBlock {
|
||||
SimpleWaterloggedBlock, PokemonDisguiseBlock {
|
||||
|
||||
init {
|
||||
registerDefaultState(stateDefinition.any()
|
||||
@@ -70,9 +73,6 @@ class GildedChestBlock(settings: Properties, val type: Type = Type.RED) : BaseEn
|
||||
).apply(it, ::GildedChestBlock)
|
||||
}
|
||||
|
||||
val POKEMON_ARGS = "gimmighoul"
|
||||
val LEVEL_RANGE = 5..30
|
||||
|
||||
val SOUTH_OUTLINE = Shapes.or(
|
||||
Shapes.box(0.0, 0.0, 0.25, 1.0, 1.0, 0.9375)
|
||||
)
|
||||
@@ -127,13 +127,6 @@ class GildedChestBlock(settings: Properties, val type: Type = Type.RED) : BaseEn
|
||||
builder.add(WATERLOGGED)
|
||||
}
|
||||
|
||||
private val facingToYaw: HashMap<Direction, Float> = hashMapOf(
|
||||
Direction.NORTH to -179.0F,
|
||||
Direction.WEST to 90.0F,
|
||||
Direction.SOUTH to 0.0F,
|
||||
Direction.EAST to -90.0F
|
||||
)
|
||||
|
||||
override fun getName(): MutableComponent {
|
||||
return if (isFake()) Component.translatable("block.cobblemon.gilded_chest") else super.getName()
|
||||
}
|
||||
@@ -149,35 +142,6 @@ class GildedChestBlock(settings: Properties, val type: Type = Type.RED) : BaseEn
|
||||
return super.playerWillDestroy(world, pos, state, player)
|
||||
}
|
||||
|
||||
private fun spawnPokemon(world: Level, pos: BlockPos, state: BlockState, player: ServerPlayer): InteractionResult {
|
||||
val properties = "$POKEMON_ARGS lvl=${LEVEL_RANGE.random()}"
|
||||
val pokemon = PokemonProperties.parse(properties)
|
||||
val entity = pokemon.createEntity(world)
|
||||
|
||||
// The yaw based on the block's facing direction
|
||||
val yaw = facingToYaw[state.getValue(HorizontalDirectionalBlock.FACING)] ?: 0.0F
|
||||
|
||||
entity.entityData.set(PokemonEntity.SPAWN_DIRECTION, yaw)
|
||||
val offsetDir = state.getValue(HorizontalDirectionalBlock.FACING)
|
||||
val vec = pos.toVec3d().add(offsetDir.stepX * 0.1 + 0.5, 0.0, offsetDir.stepZ * 0.1 + 0.5)
|
||||
entity.moveTo(vec.x, vec.y, vec.z, yaw, entity.xRot)
|
||||
world.addFreshEntity(entity)
|
||||
|
||||
world.removeBlock(pos, false)
|
||||
afterOnServer(seconds = 0.1F) {
|
||||
if (player !in player.level().players()) {
|
||||
return@afterOnServer
|
||||
}
|
||||
val party = player.party()
|
||||
if (!player.isCreative) {
|
||||
entity.forceBattle(player)
|
||||
} else {
|
||||
world.playSound(null, pos, CobblemonSounds.GIMMIGHOUL_REVEAL, SoundSource.NEUTRAL)
|
||||
}
|
||||
}
|
||||
return InteractionResult.SUCCESS
|
||||
}
|
||||
|
||||
override fun useWithoutItem(
|
||||
state: BlockState,
|
||||
world: Level,
|
||||
@@ -290,4 +254,10 @@ class GildedChestBlock(settings: Properties, val type: Type = Type.RED) : BaseEn
|
||||
blockEntity.tick()
|
||||
}
|
||||
|
||||
override val levelRange = 5..30
|
||||
override val pokemonArgs = "gimmighoul"
|
||||
override val spawnSound = CobblemonSounds.GIMMIGHOUL_REVEAL
|
||||
override val scaleRange = FloatRange(1f, 1f)
|
||||
override fun getPokemonFacing(state: BlockState): Direction = state.getValue(HORIZONTAL_FACING)
|
||||
override val shinyRate = null
|
||||
}
|
||||
+28
@@ -11,8 +11,11 @@ package com.cobblemon.mod.common.block.dispenser
|
||||
import com.cobblemon.mod.common.block.SaccharineLeafBlock
|
||||
import com.cobblemon.mod.common.block.SaccharineLogBlock
|
||||
import com.cobblemon.mod.common.block.SaccharineLogSlatheredBlock
|
||||
import com.cobblemon.mod.common.block.appliances.fridge.CopperFridgeBlock
|
||||
import com.cobblemon.mod.common.mixin.accessor.DispenserBlockAccessor
|
||||
import net.minecraft.core.dispenser.DispenseItemBehavior
|
||||
import net.minecraft.sounds.SoundEvents
|
||||
import net.minecraft.sounds.SoundSource
|
||||
import net.minecraft.world.item.Item
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraft.world.item.alchemy.PotionContents
|
||||
@@ -86,5 +89,30 @@ object DispenserBehaviorRegistry {
|
||||
).item
|
||||
)
|
||||
)
|
||||
register(
|
||||
{ dispenseWaterBucketIntoFridge() },
|
||||
items = listOf(Items.WATER_BUCKET)
|
||||
)
|
||||
}
|
||||
|
||||
private fun dispenseWaterBucketIntoFridge(): DispenseItemBehavior =
|
||||
DispenseItemBehavior { source, stack ->
|
||||
val level = source.level
|
||||
val pos = source.pos.relative(source.state.getValue(DispenserBlock.FACING))
|
||||
val fridge = level.getBlockState(pos).block as? CopperFridgeBlock
|
||||
|
||||
if (fridge == null) {
|
||||
stack
|
||||
} else {
|
||||
val fridgeEntity = fridge.getBlockEntity(level, pos)
|
||||
if (!fridgeEntity.theItem.isEmpty) {
|
||||
stack
|
||||
} else {
|
||||
fridgeEntity.theItem = Items.WATER_BUCKET.defaultInstance
|
||||
fridgeEntity.timer = 100
|
||||
level.playSound(null, pos, SoundEvents.BUCKET_EMPTY, SoundSource.BLOCKS, 1.0f, 1.0f)
|
||||
Items.BUCKET.defaultInstance
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+33
-4
@@ -41,6 +41,7 @@ import net.minecraft.world.Containers
|
||||
import net.minecraft.world.InteractionResult
|
||||
import net.minecraft.world.ItemInteractionResult
|
||||
import net.minecraft.world.InteractionHand
|
||||
import net.minecraft.world.entity.LightningBolt
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
import net.minecraft.world.entity.Pose
|
||||
import net.minecraft.world.entity.item.ItemEntity
|
||||
@@ -617,11 +618,14 @@ open class FossilMultiblockEntity(
|
||||
}
|
||||
|
||||
companion object {
|
||||
val TICKER = BlockEntityTicker<FossilMultiblockEntity> {level, _, _, blockEntity ->
|
||||
if (blockEntity.multiblockStructure != null) return@BlockEntityTicker
|
||||
if(blockEntity.porygonProcess == PorygonProcessType.INACTIVE) return@BlockEntityTicker
|
||||
val TICKER = BlockEntityTicker<FossilMultiblockEntity> { level, _, _, blockEntity ->
|
||||
val serverLevel = level as? ServerLevel ?: return@BlockEntityTicker
|
||||
|
||||
blockEntity.tickPorygon(level)
|
||||
if (blockEntity.checkLightning(serverLevel)) return@BlockEntityTicker
|
||||
if (blockEntity.multiblockStructure != null) return@BlockEntityTicker
|
||||
if (blockEntity.porygonProcess == PorygonProcessType.INACTIVE) return@BlockEntityTicker
|
||||
|
||||
blockEntity.tickPorygon(serverLevel)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -697,4 +701,29 @@ open class FossilMultiblockEntity(
|
||||
//Fallback: If no safe location is found, just spawn it directly in front of the monitor
|
||||
return origin.relative(facing)
|
||||
}
|
||||
|
||||
private var lastLightningBolt: UUID? = null
|
||||
|
||||
fun checkLightning(level: ServerLevel): Boolean {
|
||||
val bolt = level.getEntitiesOfClass(
|
||||
LightningBolt::class.java,
|
||||
AABB.ofSize(blockPos.center, 1.0, 4.0, 1.0)
|
||||
).firstOrNull {
|
||||
(it.blockPosition() == blockPos || it.blockPosition().below() == blockPos) &&
|
||||
it.uuid != lastLightningBolt
|
||||
} ?: return false
|
||||
|
||||
lastLightningBolt = bolt.uuid
|
||||
|
||||
level.setBlockAndUpdate(
|
||||
blockPos,
|
||||
CobblemonBlocks.ROTOM_MONITOR.defaultBlockState()
|
||||
.setValue(
|
||||
HorizontalDirectionalBlock.FACING,
|
||||
level.getBlockState(blockPos).getValue(HorizontalDirectionalBlock.FACING)
|
||||
)
|
||||
)
|
||||
return true
|
||||
}
|
||||
|
||||
}
|
||||
@@ -29,6 +29,7 @@ import com.cobblemon.mod.common.client.gui.PartyOverlayDataControl
|
||||
import com.cobblemon.mod.common.client.gui.RideControlsOverlay
|
||||
import com.cobblemon.mod.common.client.gui.battle.BattleOverlay
|
||||
import com.cobblemon.mod.common.client.gui.cookingpot.CookingPotScreen
|
||||
import com.cobblemon.mod.common.client.gui.cookingpot.CopperOvenScreen
|
||||
import com.cobblemon.mod.common.client.gui.party.PartyTutorialToasts
|
||||
import com.cobblemon.mod.common.client.gui.tmmachine.TMMachineScreen
|
||||
import com.cobblemon.mod.common.client.particle.BedrockParticleOptionsRepository
|
||||
@@ -391,7 +392,7 @@ object CobblemonClient {
|
||||
CobblemonBlocks.X_SP_ATK,
|
||||
CobblemonBlocks.X_SP_DEF,
|
||||
CobblemonBlocks.X_SPEED,
|
||||
CobblemonBlocks.TM_MACHINE,
|
||||
CobblemonBlocks.TM_MACHINE,
|
||||
|
||||
CobblemonBlocks.GALARICA_CUFF,
|
||||
CobblemonBlocks.GALARICA_WREATH,
|
||||
@@ -419,7 +420,7 @@ object CobblemonClient {
|
||||
CobblemonBlocks.MOOMOO_MILK,
|
||||
CobblemonBlocks.MEDICINAL_BREW,
|
||||
CobblemonBlocks.TERRAIN_EXTENDER,
|
||||
|
||||
|
||||
CobblemonBlocks.RED_MINT_LEAF_LITTER,
|
||||
CobblemonBlocks.POTTED_RED_MINT,
|
||||
CobblemonBlocks.BLUE_MINT_LEAF_LITTER,
|
||||
@@ -516,7 +517,17 @@ object CobblemonClient {
|
||||
CobblemonBlocks.POTTED_WATMEL_BERRY,
|
||||
CobblemonBlocks.POTTED_WEPEAR_BERRY,
|
||||
CobblemonBlocks.POTTED_WIKI_BERRY,
|
||||
CobblemonBlocks.POTTED_YACHE_BERRY
|
||||
CobblemonBlocks.POTTED_YACHE_BERRY,
|
||||
CobblemonBlocks.SCOPE_LENS,
|
||||
|
||||
CobblemonBlocks.COPPER_FAN,
|
||||
CobblemonBlocks.EXPOSED_COPPER_FAN,
|
||||
CobblemonBlocks.WEATHERED_COPPER_FAN,
|
||||
CobblemonBlocks.OXIDIZED_COPPER_FAN,
|
||||
CobblemonBlocks.WAXED_COPPER_FAN,
|
||||
CobblemonBlocks.WAXED_EXPOSED_COPPER_FAN,
|
||||
CobblemonBlocks.WAXED_WEATHERED_COPPER_FAN,
|
||||
CobblemonBlocks.WAXED_OXIDIZED_COPPER_FAN
|
||||
)
|
||||
|
||||
this.createBoatModelLayers()
|
||||
@@ -547,6 +558,7 @@ object CobblemonClient {
|
||||
private fun registerMenuScreens() {
|
||||
MenuScreens.register(CobblemonMenuType.COOKING_POT, ::CookingPotScreen)
|
||||
MenuScreens.register(CobblemonMenuType.TM_MACHINE, ::TMMachineScreen)
|
||||
MenuScreens.register(CobblemonMenuType.COPPER_OVEN, ::CopperOvenScreen)
|
||||
}
|
||||
|
||||
private fun registerBlockEntityRenderers() {
|
||||
|
||||
+171
@@ -0,0 +1,171 @@
|
||||
/*
|
||||
* 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.client.gui.cookingpot
|
||||
|
||||
import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.api.gui.blitk
|
||||
import com.cobblemon.mod.common.block.appliances.oven.CopperOvenMenu
|
||||
import com.cobblemon.mod.common.block.appliances.oven.OvenSeasoningSlot
|
||||
import com.cobblemon.mod.common.block.appliances.oven.OvenIngredientSlot
|
||||
import com.cobblemon.mod.common.block.appliances.oven.OvenInputSlot
|
||||
import com.cobblemon.mod.common.integration.jei.CobblemonJeiPlugin
|
||||
import com.cobblemon.mod.common.integration.jei.cooking.CampfirePotRecipeCategory
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import com.cobblemon.mod.common.util.lang
|
||||
import net.fabricmc.api.EnvType
|
||||
import net.fabricmc.api.Environment
|
||||
import net.minecraft.client.gui.GuiGraphics
|
||||
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen
|
||||
import net.minecraft.network.chat.Component
|
||||
import net.minecraft.references.Items
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.world.entity.player.Inventory
|
||||
import net.minecraft.world.inventory.Slot
|
||||
import kotlin.math.ceil
|
||||
|
||||
@Environment(EnvType.CLIENT)
|
||||
class CopperOvenScreen(
|
||||
menu: CopperOvenMenu,
|
||||
val playerInventory: Inventory,
|
||||
title: Component
|
||||
) : AbstractContainerScreen<CopperOvenMenu>(
|
||||
menu, playerInventory, lang("container.copper_oven")
|
||||
) {
|
||||
|
||||
companion object {
|
||||
private const val BACKGROUND_HEIGHT = 166
|
||||
private const val BACKGROUND_WIDTH = 176
|
||||
|
||||
const val COOK_PROGRESS_HEIGHT = 11
|
||||
const val COOK_PROGRESS_WIDTH = 23
|
||||
|
||||
private val BACKGROUND = cobblemonResource("textures/gui/campfirepot/copper_oven.png")
|
||||
val COOK_PROGRESS_SPRITE: ResourceLocation = cobblemonResource("textures/gui/campfirepot/powered_redstone.png")
|
||||
private val DISABLED_SLOT_LOCATION_SPRITE: ResourceLocation = ResourceLocation.withDefaultNamespace("container/crafter/disabled_slot")
|
||||
}
|
||||
|
||||
init {
|
||||
this.imageWidth = BACKGROUND_WIDTH
|
||||
this.imageHeight = BACKGROUND_HEIGHT
|
||||
}
|
||||
|
||||
override fun init() {
|
||||
super.init()
|
||||
|
||||
this.titleLabelX = this.imageWidth - (BACKGROUND_WIDTH / 2) - (this.font.width(this.title) / 2)
|
||||
this.titleLabelY = 6
|
||||
}
|
||||
|
||||
override fun renderLabels(guiGraphics: GuiGraphics, mouseX: Int, mouseY: Int) {
|
||||
guiGraphics.drawString(this.font, this.title, this.titleLabelX, this.titleLabelY, 4210752, false)
|
||||
}
|
||||
|
||||
override fun renderBg(
|
||||
context: GuiGraphics,
|
||||
partialTick: Float,
|
||||
mouseX: Int,
|
||||
mouseY: Int
|
||||
) {
|
||||
blitk(
|
||||
matrixStack = context.pose(),
|
||||
texture = BACKGROUND,
|
||||
x = leftPos, y = (height - BACKGROUND_HEIGHT) / 2,
|
||||
width = BACKGROUND_WIDTH, height = BACKGROUND_HEIGHT
|
||||
)
|
||||
|
||||
val cookProgress = ceil(menu.getBurnProgress() * COOK_PROGRESS_WIDTH).toInt()
|
||||
blitk(
|
||||
matrixStack = context.pose(),
|
||||
texture = COOK_PROGRESS_SPRITE,
|
||||
x = leftPos + 95,
|
||||
y = topPos + 48,
|
||||
width = cookProgress,
|
||||
height = COOK_PROGRESS_HEIGHT,
|
||||
textureWidth = COOK_PROGRESS_WIDTH
|
||||
)
|
||||
}
|
||||
|
||||
override fun render(
|
||||
context: GuiGraphics,
|
||||
mouseX: Int,
|
||||
mouseY: Int,
|
||||
partialTicks: Float
|
||||
) {
|
||||
super.render(context, mouseX, mouseY, partialTicks)
|
||||
|
||||
this.renderTooltip(context, mouseX, mouseY)
|
||||
if (hoveredSlot is OvenInputSlot && !menu.isSlotDisabled(hoveredSlot!!.index) && hoveredSlot!!.item.isEmpty) {
|
||||
context.renderTooltip(font, Component.translatable("gui.togglable_slot"), mouseX, mouseY)
|
||||
}
|
||||
|
||||
val recipe = menu.currentActiveRecipe
|
||||
recipe?.value()?.result?.let {
|
||||
context.renderFakeItem(it, leftPos + 128, topPos + 55)
|
||||
context.renderItemDecorations(font, it, leftPos + 128, topPos + 55)
|
||||
if (isHovering(128, 55, 16, 16, mouseX.toDouble(), mouseY.toDouble()) && menu.carried.isEmpty) {
|
||||
context.renderTooltip(font, getTooltipFromContainerItem(it), it.tooltipImage, mouseX, mouseY)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun renderSlot(guiGraphics: GuiGraphics, slot: Slot) {
|
||||
if (slot is OvenSeasoningSlot && ((!menu.carried.isEmpty && !slot.mayPlace(menu.carried)) || (slot.hasItem() && !slot.mayPlace(slot.item))) ) {
|
||||
val x = slot.x
|
||||
val y = slot.y
|
||||
guiGraphics.fill(x,y,x+16,y+16,822018048)
|
||||
}
|
||||
|
||||
if (slot is OvenInputSlot) {
|
||||
if ((menu as CopperOvenMenu).isSlotDisabled(slot.index)) {
|
||||
guiGraphics.blitSprite(DISABLED_SLOT_LOCATION_SPRITE, slot.x - 1, slot.y - 1, 18, 18)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
super.renderSlot(guiGraphics, slot)
|
||||
}
|
||||
|
||||
override fun mouseClicked(mouseX: Double, mouseY: Double, button: Int): Boolean {
|
||||
val progressX = leftPos + 96
|
||||
val progressY = topPos + 39
|
||||
if (Cobblemon.implementation.isModInstalled("jei") &&
|
||||
mouseX >= progressX && mouseX < progressX + COOK_PROGRESS_WIDTH &&
|
||||
mouseY >= progressY && mouseY < progressY + COOK_PROGRESS_HEIGHT
|
||||
) {
|
||||
CobblemonJeiPlugin.jeiRuntime?.recipesGui?.showTypes(
|
||||
listOf(CampfirePotRecipeCategory.RECIPE_TYPE)
|
||||
)
|
||||
return true
|
||||
}
|
||||
|
||||
return super.mouseClicked(mouseX, mouseY, button)
|
||||
}
|
||||
|
||||
override fun renderTooltip(
|
||||
guiGraphics: GuiGraphics,
|
||||
mouseX: Int,
|
||||
mouseY: Int
|
||||
) {
|
||||
val progressX = leftPos + 96
|
||||
val progressY = topPos + 39
|
||||
if (Cobblemon.implementation.isModInstalled("jei") &&
|
||||
mouseX >= progressX && mouseX < progressX + COOK_PROGRESS_WIDTH &&
|
||||
mouseY >= progressY && mouseY < progressY + COOK_PROGRESS_HEIGHT
|
||||
) {
|
||||
guiGraphics.renderTooltip(
|
||||
this.font,
|
||||
Component.translatable("jei.tooltip.show.recipes"),
|
||||
mouseX,
|
||||
mouseY
|
||||
)
|
||||
return
|
||||
}
|
||||
super.renderTooltip(guiGraphics, mouseX, mouseY)
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* 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.client.net.appliances
|
||||
|
||||
import com.cobblemon.mod.common.Cobblemon
|
||||
import com.cobblemon.mod.common.api.net.ServerNetworkPacketHandler
|
||||
import com.cobblemon.mod.common.block.appliances.oven.CopperOvenBlockEntity
|
||||
import com.cobblemon.mod.common.block.appliances.oven.CopperOvenMenu
|
||||
import com.cobblemon.mod.common.net.messages.client.appliances.SetCopperOvenDoorPacket
|
||||
import net.minecraft.server.MinecraftServer
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
|
||||
object SetCopperOvenDoorHandler : ServerNetworkPacketHandler<SetCopperOvenDoorPacket> {
|
||||
override fun handle(packet: SetCopperOvenDoorPacket, server: MinecraftServer, player: ServerPlayer) {
|
||||
val menu = player.containerMenu as? CopperOvenMenu
|
||||
if (menu == null) {
|
||||
Cobblemon.LOGGER.debug("Player {} interacted with invalid menu {}", player, player.containerMenu)
|
||||
return
|
||||
}
|
||||
|
||||
val oven = menu.container as? CopperOvenBlockEntity ?: return
|
||||
if (!menu.stillValid(player)) return
|
||||
oven.setDoorOpen(packet.open)
|
||||
}
|
||||
}
|
||||
+2
@@ -13,6 +13,7 @@ import com.cobblemon.mod.common.client.particle.BedrockParticleOptionsRepository
|
||||
import com.cobblemon.mod.common.client.particle.ParticleStorm
|
||||
import com.cobblemon.mod.common.client.render.MatrixWrapper
|
||||
import com.cobblemon.mod.common.net.messages.client.effect.SpawnSnowstormParticlePacket
|
||||
import com.mojang.math.Axis
|
||||
import net.minecraft.client.Minecraft
|
||||
import com.mojang.blaze3d.vertex.PoseStack
|
||||
|
||||
@@ -20,6 +21,7 @@ object SpawnSnowstormParticleHandler : ClientNetworkPacketHandler<SpawnSnowstorm
|
||||
override fun handle(packet: SpawnSnowstormParticlePacket, client: Minecraft) {
|
||||
val wrapper = MatrixWrapper()
|
||||
val matrix = PoseStack()
|
||||
matrix.mulPose(Axis.YP.rotationDegrees(packet.rotation))
|
||||
wrapper.updateMatrix(matrix.last().pose())
|
||||
wrapper.updatePosition(packet.position)
|
||||
val world = Minecraft.getInstance().level ?: return
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* 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.item.crafting.washer
|
||||
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.crafting.Ingredient
|
||||
import net.minecraft.world.item.crafting.RecipeInput
|
||||
|
||||
class WasherInput(
|
||||
val item: ItemStack = ItemStack.EMPTY
|
||||
) : RecipeInput {
|
||||
|
||||
override fun getItem(index: Int): ItemStack? {
|
||||
return if (index == 0) item else null
|
||||
}
|
||||
|
||||
override fun size() = 1
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
/*
|
||||
* 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.item.crafting.washer
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonRecipeSerializers
|
||||
import com.cobblemon.mod.common.CobblemonRecipeTypes
|
||||
import com.mojang.serialization.Codec
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.component.DataComponents
|
||||
import net.minecraft.core.HolderLookup
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf
|
||||
import net.minecraft.network.codec.StreamCodec
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.crafting.Ingredient
|
||||
import net.minecraft.world.item.crafting.Recipe
|
||||
import net.minecraft.world.item.crafting.RecipeSerializer
|
||||
import net.minecraft.world.level.Level
|
||||
|
||||
class WasherRecipe(
|
||||
val input: Ingredient,
|
||||
val result: ItemStack,
|
||||
val preserveInputComponents: Boolean = false,
|
||||
val removeDyedColor: Boolean = false
|
||||
) : Recipe<WasherInput> {
|
||||
|
||||
override fun getType() = CobblemonRecipeTypes.WASHER
|
||||
override fun canCraftInDimensions(width: Int, height: Int) = true
|
||||
override fun assemble(input: WasherInput, registries: HolderLookup.Provider): ItemStack {
|
||||
val output = if (preserveInputComponents) {
|
||||
input.item.transmuteCopy(result.item, result.count)
|
||||
} else {
|
||||
result.copy()
|
||||
}
|
||||
if (removeDyedColor) {
|
||||
output.remove(DataComponents.DYED_COLOR)
|
||||
}
|
||||
return output
|
||||
}
|
||||
override fun getSerializer() = CobblemonRecipeSerializers.WASHER
|
||||
override fun getResultItem(registries: HolderLookup.Provider): ItemStack = result.copy()
|
||||
override fun matches(input: WasherInput, level: Level) =
|
||||
this.input.test(input.item) && (!removeDyedColor || input.item.has(DataComponents.DYED_COLOR))
|
||||
|
||||
class Serializer : RecipeSerializer<WasherRecipe> {
|
||||
companion object {
|
||||
val CODEC: MapCodec<WasherRecipe> = RecordCodecBuilder.mapCodec { instance ->
|
||||
instance.group(
|
||||
Ingredient.CODEC.fieldOf("input").forGetter { recipe -> recipe.input },
|
||||
ItemStack.STRICT_CODEC.fieldOf("result").forGetter { recipe -> recipe.result },
|
||||
Codec.BOOL.optionalFieldOf("preserve_input_components", false)
|
||||
.forGetter { recipe -> recipe.preserveInputComponents },
|
||||
Codec.BOOL.optionalFieldOf("remove_dyed_color", false)
|
||||
.forGetter { recipe -> recipe.removeDyedColor }
|
||||
).apply(instance, ::WasherRecipe)
|
||||
}
|
||||
}
|
||||
|
||||
val STREAM_CODEC: StreamCodec<RegistryFriendlyByteBuf, WasherRecipe> =
|
||||
StreamCodec.of(::toNetwork, ::fromNetwork)
|
||||
|
||||
private fun fromNetwork(buffer: RegistryFriendlyByteBuf): WasherRecipe {
|
||||
val input = Ingredient.CONTENTS_STREAM_CODEC.decode(buffer)
|
||||
val result = ItemStack.STREAM_CODEC.decode(buffer)
|
||||
val preserveInputComponents = buffer.readBoolean()
|
||||
val removeDyedColor = buffer.readBoolean()
|
||||
return WasherRecipe(input, result, preserveInputComponents, removeDyedColor)
|
||||
}
|
||||
|
||||
private fun toNetwork(buffer: RegistryFriendlyByteBuf, recipe: WasherRecipe) {
|
||||
Ingredient.CONTENTS_STREAM_CODEC.encode(buffer, recipe.input)
|
||||
ItemStack.STREAM_CODEC.encode(buffer, recipe.result)
|
||||
buffer.writeBoolean(recipe.preserveInputComponents)
|
||||
buffer.writeBoolean(recipe.removeDyedColor)
|
||||
}
|
||||
|
||||
override fun codec() = CODEC
|
||||
override fun streamCodec() = STREAM_CODEC
|
||||
}
|
||||
|
||||
}
|
||||
@@ -394,6 +394,7 @@ object CobblemonItemGroups {
|
||||
entries.accept(CobblemonItems.FOSSIL_ANALYZER)
|
||||
entries.accept(CobblemonItems.MONITOR)
|
||||
entries.accept(CobblemonItems.DAMAGED_MONITOR)
|
||||
entries.accept(CobblemonItems.ROTOM_MONITOR)
|
||||
entries.accept(CobblemonItems.PC)
|
||||
entries.accept(CobblemonItems.HEALING_MACHINE)
|
||||
entries.accept(CobblemonItems.PASTURE)
|
||||
@@ -570,6 +571,47 @@ object CobblemonItemGroups {
|
||||
entries.accept(CobblemonItems.PINK_PLAQUE)
|
||||
|
||||
CobblemonItems.campfire_pots.forEach(entries::accept)
|
||||
|
||||
entries.accept(CobblemonItems.COPPER_OVEN)
|
||||
entries.accept(CobblemonItems.COPPER_WASHER)
|
||||
entries.accept(CobblemonItems.COPPER_FAN)
|
||||
entries.accept(CobblemonItems.COPPER_MOWER)
|
||||
entries.accept(CobblemonItems.COPPER_FRIDGE)
|
||||
entries.accept(CobblemonItems.EXPOSED_COPPER_OVEN)
|
||||
entries.accept(CobblemonItems.EXPOSED_COPPER_WASHER)
|
||||
entries.accept(CobblemonItems.EXPOSED_COPPER_FAN)
|
||||
entries.accept(CobblemonItems.EXPOSED_COPPER_MOWER)
|
||||
entries.accept(CobblemonItems.EXPOSED_COPPER_FRIDGE)
|
||||
entries.accept(CobblemonItems.WEATHERED_COPPER_OVEN)
|
||||
entries.accept(CobblemonItems.WEATHERED_COPPER_WASHER)
|
||||
entries.accept(CobblemonItems.WEATHERED_COPPER_FAN)
|
||||
entries.accept(CobblemonItems.WEATHERED_COPPER_MOWER)
|
||||
entries.accept(CobblemonItems.WEATHERED_COPPER_FRIDGE)
|
||||
entries.accept(CobblemonItems.OXIDIZED_COPPER_OVEN)
|
||||
entries.accept(CobblemonItems.OXIDIZED_COPPER_WASHER)
|
||||
entries.accept(CobblemonItems.OXIDIZED_COPPER_FAN)
|
||||
entries.accept(CobblemonItems.OXIDIZED_COPPER_MOWER)
|
||||
entries.accept(CobblemonItems.OXIDIZED_COPPER_FRIDGE)
|
||||
entries.accept(CobblemonItems.WAXED_COPPER_OVEN)
|
||||
entries.accept(CobblemonItems.WAXED_COPPER_WASHER)
|
||||
entries.accept(CobblemonItems.WAXED_COPPER_FAN)
|
||||
entries.accept(CobblemonItems.WAXED_COPPER_MOWER)
|
||||
entries.accept(CobblemonItems.WAXED_COPPER_FRIDGE)
|
||||
entries.accept(CobblemonItems.WAXED_EXPOSED_COPPER_OVEN)
|
||||
entries.accept(CobblemonItems.WAXED_EXPOSED_COPPER_WASHER)
|
||||
entries.accept(CobblemonItems.WAXED_EXPOSED_COPPER_FAN)
|
||||
entries.accept(CobblemonItems.WAXED_EXPOSED_COPPER_MOWER)
|
||||
entries.accept(CobblemonItems.WAXED_EXPOSED_COPPER_FRIDGE)
|
||||
entries.accept(CobblemonItems.WAXED_WEATHERED_COPPER_OVEN)
|
||||
entries.accept(CobblemonItems.WAXED_WEATHERED_COPPER_WASHER)
|
||||
entries.accept(CobblemonItems.WAXED_WEATHERED_COPPER_FAN)
|
||||
entries.accept(CobblemonItems.WAXED_WEATHERED_COPPER_MOWER)
|
||||
entries.accept(CobblemonItems.WAXED_WEATHERED_COPPER_FRIDGE)
|
||||
entries.accept(CobblemonItems.WAXED_OXIDIZED_COPPER_OVEN)
|
||||
entries.accept(CobblemonItems.WAXED_OXIDIZED_COPPER_WASHER)
|
||||
entries.accept(CobblemonItems.WAXED_OXIDIZED_COPPER_FAN)
|
||||
entries.accept(CobblemonItems.WAXED_OXIDIZED_COPPER_MOWER)
|
||||
entries.accept(CobblemonItems.WAXED_OXIDIZED_COPPER_FRIDGE)
|
||||
}
|
||||
|
||||
private fun consumableEntries(displayContext: ItemDisplayParameters, entries: Output) {
|
||||
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* 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.net.messages.client.appliances
|
||||
|
||||
import com.cobblemon.mod.common.api.net.NetworkPacket
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf
|
||||
|
||||
class SetCopperOvenDoorPacket(val open: Boolean) : NetworkPacket<SetCopperOvenDoorPacket> {
|
||||
companion object {
|
||||
val ID = cobblemonResource("set_copper_oven_door")
|
||||
|
||||
fun decode(buffer: RegistryFriendlyByteBuf) = SetCopperOvenDoorPacket(buffer.readBoolean())
|
||||
}
|
||||
|
||||
override val id = ID
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeBoolean(open)
|
||||
}
|
||||
}
|
||||
+4
-1
@@ -28,6 +28,7 @@ import net.minecraft.world.phys.Vec3
|
||||
class SpawnSnowstormParticlePacket(
|
||||
val effectId: ResourceLocation,
|
||||
val position: Vec3,
|
||||
val rotation: Float = 0F,
|
||||
) : NetworkPacket<SpawnSnowstormParticlePacket> {
|
||||
override val id = ID
|
||||
companion object {
|
||||
@@ -39,7 +40,8 @@ class SpawnSnowstormParticlePacket(
|
||||
buffer.readDouble(),
|
||||
buffer.readDouble(),
|
||||
buffer.readDouble()
|
||||
)
|
||||
),
|
||||
rotation = buffer.readFloat()
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -48,5 +50,6 @@ class SpawnSnowstormParticlePacket(
|
||||
buffer.writeDouble(position.x)
|
||||
buffer.writeDouble(position.y)
|
||||
buffer.writeDouble(position.z)
|
||||
buffer.writeFloat(rotation)
|
||||
}
|
||||
}
|
||||
@@ -95,6 +95,8 @@ class FloatRange(override val start: Float, override val endInclusive: Float) :
|
||||
override fun hashCode(): Int = 31 * start.hashCode() + endInclusive.hashCode()
|
||||
|
||||
override fun toString(): String = "$start..$endInclusive"
|
||||
fun random() = Random.nextFloat() * (endInclusive - start) + start
|
||||
|
||||
}
|
||||
|
||||
class DoubleRange(override val start: Double, override val endInclusive: Double) : ClosedFloatingPointRange<Double> {
|
||||
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"format_version": "1.10.0",
|
||||
"particle_effect": {
|
||||
"description": {
|
||||
"identifier": "cobblemon:rotomfridge_doorready",
|
||||
"basic_render_parameters": {
|
||||
"material": "particles_blend",
|
||||
"texture": "textures/particles/vanilla/generic"
|
||||
}
|
||||
},
|
||||
"curves": {
|
||||
"variable.debrissize": {
|
||||
"type": "linear",
|
||||
"input": "v.particle_age",
|
||||
"horizontal_range": "v.particle_lifetime",
|
||||
"nodes": [0, 1, 0.96, 0.86, 0.7, 0.47, 0]
|
||||
}
|
||||
},
|
||||
"components": {
|
||||
"minecraft:emitter_rate_instant": {
|
||||
"num_particles": 1
|
||||
},
|
||||
"minecraft:emitter_lifetime_once": {
|
||||
"active_time": 0.05
|
||||
},
|
||||
"minecraft:emitter_shape_box": {
|
||||
"offset": [0, -1, 0.5],
|
||||
"half_dimensions": [0.5, 0.75, 0],
|
||||
"surface_only": true,
|
||||
"direction": "outwards"
|
||||
},
|
||||
"minecraft:particle_lifetime_expression": {
|
||||
"max_lifetime": "math.random(1.2,2)"
|
||||
},
|
||||
"minecraft:particle_initial_spin": {
|
||||
"rotation": "math.random_integer(0,3)*90"
|
||||
},
|
||||
"minecraft:particle_initial_speed": "math.random(2.5,3.5)*0.1",
|
||||
"minecraft:particle_motion_dynamic": {
|
||||
"linear_acceleration": [0, 0.1, 0],
|
||||
"linear_drag_coefficient": 1
|
||||
},
|
||||
"minecraft:particle_appearance_billboard": {
|
||||
"size": ["0.25*v.debrissize", "0.25*v.debrissize"],
|
||||
"facing_camera_mode": "rotate_xyz",
|
||||
"uv": {
|
||||
"texture_width": 64,
|
||||
"texture_height": 8,
|
||||
"flipbook": {
|
||||
"base_UV": [56, 0],
|
||||
"size_UV": [8, 8],
|
||||
"step_UV": [-8, 0],
|
||||
"frames_per_second": 6,
|
||||
"max_frame": 8
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:particle_motion_collision": {
|
||||
"collision_radius": 0.01
|
||||
},
|
||||
"minecraft:particle_appearance_lighting": {},
|
||||
"minecraft:particle_appearance_tinting": {
|
||||
"color": [0.7098, 0.95294, 1, 0.74902]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,469 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,power=0": {
|
||||
"model": "cobblemon:block/copper_fan_unpowered",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=0": {
|
||||
"model": "cobblemon:block/copper_fan_unpowered"
|
||||
},
|
||||
"facing=south,power=0": {
|
||||
"model": "cobblemon:block/copper_fan_unpowered",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=0": {
|
||||
"model": "cobblemon:block/copper_fan_unpowered",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=1,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=1,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=1,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=1,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=1,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=1,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=1,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=1,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=2,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=2,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=2,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=2,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=2,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=2,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=2,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=2,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=3,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=3,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=3,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=3,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=3,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=3,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=3,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=3,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=4,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=4,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=4,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=4,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=4,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=4,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=4,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=4,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=5,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=5,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=5,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=5,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=5,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=5,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=5,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=5,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=6,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=6,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=6,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=6,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=6,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=6,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=6,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=6,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=7,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=7,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=7,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=7,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=7,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=7,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=7,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=7,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=8,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=8,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=8,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=8,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=8,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=8,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=8,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=8,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=9,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=9,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=9,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=9,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=9,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=9,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=9,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=9,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=10,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=10,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=10,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=10,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=10,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=10,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=10,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=10,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=11,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=11,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=11,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=11,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=11,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=11,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=11,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=11,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=12,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=12,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=12,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=12,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=12,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=12,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=12,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=12,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=13,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=13,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=13,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=13,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=13,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=13,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=13,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=13,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=14,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=14,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=14,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=14,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=14,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=14,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=14,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=14,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=15,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=15,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=15,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=15,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=15,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=15,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=15,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=15,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,half=lower": {
|
||||
"model": "cobblemon:block/copper_fridge_bottom",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,half=lower": {
|
||||
"model": "cobblemon:block/copper_fridge_bottom"
|
||||
},
|
||||
"facing=south,half=lower": {
|
||||
"model": "cobblemon:block/copper_fridge_bottom",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=lower": {
|
||||
"model": "cobblemon:block/copper_fridge_bottom",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,half=upper": {
|
||||
"model": "cobblemon:block/copper_fridge_top",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,half=upper": {
|
||||
"model": "cobblemon:block/copper_fridge_top"
|
||||
},
|
||||
"facing=south,half=upper": {
|
||||
"model": "cobblemon:block/copper_fridge_top",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=upper": {
|
||||
"model": "cobblemon:block/copper_fridge_top",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/copper_mower",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/copper_mower"
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/copper_mower",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/copper_mower",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_closed",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_closed"
|
||||
},
|
||||
"facing=south,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_closed",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_closed",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_open"
|
||||
},
|
||||
"facing=south,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_open",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_closed",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_closed"
|
||||
},
|
||||
"facing=south,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_closed",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_closed",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,ejecting=true": {
|
||||
"model": "cobblemon:block/copper_oven_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,ejecting=true": {
|
||||
"model": "cobblemon:block/copper_oven_open"
|
||||
},
|
||||
"facing=south,ejecting=true": {
|
||||
"model": "cobblemon:block/copper_oven_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,ejecting=true": {
|
||||
"model": "cobblemon:block/copper_oven_open",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/copper_washer",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/copper_washer"
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/copper_washer",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/copper_washer",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,469 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,power=0": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_unpowered",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=0": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_unpowered"
|
||||
},
|
||||
"facing=south,power=0": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_unpowered",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=0": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_unpowered",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=1,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=1,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=1,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=1,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=1,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=1,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=1,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=1,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=2,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=2,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=2,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=2,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=2,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=2,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=2,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=2,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=3,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=3,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=3,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=3,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=3,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=3,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=3,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=3,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=4,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=4,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=4,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=4,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=4,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=4,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=4,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=4,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=5,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=5,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=5,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=5,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=5,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=5,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=5,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=5,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=6,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=6,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=6,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=6,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=6,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=6,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=6,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=6,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=7,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=7,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=7,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=7,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=7,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=7,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=7,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=7,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=8,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=8,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=8,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=8,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=8,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=8,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=8,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=8,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=9,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=9,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=9,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=9,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=9,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=9,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=9,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=9,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=10,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=10,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=10,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=10,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=10,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=10,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=10,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=10,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=11,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=11,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=11,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=11,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=11,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=11,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=11,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=11,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=12,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=12,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=12,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=12,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=12,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=12,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=12,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=12,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=13,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=13,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=13,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=13,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=13,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=13,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=13,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=13,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=14,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=14,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=14,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=14,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=14,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=14,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=14,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=14,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=15,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=15,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=15,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=15,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=15,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=15,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=15,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=15,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,half=lower": {
|
||||
"model": "cobblemon:block/exposed_copper_fridge_bottom",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,half=lower": {
|
||||
"model": "cobblemon:block/exposed_copper_fridge_bottom"
|
||||
},
|
||||
"facing=south,half=lower": {
|
||||
"model": "cobblemon:block/exposed_copper_fridge_bottom",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=lower": {
|
||||
"model": "cobblemon:block/exposed_copper_fridge_bottom",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,half=upper": {
|
||||
"model": "cobblemon:block/exposed_copper_fridge_top",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,half=upper": {
|
||||
"model": "cobblemon:block/exposed_copper_fridge_top"
|
||||
},
|
||||
"facing=south,half=upper": {
|
||||
"model": "cobblemon:block/exposed_copper_fridge_top",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=upper": {
|
||||
"model": "cobblemon:block/exposed_copper_fridge_top",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/exposed_copper_mower",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/exposed_copper_mower"
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/exposed_copper_mower",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/exposed_copper_mower",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_closed",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_closed"
|
||||
},
|
||||
"facing=south,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_closed",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_closed",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_open"
|
||||
},
|
||||
"facing=south,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_open",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_closed",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_closed"
|
||||
},
|
||||
"facing=south,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_closed",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_closed",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,ejecting=true": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,ejecting=true": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_open"
|
||||
},
|
||||
"facing=south,ejecting=true": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,ejecting=true": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_open",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/exposed_copper_washer",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/exposed_copper_washer"
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/exposed_copper_washer",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/exposed_copper_washer",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,469 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,power=0": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_unpowered",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=0": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_unpowered"
|
||||
},
|
||||
"facing=south,power=0": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_unpowered",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=0": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_unpowered",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=1,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=1,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=1,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=1,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=1,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=1,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=1,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=1,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=2,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=2,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=2,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=2,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=2,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=2,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=2,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=2,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=3,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=3,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=3,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=3,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=3,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=3,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=3,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=3,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=4,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=4,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=4,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=4,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=4,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=4,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=4,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=4,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=5,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=5,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=5,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=5,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=5,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=5,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=5,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=5,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=6,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=6,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=6,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=6,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=6,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=6,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=6,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=6,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=7,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=7,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=7,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=7,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=7,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=7,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=7,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=7,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=8,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=8,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=8,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=8,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=8,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=8,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=8,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=8,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=9,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=9,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=9,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=9,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=9,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=9,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=9,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=9,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=10,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=10,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=10,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=10,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=10,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=10,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=10,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=10,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=11,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=11,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=11,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=11,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=11,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=11,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=11,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=11,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=12,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=12,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=12,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=12,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=12,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=12,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=12,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=12,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=13,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=13,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=13,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=13,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=13,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=13,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=13,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=13,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=14,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=14,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=14,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=14,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=14,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=14,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=14,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=14,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=15,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=15,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=15,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=15,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=15,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=15,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=15,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=15,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,half=lower": {
|
||||
"model": "cobblemon:block/oxidized_copper_fridge_bottom",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,half=lower": {
|
||||
"model": "cobblemon:block/oxidized_copper_fridge_bottom"
|
||||
},
|
||||
"facing=south,half=lower": {
|
||||
"model": "cobblemon:block/oxidized_copper_fridge_bottom",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=lower": {
|
||||
"model": "cobblemon:block/oxidized_copper_fridge_bottom",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,half=upper": {
|
||||
"model": "cobblemon:block/oxidized_copper_fridge_top",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,half=upper": {
|
||||
"model": "cobblemon:block/oxidized_copper_fridge_top"
|
||||
},
|
||||
"facing=south,half=upper": {
|
||||
"model": "cobblemon:block/oxidized_copper_fridge_top",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=upper": {
|
||||
"model": "cobblemon:block/oxidized_copper_fridge_top",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/oxidized_copper_mower",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/oxidized_copper_mower"
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/oxidized_copper_mower",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/oxidized_copper_mower",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_closed",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_closed"
|
||||
},
|
||||
"facing=south,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_closed",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_closed",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_open"
|
||||
},
|
||||
"facing=south,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_open",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_closed",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_closed"
|
||||
},
|
||||
"facing=south,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_closed",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_closed",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,ejecting=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,ejecting=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_open"
|
||||
},
|
||||
"facing=south,ejecting=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,ejecting=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_open",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/oxidized_copper_washer",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/oxidized_copper_washer"
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/oxidized_copper_washer",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/oxidized_copper_washer",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,484 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=south,screen=off": {
|
||||
"model": "cobblemon:block/monitor"
|
||||
},
|
||||
"facing=west,screen=off": {
|
||||
"model": "cobblemon:block/monitor",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=off": {
|
||||
"model": "cobblemon:block/monitor",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=off": {
|
||||
"model": "cobblemon:block/monitor",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=blue_progress_1": {
|
||||
"model": "cobblemon:block/monitor_scanning_0"
|
||||
},
|
||||
"facing=west,screen=blue_progress_1": {
|
||||
"model": "cobblemon:block/monitor_scanning_0",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=blue_progress_1": {
|
||||
"model": "cobblemon:block/monitor_scanning_0",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=blue_progress_1": {
|
||||
"model": "cobblemon:block/monitor_scanning_0",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=blue_progress_2": {
|
||||
"model": "cobblemon:block/monitor_scanning_1"
|
||||
},
|
||||
"facing=west,screen=blue_progress_2": {
|
||||
"model": "cobblemon:block/monitor_scanning_1",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=blue_progress_2": {
|
||||
"model": "cobblemon:block/monitor_scanning_1",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=blue_progress_2": {
|
||||
"model": "cobblemon:block/monitor_scanning_1",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=blue_progress_3": {
|
||||
"model": "cobblemon:block/monitor_scanning_2"
|
||||
},
|
||||
"facing=west,screen=blue_progress_3": {
|
||||
"model": "cobblemon:block/monitor_scanning_2",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=blue_progress_3": {
|
||||
"model": "cobblemon:block/monitor_scanning_2",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=blue_progress_3": {
|
||||
"model": "cobblemon:block/monitor_scanning_2",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=blue_progress_4": {
|
||||
"model": "cobblemon:block/monitor_scanning_3"
|
||||
},
|
||||
"facing=west,screen=blue_progress_4": {
|
||||
"model": "cobblemon:block/monitor_scanning_3",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=blue_progress_4": {
|
||||
"model": "cobblemon:block/monitor_scanning_3",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=blue_progress_4": {
|
||||
"model": "cobblemon:block/monitor_scanning_3",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=blue_progress_5": {
|
||||
"model": "cobblemon:block/monitor_scanning_4"
|
||||
},
|
||||
"facing=west,screen=blue_progress_5": {
|
||||
"model": "cobblemon:block/monitor_scanning_4",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=blue_progress_5": {
|
||||
"model": "cobblemon:block/monitor_scanning_4",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=blue_progress_5": {
|
||||
"model": "cobblemon:block/monitor_scanning_4",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=blue_progress_6": {
|
||||
"model": "cobblemon:block/monitor_scanning_5"
|
||||
},
|
||||
"facing=west,screen=blue_progress_6": {
|
||||
"model": "cobblemon:block/monitor_scanning_5",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=blue_progress_6": {
|
||||
"model": "cobblemon:block/monitor_scanning_5",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=blue_progress_6": {
|
||||
"model": "cobblemon:block/monitor_scanning_5",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=blue_progress_7": {
|
||||
"model": "cobblemon:block/monitor_scanning_6"
|
||||
},
|
||||
"facing=west,screen=blue_progress_7": {
|
||||
"model": "cobblemon:block/monitor_scanning_6",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=blue_progress_7": {
|
||||
"model": "cobblemon:block/monitor_scanning_6",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=blue_progress_7": {
|
||||
"model": "cobblemon:block/monitor_scanning_6",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=blue_progress_8": {
|
||||
"model": "cobblemon:block/monitor_scanning_7"
|
||||
},
|
||||
"facing=west,screen=blue_progress_8": {
|
||||
"model": "cobblemon:block/monitor_scanning_7",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=blue_progress_8": {
|
||||
"model": "cobblemon:block/monitor_scanning_7",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=blue_progress_8": {
|
||||
"model": "cobblemon:block/monitor_scanning_7",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=blue_progress_9": {
|
||||
"model": "cobblemon:block/monitor_scanning_8"
|
||||
},
|
||||
"facing=west,screen=blue_progress_9": {
|
||||
"model": "cobblemon:block/monitor_scanning_8",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=blue_progress_9": {
|
||||
"model": "cobblemon:block/monitor_scanning_8",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=blue_progress_9": {
|
||||
"model": "cobblemon:block/monitor_scanning_8",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=green_progress_9": {
|
||||
"model": "cobblemon:block/monitor_locked"
|
||||
},
|
||||
"facing=west,screen=green_progress_9": {
|
||||
"model": "cobblemon:block/monitor_locked",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=green_progress_9": {
|
||||
"model": "cobblemon:block/monitor_locked",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=green_progress_9": {
|
||||
"model": "cobblemon:block/monitor_locked",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=tm_normal": {
|
||||
"model": "cobblemon:block/monitor_tm_normal"
|
||||
},
|
||||
"facing=west,screen=tm_normal": {
|
||||
"model": "cobblemon:block/monitor_tm_normal",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=tm_normal": {
|
||||
"model": "cobblemon:block/monitor_tm_normal",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=tm_normal": {
|
||||
"model": "cobblemon:block/monitor_tm_normal",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=tm_fire": {
|
||||
"model": "cobblemon:block/monitor_tm_fire"
|
||||
},
|
||||
"facing=west,screen=tm_fire": {
|
||||
"model": "cobblemon:block/monitor_tm_fire",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=tm_fire": {
|
||||
"model": "cobblemon:block/monitor_tm_fire",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=tm_fire": {
|
||||
"model": "cobblemon:block/monitor_tm_fire",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=tm_water": {
|
||||
"model": "cobblemon:block/monitor_tm_water"
|
||||
},
|
||||
"facing=west,screen=tm_water": {
|
||||
"model": "cobblemon:block/monitor_tm_water",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=tm_water": {
|
||||
"model": "cobblemon:block/monitor_tm_water",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=tm_water": {
|
||||
"model": "cobblemon:block/monitor_tm_water",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=tm_grass": {
|
||||
"model": "cobblemon:block/monitor_tm_grass"
|
||||
},
|
||||
"facing=west,screen=tm_grass": {
|
||||
"model": "cobblemon:block/monitor_tm_grass",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=tm_grass": {
|
||||
"model": "cobblemon:block/monitor_tm_grass",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=tm_grass": {
|
||||
"model": "cobblemon:block/monitor_tm_grass",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=tm_electric": {
|
||||
"model": "cobblemon:block/monitor_tm_electric"
|
||||
},
|
||||
"facing=west,screen=tm_electric": {
|
||||
"model": "cobblemon:block/monitor_tm_electric",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=tm_electric": {
|
||||
"model": "cobblemon:block/monitor_tm_electric",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=tm_electric": {
|
||||
"model": "cobblemon:block/monitor_tm_electric",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=tm_ice": {
|
||||
"model": "cobblemon:block/monitor_tm_ice"
|
||||
},
|
||||
"facing=west,screen=tm_ice": {
|
||||
"model": "cobblemon:block/monitor_tm_ice",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=tm_ice": {
|
||||
"model": "cobblemon:block/monitor_tm_ice",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=tm_ice": {
|
||||
"model": "cobblemon:block/monitor_tm_ice",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=tm_fighting": {
|
||||
"model": "cobblemon:block/monitor_tm_fighting"
|
||||
},
|
||||
"facing=west,screen=tm_fighting": {
|
||||
"model": "cobblemon:block/monitor_tm_fighting",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=tm_fighting": {
|
||||
"model": "cobblemon:block/monitor_tm_fighting",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=tm_fighting": {
|
||||
"model": "cobblemon:block/monitor_tm_fighting",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=tm_poison": {
|
||||
"model": "cobblemon:block/monitor_tm_poison"
|
||||
},
|
||||
"facing=west,screen=tm_poison": {
|
||||
"model": "cobblemon:block/monitor_tm_poison",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=tm_poison": {
|
||||
"model": "cobblemon:block/monitor_tm_poison",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=tm_poison": {
|
||||
"model": "cobblemon:block/monitor_tm_poison",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=tm_ground": {
|
||||
"model": "cobblemon:block/monitor_tm_ground"
|
||||
},
|
||||
"facing=west,screen=tm_ground": {
|
||||
"model": "cobblemon:block/monitor_tm_ground",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=tm_ground": {
|
||||
"model": "cobblemon:block/monitor_tm_ground",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=tm_ground": {
|
||||
"model": "cobblemon:block/monitor_tm_ground",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=tm_flying": {
|
||||
"model": "cobblemon:block/monitor_tm_flying"
|
||||
},
|
||||
"facing=west,screen=tm_flying": {
|
||||
"model": "cobblemon:block/monitor_tm_flying",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=tm_flying": {
|
||||
"model": "cobblemon:block/monitor_tm_flying",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=tm_flying": {
|
||||
"model": "cobblemon:block/monitor_tm_flying",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=tm_psychic": {
|
||||
"model": "cobblemon:block/monitor_tm_psychic"
|
||||
},
|
||||
"facing=west,screen=tm_psychic": {
|
||||
"model": "cobblemon:block/monitor_tm_psychic",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=tm_psychic": {
|
||||
"model": "cobblemon:block/monitor_tm_psychic",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=tm_psychic": {
|
||||
"model": "cobblemon:block/monitor_tm_psychic",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=tm_bug": {
|
||||
"model": "cobblemon:block/monitor_tm_bug"
|
||||
},
|
||||
"facing=west,screen=tm_bug": {
|
||||
"model": "cobblemon:block/monitor_tm_bug",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=tm_bug": {
|
||||
"model": "cobblemon:block/monitor_tm_bug",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=tm_bug": {
|
||||
"model": "cobblemon:block/monitor_tm_bug",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=tm_rock": {
|
||||
"model": "cobblemon:block/monitor_tm_rock"
|
||||
},
|
||||
"facing=west,screen=tm_rock": {
|
||||
"model": "cobblemon:block/monitor_tm_rock",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=tm_rock": {
|
||||
"model": "cobblemon:block/monitor_tm_rock",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=tm_rock": {
|
||||
"model": "cobblemon:block/monitor_tm_rock",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=tm_ghost": {
|
||||
"model": "cobblemon:block/monitor_tm_ghost"
|
||||
},
|
||||
"facing=west,screen=tm_ghost": {
|
||||
"model": "cobblemon:block/monitor_tm_ghost",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=tm_ghost": {
|
||||
"model": "cobblemon:block/monitor_tm_ghost",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=tm_ghost": {
|
||||
"model": "cobblemon:block/monitor_tm_ghost",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=tm_dragon": {
|
||||
"model": "cobblemon:block/monitor_tm_dragon"
|
||||
},
|
||||
"facing=west,screen=tm_dragon": {
|
||||
"model": "cobblemon:block/monitor_tm_dragon",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=tm_dragon": {
|
||||
"model": "cobblemon:block/monitor_tm_dragon",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=tm_dragon": {
|
||||
"model": "cobblemon:block/monitor_tm_dragon",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=tm_dark": {
|
||||
"model": "cobblemon:block/monitor_tm_dark"
|
||||
},
|
||||
"facing=west,screen=tm_dark": {
|
||||
"model": "cobblemon:block/monitor_tm_dark",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=tm_dark": {
|
||||
"model": "cobblemon:block/monitor_tm_dark",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=tm_dark": {
|
||||
"model": "cobblemon:block/monitor_tm_dark",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=tm_steel": {
|
||||
"model": "cobblemon:block/monitor_tm_steel"
|
||||
},
|
||||
"facing=west,screen=tm_steel": {
|
||||
"model": "cobblemon:block/monitor_tm_steel",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=tm_steel": {
|
||||
"model": "cobblemon:block/monitor_tm_steel",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=tm_steel": {
|
||||
"model": "cobblemon:block/monitor_tm_steel",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=tm_fairy": {
|
||||
"model": "cobblemon:block/monitor_tm_fairy"
|
||||
},
|
||||
"facing=west,screen=tm_fairy": {
|
||||
"model": "cobblemon:block/monitor_tm_fairy",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=tm_fairy": {
|
||||
"model": "cobblemon:block/monitor_tm_fairy",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=tm_fairy": {
|
||||
"model": "cobblemon:block/monitor_tm_fairy",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=music": {
|
||||
"model": "cobblemon:block/monitor_music"
|
||||
},
|
||||
"facing=west,screen=music": {
|
||||
"model": "cobblemon:block/monitor_music",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=music": {
|
||||
"model": "cobblemon:block/monitor_music",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=music": {
|
||||
"model": "cobblemon:block/monitor_music",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=porygon_grid": {
|
||||
"model": "cobblemon:block/monitor_grid"
|
||||
},
|
||||
"facing=west,screen=porygon_grid": {
|
||||
"model": "cobblemon:block/monitor_grid",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=porygon_grid": {
|
||||
"model": "cobblemon:block/monitor_grid",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=porygon_grid": {
|
||||
"model": "cobblemon:block/monitor_grid",
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,screen=porygon_glitching": {
|
||||
"model": "cobblemon:block/monitor_glitching"
|
||||
},
|
||||
"facing=west,screen=porygon_glitching": {
|
||||
"model": "cobblemon:block/monitor_glitching",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,screen=porygon_glitching": {
|
||||
"model": "cobblemon:block/monitor_glitching",
|
||||
"y": 180
|
||||
},
|
||||
"facing=east,screen=porygon_glitching": {
|
||||
"model": "cobblemon:block/monitor_glitching",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,469 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,power=0": {
|
||||
"model": "cobblemon:block/copper_fan_unpowered",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=0": {
|
||||
"model": "cobblemon:block/copper_fan_unpowered"
|
||||
},
|
||||
"facing=south,power=0": {
|
||||
"model": "cobblemon:block/copper_fan_unpowered",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=0": {
|
||||
"model": "cobblemon:block/copper_fan_unpowered",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=1,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=1,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=1,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=1,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=1,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=1,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=1,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=1,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=2,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=2,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=2,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=2,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=2,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=2,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=2,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=2,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=3,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=3,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=3,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=3,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=3,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=3,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=3,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=3,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=4,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=4,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=4,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=4,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=4,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=4,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=4,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=4,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=5,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=5,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=5,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=5,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=5,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=5,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=5,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=5,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=6,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=6,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=6,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=6,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=6,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=6,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=6,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=6,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=7,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=7,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=7,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=7,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=7,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=7,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=7,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=7,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=8,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=8,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=8,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=8,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=8,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=8,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=8,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=8,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=9,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=9,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=9,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=9,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=9,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=9,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=9,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=9,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=10,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=10,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=10,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=10,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=10,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=10,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=10,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=10,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=11,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=11,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=11,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=11,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=11,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=11,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=11,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=11,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=12,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=12,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=12,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=12,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=12,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=12,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=12,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=12,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=13,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=13,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=13,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=13,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=13,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=13,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=13,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=13,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=14,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=14,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=14,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=14,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=14,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=14,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=14,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=14,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=15,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=15,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=15,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=15,push=false": {
|
||||
"model": "cobblemon:block/copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=15,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=15,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=15,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=15,push=true": {
|
||||
"model": "cobblemon:block/copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,half=lower": {
|
||||
"model": "cobblemon:block/copper_fridge_bottom",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,half=lower": {
|
||||
"model": "cobblemon:block/copper_fridge_bottom"
|
||||
},
|
||||
"facing=south,half=lower": {
|
||||
"model": "cobblemon:block/copper_fridge_bottom",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=lower": {
|
||||
"model": "cobblemon:block/copper_fridge_bottom",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,half=upper": {
|
||||
"model": "cobblemon:block/copper_fridge_top",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,half=upper": {
|
||||
"model": "cobblemon:block/copper_fridge_top"
|
||||
},
|
||||
"facing=south,half=upper": {
|
||||
"model": "cobblemon:block/copper_fridge_top",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=upper": {
|
||||
"model": "cobblemon:block/copper_fridge_top",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/copper_mower",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/copper_mower"
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/copper_mower",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/copper_mower",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_closed",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_closed"
|
||||
},
|
||||
"facing=south,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_closed",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_closed",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_open"
|
||||
},
|
||||
"facing=south,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_open",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_closed",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_closed"
|
||||
},
|
||||
"facing=south,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_closed",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/copper_oven_closed",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,ejecting=true": {
|
||||
"model": "cobblemon:block/copper_oven_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,ejecting=true": {
|
||||
"model": "cobblemon:block/copper_oven_open"
|
||||
},
|
||||
"facing=south,ejecting=true": {
|
||||
"model": "cobblemon:block/copper_oven_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,ejecting=true": {
|
||||
"model": "cobblemon:block/copper_oven_open",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/copper_washer",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/copper_washer"
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/copper_washer",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/copper_washer",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,469 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,power=0": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_unpowered",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=0": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_unpowered"
|
||||
},
|
||||
"facing=south,power=0": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_unpowered",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=0": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_unpowered",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=1,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=1,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=1,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=1,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=1,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=1,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=1,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=1,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=2,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=2,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=2,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=2,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=2,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=2,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=2,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=2,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=3,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=3,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=3,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=3,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=3,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=3,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=3,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=3,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=4,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=4,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=4,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=4,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=4,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=4,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=4,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=4,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=5,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=5,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=5,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=5,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=5,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=5,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=5,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=5,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=6,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=6,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=6,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=6,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=6,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=6,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=6,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=6,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=7,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=7,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=7,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=7,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=7,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=7,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=7,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=7,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=8,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=8,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=8,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=8,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=8,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=8,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=8,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=8,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=9,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=9,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=9,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=9,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=9,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=9,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=9,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=9,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=10,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=10,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=10,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=10,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=10,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=10,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=10,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=10,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=11,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=11,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=11,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=11,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=11,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=11,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=11,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=11,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=12,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=12,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=12,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=12,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=12,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=12,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=12,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=12,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=13,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=13,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=13,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=13,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=13,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=13,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=13,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=13,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=14,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=14,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=14,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=14,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=14,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=14,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=14,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=14,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=15,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=15,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=15,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=15,push=false": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=15,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=15,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=15,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=15,push=true": {
|
||||
"model": "cobblemon:block/exposed_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,half=lower": {
|
||||
"model": "cobblemon:block/exposed_copper_fridge_bottom",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,half=lower": {
|
||||
"model": "cobblemon:block/exposed_copper_fridge_bottom"
|
||||
},
|
||||
"facing=south,half=lower": {
|
||||
"model": "cobblemon:block/exposed_copper_fridge_bottom",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=lower": {
|
||||
"model": "cobblemon:block/exposed_copper_fridge_bottom",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,half=upper": {
|
||||
"model": "cobblemon:block/exposed_copper_fridge_top",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,half=upper": {
|
||||
"model": "cobblemon:block/exposed_copper_fridge_top"
|
||||
},
|
||||
"facing=south,half=upper": {
|
||||
"model": "cobblemon:block/exposed_copper_fridge_top",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=upper": {
|
||||
"model": "cobblemon:block/exposed_copper_fridge_top",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/exposed_copper_mower",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/exposed_copper_mower"
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/exposed_copper_mower",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/exposed_copper_mower",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_closed",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_closed"
|
||||
},
|
||||
"facing=south,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_closed",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_closed",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_open"
|
||||
},
|
||||
"facing=south,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_open",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_closed",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_closed"
|
||||
},
|
||||
"facing=south,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_closed",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_closed",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,ejecting=true": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,ejecting=true": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_open"
|
||||
},
|
||||
"facing=south,ejecting=true": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,ejecting=true": {
|
||||
"model": "cobblemon:block/exposed_copper_oven_open",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/exposed_copper_washer",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/exposed_copper_washer"
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/exposed_copper_washer",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/exposed_copper_washer",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
+469
@@ -0,0 +1,469 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,power=0": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_unpowered",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=0": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_unpowered"
|
||||
},
|
||||
"facing=south,power=0": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_unpowered",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=0": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_unpowered",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=1,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=1,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=1,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=1,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=1,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=1,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=1,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=1,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=2,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=2,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=2,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=2,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=2,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=2,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=2,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=2,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=3,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=3,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=3,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=3,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=3,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=3,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=3,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=3,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=4,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=4,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=4,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=4,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=4,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=4,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=4,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=4,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=5,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=5,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=5,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=5,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=5,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=5,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=5,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=5,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=6,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=6,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=6,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=6,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=6,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=6,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=6,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=6,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=7,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=7,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=7,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=7,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=7,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=7,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=7,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=7,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=8,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=8,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=8,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=8,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=8,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=8,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=8,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=8,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=9,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=9,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=9,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=9,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=9,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=9,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=9,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=9,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=10,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=10,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=10,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=10,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=10,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=10,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=10,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=10,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=11,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=11,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=11,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=11,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=11,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=11,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=11,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=11,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=12,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=12,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=12,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=12,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=12,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=12,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=12,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=12,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=13,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=13,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=13,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=13,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=13,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=13,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=13,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=13,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=14,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=14,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=14,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=14,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=14,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=14,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=14,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=14,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=15,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=15,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=15,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=15,push=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=15,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=15,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=15,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=15,push=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,half=lower": {
|
||||
"model": "cobblemon:block/oxidized_copper_fridge_bottom",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,half=lower": {
|
||||
"model": "cobblemon:block/oxidized_copper_fridge_bottom"
|
||||
},
|
||||
"facing=south,half=lower": {
|
||||
"model": "cobblemon:block/oxidized_copper_fridge_bottom",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=lower": {
|
||||
"model": "cobblemon:block/oxidized_copper_fridge_bottom",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,half=upper": {
|
||||
"model": "cobblemon:block/oxidized_copper_fridge_top",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,half=upper": {
|
||||
"model": "cobblemon:block/oxidized_copper_fridge_top"
|
||||
},
|
||||
"facing=south,half=upper": {
|
||||
"model": "cobblemon:block/oxidized_copper_fridge_top",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=upper": {
|
||||
"model": "cobblemon:block/oxidized_copper_fridge_top",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/oxidized_copper_mower",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/oxidized_copper_mower"
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/oxidized_copper_mower",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/oxidized_copper_mower",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_closed",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_closed"
|
||||
},
|
||||
"facing=south,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_closed",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_closed",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_open"
|
||||
},
|
||||
"facing=south,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_open",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_closed",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_closed"
|
||||
},
|
||||
"facing=south,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_closed",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_closed",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,ejecting=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,ejecting=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_open"
|
||||
},
|
||||
"facing=south,ejecting=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,ejecting=true": {
|
||||
"model": "cobblemon:block/oxidized_copper_oven_open",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/oxidized_copper_washer",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/oxidized_copper_washer"
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/oxidized_copper_washer",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/oxidized_copper_washer",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
+469
@@ -0,0 +1,469 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,power=0": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_unpowered",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=0": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_unpowered"
|
||||
},
|
||||
"facing=south,power=0": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_unpowered",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=0": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_unpowered",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=1,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=1,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=1,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=1,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=1,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=1,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=1,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=1,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=2,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=2,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=2,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=2,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=2,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=2,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=2,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=2,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=3,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=3,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=3,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=3,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=3,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=3,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=3,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=3,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=4,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=4,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=4,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=4,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=4,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=4,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=4,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=4,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=5,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=5,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=5,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=5,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=5,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=5,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=5,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=5,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=6,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=6,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=6,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=6,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=6,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=6,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=6,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=6,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=7,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=7,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=7,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=7,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=7,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=7,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=7,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=7,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=8,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=8,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=8,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=8,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=8,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=8,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=8,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=8,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=9,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=9,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=9,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=9,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=9,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=9,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=9,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=9,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=10,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=10,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=10,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=10,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=10,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=10,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=10,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=10,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=11,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=11,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=11,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=11,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=11,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=11,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=11,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=11,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=12,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=12,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=12,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=12,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=12,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=12,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=12,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=12,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=13,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=13,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=13,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=13,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=13,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=13,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=13,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=13,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=14,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=14,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=14,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=14,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=14,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=14,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=14,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=14,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=15,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=15,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=15,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=15,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=15,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=15,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=15,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=15,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,half=lower": {
|
||||
"model": "cobblemon:block/weathered_copper_fridge_bottom",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,half=lower": {
|
||||
"model": "cobblemon:block/weathered_copper_fridge_bottom"
|
||||
},
|
||||
"facing=south,half=lower": {
|
||||
"model": "cobblemon:block/weathered_copper_fridge_bottom",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=lower": {
|
||||
"model": "cobblemon:block/weathered_copper_fridge_bottom",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,half=upper": {
|
||||
"model": "cobblemon:block/weathered_copper_fridge_top",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,half=upper": {
|
||||
"model": "cobblemon:block/weathered_copper_fridge_top"
|
||||
},
|
||||
"facing=south,half=upper": {
|
||||
"model": "cobblemon:block/weathered_copper_fridge_top",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=upper": {
|
||||
"model": "cobblemon:block/weathered_copper_fridge_top",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/weathered_copper_mower",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/weathered_copper_mower"
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/weathered_copper_mower",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/weathered_copper_mower",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_closed",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_closed"
|
||||
},
|
||||
"facing=south,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_closed",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_closed",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_open"
|
||||
},
|
||||
"facing=south,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_open",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_closed",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_closed"
|
||||
},
|
||||
"facing=south,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_closed",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_closed",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,ejecting=true": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,ejecting=true": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_open"
|
||||
},
|
||||
"facing=south,ejecting=true": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,ejecting=true": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_open",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/weathered_copper_washer",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/weathered_copper_washer"
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/weathered_copper_washer",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/weathered_copper_washer",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,469 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,power=0": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_unpowered",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=0": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_unpowered"
|
||||
},
|
||||
"facing=south,power=0": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_unpowered",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=0": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_unpowered",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=1,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=1,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=1,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=1,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=1,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=1,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=1,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=1,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=2,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=2,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=2,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=2,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=2,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=2,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=2,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=2,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=3,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=3,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=3,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=3,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=3,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=3,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=3,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=3,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=4,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=4,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=4,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=4,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=4,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=4,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=4,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=4,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=5,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=5,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=5,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=5,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=5,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=5,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=5,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=5,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=6,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=6,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=6,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=6,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=6,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=6,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=6,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=6,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=7,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=7,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative"
|
||||
},
|
||||
"facing=south,power=7,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=7,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=7,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=7,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing"
|
||||
},
|
||||
"facing=south,power=7,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=7,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=8,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=8,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=8,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=8,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=8,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=8,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=8,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=8,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=9,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=9,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=9,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=9,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=9,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=9,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=9,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=9,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=10,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=10,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=10,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=10,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=10,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=10,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=10,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=10,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=11,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=11,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=11,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=11,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=11,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=11,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=11,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=11,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=12,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=12,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=12,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=12,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=12,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=12,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=12,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=12,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=13,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=13,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=13,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=13,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=13,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=13,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=13,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=13,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=14,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=14,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=14,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=14,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=14,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=14,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=14,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=14,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=15,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=15,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong"
|
||||
},
|
||||
"facing=south,power=15,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=15,push=false": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_decorative_strong",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,power=15,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,power=15,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong"
|
||||
},
|
||||
"facing=south,power=15,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,power=15,push=true": {
|
||||
"model": "cobblemon:block/weathered_copper_fan_pushing_strong",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,half=lower": {
|
||||
"model": "cobblemon:block/weathered_copper_fridge_bottom",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,half=lower": {
|
||||
"model": "cobblemon:block/weathered_copper_fridge_bottom"
|
||||
},
|
||||
"facing=south,half=lower": {
|
||||
"model": "cobblemon:block/weathered_copper_fridge_bottom",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=lower": {
|
||||
"model": "cobblemon:block/weathered_copper_fridge_bottom",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,half=upper": {
|
||||
"model": "cobblemon:block/weathered_copper_fridge_top",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,half=upper": {
|
||||
"model": "cobblemon:block/weathered_copper_fridge_top"
|
||||
},
|
||||
"facing=south,half=upper": {
|
||||
"model": "cobblemon:block/weathered_copper_fridge_top",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=upper": {
|
||||
"model": "cobblemon:block/weathered_copper_fridge_top",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/weathered_copper_mower",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/weathered_copper_mower"
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/weathered_copper_mower",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/weathered_copper_mower",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_closed",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_closed"
|
||||
},
|
||||
"facing=south,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_closed",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=closed,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_closed",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_open"
|
||||
},
|
||||
"facing=south,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=open,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_open",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_closed",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_closed"
|
||||
},
|
||||
"facing=south,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_closed",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,cooking=cooking,ejecting=false": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_closed",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,ejecting=true": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_open",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,ejecting=true": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_open"
|
||||
},
|
||||
"facing=south,ejecting=true": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_open",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,ejecting=true": {
|
||||
"model": "cobblemon:block/weathered_copper_oven_open",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=east": {
|
||||
"model": "cobblemon:block/weathered_copper_washer",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north": {
|
||||
"model": "cobblemon:block/weathered_copper_washer"
|
||||
},
|
||||
"facing=south": {
|
||||
"model": "cobblemon:block/weathered_copper_washer",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west": {
|
||||
"model": "cobblemon:block/weathered_copper_washer",
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -922,6 +922,7 @@
|
||||
"block.cobblemon.fossil_analyzer": "Fossil Analyzer",
|
||||
"block.cobblemon.monitor": "Data Monitor",
|
||||
"block.cobblemon.damaged_monitor": "Damaged Data Monitor",
|
||||
"block.cobblemon.rotom_data_monitor": "Rotom Data Monitor",
|
||||
"block.cobblemon.red_mint": "Red Mint Seeds",
|
||||
"block.cobblemon.blue_mint": "Blue Mint Seeds",
|
||||
"block.cobblemon.cyan_mint": "Cyan Mint Seeds",
|
||||
@@ -959,6 +960,46 @@
|
||||
"block.cobblemon.campfire_pot_yellow": "Yellow Campfire Pot",
|
||||
"block.cobblemon.tm_machine": "TM Machine",
|
||||
"block.cobblemon.disc_shelf": "Disc Shelf",
|
||||
"block.cobblemon.copper_oven": "Copper Oven",
|
||||
"block.cobblemon.exposed_copper_oven": "Exposed Copper Oven",
|
||||
"block.cobblemon.weathered_copper_oven": "Weathered Copper Oven",
|
||||
"block.cobblemon.oxidized_copper_oven": "Oxidized Copper Oven",
|
||||
"block.cobblemon.waxed_copper_oven": "Waxed Copper Oven",
|
||||
"block.cobblemon.waxed_exposed_copper_oven": "Waxed Exposed Copper Oven",
|
||||
"block.cobblemon.waxed_weathered_copper_oven": "Waxed Weathered Copper Oven",
|
||||
"block.cobblemon.waxed_oxidized_copper_oven": "Waxed Oxidized Copper Oven",
|
||||
"block.cobblemon.copper_washer": "Copper Washer",
|
||||
"block.cobblemon.exposed_copper_washer": "Exposed Copper Washer",
|
||||
"block.cobblemon.weathered_copper_washer": "Weathered Copper Washer",
|
||||
"block.cobblemon.oxidized_copper_washer": "Oxidized Copper Washer",
|
||||
"block.cobblemon.waxed_copper_washer": "Waxed Copper Washer",
|
||||
"block.cobblemon.waxed_exposed_copper_washer": "Waxed Exposed Copper Washer",
|
||||
"block.cobblemon.waxed_weathered_copper_washer": "Waxed Weathered Copper Washer",
|
||||
"block.cobblemon.waxed_oxidized_copper_washer": "Waxed Oxidized Copper Washer",
|
||||
"block.cobblemon.copper_fridge": "Copper Fridge",
|
||||
"block.cobblemon.exposed_copper_fridge": "Exposed Copper Fridge",
|
||||
"block.cobblemon.weathered_copper_fridge": "Weathered Copper Fridge",
|
||||
"block.cobblemon.oxidized_copper_fridge": "Oxidized Copper Fridge",
|
||||
"block.cobblemon.waxed_copper_fridge": "Waxed Copper Fridge",
|
||||
"block.cobblemon.waxed_exposed_copper_fridge": "Waxed Exposed Copper Fridge",
|
||||
"block.cobblemon.waxed_weathered_copper_fridge": "Waxed Weathered Copper Fridge",
|
||||
"block.cobblemon.waxed_oxidized_copper_fridge": "Waxed Oxidized Copper Fridge",
|
||||
"block.cobblemon.copper_fan": "Copper Fan",
|
||||
"block.cobblemon.exposed_copper_fan": "Exposed Copper Fan",
|
||||
"block.cobblemon.weathered_copper_fan": "Weathered Copper Fan",
|
||||
"block.cobblemon.oxidized_copper_fan": "Oxidized Copper Fan",
|
||||
"block.cobblemon.waxed_copper_fan": "Waxed Copper Fan",
|
||||
"block.cobblemon.waxed_exposed_copper_fan": "Waxed Exposed Copper Fan",
|
||||
"block.cobblemon.waxed_weathered_copper_fan": "Waxed Weathered Copper Fan",
|
||||
"block.cobblemon.waxed_oxidized_copper_fan": "Waxed Oxidized Copper Fan",
|
||||
"block.cobblemon.copper_mower": "Copper Mower",
|
||||
"block.cobblemon.exposed_copper_mower": "Exposed Copper Mower",
|
||||
"block.cobblemon.weathered_copper_mower": "Weathered Copper Mower",
|
||||
"block.cobblemon.oxidized_copper_mower": "Oxidized Copper Mower",
|
||||
"block.cobblemon.waxed_copper_mower": "Waxed Copper Mower",
|
||||
"block.cobblemon.waxed_exposed_copper_mower": "Waxed Exposed Copper Mower",
|
||||
"block.cobblemon.waxed_weathered_copper_mower": "Waxed Weathered Copper Mower",
|
||||
"block.cobblemon.waxed_oxidized_copper_mower": "Waxed Oxidized Copper Mower",
|
||||
"block.cobblemon.hearty_grain_bale": "Hearty Grain Bale",
|
||||
"block.cobblemon.tatami_block": "Tatami",
|
||||
"block.cobblemon.tatami_mat": "Tatami Mat",
|
||||
@@ -1144,6 +1185,7 @@
|
||||
"cobblemon.container.campfire_pot": "Campfire Pot",
|
||||
"cobblemon.container.campfire_pot.recipe_book.toggle_recipes": "Showing Cookable",
|
||||
"cobblemon.container.tm_machine": "TM Machine",
|
||||
"cobblemon.container.copper_oven": "Copper Oven",
|
||||
"cobblemon.ui.edit.habitat": "Habitat Editor",
|
||||
"cobblemon.ui.edit.habitat.mimic_id": "Mimic Block ID",
|
||||
"cobblemon.ui.edit.habitat.phase_order": "Phase Order: %s",
|
||||
@@ -2114,6 +2156,11 @@
|
||||
"cobblemon.subtitle.block.tm_machine.tm_retrieve": "TM taken from TM Machine",
|
||||
"cobblemon.subtitle.block.tm_machine.item_insert": "Item placed in TM Machine",
|
||||
"cobblemon.subtitle.block.tm_machine.item_retrieve": "Item taken from TM Machine",
|
||||
"cobblemon.subtitle.block.fan.start": "Copper Fan starts",
|
||||
"cobblemon.subtitle.block.fan.stop": "Copper Fan stops",
|
||||
"cobblemon.subtitle.block.fan.blow": "Copper Fan blowing",
|
||||
"cobblemon.subtitle.block.washer.wash": "Copper Washer washes",
|
||||
"cobblemon.subtitle.block.mower.cut": "Copper Mower revs",
|
||||
"cobblemon.healingmachine.alreadyinuse": "This healing machine is already in use!",
|
||||
"cobblemon.healingmachine.nopokemon": "You don't have any Pokémon in your party to heal!",
|
||||
"cobblemon.healingmachine.alreadyhealed": "Your Pokémon party is already fully healed!",
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"texture_size": [32, 32],
|
||||
"textures": {
|
||||
"texture": "cobblemon:block/functional/copper_appliances/copper_fan",
|
||||
"blades": "cobblemon:block/functional/copper_appliances/copper_fan_blades_slow",
|
||||
"particle": "block/chiseled_copper"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"name": "stand",
|
||||
"from": [6, 0, 6],
|
||||
"to": [10, 2, 10],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [6, 0, 6]},
|
||||
"faces": {
|
||||
"north": {"uv": [10, 14, 12, 15], "texture": "#texture"},
|
||||
"east": {"uv": [8, 11, 10, 12], "texture": "#texture"},
|
||||
"south": {"uv": [14, 11, 16, 12], "texture": "#texture"},
|
||||
"west": {"uv": [12, 11, 14, 12], "texture": "#texture"},
|
||||
"up": {"uv": [12, 14, 10, 12], "texture": "#texture"},
|
||||
"down": {"uv": [14, 9, 12, 11], "texture": "#texture", "cullface": "down"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "frame_bottom",
|
||||
"from": [1, 2, 7],
|
||||
"to": [15, 4, 9],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 2, 7]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 7, 8, 8], "texture": "#texture"},
|
||||
"east": {"uv": [0, 7, 1, 8], "texture": "#texture"},
|
||||
"south": {"uv": [9, 7, 16, 8], "texture": "#texture"},
|
||||
"west": {"uv": [8, 7, 9, 8], "texture": "#texture"},
|
||||
"up": {"uv": [8, 9, 1, 8], "texture": "#texture"},
|
||||
"down": {"uv": [16, 8, 9, 9], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "frame_top",
|
||||
"from": [1, 14, 7],
|
||||
"to": [15, 16, 9],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 14, 7]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 1, 8, 2], "texture": "#texture"},
|
||||
"east": {"uv": [0, 1, 1, 2], "texture": "#texture"},
|
||||
"south": {"uv": [9, 1, 16, 2], "texture": "#texture"},
|
||||
"west": {"uv": [8, 1, 9, 2], "texture": "#texture"},
|
||||
"up": {"uv": [8, 1, 1, 0], "texture": "#texture"},
|
||||
"down": {"uv": [16, 0, 9, 1], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "frame_west",
|
||||
"from": [1, 4, 7],
|
||||
"to": [3, 14, 9],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [1, 4, 7]},
|
||||
"faces": {
|
||||
"north": {"uv": [7, 2, 8, 7], "texture": "#texture"},
|
||||
"east": {"uv": [6, 2, 7, 7], "texture": "#texture"},
|
||||
"south": {"uv": [9, 2, 10, 7], "texture": "#texture"},
|
||||
"west": {"uv": [8, 2, 9, 7], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "frame_east",
|
||||
"from": [13, 4, 7],
|
||||
"to": [15, 14, 9],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [13, 4, 7]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 2, 2, 7], "texture": "#texture"},
|
||||
"east": {"uv": [0, 2, 1, 7], "texture": "#texture"},
|
||||
"south": {"uv": [15, 2, 16, 7], "texture": "#texture"},
|
||||
"west": {"uv": [2, 2, 3, 7], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "nose",
|
||||
"from": [7, 8, 7.5],
|
||||
"to": [9, 10, 8.5],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [7, 6, 7]},
|
||||
"faces": {
|
||||
"north": {"uv": [4, 4, 5, 5], "texture": "#texture"},
|
||||
"east": {"uv": [3.5, 4, 4, 5], "texture": "#texture"},
|
||||
"west": {"uv": [5, 4, 5.5, 5], "texture": "#texture"},
|
||||
"up": {"uv": [5, 4, 4, 3.5], "texture": "#texture"},
|
||||
"down": {"uv": [5, 5, 4, 5.5], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "blades",
|
||||
"from": [3, 4, 8],
|
||||
"to": [13, 14, 8],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, 5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 10, 10], "texture": "#blades"},
|
||||
"south": {"uv": [10, 0, 0, 10], "texture": "#blades"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "beams",
|
||||
"from": [3, 4, 8.5],
|
||||
"to": [13, 14, 8.5],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, 5, 8.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [15, 2, 10, 7], "texture": "#texture"},
|
||||
"south": {"uv": [10, 2, 15, 7], "texture": "#texture"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"groups": [
|
||||
{
|
||||
"name": "fan",
|
||||
"origin": [7, 6, 7],
|
||||
"scope": 0,
|
||||
"color": 0,
|
||||
"children": [0, 1, 2, 3, 4, 5, 6, 7]
|
||||
}
|
||||
]
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "cobblemon:block/copper_fan_decorative",
|
||||
"textures": {
|
||||
"blades": "cobblemon:block/functional/copper_appliances/copper_fan_blades_fast"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"texture_size": [32, 32],
|
||||
"textures": {
|
||||
"texture": "cobblemon:block/functional/copper_appliances/copper_fan",
|
||||
"blades": "cobblemon:block/functional/copper_appliances/copper_fan_blades_slow",
|
||||
"particle": "block/chiseled_copper"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"name": "stand",
|
||||
"from": [6, 0, 6],
|
||||
"to": [10, 2, 10],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [6, 0, 6]},
|
||||
"faces": {
|
||||
"north": {"uv": [12, 14, 14, 15], "texture": "#texture"},
|
||||
"east": {"uv": [8, 11, 10, 12], "texture": "#texture"},
|
||||
"south": {"uv": [14, 11, 16, 12], "texture": "#texture"},
|
||||
"west": {"uv": [12, 11, 14, 12], "texture": "#texture"},
|
||||
"up": {"uv": [14, 14, 12, 12], "texture": "#texture"},
|
||||
"down": {"uv": [14, 9, 12, 11], "texture": "#texture", "cullface": "down"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "frame_bottom",
|
||||
"from": [1, 2, 7],
|
||||
"to": [15, 4, 9],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 2, 7]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 7, 8, 8], "texture": "#texture"},
|
||||
"east": {"uv": [0, 7, 1, 8], "texture": "#texture"},
|
||||
"south": {"uv": [9, 7, 16, 8], "texture": "#texture"},
|
||||
"west": {"uv": [8, 7, 9, 8], "texture": "#texture"},
|
||||
"up": {"uv": [8, 9, 1, 8], "texture": "#texture"},
|
||||
"down": {"uv": [16, 8, 9, 9], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "frame_top",
|
||||
"from": [1, 14, 7],
|
||||
"to": [15, 16, 9],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 14, 7]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 1, 8, 2], "texture": "#texture"},
|
||||
"east": {"uv": [0, 1, 1, 2], "texture": "#texture"},
|
||||
"south": {"uv": [9, 1, 16, 2], "texture": "#texture"},
|
||||
"west": {"uv": [8, 1, 9, 2], "texture": "#texture"},
|
||||
"up": {"uv": [8, 1, 1, 0], "texture": "#texture"},
|
||||
"down": {"uv": [16, 0, 9, 1], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "frame_west",
|
||||
"from": [1, 4, 7],
|
||||
"to": [3, 14, 9],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [1, 4, 7]},
|
||||
"faces": {
|
||||
"north": {"uv": [7, 2, 8, 7], "texture": "#texture"},
|
||||
"east": {"uv": [6, 2, 7, 7], "texture": "#texture"},
|
||||
"south": {"uv": [9, 2, 10, 7], "texture": "#texture"},
|
||||
"west": {"uv": [8, 2, 9, 7], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "frame_east",
|
||||
"from": [13, 4, 7],
|
||||
"to": [15, 14, 9],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [13, 4, 7]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 2, 2, 7], "texture": "#texture"},
|
||||
"east": {"uv": [0, 2, 1, 7], "texture": "#texture"},
|
||||
"south": {"uv": [15, 2, 16, 7], "texture": "#texture"},
|
||||
"west": {"uv": [2, 2, 3, 7], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "nose",
|
||||
"from": [7, 8, 7.5],
|
||||
"to": [9, 10, 8.5],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [7, 6, 7]},
|
||||
"faces": {
|
||||
"north": {"uv": [4, 4, 5, 5], "texture": "#texture"},
|
||||
"east": {"uv": [3.5, 4, 4, 5], "texture": "#texture"},
|
||||
"west": {"uv": [5, 4, 5.5, 5], "texture": "#texture"},
|
||||
"up": {"uv": [5, 4, 4, 3.5], "texture": "#texture"},
|
||||
"down": {"uv": [5, 5, 4, 5.5], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "blades",
|
||||
"from": [3, 4, 8],
|
||||
"to": [13, 14, 8],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, 5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 10, 10], "texture": "#blades"},
|
||||
"south": {"uv": [10, 0, 0, 10], "texture": "#blades"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "beams",
|
||||
"from": [3, 4, 8.5],
|
||||
"to": [13, 14, 8.5],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, 5, 8.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [15, 2, 10, 7], "texture": "#texture"},
|
||||
"south": {"uv": [10, 2, 15, 7], "texture": "#texture"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"groups": [
|
||||
{
|
||||
"name": "fan",
|
||||
"origin": [7, 6, 7],
|
||||
"scope": 0,
|
||||
"color": 0,
|
||||
"children": [0, 1, 2, 3, 4, 5, 6, 7]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "cobblemon:block/copper_fan_pushing",
|
||||
"textures": {
|
||||
"blades": "cobblemon:block/functional/copper_appliances/copper_fan_blades_fast"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"texture_size": [32, 32],
|
||||
"textures": {
|
||||
"texture": "cobblemon:block/functional/copper_appliances/copper_fan",
|
||||
"blades": "cobblemon:block/functional/copper_appliances/copper_fan_blades_unpowered",
|
||||
"particle": "block/chiseled_copper"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"name": "stand",
|
||||
"from": [6, 0, 6],
|
||||
"to": [10, 2, 10],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [6, 0, 6]},
|
||||
"faces": {
|
||||
"north": {"uv": [10, 11, 12, 12], "texture": "#texture"},
|
||||
"east": {"uv": [8, 11, 10, 12], "texture": "#texture"},
|
||||
"south": {"uv": [14, 11, 16, 12], "texture": "#texture"},
|
||||
"west": {"uv": [12, 11, 14, 12], "texture": "#texture"},
|
||||
"up": {"uv": [12, 11, 10, 9], "texture": "#texture"},
|
||||
"down": {"uv": [14, 9, 12, 11], "texture": "#texture", "cullface": "down"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "frame_bottom",
|
||||
"from": [1, 2, 7],
|
||||
"to": [15, 4, 9],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 2, 7]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 7, 8, 8], "texture": "#texture"},
|
||||
"east": {"uv": [0, 7, 1, 8], "texture": "#texture"},
|
||||
"south": {"uv": [9, 7, 16, 8], "texture": "#texture"},
|
||||
"west": {"uv": [8, 7, 9, 8], "texture": "#texture"},
|
||||
"up": {"uv": [8, 9, 1, 8], "texture": "#texture"},
|
||||
"down": {"uv": [16, 8, 9, 9], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "frame_top",
|
||||
"from": [1, 14, 7],
|
||||
"to": [15, 16, 9],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 14, 7]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 1, 8, 2], "texture": "#texture"},
|
||||
"east": {"uv": [0, 1, 1, 2], "texture": "#texture"},
|
||||
"south": {"uv": [9, 1, 16, 2], "texture": "#texture"},
|
||||
"west": {"uv": [8, 1, 9, 2], "texture": "#texture"},
|
||||
"up": {"uv": [8, 1, 1, 0], "texture": "#texture"},
|
||||
"down": {"uv": [16, 0, 9, 1], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "frame_west",
|
||||
"from": [1, 4, 7],
|
||||
"to": [3, 14, 9],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [1, 4, 7]},
|
||||
"faces": {
|
||||
"north": {"uv": [7, 2, 8, 7], "texture": "#texture"},
|
||||
"east": {"uv": [6, 2, 7, 7], "texture": "#texture"},
|
||||
"south": {"uv": [9, 2, 10, 7], "texture": "#texture"},
|
||||
"west": {"uv": [8, 2, 9, 7], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "frame_east",
|
||||
"from": [13, 4, 7],
|
||||
"to": [15, 14, 9],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [13, 4, 7]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 2, 2, 7], "texture": "#texture"},
|
||||
"east": {"uv": [0, 2, 1, 7], "texture": "#texture"},
|
||||
"south": {"uv": [15, 2, 16, 7], "texture": "#texture"},
|
||||
"west": {"uv": [2, 2, 3, 7], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "nose",
|
||||
"from": [7, 8, 7.5],
|
||||
"to": [9, 10, 8.5],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [7, 6, 7]},
|
||||
"faces": {
|
||||
"north": {"uv": [4, 4, 5, 5], "texture": "#texture"},
|
||||
"east": {"uv": [3.5, 4, 4, 5], "texture": "#texture"},
|
||||
"west": {"uv": [5, 4, 5.5, 5], "texture": "#texture"},
|
||||
"up": {"uv": [5, 4, 4, 3.5], "texture": "#texture"},
|
||||
"down": {"uv": [5, 5, 4, 5.5], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "blades",
|
||||
"from": [3, 4, 8],
|
||||
"to": [13, 14, 8],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, 5, 8]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 10, 10], "texture": "#blades"},
|
||||
"south": {"uv": [10, 0, 0, 10], "texture": "#blades"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "beams",
|
||||
"from": [3, 4, 8.5],
|
||||
"to": [13, 14, 8.5],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, 5, 8.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [15, 2, 10, 7], "texture": "#texture"},
|
||||
"south": {"uv": [10, 2, 15, 7], "texture": "#texture"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [0, 1.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [0, 1.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, 45, 0],
|
||||
"translation": [1, 0, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, -135, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 3, 0],
|
||||
"scale": [0.25, 0.25, 0.25]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [30, -135, 0],
|
||||
"scale": [0.625, 0.625, 0.625]
|
||||
},
|
||||
"fixed": {
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "fan",
|
||||
"origin": [7, 6, 7],
|
||||
"scope": 0,
|
||||
"color": 0,
|
||||
"children": [0, 1, 2, 3, 4, 5, 6, 7]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"texture_size": [64, 64],
|
||||
"textures": {
|
||||
"texture": "cobblemon:block/functional/copper_appliances/copper_fridge",
|
||||
"particle": "block/chiseled_copper"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"name": "back",
|
||||
"from": [0, 1, 1],
|
||||
"to": [16, 16, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [0, 1, 0]},
|
||||
"faces": {
|
||||
"north": {"uv": [3.75, 7.75, 7.75, 11.5], "texture": "#texture"},
|
||||
"east": {"uv": [0, 7.75, 3.75, 11.5], "texture": "#texture", "cullface": "east"},
|
||||
"south": {"uv": [11.5, 7.75, 15.5, 11.5], "texture": "#texture", "cullface": "south"},
|
||||
"west": {"uv": [7.75, 7.75, 11.5, 11.5], "texture": "#texture", "cullface": "west"},
|
||||
"down": {"uv": [11.75, 0, 7.75, 3.75], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "feet",
|
||||
"from": [1, 0, 2],
|
||||
"to": [15, 1, 15],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [1, 0, 2]},
|
||||
"faces": {
|
||||
"north": {"uv": [4.5, 15, 8, 15.25], "texture": "#texture"},
|
||||
"east": {"uv": [1.25, 15, 4.5, 15.25], "texture": "#texture"},
|
||||
"south": {"uv": [11.25, 15, 14.75, 15.25], "texture": "#texture"},
|
||||
"west": {"uv": [8, 15, 11.25, 15.25], "texture": "#texture"},
|
||||
"down": {"uv": [11.5, 11.75, 8, 15], "texture": "#texture", "cullface": "down"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"rotation": [75, 135, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"rotation": [75, 135, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [0, -1, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, 135, 0],
|
||||
"translation": [0, -1, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 3, 0],
|
||||
"scale": [0.25, 0.25, 0.25]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [30, -135, 0],
|
||||
"translation": [0, -3, 0],
|
||||
"scale": [0.425, 0.425, 0.425]
|
||||
},
|
||||
"fixed": {
|
||||
"translation": [0, -3.75, 0],
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
},
|
||||
"on_shelf": {
|
||||
"rotation": [0, -180, 0]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "fridge",
|
||||
"origin": [8, 0, 8],
|
||||
"scope": 0,
|
||||
"color": 0,
|
||||
"children": [
|
||||
{
|
||||
"name": "fridge_bottom",
|
||||
"origin": [8, 8, 8],
|
||||
"scope": 0,
|
||||
"color": 0,
|
||||
"children": [
|
||||
0,
|
||||
1,
|
||||
{
|
||||
"name": "drawer",
|
||||
"origin": [8, 8, 8],
|
||||
"scope": 0,
|
||||
"color": 0,
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"name": "door_west2",
|
||||
"origin": [0, 16, 5],
|
||||
"scope": 0,
|
||||
"color": 0,
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"name": "door_east2",
|
||||
"origin": [16, 16, 5],
|
||||
"scope": 0,
|
||||
"color": 0,
|
||||
"children": []
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"texture_size": [64, 64],
|
||||
"textures": {
|
||||
"texture": "cobblemon:block/functional/copper_appliances/copper_fridge",
|
||||
"particle": "block/chiseled_copper"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [0, 0, 1],
|
||||
"to": [16, 16, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [0, -16, 0]},
|
||||
"faces": {
|
||||
"north": {"uv": [3.75, 3.75, 7.75, 7.75], "texture": "#texture"},
|
||||
"east": {"uv": [0, 3.75, 3.75, 7.75], "texture": "#texture", "cullface": "east"},
|
||||
"south": {"uv": [11.5, 3.75, 15.5, 7.75], "texture": "#texture", "cullface": "south"},
|
||||
"west": {"uv": [7.75, 3.75, 11.5, 7.75], "texture": "#texture", "cullface": "west"},
|
||||
"up": {"uv": [7.75, 3.75, 3.75, 0], "texture": "#texture", "cullface": "up"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, 2, 0],
|
||||
"to": [6, 5, 1],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, 2, 0]},
|
||||
"faces": {
|
||||
"north": {"uv": [1.5, 0.25, 2, 1], "texture": "#texture"},
|
||||
"east": {"uv": [1.25, 0.25, 1.5, 1], "texture": "#texture"},
|
||||
"west": {"uv": [2, 0.25, 2.25, 1], "texture": "#texture"},
|
||||
"up": {"uv": [2, 0.25, 1.5, 0], "texture": "#texture"},
|
||||
"down": {"uv": [2.5, 0, 2, 0.25], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [10, 2, 0],
|
||||
"to": [12, 5, 1],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [10, 2, 0]},
|
||||
"faces": {
|
||||
"north": {"uv": [0.25, 0.25, 0.75, 1], "texture": "#texture"},
|
||||
"east": {"uv": [0, 0.25, 0.25, 1], "texture": "#texture"},
|
||||
"west": {"uv": [0.75, 0.25, 1, 1], "texture": "#texture"},
|
||||
"up": {"uv": [0.75, 0.25, 0.25, 0], "texture": "#texture"},
|
||||
"down": {"uv": [1.25, 0, 0.75, 0.25], "texture": "#texture"}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,160 @@
|
||||
{
|
||||
"format_version": "1.21.11",
|
||||
"credit": "Made with Blockbench",
|
||||
"texture_size": [64, 32],
|
||||
"textures": {
|
||||
"texture": "cobblemon:block/functional/copper_appliances/copper_mower",
|
||||
"particle": "block/chiseled_copper"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [1, 0, 10],
|
||||
"to": [15, 10, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 0, 11]},
|
||||
"faces": {
|
||||
"north": {"uv": [1.5, 3, 5, 8], "texture": "#texture"},
|
||||
"east": {"uv": [0, 3, 1.5, 8], "texture": "#texture"},
|
||||
"south": {"uv": [6.5, 3, 10, 8], "texture": "#texture", "cullface": "south"},
|
||||
"west": {"uv": [5, 3, 6.5, 8], "texture": "#texture"},
|
||||
"up": {"uv": [5, 3, 1.5, 0], "texture": "#texture"},
|
||||
"down": {"uv": [8.5, 0, 5, 3], "texture": "#texture", "cullface": "down"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [3, 0, 0],
|
||||
"to": [13, 6, 10],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, 0, 1]},
|
||||
"faces": {
|
||||
"north": {"uv": [2.5, 13, 5, 16], "texture": "#texture"},
|
||||
"east": {"uv": [0, 13, 2.5, 16], "texture": "#texture"},
|
||||
"west": {"uv": [5, 13, 7.5, 16], "texture": "#texture"},
|
||||
"up": {"uv": [5, 13, 2.5, 8], "texture": "#texture"},
|
||||
"down": {"uv": [7.5, 8, 5, 13], "texture": "#texture", "cullface": "down"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [2, 0, 3],
|
||||
"to": [3, 5, 8],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 2.5, 5.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [14.25, 3, 14.5, 5.5], "texture": "#texture"},
|
||||
"south": {"uv": [15.75, 3, 16, 5.5], "texture": "#texture"},
|
||||
"west": {"uv": [14.5, 3, 15.75, 5.5], "texture": "#texture"},
|
||||
"up": {"uv": [14.5, 3, 14.25, 0.5], "texture": "#texture"},
|
||||
"down": {"uv": [14.75, 0.5, 14.5, 3], "texture": "#texture", "cullface": "down"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [13, 0, 3],
|
||||
"to": [14, 5, 8],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 2.5, 5.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [11.25, 3, 11.5, 5.5], "texture": "#texture"},
|
||||
"east": {"uv": [10, 3, 11.25, 5.5], "texture": "#texture"},
|
||||
"south": {"uv": [12.75, 3, 13, 5.5], "texture": "#texture"},
|
||||
"up": {"uv": [11.5, 3, 11.25, 0.5], "texture": "#texture"},
|
||||
"down": {"uv": [11.75, 0.5, 11.5, 3], "texture": "#texture", "cullface": "down"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [6.5, 6, 4.5],
|
||||
"to": [9.5, 10, 7.5],
|
||||
"rotation": {"angle": 22.5, "axis": "x", "origin": [8, 6, 4.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [12.25, 13, 13, 15], "texture": "#texture"},
|
||||
"east": {"uv": [11.5, 13, 12.25, 15], "texture": "#texture"},
|
||||
"south": {"uv": [13.75, 13, 14.5, 15], "texture": "#texture"},
|
||||
"west": {"uv": [13, 13, 13.75, 15], "texture": "#texture"},
|
||||
"up": {"uv": [13, 13, 12.25, 11.5], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [7, 10, 5],
|
||||
"to": [9, 15, 7],
|
||||
"rotation": {"angle": 22.5, "axis": "x", "origin": [8, 6, 4.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [12.5, 9, 13, 11.5], "texture": "#texture"},
|
||||
"east": {"uv": [12, 9, 12.5, 11.5], "texture": "#texture"},
|
||||
"south": {"uv": [13.5, 9, 14, 11.5], "texture": "#texture"},
|
||||
"west": {"uv": [13, 9, 13.5, 11.5], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, 15, 5],
|
||||
"to": [12, 17, 7],
|
||||
"rotation": {"angle": 22.5, "axis": "x", "origin": [8, 6, 4.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [11, 7, 13, 8], "texture": "#texture"},
|
||||
"east": {"uv": [10.5, 7, 11, 8], "texture": "#texture"},
|
||||
"south": {"uv": [13.5, 7, 15.5, 8], "texture": "#texture"},
|
||||
"west": {"uv": [13, 7, 13.5, 8], "texture": "#texture"},
|
||||
"up": {"uv": [13, 7, 11, 6], "texture": "#texture"},
|
||||
"down": {"uv": [15, 6, 13, 7], "texture": "#texture"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, 45, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, 45, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 3, 0],
|
||||
"scale": [0.25, 0.25, 0.25]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [30, -135, 0],
|
||||
"scale": [0.625, 0.625, 0.625]
|
||||
},
|
||||
"head": {
|
||||
"translation": [0, 14.25, 0]
|
||||
},
|
||||
"fixed": {
|
||||
"rotation": [0, 90, 0],
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
},
|
||||
"on_shelf": {
|
||||
"rotation": [0, -180, 0]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "mower",
|
||||
"origin": [8, 0, 8],
|
||||
"scope": 0,
|
||||
"color": 0,
|
||||
"children": [
|
||||
0,
|
||||
1,
|
||||
{
|
||||
"name": "wheels",
|
||||
"origin": [8, 2, 6],
|
||||
"scope": 0,
|
||||
"color": 4,
|
||||
"children": [2, 3]
|
||||
},
|
||||
{
|
||||
"name": "handle",
|
||||
"origin": [8, 6, 4.5],
|
||||
"scope": 0,
|
||||
"color": 1,
|
||||
"children": [4, 5, 6]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,167 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"texture_size": [64, 32],
|
||||
"textures": {
|
||||
"texture": "cobblemon:block/functional/copper_appliances/copper_oven",
|
||||
"particle": "block/chiseled_copper"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"name": "west",
|
||||
"from": [1, 0, 5],
|
||||
"to": [2, 10, 15],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 10]},
|
||||
"faces": {
|
||||
"north": {"uv": [8, 6.5, 8.25, 11.5], "texture": "#texture"},
|
||||
"east": {"uv": [5.5, 6.5, 8, 11.5], "texture": "#texture"},
|
||||
"south": {"uv": [10.75, 6.5, 11, 11.5], "texture": "#texture"},
|
||||
"west": {"uv": [8.25, 6.5, 10.75, 11.5], "texture": "#texture"},
|
||||
"up": {"uv": [8.25, 6.5, 5.75, 6], "rotation": 90, "texture": "#texture"},
|
||||
"down": {"uv": [8.25, 6.5, 10.75, 6], "rotation": 90, "texture": "#texture", "cullface": "down"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "east",
|
||||
"from": [14, 0, 5],
|
||||
"to": [15, 10, 15],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [20, 5, 10]},
|
||||
"faces": {
|
||||
"north": {"uv": [2.5, 6.5, 2.75, 11.5], "texture": "#texture"},
|
||||
"east": {"uv": [0, 6.5, 2.5, 11.5], "texture": "#texture"},
|
||||
"south": {"uv": [5.25, 6.5, 5.5, 11.5], "texture": "#texture"},
|
||||
"west": {"uv": [2.75, 6.5, 5.25, 11.5], "texture": "#texture"},
|
||||
"up": {"uv": [2.75, 6.5, 0.25, 6], "rotation": 90, "texture": "#texture"},
|
||||
"down": {"uv": [2.75, 6.5, 5.25, 6], "rotation": 90, "texture": "#texture", "cullface": "down"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "bottom",
|
||||
"from": [2, 0, 5],
|
||||
"to": [14, 1, 15],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [9, 5, 10]},
|
||||
"faces": {
|
||||
"north": {"uv": [10, 5, 13, 5.5], "texture": "#texture"},
|
||||
"south": {"uv": [13, 5, 16, 5.5], "texture": "#texture"},
|
||||
"up": {"uv": [13, 5, 10, 0], "texture": "#texture"},
|
||||
"down": {"uv": [16, 0, 13, 5], "texture": "#texture", "cullface": "down"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "top",
|
||||
"from": [2, 8, 5],
|
||||
"to": [14, 10, 15],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [9, 13, 10]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 5, 3, 6], "texture": "#texture"},
|
||||
"south": {"uv": [3, 5, 6, 6], "texture": "#texture"},
|
||||
"up": {"uv": [3, 5, 0, 0], "texture": "#texture"},
|
||||
"down": {"uv": [6, 0, 3, 5], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "back",
|
||||
"from": [2, 1, 14],
|
||||
"to": [14, 8, 15],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 10]},
|
||||
"faces": {
|
||||
"north": {"uv": [10, 11.5, 13, 15], "texture": "#texture"},
|
||||
"south": {"uv": [13, 11.5, 16, 15], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4.5, 1, 6.5],
|
||||
"to": [11.5, 2, 13.5],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 1.5, 9.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [11.25, 10.5, 13, 11], "texture": "#texture"},
|
||||
"east": {"uv": [11, 7, 11.25, 10.5], "rotation": 90, "texture": "#texture"},
|
||||
"south": {"uv": [11.25, 6.5, 13, 7], "rotation": 180, "texture": "#texture"},
|
||||
"west": {"uv": [13, 7, 13.25, 10.5], "rotation": 90, "texture": "#texture"},
|
||||
"up": {"uv": [13, 10.5, 11.25, 7], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [2, 1, 5],
|
||||
"to": [14, 8, 6],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 5]},
|
||||
"faces": {
|
||||
"north": {"uv": [4.75, 15, 7.75, 11.5], "texture": "#texture"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, 45, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, -135, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 3, 0],
|
||||
"scale": [0.25, 0.25, 0.25]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [30, -135, 0],
|
||||
"scale": [0.625, 0.625, 0.625]
|
||||
},
|
||||
"head": {
|
||||
"translation": [0, 14.5, 0]
|
||||
},
|
||||
"fixed": {
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
},
|
||||
"on_shelf": {
|
||||
"rotation": [0, -180, 0]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "shell",
|
||||
"origin": [8, 5, 9],
|
||||
"scope": 0,
|
||||
"color": 0,
|
||||
"children": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
{
|
||||
"name": "table",
|
||||
"origin": [8, 5, 9],
|
||||
"scope": 0,
|
||||
"color": 0,
|
||||
"children": [5]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "door",
|
||||
"origin": [8, 8, 8],
|
||||
"scope": 0,
|
||||
"color": 0,
|
||||
"children": [
|
||||
{
|
||||
"name": "closed",
|
||||
"origin": [8, 8, 8],
|
||||
"scope": 0,
|
||||
"color": 0,
|
||||
"children": [6]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"texture_size": [64, 32],
|
||||
"textures": {
|
||||
"texture": "cobblemon:block/functional/copper_appliances/copper_oven",
|
||||
"particle": "block/chiseled_copper"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"name": "west",
|
||||
"from": [1, 0, 5],
|
||||
"to": [2, 10, 15],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 10]},
|
||||
"faces": {
|
||||
"north": {"uv": [8, 6.5, 8.25, 11.5], "texture": "#texture"},
|
||||
"east": {"uv": [5.5, 6.5, 8, 11.5], "texture": "#texture"},
|
||||
"south": {"uv": [10.75, 6.5, 11, 11.5], "texture": "#texture"},
|
||||
"west": {"uv": [8.25, 6.5, 10.75, 11.5], "texture": "#texture"},
|
||||
"up": {"uv": [8.25, 6.5, 5.75, 6], "rotation": 90, "texture": "#texture"},
|
||||
"down": {"uv": [8.25, 6.5, 10.75, 6], "rotation": 90, "texture": "#texture", "cullface": "down"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "east",
|
||||
"from": [14, 0, 5],
|
||||
"to": [15, 10, 15],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [20, 5, 10]},
|
||||
"faces": {
|
||||
"north": {"uv": [2.5, 6.5, 2.75, 11.5], "texture": "#texture"},
|
||||
"east": {"uv": [0, 6.5, 2.5, 11.5], "texture": "#texture"},
|
||||
"south": {"uv": [5.25, 6.5, 5.5, 11.5], "texture": "#texture"},
|
||||
"west": {"uv": [2.75, 6.5, 5.25, 11.5], "texture": "#texture"},
|
||||
"up": {"uv": [2.75, 6.5, 0.25, 6], "rotation": 90, "texture": "#texture"},
|
||||
"down": {"uv": [2.75, 6.5, 5.25, 6], "rotation": 90, "texture": "#texture", "cullface": "down"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "bottom",
|
||||
"from": [2, 0, 5],
|
||||
"to": [14, 1, 15],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [9, 5, 10]},
|
||||
"faces": {
|
||||
"north": {"uv": [10, 5, 13, 5.5], "texture": "#texture"},
|
||||
"south": {"uv": [13, 5, 16, 5.5], "texture": "#texture"},
|
||||
"up": {"uv": [13, 5, 10, 0], "texture": "#texture"},
|
||||
"down": {"uv": [16, 0, 13, 5], "texture": "#texture", "cullface": "down"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "top",
|
||||
"from": [2, 8, 5],
|
||||
"to": [14, 10, 15],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [9, 13, 10]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 5, 3, 6], "texture": "#texture"},
|
||||
"south": {"uv": [3, 5, 6, 6], "texture": "#texture"},
|
||||
"up": {"uv": [3, 5, 0, 0], "texture": "#texture"},
|
||||
"down": {"uv": [6, 0, 3, 5], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "back",
|
||||
"from": [2, 1, 14],
|
||||
"to": [14, 8, 15],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 5, 10]},
|
||||
"faces": {
|
||||
"north": {"uv": [10, 11.5, 13, 15], "texture": "#texture"},
|
||||
"south": {"uv": [13, 11.5, 16, 15], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4.5, 1, 6.5],
|
||||
"to": [11.5, 2, 13.5],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 1.5, 9.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [11.25, 10.5, 13, 11], "texture": "#texture"},
|
||||
"east": {"uv": [11, 7, 11.25, 10.5], "rotation": 90, "texture": "#texture"},
|
||||
"south": {"uv": [11.25, 6.5, 13, 7], "rotation": 180, "texture": "#texture"},
|
||||
"west": {"uv": [13, 7, 13.25, 10.5], "rotation": 90, "texture": "#texture"},
|
||||
"up": {"uv": [13, 10.5, 11.25, 7], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [2, 1, -1],
|
||||
"to": [14, 2, 6],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [8, 1, 6]},
|
||||
"faces": {
|
||||
"north": {"uv": [1.75, 15, 4.75, 15.5], "texture": "#texture"},
|
||||
"east": {"uv": [0, 15, 1.75, 15.5], "texture": "#texture"},
|
||||
"south": {"uv": [6.5, 15, 9.5, 15.5], "texture": "#texture"},
|
||||
"west": {"uv": [4.75, 15, 6.5, 15.5], "texture": "#texture"},
|
||||
"up": {"uv": [4.75, 15, 1.75, 11.5], "texture": "#texture"},
|
||||
"down": {"uv": [7.75, 11.5, 4.75, 15], "texture": "#texture"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"thirdperson_righthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"thirdperson_lefthand": {
|
||||
"rotation": [75, 45, 0],
|
||||
"translation": [0, 2.5, 0],
|
||||
"scale": [0.375, 0.375, 0.375]
|
||||
},
|
||||
"firstperson_righthand": {
|
||||
"rotation": [0, 45, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"firstperson_lefthand": {
|
||||
"rotation": [0, -135, 0],
|
||||
"scale": [0.4, 0.4, 0.4]
|
||||
},
|
||||
"ground": {
|
||||
"translation": [0, 3, 0],
|
||||
"scale": [0.25, 0.25, 0.25]
|
||||
},
|
||||
"gui": {
|
||||
"rotation": [30, -135, 0],
|
||||
"scale": [0.625, 0.625, 0.625]
|
||||
},
|
||||
"head": {
|
||||
"translation": [0, 14.5, 0]
|
||||
},
|
||||
"fixed": {
|
||||
"scale": [0.5, 0.5, 0.5]
|
||||
},
|
||||
"on_shelf": {
|
||||
"rotation": [0, -180, 0]
|
||||
}
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"name": "shell",
|
||||
"origin": [8, 5, 9],
|
||||
"scope": 0,
|
||||
"color": 0,
|
||||
"children": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
{
|
||||
"name": "table",
|
||||
"origin": [8, 5, 9],
|
||||
"scope": 0,
|
||||
"color": 0,
|
||||
"children": [5]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "door",
|
||||
"origin": [8, 8, 8],
|
||||
"scope": 0,
|
||||
"color": 0,
|
||||
"children": [
|
||||
{
|
||||
"name": "open",
|
||||
"origin": [8, 8, 8],
|
||||
"scope": 0,
|
||||
"color": 0,
|
||||
"children": [6]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
+106
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"texture_size": [32, 32],
|
||||
"textures": {
|
||||
"texture": "cobblemon:block/functional/copper_appliances/copper_fan",
|
||||
"blades": "cobblemon:block/functional/copper_appliances/copper_fan_blades_slow",
|
||||
"particle": "block/chiseled_copper"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"name": "frame_bottom",
|
||||
"from": [1, 1, 14],
|
||||
"to": [15, 3, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 1, 14]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 12.5, 8, 13.5], "texture": "#texture"},
|
||||
"east": {"uv": [0, 7, 1, 8], "texture": "#texture"},
|
||||
"south": {"uv": [9, 7, 16, 8], "texture": "#texture"},
|
||||
"west": {"uv": [8, 7, 9, 8], "texture": "#texture"},
|
||||
"up": {"uv": [8, 9, 1, 8], "texture": "#texture"},
|
||||
"down": {"uv": [16, 8, 9, 9], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "frame_top",
|
||||
"from": [1, 13, 14],
|
||||
"to": [15, 15, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 13, 14]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 1, 8, 2], "texture": "#texture"},
|
||||
"east": {"uv": [0, 1, 1, 2], "texture": "#texture"},
|
||||
"south": {"uv": [9, 1, 16, 2], "texture": "#texture"},
|
||||
"west": {"uv": [8, 1, 9, 2], "texture": "#texture"},
|
||||
"up": {"uv": [8, 1, 1, 0], "texture": "#texture"},
|
||||
"down": {"uv": [16, 0, 9, 1], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "frame_west",
|
||||
"from": [1, 3, 14],
|
||||
"to": [3, 13, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [1, 3, 14]},
|
||||
"faces": {
|
||||
"north": {"uv": [7, 2, 8, 7], "texture": "#texture"},
|
||||
"east": {"uv": [6, 2, 7, 7], "texture": "#texture"},
|
||||
"south": {"uv": [9, 2, 10, 7], "texture": "#texture"},
|
||||
"west": {"uv": [8, 2, 9, 7], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "frame_east",
|
||||
"from": [13, 3, 14],
|
||||
"to": [15, 13, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [13, 3, 14]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 2, 2, 7], "texture": "#texture"},
|
||||
"east": {"uv": [0, 2, 1, 7], "texture": "#texture"},
|
||||
"south": {"uv": [15, 2, 16, 7], "texture": "#texture"},
|
||||
"west": {"uv": [2, 2, 3, 7], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "nose",
|
||||
"from": [7, 7, 14.5],
|
||||
"to": [9, 9, 15.5],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [7, 5, 14]},
|
||||
"faces": {
|
||||
"north": {"uv": [4, 4, 5, 5], "texture": "#texture"},
|
||||
"east": {"uv": [3.5, 4, 4, 5], "texture": "#texture"},
|
||||
"west": {"uv": [5, 4, 5.5, 5], "texture": "#texture"},
|
||||
"up": {"uv": [5, 4, 4, 3.5], "texture": "#texture"},
|
||||
"down": {"uv": [5, 5, 4, 5.5], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "blades",
|
||||
"from": [3, 3, 15],
|
||||
"to": [13, 13, 15],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, 4, 15]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 10, 10], "texture": "#blades"},
|
||||
"south": {"uv": [10, 0, 0, 10], "texture": "#blades"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "beams",
|
||||
"from": [3, 3, 15.5],
|
||||
"to": [13, 13, 15.5],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, 4, 15.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [15, 2, 10, 7], "texture": "#texture"},
|
||||
"south": {"uv": [10, 2, 15, 7], "texture": "#texture"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"groups": [
|
||||
{
|
||||
"name": "fan",
|
||||
"origin": [7, 6, 7],
|
||||
"scope": 0,
|
||||
"color": 0,
|
||||
"children": [0, 1, 2, 3, 4, 5, 6]
|
||||
}
|
||||
]
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "cobblemon:block/copper_fan_decorative",
|
||||
"textures": {
|
||||
"blades": "cobblemon:block/functional/copper_appliances/copper_fan_blades_fast"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"format_version": "1.9.0",
|
||||
"credit": "Made with Blockbench",
|
||||
"texture_size": [32, 32],
|
||||
"textures": {
|
||||
"texture": "cobblemon:block/functional/copper_appliances/copper_fan",
|
||||
"blades": "cobblemon:block/functional/copper_appliances/copper_fan_blades_slow",
|
||||
"particle": "block/chiseled_copper"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"name": "frame_bottom",
|
||||
"from": [1, 1, 14],
|
||||
"to": [15, 3, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 1, 14]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 11, 8, 12], "texture": "#texture"},
|
||||
"east": {"uv": [0, 7, 1, 8], "texture": "#texture"},
|
||||
"south": {"uv": [9, 7, 16, 8], "texture": "#texture"},
|
||||
"west": {"uv": [8, 7, 9, 8], "texture": "#texture"},
|
||||
"up": {"uv": [8, 9, 1, 8], "texture": "#texture"},
|
||||
"down": {"uv": [16, 8, 9, 9], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "frame_top",
|
||||
"from": [1, 13, 14],
|
||||
"to": [15, 15, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [2, 13, 14]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 1, 8, 2], "texture": "#texture"},
|
||||
"east": {"uv": [0, 1, 1, 2], "texture": "#texture"},
|
||||
"south": {"uv": [9, 1, 16, 2], "texture": "#texture"},
|
||||
"west": {"uv": [8, 1, 9, 2], "texture": "#texture"},
|
||||
"up": {"uv": [8, 1, 1, 0], "texture": "#texture"},
|
||||
"down": {"uv": [16, 0, 9, 1], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "frame_west",
|
||||
"from": [1, 3, 14],
|
||||
"to": [3, 13, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [1, 3, 14]},
|
||||
"faces": {
|
||||
"north": {"uv": [7, 2, 8, 7], "texture": "#texture"},
|
||||
"east": {"uv": [6, 2, 7, 7], "texture": "#texture"},
|
||||
"south": {"uv": [9, 2, 10, 7], "texture": "#texture"},
|
||||
"west": {"uv": [8, 2, 9, 7], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "frame_east",
|
||||
"from": [13, 3, 14],
|
||||
"to": [15, 13, 16],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [13, 3, 14]},
|
||||
"faces": {
|
||||
"north": {"uv": [1, 2, 2, 7], "texture": "#texture"},
|
||||
"east": {"uv": [0, 2, 1, 7], "texture": "#texture"},
|
||||
"south": {"uv": [15, 2, 16, 7], "texture": "#texture"},
|
||||
"west": {"uv": [2, 2, 3, 7], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "nose",
|
||||
"from": [7, 7, 14.5],
|
||||
"to": [9, 9, 15.5],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [7, 5, 14]},
|
||||
"faces": {
|
||||
"north": {"uv": [4, 4, 5, 5], "texture": "#texture"},
|
||||
"east": {"uv": [3.5, 4, 4, 5], "texture": "#texture"},
|
||||
"west": {"uv": [5, 4, 5.5, 5], "texture": "#texture"},
|
||||
"up": {"uv": [5, 4, 4, 3.5], "texture": "#texture"},
|
||||
"down": {"uv": [5, 5, 4, 5.5], "texture": "#texture"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "blades",
|
||||
"from": [3, 3, 15],
|
||||
"to": [13, 13, 15],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, 4, 15]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 10, 10], "texture": "#blades"},
|
||||
"south": {"uv": [10, 0, 0, 10], "texture": "#blades"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "beams",
|
||||
"from": [3, 3, 15.5],
|
||||
"to": [13, 13, 15.5],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, 4, 15.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [15, 2, 10, 7], "texture": "#texture"},
|
||||
"south": {"uv": [10, 2, 15, 7], "texture": "#texture"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"groups": [
|
||||
{
|
||||
"name": "fan",
|
||||
"origin": [7, 6, 7],
|
||||
"scope": 0,
|
||||
"color": 0,
|
||||
"children": [0, 1, 2, 3, 4, 5, 6]
|
||||
}
|
||||
]
|
||||
}
|
||||
Loaded 100 of 403 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user