This commit is contained in:
DBotThePony 2024-01-22 11:39:06 +07:00
commit f0dba4ccc3
Signed by: DBot
GPG Key ID: DCC23B5715498507
27 changed files with 477 additions and 557 deletions

View File

@ -10,12 +10,20 @@ fun addBlockModels(provider: MatteryBlockModelProvider) {
resourceCubeAll(MBlocks.DEEPSLATE_TRITANIUM_ORE)
resourceCubeAll(MBlocks.TRITANIUM_INGOT_BLOCK)
cable("crude_energy_cable", "block/power_cable_0")
cable("regular_energy_cable", "block/power_cable_1")
cable("advanced_energy_cable", "block/power_cable_2")
cable("superconductor_energy_cable", "block/power_cable_3")
cable("storage_cable", "block/storage_cable")
colored(MBlocks.COBBLESTONE_GENERATOR, listOf("0", "particle"))
colored(MBlocks.ESSENCE_STORAGE, listOf("0", "particle"))
colored(MBlocks.ITEM_MONITOR, listOf("0", "particle"))
colored(MBlocks.MATTER_RECONSTRUCTOR, listOf("0", "particle"))
colored(MBlocks.ENERGY_SERVO, listOf("0", "particle"))
colored("essence_storage", "_empty", listOf("0"))
colored("essence_storage", "_filled", listOf("0"))
colored("matter_capacitor_bank", listOf("1", "particle"), "mattercapacitorbank_frame")
colored("battery_bank", listOf("0", "particle"), "batterybank_frame")

View File

@ -8,6 +8,7 @@ import ru.dbotthepony.mc.otm.block.decorative.CargoCrateBlock
import ru.dbotthepony.mc.otm.block.entity.WorkerState
import ru.dbotthepony.mc.otm.block.matter.MatterBottlerBlock
import ru.dbotthepony.mc.otm.block.tech.AndroidChargerBlock
import ru.dbotthepony.mc.otm.block.tech.EssenceStorageBlock
import ru.dbotthepony.mc.otm.core.math.BlockRotationFreedom
import ru.dbotthepony.mc.otm.core.math.xRotationBlockstateNorth
import ru.dbotthepony.mc.otm.core.math.xRotationBlockstateSouth
@ -112,7 +113,22 @@ fun addBlockStates(provider: MatteryBlockStateProvider) {
provider.block(MBlocks.MATTER_RECONSTRUCTOR.values)
provider.block(MBlocks.ENERGY_SERVO.values)
provider.block(MBlocks.COBBLESTONE_GENERATOR.values)
provider.block(MBlocks.ESSENCE_STORAGE.values)
provider.exec {
for (block in MBlocks.ESSENCE_STORAGE.values) {
provider.getVariantBuilder(block).forAllStates {
return@forAllStates arrayOf(
ConfiguredModel.builder()
.modelFile(provider.models().getExistingFile(
modLocation("${block.registryName!!.path}_${if (it.getValue(
EssenceStorageBlock.FILLED)) "filled" else "empty"}")
))
.rotationY(it.getValue(BlockRotationFreedom.HORIZONTAL.property).front.yRotationBlockstateNorth())
.buildLast()
)
}
}
}
provider.exec {
for (crate in MRegistry.CARGO_CRATES.allBlocks.values) {
@ -191,5 +207,49 @@ fun addBlockStates(provider: MatteryBlockStateProvider) {
part().modelFile(provider.models().getExistingFile(modLocation("storage_cable_core")))
.addModel().end()
}
with(provider.getMultipartBuilder(MBlocks.MATTER_CABLE)) {
for (dir in BlockRotationFreedom.DIRECTIONAL.possibleValues) {
part().modelFile(provider.models().getExistingFile(modLocation("matter_cable_connection")))
.rotationX(dir.front.xRotationBlockstateSouth())
.rotationY(dir.front.yRotationBlockstateSouth())
.addModel()
.condition(CableBlock.MAPPING_CONNECTION_PROP[dir.front]!!, true)
.end()
}
part().modelFile(provider.models().getExistingFile(modLocation("matter_cable_core")))
.addModel().end()
}
with(provider.getMultipartBuilder(MBlocks.STORAGE_CABLE)) {
for (dir in BlockRotationFreedom.DIRECTIONAL.possibleValues) {
part().modelFile(provider.models().getExistingFile(modLocation("storage_cable_connection")))
.rotationX(dir.front.xRotationBlockstateSouth())
.rotationY(dir.front.yRotationBlockstateSouth())
.addModel()
.condition(CableBlock.MAPPING_CONNECTION_PROP[dir.front]!!, true)
.end()
}
part().modelFile(provider.models().getExistingFile(modLocation("storage_cable_core")))
.addModel().end()
}
for (block in MBlocks.ENERGY_CABLES) {
with(provider.getMultipartBuilder(block.value)) {
for (dir in BlockRotationFreedom.DIRECTIONAL.possibleValues) {
part().modelFile(provider.models().getExistingFile(modLocation("${block.value.registryName!!.path}_connection")))
.rotationX(dir.front.xRotationBlockstateSouth())
.rotationY(dir.front.yRotationBlockstateSouth())
.addModel()
.condition(CableBlock.MAPPING_CONNECTION_PROP[dir.front]!!, true)
.end()
}
part().modelFile(provider.models().getExistingFile(modLocation("${block.value.registryName!!.path}_core")))
.addModel().end()
}
}
}
}

View File

@ -172,10 +172,8 @@ fun addItemModels(provider: MatteryItemModelProvider) {
provider.coloredWithBaseBlock(MItems.MATTER_SCANNER, "matter_scanner", "_idle")
provider.coloredWithBaseBlock(MItems.MATTER_REPLICATOR, "matter_replicator", "_idle")
provider.coloredWithBaseBlock(MItems.DRIVE_VIEWER, "drive_viewer", "_idle")
provider.block(MItems.MATTER_CABLE, "matter_cable_core")
provider.coloredWithBaseBlock(MItems.MATTER_DECOMPOSER, "matter_decomposer", "_idle")
provider.coloredWithBaseBlock(MItems.ENERGY_SERVO, "energy_servo")
provider.coloredWithBaseBlock(MItems.ESSENCE_STORAGE, "essence_storage")
provider.coloredWithBaseBlock(MItems.MATTER_RECONSTRUCTOR, "matter_reconstructor")
provider.coloredWithBaseBlock(MItems.POWERED_BLAST_FURNACE, "powered_blast_furnace", "_idle")
@ -188,10 +186,23 @@ fun addItemModels(provider: MatteryItemModelProvider) {
provider.coloredWithBaseBlock(MItems.MATTER_RECYCLER, "matter_recycler", "_idle")
provider.coloredWithBaseBlock(MItems.COBBLESTONE_GENERATOR, "cobblestone_generator")
provider.exec {
provider.withExistingParent("essence_storage", modLocation("block/essence_storage_empty"))
.override()
.predicate(modLocation("is_filled"), 1f)
.model(provider.withExistingParent("essence_storage_filled", modLocation("block/essence_storage_filled")))
.end()
}
for (dye in DyeColor.entries) {
provider.exec {
provider.withExistingParent("android_charger_${dye.name.lowercase()}", modLocation("item/android_charger")).texture("0", modLocation("block/android_charger/${dye.name.lowercase()}"))
provider.withExistingParent("matter_panel_${dye.name.lowercase()}", modLocation("item/matter_panel")).texture("texture", modLocation("block/matter_panel/${dye.name.lowercase()}"))
provider.withExistingParent("essence_storage_${dye.name.lowercase()}", modLocation("block/essence_storage_${dye.name.lowercase()}_empty"))
.override()
.predicate(modLocation("is_filled"), 1f)
.model(provider.withExistingParent("essence_storage_${dye.name.lowercase()}_filled", modLocation("block/essence_storage_${dye.name.lowercase()}_filled")))
.end()
}
}

View File

@ -608,8 +608,8 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.ESSENCE_CAPSULE, "Essence Capsule")
add(MItems.ESSENCE_DRIVE, "Essence Memory Holotape")
add(MItems.ESSENCE_SERVO, "Essence Servo")
add(MItems.ESSENCE_SERVO, "desc", "Allows to 'pump' essence involving fleshy humanoids")
add(MItems.ESSENCE_SERVO, "desc2", "Can be used standalone, or as tool inside Essence Servo")
add(MItems.ESSENCE_SERVO, "desc", "Allows to absorb nearby experience orbs directly into essence storage")
add(MItems.ESSENCE_SERVO, "desc2", "Can be used as a tool to pump essence manually")
add(MItems.NUTRIENT_PASTE, "Nutrient Paste")

View File

@ -612,8 +612,8 @@ private fun items(provider: MatteryLanguageProvider) {
add(MItems.ESSENCE_CAPSULE, "Капсула эссенции")
add(MItems.ESSENCE_DRIVE, "Голодиск воспоминаний андроида")
add(MItems.ESSENCE_SERVO, "Помпа эссенции")
add(MItems.ESSENCE_SERVO, "desc", "Позволяет 'перекачивать' эссенцию гуманоидов из плоти")
add(MItems.ESSENCE_SERVO, "desc2", "Может быть использовано напрямую, или как инструмент внутри хранилища эссенции")
add(MItems.ESSENCE_SERVO, "desc", "Позволяет всасывать близлежащие сферы опыта напрямую в хранилище эссенции")
add(MItems.ESSENCE_SERVO, "desc2", "Может использоваться как инструмент для ручной перекачки эссенции")
add(MItems.NUTRIENT_PASTE, "Питательная паста")

View File

@ -142,4 +142,17 @@ class MatteryBlockModelProvider(event: GatherDataEvent) : BlockModelProvider(eve
colored(modelName, state, textureKeys.associateWith { modelName })
}
}
fun cable(modelName: String, textureName: String) {
exec {
withExistingParent("block/${modelName}_core", modLocation("block/base_cable_core"))
.texture("0", textureName)
withExistingParent("block/${modelName}_connection", modLocation("block/base_cable_connection"))
.texture("0", textureName)
withExistingParent("item/${modelName}", modLocation("item/base_cable"))
.texture("0", textureName)
}
}
}

View File

@ -67,7 +67,7 @@ class PainterBlockEntity(blockPos: BlockPos, blockState: BlockState) : MatteryDe
override fun fill(resource: FluidStack, action: IFluidHandler.FluidAction): Int {
if (resource.isEmpty || resource.fluid != Fluids.WATER || waterStored() >= MAX_WATER_STORAGE) return 0
val diff = (waterStored() + resource.amount).coerceAtMost(MAX_WATER_STORAGE) - waterStored()
val diff = ((waterStored().toLong() + resource.amount.toLong()).coerceAtMost(MAX_WATER_STORAGE.toLong()) - waterStored().toLong()).toInt()
if (action.simulate() || diff == 0) return diff
dyeStored[null] = waterStored() + diff
return diff

View File

@ -1,20 +1,31 @@
package ru.dbotthepony.mc.otm.block.entity.tech
import net.minecraft.core.BlockPos
import net.minecraft.server.level.ServerLevel
import net.minecraft.sounds.SoundEvents
import net.minecraft.sounds.SoundSource
import net.minecraft.world.entity.ExperienceOrb
import net.minecraft.world.entity.player.Inventory
import net.minecraft.world.entity.player.Player
import net.minecraft.world.inventory.AbstractContainerMenu
import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.enchantment.Enchantments
import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.state.BlockState
import net.minecraftforge.fluids.FluidStack
import net.minecraftforge.fluids.capability.IFluidHandler
import ru.dbotthepony.mc.otm.block.entity.ExperienceStorage.Companion.XP_TO_LIQUID_RATIO
import ru.dbotthepony.mc.otm.block.entity.MatteryDeviceBlockEntity
import ru.dbotthepony.mc.otm.block.tech.EssenceStorageBlock
import ru.dbotthepony.mc.otm.capability.item.CombinedItemHandler
import ru.dbotthepony.mc.otm.config.MachinesConfig
import ru.dbotthepony.mc.otm.container.HandlerFilter
import ru.dbotthepony.mc.otm.container.MatteryContainer
import ru.dbotthepony.mc.otm.core.getEntitiesInEllipsoid
import ru.dbotthepony.mc.otm.core.math.Vector
import ru.dbotthepony.mc.otm.core.util.countingLazy
import ru.dbotthepony.mc.otm.item.EssenceCapsuleItem
import ru.dbotthepony.mc.otm.item.EssenceServoItem
import ru.dbotthepony.mc.otm.menu.tech.EssenceStorageMenu
import ru.dbotthepony.mc.otm.registry.MBlockEntities
import ru.dbotthepony.mc.otm.registry.MFluids
@ -119,6 +130,14 @@ class EssenceStorageBlockEntity(blockPos: BlockPos, blockState: BlockState) : Ma
return FluidStack(MFluids.LIQUID_XP, actualDrain)
}
private val hasFillState by countingLazy(blockStateChangesCounter) {
this.blockState.hasProperty(EssenceStorageBlock.FILLED)
}
private val isFilledState by countingLazy(blockStateChangesCounter) {
hasFillState && this.blockState.getValue(EssenceStorageBlock.FILLED)
}
override fun tick() {
super.tick()
@ -146,6 +165,45 @@ class EssenceStorageBlockEntity(blockPos: BlockPos, blockState: BlockState) : Ma
repairStack.damageValue -= repairPoints
}
}
val servo = servoContainer[0]
if (!servo.isEmpty && servo.item is EssenceServoItem && level is ServerLevel) {
val entities = level!!.getEntitiesInEllipsoid(
blockPos.center,
Vector(
MachinesConfig.EssenceStorage.RADIUS_HORIZONTAL,
MachinesConfig.EssenceStorage.RADIUS_VERTICAL,
MachinesConfig.EssenceStorage.RADIUS_HORIZONTAL
)
) { it is ExperienceOrb }
for ((ent, _) in entities) {
ent as ExperienceOrb
for (i in 1 .. ent.count) {
experienceStored += ent.value
ent.count--
level!!.playSound(null, ent.x, ent.y, ent.z,
SoundEvents.EXPERIENCE_ORB_PICKUP, SoundSource.BLOCKS,
0.1F, 0.5F + level!!.random.nextFloat() * 0.25F
)
}
if (ent.count <= 0) {
ent.discard()
}
}
}
}
if (hasFillState) {
val filled = experienceStored > 0
if (isFilledState != filled) {
level?.setBlock(blockPos, blockState.setValue(EssenceStorageBlock.FILLED, filled), Block.UPDATE_CLIENTS)
}
}
}
}

View File

@ -9,11 +9,14 @@ import net.minecraft.world.entity.player.Player
import net.minecraft.world.item.DyeColor
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.EntityBlock
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.BooleanProperty
import net.minecraft.world.level.material.MapColor
import net.minecraft.world.level.material.PushReaction
import net.minecraft.world.phys.BlockHitResult
@ -44,6 +47,8 @@ class EssenceStorageBlock(val color: DyeColor?) : RotatableMatteryBlock(Properti
acceptor(TranslatableComponent("otm.gui.experience_levels", getLevelFromXp(l.asLong)).withStyle(ChatFormatting.GRAY))
}
}
registerDefaultState(getStateDefinition().any().setValue(FILLED, false))
}
override fun newBlockEntity(pPos: BlockPos, pState: BlockState): BlockEntity {
@ -67,6 +72,11 @@ class EssenceStorageBlock(val color: DyeColor?) : RotatableMatteryBlock(Properti
return super.use(blockState, level, blockPos, ply, hand, blockHitResult)
}
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
super.createBlockStateDefinition(builder)
builder.add(FILLED)
}
private val shapes = getShapeForEachState(rotationProperty) { BlockShapes.ESSENCE_STORAGE.rotateFromNorth(it[rotationProperty]).computeShape() }
@Suppress("override_deprecation")
@ -78,4 +88,8 @@ class EssenceStorageBlock(val color: DyeColor?) : RotatableMatteryBlock(Properti
): VoxelShape {
return shapes[state]!!
}
companion object {
val FILLED = BooleanProperty.create("filled")
}
}

View File

@ -219,7 +219,21 @@ object MachinesConfig : AbstractConfig("machines") {
}
}
object EssenceStorage {
init {
builder.push(MNames.ESSENCE_STORAGE)
}
val RADIUS_HORIZONTAL: Double by builder.defineInRange("RADIUS_HORIZONTAL", 5.0, 0.0, Double.MAX_VALUE / 4.0)
val RADIUS_VERTICAL: Double by builder.defineInRange("RADIUS_VERTICAL", 2.0, 0.0, Double.MAX_VALUE / 4.0)
init {
builder.pop()
}
}
init {
Upgrades
EssenceStorage
}
}

View File

@ -8,10 +8,12 @@ import net.minecraft.client.renderer.item.ItemProperties
import net.minecraft.core.BlockPos
import net.minecraft.core.cauldron.CauldronInteraction
import net.minecraft.core.registries.Registries
import net.minecraft.nbt.CompoundTag
import net.minecraft.resources.ResourceLocation
import net.minecraft.world.entity.EntityType
import net.minecraft.world.entity.ai.village.poi.PoiType
import net.minecraft.world.entity.ai.village.poi.PoiTypes
import net.minecraft.world.item.BlockItem
import net.minecraft.world.item.DyeColor
import net.minecraft.world.item.DyeableArmorItem
import net.minecraft.world.item.Item
@ -389,6 +391,18 @@ object MRegistry : IBlockItemRegistryAcceptor {
}
}
}
for (item in MItems.ESSENCE_STORAGE.values) {
ItemProperties.register(item, ResourceLocation(OverdriveThatMatters.MOD_ID, "is_filled")) { stack, _, _, _ ->
val tag = (stack.tag?.get(BlockItem.BLOCK_ENTITY_TAG) as? CompoundTag)?: return@register 0f
if (tag.contains("experienceStored") && tag.getLong("experienceStored") > 0.0) {
1f
} else {
0f
}
}
}
}
}

View File

@ -163,6 +163,8 @@ public net.minecraft.world.entity.boss.wither.WitherBoss f_31432_ # TARGETING_CO
public-f net.minecraft.world.entity.boss.wither.WitherBoss f_31431_ # LIVING_ENTITY_SELECTOR
public net.minecraft.world.entity.ai.targeting.TargetingConditions f_26879_ # selector
public net.minecraft.world.entity.ExperienceOrb f_147072_ # count
public net.minecraft.advancements.critereon.InventoryChangeTrigger$TriggerInstance f_43179_
public net.minecraft.advancements.critereon.InventoryChangeTrigger$TriggerInstance f_43178_
public net.minecraft.advancements.critereon.InventoryChangeTrigger$TriggerInstance f_43177_

View File

@ -1,74 +0,0 @@
{
"multipart": [
{
"apply": {
"model": "overdrive_that_matters:block/storage_cable_core"
}
},
{
"when": {
"connect_south": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection"
}
},
{
"when": {
"connect_west": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"y": 90
}
},
{
"when": {
"connect_north": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"y": 180
}
},
{
"when": {
"connect_east": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"y": 270
}
},
{
"when": {
"connect_up": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"x": 90
}
},
{
"when": {
"connect_down": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"x": 270
}
}
]
}

View File

@ -1,74 +0,0 @@
{
"multipart": [
{
"apply": {
"model": "overdrive_that_matters:block/storage_cable_core"
}
},
{
"when": {
"connect_south": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection"
}
},
{
"when": {
"connect_west": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"y": 90
}
},
{
"when": {
"connect_north": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"y": 180
}
},
{
"when": {
"connect_east": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"y": 270
}
},
{
"when": {
"connect_up": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"x": 90
}
},
{
"when": {
"connect_down": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"x": 270
}
}
]
}

View File

@ -1,74 +0,0 @@
{
"multipart": [
{
"apply": {
"model": "overdrive_that_matters:block/matter_cable_core"
}
},
{
"when": {
"connect_south": true
},
"apply": {
"model": "overdrive_that_matters:block/matter_cable_connection"
}
},
{
"when": {
"connect_west": true
},
"apply": {
"model": "overdrive_that_matters:block/matter_cable_connection",
"y": 90
}
},
{
"when": {
"connect_north": true
},
"apply": {
"model": "overdrive_that_matters:block/matter_cable_connection",
"y": 180
}
},
{
"when": {
"connect_east": true
},
"apply": {
"model": "overdrive_that_matters:block/matter_cable_connection",
"y": 270
}
},
{
"when": {
"connect_up": true
},
"apply": {
"model": "overdrive_that_matters:block/matter_cable_connection",
"x": 90
}
},
{
"when": {
"connect_down": true
},
"apply": {
"model": "overdrive_that_matters:block/matter_cable_connection",
"x": 270
}
}
]
}

View File

@ -1,74 +0,0 @@
{
"multipart": [
{
"apply": {
"model": "overdrive_that_matters:block/storage_cable_core"
}
},
{
"when": {
"connect_south": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection"
}
},
{
"when": {
"connect_west": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"y": 90
}
},
{
"when": {
"connect_north": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"y": 180
}
},
{
"when": {
"connect_east": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"y": 270
}
},
{
"when": {
"connect_up": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"x": 90
}
},
{
"when": {
"connect_down": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"x": 270
}
}
]
}

View File

@ -1,74 +0,0 @@
{
"multipart": [
{
"apply": {
"model": "overdrive_that_matters:block/storage_cable_core"
}
},
{
"when": {
"connect_south": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection"
}
},
{
"when": {
"connect_west": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"y": 90
}
},
{
"when": {
"connect_north": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"y": 180
}
},
{
"when": {
"connect_east": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"y": 270
}
},
{
"when": {
"connect_up": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"x": 90
}
},
{
"when": {
"connect_down": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"x": 270
}
}
]
}

View File

@ -1,74 +0,0 @@
{
"multipart": [
{
"apply": {
"model": "overdrive_that_matters:block/storage_cable_core"
}
},
{
"when": {
"connect_south": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection"
}
},
{
"when": {
"connect_west": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"y": 90
}
},
{
"when": {
"connect_north": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"y": 180
}
},
{
"when": {
"connect_east": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"y": 270
}
},
{
"when": {
"connect_up": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"x": 90
}
},
{
"when": {
"connect_down": true
},
"apply": {
"model": "overdrive_that_matters:block/storage_cable_connection",
"x": 270
}
}
]
}

View File

@ -0,0 +1,19 @@
{
"parent": "block/block",
"texture_size": [16, 16],
"textures": {
"particle": "#0"
},
"elements": [
{
"from": [ 5, 5, 11 ],
"to": [ 11, 11, 16 ],
"faces": {
"down": {"uv": [6, 0, 11, 6],"rotation": 90, "texture": "#0" },
"up": {"uv": [6, 0, 11, 6],"rotation": 90, "texture": "#0" },
"west": {"uv": [6, 0, 11, 6], "texture": "#0" },
"east": {"uv": [6, 0, 11, 6], "texture": "#0" }
}
}
]
}

View File

@ -0,0 +1,21 @@
{
"parent": "block/block",
"texture_size": [16, 16],
"textures": {
"particle": "#0"
},
"elements": [
{
"from": [ 5, 5, 5 ],
"to": [ 11, 11, 11 ],
"faces": {
"down": {"uv": [0, 0, 6, 6], "texture": "#0" },
"up": {"uv": [0, 0, 6, 6], "texture": "#0" },
"north": {"uv": [0, 0, 6, 6], "texture": "#0" },
"south": {"uv": [0, 0, 6, 6], "texture": "#0" },
"west": {"uv": [0, 0, 6, 6], "texture": "#0" },
"east": {"uv": [0, 0, 6, 6], "texture": "#0" }
}
}
]
}

View File

@ -0,0 +1,124 @@
{
"parent": "block/block",
"credit": "Made with Blockbench",
"render_type": "cutout",
"texture_size": [32, 64],
"textures": {
"0": "overdrive_that_matters:block/essence_storage",
"particle": "#0"
},
"elements": [
{
"name": "body",
"from": [0, 0, 0],
"to": [16, 2, 16],
"faces": {
"north": {"uv": [0, 4, 8, 4.5], "texture": "#0"},
"east": {"uv": [0, 4, 8, 4.5], "texture": "#0"},
"south": {"uv": [0, 4, 8, 4.5], "texture": "#0"},
"west": {"uv": [0, 4, 8, 4.5], "texture": "#0"},
"up": {"uv": [0, 0, 8, 4], "texture": "#0"},
"down": {"uv": [0, 0, 8, 4], "texture": "#0"}
}
},
{
"name": "body",
"from": [0, 3, 0],
"to": [16, 5, 16],
"faces": {
"north": {"uv": [8, 7.25, 16, 7.75], "texture": "#0"},
"east": {"uv": [8, 7.25, 16, 7.75], "texture": "#0"},
"south": {"uv": [8, 7.25, 16, 7.75], "texture": "#0"},
"west": {"uv": [8, 7.25, 16, 7.75], "texture": "#0"},
"up": {"uv": [0, 7.25, 8, 11.25], "rotation": 180, "texture": "#0"},
"down": {"uv": [0, 0, 8, 4], "texture": "#0"}
}
},
{
"name": "body",
"from": [9, 5, 0],
"to": [16, 16, 14],
"faces": {
"north": {"uv": [12, 0, 15.5, 2.75], "texture": "#0"},
"east": {"uv": [9, 7.75, 16, 10.5], "texture": "#0"},
"south": {"uv": [11, 4.5, 14.5, 7.25], "texture": "#0"},
"west": {"uv": [0, 4.5, 7, 7.25], "texture": "#0"},
"up": {"uv": [0, 7.75, 3.5, 11.25], "rotation": 180, "texture": "#0"}
}
},
{
"name": "body",
"from": [0, 10, 14],
"to": [16, 16, 16],
"faces": {
"east": {"uv": [8, 7.75, 9, 9.25], "texture": "#0"},
"south": {"uv": [0, 11.25, 8, 12.75], "texture": "#0"},
"west": {"uv": [14.5, 4.5, 15.5, 6], "texture": "#0"},
"up": {"uv": [0, 7.25, 8, 7.75], "rotation": 180, "texture": "#0"},
"down": {"uv": [0, 7.25, 8, 7.75], "texture": "#0"}
}
},
{
"name": "body",
"from": [0, 5, 9],
"to": [9, 16, 14],
"faces": {
"north": {"uv": [7, 4.5, 11.5, 7.25], "texture": "#0"},
"south": {"uv": [5, 4.5, 9.5, 7.25], "texture": "#0"},
"west": {"uv": [12, 4.5, 14.5, 7.25], "texture": "#0"},
"up": {"uv": [3.5, 7.75, 8, 9], "rotation": 180, "texture": "#0"}
}
},
{
"name": "body",
"from": [1, 2, 1],
"to": [15, 3, 15],
"faces": {
"north": {"uv": [0.5, 4.25, 7.5, 4.5], "texture": "#0"},
"east": {"uv": [0.5, 4.25, 7.5, 4.5], "texture": "#0"},
"south": {"uv": [0.5, 4.25, 7.5, 4.5], "texture": "#0"},
"west": {"uv": [0.5, 4.25, 7.5, 4.5], "texture": "#0"}
}
},
{
"name": "body",
"from": [1, 5, 14],
"to": [15, 10, 15],
"faces": {
"east": {"uv": [15.5, 10.5, 16, 11.75], "texture": "#0"},
"south": {"uv": [8.5, 10.5, 15.5, 11.75], "texture": "#0"},
"west": {"uv": [8, 10.5, 8.5, 11.75], "texture": "#0"}
}
},
{
"name": "bottle",
"from": [1, 13, 1],
"to": [9, 15, 9],
"faces": {
"north": {"uv": [8, 2, 12, 2.5], "texture": "#0"},
"west": {"uv": [8, 2, 12, 2.5], "texture": "#0"},
"up": {"uv": [8, 0, 12, 2], "texture": "#0"},
"down": {"uv": [8, 0, 12, 2], "texture": "#0"}
}
},
{
"name": "bottle",
"from": [1, 5, 1],
"to": [9, 6, 9],
"faces": {
"north": {"uv": [8, 4.25, 12, 4.5], "texture": "#0"},
"west": {"uv": [8, 4.25, 12, 4.5], "texture": "#0"},
"up": {"uv": [8, 0, 12, 2], "texture": "#0"}
}
},
{
"name": "bottle",
"from": [1, 6, 1],
"to": [9, 13, 9],
"faces": {
"north": {"uv": [8, 2.5, 12, 4.25], "texture": "#0"},
"west": {"uv": [8, 2.5, 12, 4.25], "texture": "#0"}
}
}
]
}

View File

@ -1,10 +1,12 @@
{
"parent": "block/block",
"credit": "Made with Blockbench",
"render_type": "cutout",
"texture_size": [32, 64],
"textures": {
"0": "overdrive_that_matters:block/essence_storage",
"particle": "overdrive_that_matters:block/essence_storage"
"1": "overdrive_that_matters:block/liquid_xp_still",
"particle": "#0"
},
"elements": [
{
@ -92,15 +94,15 @@
{
"name": "experience",
"from": [1.5, 5, 1.5],
"to": [8.5, 11, 8.5],
"to": [8.5, 13, 8.5],
"faces": {
"north": {"uv": [8, 14.5, 11.5, 16], "texture": "#0"},
"east": {"uv": [12.5, 12, 16, 13.5], "texture": "#0"},
"south": {"uv": [9, 12, 12.5, 13.5], "texture": "#0"},
"west": {"uv": [11.5, 14.5, 15, 16], "texture": "#0"},
"up": {"uv": [9.5, 12.5, 13, 14.25], "texture": "#0"}
"north": {"uv": [7.5, 3, 14.5, 11], "texture": "#1"},
"west": {"uv": [1.5, 3, 8.5, 11], "texture": "#1"}
},
"forge_data": { "block_light": 15, "sky_light": 15 }
"forge_data": {
"block_light": 15,
"sky_light": 15
}
},
{
"name": "bottle",
@ -132,36 +134,5 @@
"west": {"uv": [8, 2.5, 12, 4.25], "texture": "#0"}
}
}
],
"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, 225, 0],
"scale": [0.4, 0.4, 0.4]
},
"ground": {
"translation": [0, 3, 0],
"scale": [0.25, 0.25, 0.25]
},
"gui": {
"rotation": [30, 225, 0],
"scale": [0.625, 0.625, 0.625]
},
"fixed": {
"scale": [0.5, 0.5, 0.5]
}
}
]
}

View File

@ -1,20 +0,0 @@
{
"parent": "block/block",
"texture_size": [16, 16],
"textures": {
"connection": "overdrive_that_matters:block/storage_cable",
"particle": "overdrive_that_matters:block/storage_cable"
},
"elements": [
{
"from": [ 5, 5, 11 ],
"to": [ 11, 11, 16 ],
"faces": {
"down": {"uv": [6, 0, 11, 6],"rotation": 90, "texture": "#connection" },
"up": {"uv": [6, 0, 11, 6],"rotation": 90, "texture": "#connection" },
"west": {"uv": [6, 0, 11, 6], "texture": "#connection" },
"east": {"uv": [6, 0, 11, 6], "texture": "#connection" }
}
}
]
}

View File

@ -1,22 +0,0 @@
{
"parent": "block/block",
"texture_size": [16, 16],
"textures": {
"core": "overdrive_that_matters:block/storage_cable",
"particle": "overdrive_that_matters:block/storage_cable"
},
"elements": [
{
"from": [ 5, 5, 5 ],
"to": [ 11, 11, 11 ],
"faces": {
"down": {"uv": [0, 0, 6, 6], "texture": "#core" },
"up": {"uv": [0, 0, 6, 6], "texture": "#core" },
"north": {"uv": [0, 0, 6, 6], "texture": "#core" },
"south": {"uv": [0, 0, 6, 6], "texture": "#core" },
"west": {"uv": [0, 0, 6, 6], "texture": "#core" },
"east": {"uv": [0, 0, 6, 6], "texture": "#core" }
}
}
]
}

View File

@ -0,0 +1,49 @@
{
"parent": "block/block",
"texture_size": [16, 16],
"textures": {
"particle": "#0"
},
"elements": [
{
"from": [5, 5, 5],
"to": [11, 11, 11],
"faces": {
"north": {"uv": [0, 0, 6, 6], "texture": "#0"},
"south": {"uv": [0, 0, 6, 6], "texture": "#0"},
"up": {"uv": [0, 0, 6, 6], "rotation": 180, "texture": "#0"},
"down": {"uv": [0, 0, 6, 6], "rotation": 180, "texture": "#0"}
}
},
{
"from": [0, 5, 5],
"to": [5, 11, 11],
"faces": {
"north": {"uv": [6, 0, 11, 6], "texture": "#0"},
"south": {"uv": [6, 6, 11, 0], "rotation": 180, "texture": "#0"},
"west": {"uv": [0, 0, 6, 6], "texture": "#0"},
"up": {"uv": [6, 0, 11, 6], "rotation": 180, "texture": "#0"},
"down": {"uv": [6, 0, 11, 6], "rotation": 180, "texture": "#0"}
}
},
{
"from": [11, 5, 5],
"to": [16, 11, 11],
"faces": {
"north": {"uv": [11, 0, 16, 6], "texture": "#0"},
"east": {"uv": [0, 0, 6, 6], "texture": "#0"},
"south": {"uv": [11, 6, 16, 0], "rotation": 180, "texture": "#0"},
"up": {"uv": [11, 0, 16, 6], "rotation": 180, "texture": "#0"},
"down": {"uv": [11, 0, 16, 6], "rotation": 180, "texture": "#0"}
}
}
],
"gui_light": "front",
"display": {
"gui": {
"rotation": [0, 0, 0],
"translation": [0, 0, 0],
"scale": [1, 1, 1]
}
}
}

View File

@ -0,0 +1,50 @@
{
"parent": "block/block",
"texture_size": [16, 16],
"textures": {
"0": "overdrive_that_matters:block/matter_cable",
"particle": "#0"
},
"elements": [
{
"from": [6, 6, 6],
"to": [10, 10, 10],
"faces": {
"north": {"uv": [0, 0, 4, 4], "texture": "#0"},
"south": {"uv": [0, 0, 4, 4], "texture": "#0"},
"up": {"uv": [0, 0, 4, 4], "texture": "#0"},
"down": {"uv": [0, 0, 4, 4], "texture": "#0"}
}
},
{
"from": [0, 6, 6],
"to": [6, 10, 10],
"faces": {
"north": {"uv": [4, 0, 10, 4], "texture": "#0"},
"south": {"uv": [10, 0, 4, 4], "texture": "#0"},
"west": {"uv": [0, 0, 4, 4], "texture": "#0"},
"up": {"uv": [10, 0, 4, 4], "texture": "#0"},
"down": {"uv": [10, 0, 4, 4], "texture": "#0"}
}
},
{
"from": [10, 6, 6],
"to": [16, 10, 10],
"faces": {
"north": {"uv": [10, 0, 16, 4], "texture": "#0"},
"east": {"uv": [0, 0, 4, 4], "texture": "#0"},
"south": {"uv": [16, 0, 10, 4], "texture": "#0"},
"up": {"uv": [16, 0, 10, 4], "texture": "#0"},
"down": {"uv": [16, 0, 10, 4], "texture": "#0"}
}
}
],
"gui_light": "front",
"display": {
"gui": {
"rotation": [0, 0, 0],
"translation": [0, 0, 0],
"scale": [1, 1, 1]
}
}
}

View File

@ -1,22 +0,0 @@
{
"parent": "block/block",
"texture_size": [16, 16],
"textures": {
"core": "overdrive_that_matters:block/storage_cable",
"particle": "overdrive_that_matters:block/storage_cable"
},
"elements": [
{
"from": [ 6, 6, 6 ],
"to": [ 10, 10, 10 ],
"faces": {
"down": {"uv": [0, 0, 4, 4], "texture": "#core" },
"up": {"uv": [0, 0, 4, 4], "texture": "#core" },
"north": {"uv": [0, 0, 4, 4], "texture": "#core" },
"south": {"uv": [0, 0, 4, 4], "texture": "#core" },
"west": {"uv": [0, 0, 4, 4], "texture": "#core" },
"east": {"uv": [0, 0, 4, 4], "texture": "#core" }
}
}
]
}