essence storage empty/filled blockstate
This commit is contained in:
parent
7c794126b6
commit
8a3ef344e3
@ -17,11 +17,13 @@ fun addBlockModels(provider: MatteryBlockModelProvider) {
|
||||
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")
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -174,7 +174,6 @@ fun addItemModels(provider: MatteryItemModelProvider) {
|
||||
provider.coloredWithBaseBlock(MItems.DRIVE_VIEWER, "drive_viewer", "_idle")
|
||||
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")
|
||||
@ -187,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()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -10,17 +10,20 @@ 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
|
||||
@ -127,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()
|
||||
|
||||
@ -186,5 +197,13 @@ class EssenceStorageBlockEntity(blockPos: BlockPos, blockState: BlockState) : Ma
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (hasFillState) {
|
||||
val filled = experienceStored > 0
|
||||
|
||||
if (isFilledState != filled) {
|
||||
level?.setBlock(blockPos, blockState.setValue(EssenceStorageBlock.FILLED, filled), Block.UPDATE_CLIENTS)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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")
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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"}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
@ -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]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
Loading…
Reference in New Issue
Block a user