Merge remote-tracking branch 'origin/1.21' into 1.21

This commit is contained in:
DBotThePony 2025-01-10 20:02:31 +07:00
commit 3f75e40e9c
Signed by: DBot
GPG Key ID: DCC23B5715498507
1014 changed files with 410 additions and 39 deletions

View File

@ -49,6 +49,7 @@ import ru.dbotthepony.mc.otm.datagen.loot.LootModifiers
import ru.dbotthepony.mc.otm.datagen.recipes.*
import ru.dbotthepony.mc.otm.datagen.tags.TagsProvider
import ru.dbotthepony.mc.otm.datagen.tags.addTags
import ru.dbotthepony.mc.otm.datagen.textures.ColorizedSpritesProvider
import ru.dbotthepony.mc.otm.matter.MatterDataProvider
import ru.dbotthepony.mc.otm.registry.objects.ColoredDecorativeBlock
import ru.dbotthepony.mc.otm.registry.objects.DecorativeBlock
@ -484,6 +485,7 @@ object DataGen {
@SubscribeEvent
@Suppress("unused")
fun onGatherData(event: GatherDataEvent) {
val colorizedSpritesProvider = ColorizedSpritesProvider(event)
val blockModelProvider = MatteryBlockModelProvider(event)
val blockStateProvider = MatteryBlockStateProvider(event)
val itemModelProvider = MatteryItemModelProvider(event)
@ -514,6 +516,7 @@ object DataGen {
addTags(tagsProvider)
event.generator.addProvider(event.includeClient(), colorizedSpritesProvider)
event.generator.addProvider(event.includeClient(), blockModelProvider)
event.generator.addProvider(event.includeServer(), blockStateProvider)
event.generator.addProvider(event.includeClient(), itemModelProvider)

View File

@ -204,7 +204,6 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr
}
}
DataGen.decorativeCubeAll(MBlocks.DANGER_STRIPE_BLOCK)
DataGen.decorativePillar(MBlocks.METAL_BEAM, "metal_beam_side", "metal_beam_top")
var labLampOn: BlockModelBuilder? = null
@ -236,7 +235,7 @@ fun addDecorativeData(blockStateProvider: MatteryBlockStateProvider, itemModelPr
itemModelProvider.block(MItems.LABORATORY_LAMP)
itemModelProvider.block(MItems.LABORATORY_LAMP_INVERTED, MItems.LABORATORY_LAMP.registryName!!.path + "_unlit")
itemModelProvider.block(MItems.DANGER_STRIPE_BLOCK)
itemModelProvider.block(MItems.DANGER_STRIPE_BLOCK, MItems.DANGER_STRIPE_BLOCK.registryName!!.path + "_0")
itemModelProvider.block(MItems.METAL_BEAM)
blockStateProvider.exec {

View File

@ -10,10 +10,10 @@ 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("crude_energy_cable", "block/power_cable_0", powered = true)
cable("regular_energy_cable", "block/power_cable_1", powered = true)
cable("advanced_energy_cable", "block/power_cable_2", powered = true)
cable("superconductor_energy_cable", "block/power_cable_3", powered = true)
cable("matter_cable", "block/matter_cable", thin = true)
cable("storage_cable", "block/storage_cable")

View File

@ -250,23 +250,33 @@ fun addBlockStates(provider: MatteryBlockStateProvider) {
.rotationY(dir.front.yRotationBlockstateSouth())
.addModel()
.condition(CableBlock.MAPPING_CONNECTION_PROP[dir.front]!!, true)
.condition(BlockStateProperties.POWERED, false)
.end()
part().modelFile(provider.models().getExistingFile(modLocation("${block.value.registryName!!.path}_connection_powered")))
.rotationX(dir.front.xRotationBlockstateSouth())
.rotationY(dir.front.yRotationBlockstateSouth())
.addModel()
.condition(CableBlock.MAPPING_CONNECTION_PROP[dir.front]!!, true)
.condition(BlockStateProperties.POWERED, true)
.end()
}
part().modelFile(provider.models().getExistingFile(modLocation("${block.value.registryName!!.path}_core")))
.addModel().end()
.addModel().condition(BlockStateProperties.POWERED, false).end()
part().modelFile(provider.models().getExistingFile(modLocation("${block.value.registryName!!.path}_core_powered")))
.addModel().condition(BlockStateProperties.POWERED, true).end()
}
}
provider.getVariantBuilder(MBlocks.METAL_JUNK).forAllStates {
val generated = ArrayList<ConfiguredModel>()
for (suffix in arrayOf("", "_b", "_c", "_d")) {
val model = provider.models().getExistingFile(modLocation("block/metal_junk$suffix"))
for (suffix in arrayOf("_a", "_b", "_c", "_d")) {
val model = provider.models().cubeAll("block/metal_junk$suffix", modLocation("block/decorative/metal_junk$suffix"))
generated.add(with(ConfiguredModel.builder()) {
modelFile(model)
weight(2)
return@with buildLast()
})
@ -274,7 +284,20 @@ fun addBlockStates(provider: MatteryBlockStateProvider) {
generated.add(with(ConfiguredModel.builder()) {
modelFile(model)
rotationY(180)
weight(2)
return@with buildLast()
})
}
return@forAllStates generated.toTypedArray()
}
provider.getVariantBuilder(MBlocks.DANGER_STRIPE_BLOCK).forAllStates {
val generated = ArrayList<ConfiguredModel>()
for (suffix in arrayOf("_0", "_1")) {
generated.add(with(ConfiguredModel.builder()) {
modelFile(provider.models().cubeAll("block/danger_stripe_block$suffix", modLocation("block/decorative/danger_stripe_block$suffix")))
return@with buildLast()
})

View File

@ -20,7 +20,7 @@ fun addItemModels(provider: MatteryItemModelProvider) {
}
provider.block(MItems.CARBON_FIBRE_BLOCK)
provider.block(MItems.METAL_JUNK)
provider.block(MItems.METAL_JUNK, MItems.METAL_JUNK.registryName!!.path + "_a")
provider.block(MItems.METAL_MESH)
provider.generatedTranslucent(MItems.TRITANIUM_BARS, modLocation("block/decorative/tritanium_bars"))
provider.block(MItems.DEEPSLATE_TRITANIUM_ORE)

View File

@ -143,7 +143,7 @@ class MatteryBlockModelProvider(event: GatherDataEvent) : BlockModelProvider(eve
}
}
fun cable(modelName: String, textureName: String, thin: Boolean = false) {
fun cable(modelName: String, textureName: String, thin: Boolean = false, powered: Boolean = false) {
val baseName = if (thin) "base_cable_thin" else "base_cable"
exec {
@ -156,5 +156,15 @@ class MatteryBlockModelProvider(event: GatherDataEvent) : BlockModelProvider(eve
withExistingParent("item/${modelName}", modLocation("item/${baseName}"))
.texture("0", textureName)
}
if (powered && !thin) {
exec {
withExistingParent("block/${modelName}_core_powered", modLocation("block/${baseName}_core_powered"))
.texture("0", textureName)
withExistingParent("block/${modelName}_connection_powered", modLocation("block/${baseName}_connection_powered"))
.texture("0", textureName)
}
}
}
}

View File

@ -0,0 +1,150 @@
package ru.dbotthepony.mc.otm.datagen.textures
import net.neoforged.neoforge.common.data.SpriteSourceProvider
import net.neoforged.neoforge.data.event.GatherDataEvent
import ru.dbotthepony.mc.otm.client.render.ColorizedSpriteSource
import ru.dbotthepony.mc.otm.datagen.DataGen
import ru.dbotthepony.mc.otm.datagen.modLocation
class ColorizedSpritesProvider(event: GatherDataEvent) : SpriteSourceProvider(event.generator.packOutput, event.lookupProvider, DataGen.MOD_ID, event.existingFileHelper) {
override fun gather() {
with(atlas(BLOCKS_ATLAS)) {
listOf(
"block/android_charger",
"block/android_station_base",
"block/batterybank_frame",
"block/chemical_generator",
"block/cobblestone_generator",
"block/decorative/computer_base",
"block/decorative/computer_screen",
"block/drive_viewer",
"block/electric_furnace",
"block/electric_furnace_offline",
"block/energy_counter",
"block/energy_servo",
"block/essence_storage",
"block/induction_furnace",
"block/induction_furnace_offline",
"block/item_monitor",
"block/matter_bottler",
"block/matter_decomposer",
"block/matter_panel",
"block/matter_reconstructor",
"block/matter_recycler",
"block/matter_replicator_base",
"block/matter_replicator_halted",
"block/matter_replicator",
"block/matter_replicator_offline",
"block/matter_scanner",
"block/mattercapacitorbank_frame",
"block/plate_press",
"block/plate_press2",
"block/powered_smoker_base",
"block/powered_smoker_interior_0",
"block/powered_smoker_interior_1",
"block/powered_smoker_interior_2",
"block/decorative/star_chair",
"block/storage_power_supplier",
"block/water_source"
).forEach {
addSource(
ColorizedSpriteSource(modLocation(it), modLocation(it).withSuffix("_mask"), modLocation(it)).trackGeneratedTextures(existingFileHelper)
)
}
addSource(
ColorizedSpriteSource(
modLocation("block/decorative/crates/crate_borderless_colorless"),
modLocation("block/decorative/crates/crate_frame"),
modLocation("block/decorative/crates/crate"), "_", true, false
).trackGeneratedTextures(existingFileHelper)
)
addSource(
ColorizedSpriteSource(
modLocation("block/decorative/crates/crate_borderless_colorless"),
modLocation("block/decorative/crates/crate_borderless_colorless"),
modLocation("block/decorative/crates/crate_borderless"), "_"
).trackGeneratedTextures(existingFileHelper)
)
addSource(
ColorizedSpriteSource(
modLocation("block/decorative/tritanium_block"),
modLocation("block/decorative/tritanium_block_colorless"),
modLocation("block/decorative/tritanium_block"), "_"
).trackGeneratedTextures(existingFileHelper)
)
addSource(
ColorizedSpriteSource(
modLocation("block/decorative/tritanium_pillar"),
modLocation("block/decorative/tritanium_pillar_colorless"),
modLocation("block/decorative/tritanium_pillar"), "_"
).trackGeneratedTextures(existingFileHelper)
)
addSource(
ColorizedSpriteSource(
modLocation("block/decorative/tritanium_striped_block_base"),
modLocation("block/decorative/tritanium_striped_block_colorless_stripe"),
modLocation("block/decorative/stripe/tritanium_striped_block"), "_"
).trackGeneratedTextures(existingFileHelper)
)
addSource(
ColorizedSpriteSource(
modLocation("block/decorative/tritanium_striped_block_colorless_base"),
modLocation("block/decorative/tritanium_striped_block_colorless_stripe"),
modLocation("block/decorative/stripe/tritanium_striped_block"), "_", true, true
).trackGeneratedTextures(existingFileHelper)
)
addSource(
ColorizedSpriteSource(
modLocation("block/decorative/tritanium_door_base_top"),
modLocation("block/decorative/tritanium_door_color_top"),
modLocation("block/decorative/tritanium_door_top"), "_"
).trackGeneratedTextures(existingFileHelper)
)
addSource(
ColorizedSpriteSource(
modLocation("block/decorative/tritanium_door_base_bottom"),
modLocation("block/decorative/tritanium_door_color_bottom"),
modLocation("block/decorative/tritanium_door_bottom"), "_"
).trackGeneratedTextures(existingFileHelper)
)
addSource(
ColorizedSpriteSource(
modLocation("block/decorative/tritanium_trapdoor_overlay"),
modLocation("block/decorative/tritanium_trapdoor_colorless"),
modLocation("block/decorative/tritanium_trapdoor"), "_"
).trackGeneratedTextures(existingFileHelper)
)
addSource(
ColorizedSpriteSource(
modLocation("block/decorative/vent_colorless"),
modLocation("block/decorative/vent_overlay"),
modLocation("block/decorative/vent"), "_", true, false
).trackGeneratedTextures(existingFileHelper)
)
addSource(
ColorizedSpriteSource(
modLocation("block/decorative/vent_alternative_colorless"),
modLocation("block/decorative/vent_alternative_overlay"),
modLocation("block/decorative/vent_alternative"), "_", true, false
).trackGeneratedTextures(existingFileHelper)
)
addSource(
ColorizedSpriteSource(
modLocation("item/minecart_cargo_crate_colorless"),
modLocation("item/minecart_cargo_crate_nopaint"),
modLocation("item/minecart_cargo_crate"), "_", true, false
).trackGeneratedTextures(existingFileHelper)
)
addSource(
ColorizedSpriteSource(
modLocation("item/tritanium_door_colorless"),
modLocation("item/tritanium_door_overlay"),
modLocation("item/tritanium_door"), "_", true, false
).trackGeneratedTextures(existingFileHelper)
)
}
}
}

View File

@ -36,6 +36,7 @@ import ru.dbotthepony.mc.otm.client.onClientDisconnected
import ru.dbotthepony.mc.otm.client.onClientPostRender
import ru.dbotthepony.mc.otm.client.tooltipEvent
import ru.dbotthepony.mc.otm.client.render.ChartTooltipElement
import ru.dbotthepony.mc.otm.client.render.ColorizedSpriteSource
import ru.dbotthepony.mc.otm.client.render.ShockwaveRenderer
import ru.dbotthepony.mc.otm.client.render.blockentity.BatteryBankRenderer
import ru.dbotthepony.mc.otm.client.render.blockentity.MatterBatteryBankRenderer
@ -132,6 +133,8 @@ object OverdriveThatMatters {
MOD_BUS.addListener(EventPriority.NORMAL, ChartTooltipElement.Companion::register)
MOD_BUS.addListener(EventPriority.NORMAL, MatteryTooltipComponents::registerComponents)
MOD_BUS.addListener(EventPriority.NORMAL, ColorizedSpriteSource::register)
MOD_BUS.addListener(EventPriority.HIGH, MatteryGUI::registerGuiLayers)
MBlockColors.register(MOD_BUS)

View File

@ -17,6 +17,7 @@ import net.minecraft.world.level.block.SoundType
import net.minecraft.world.level.block.entity.BlockEntity
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.BooleanProperty
import net.minecraft.world.level.material.MapColor
import net.minecraft.world.level.material.PushReaction
@ -142,6 +143,16 @@ class StorageCableBlock : CableBlock(Properties.of().mapColor(MapColor.METAL).re
class EnergyCableBlock(val factory: (blockPos: BlockPos, blockState: BlockState) -> BlockEntity) : CableBlock(Properties.of().mapColor(MapColor.METAL).pushReaction(PushReaction.DESTROY).requiresCorrectToolForDrops().sound(SoundType.METAL).strength(1.0f, 6.0f)), EntityBlock {
private val shapes = generateShapes(0.185)
init {
registerDefaultState(defaultBlockState().setValue(BlockStateProperties.POWERED, false))
}
override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
super.createBlockStateDefinition(builder)
builder.add(BlockStateProperties.POWERED)
}
@Suppress("OVERRIDE_DEPRECATION")
override fun getShape(blockState: BlockState, accessor: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape {
return shapes[blockState] ?: Shapes.block()

View File

@ -6,6 +6,7 @@ import net.minecraft.world.level.Level
import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.entity.BlockEntityType
import net.minecraft.world.level.block.state.BlockState
import net.minecraft.world.level.block.state.properties.BlockStateProperties
import net.neoforged.neoforge.capabilities.Capabilities
import ru.dbotthepony.mc.otm.SERVER_IS_LIVE
import ru.dbotthepony.mc.otm.block.CableBlock
@ -114,12 +115,30 @@ abstract class EnergyCableBlockEntity(type: BlockEntityType<*>, blockPos: BlockP
if (!SERVER_IS_LIVE) return
val level = level
val powered = node.graph.livelyNodes.filter {
it.blockEntity.energySides.filter {
side -> side.value.neighbour.isPresent && side.value.neighbour.get() !is CableSide
}.isNotEmpty()
}.size >= 2
level?.once {
if (!node.isValid) return@once
val newState = blockState.setValue(CableBlock.MAPPING_CONNECTION_PROP[side]!!, status)
val newState = blockState
.setValue(CableBlock.MAPPING_CONNECTION_PROP[side]!!, status)
.setValue(BlockStateProperties.POWERED, powered)
if (newState !== blockState && SERVER_IS_LIVE)
level.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
node.graph.livelyNodes.forEach {
if (it.isValid) {
val newState = it.blockEntity.blockState.setValue(BlockStateProperties.POWERED, powered)
if (newState !== it.blockEntity.blockState && SERVER_IS_LIVE)
level.setBlock(it.blockEntity.blockPos, newState, Block.UPDATE_CLIENTS)
}
}
}
}

View File

@ -0,0 +1,138 @@
package ru.dbotthepony.mc.otm.client.render
import com.mojang.serialization.Codec
import com.mojang.serialization.MapCodec
import com.mojang.serialization.codecs.RecordCodecBuilder
import net.minecraft.client.renderer.texture.SpriteContents
import net.minecraft.client.renderer.texture.atlas.SpriteResourceLoader
import net.minecraft.client.renderer.texture.atlas.SpriteSource
import net.minecraft.client.renderer.texture.atlas.SpriteSource.TEXTURE_ID_CONVERTER
import net.minecraft.client.renderer.texture.atlas.SpriteSourceType
import net.minecraft.client.renderer.texture.atlas.sources.LazyLoadedImage
import net.minecraft.client.resources.metadata.animation.FrameSize
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.packs.resources.ResourceManager
import net.minecraft.server.packs.resources.ResourceMetadata
import net.minecraft.world.item.DyeColor
import net.neoforged.neoforge.client.event.RegisterSpriteSourceTypesEvent
import net.neoforged.neoforge.client.model.generators.ModelProvider
import net.neoforged.neoforge.common.data.ExistingFileHelper
import ru.dbotthepony.kommons.math.RGBAColor
import ru.dbotthepony.mc.otm.OverdriveThatMatters.loc
class ColorizedSpriteSource(val base: ResourceLocation, val overlay: ResourceLocation, val outputPathBase: ResourceLocation, val outputPathSuffix: String = "/", val tintBase: Boolean = false, val tintOverlay: Boolean = true) : SpriteSource {
override fun run(
manager: ResourceManager,
output: SpriteSource.Output
) {
val baseRes = manager.getResource(TEXTURE_ID_CONVERTER.idToFile(base)).get()
val maskRes = manager.getResource(TEXTURE_ID_CONVERTER.idToFile(overlay)).get()
for (baseTint in DyeColor.entries) {
for (overlayTint in DyeColor.entries) {
if (tintBase && baseTint == overlayTint) continue
var outputLocation = outputPathBase
if (tintBase) outputLocation = outputLocation.withSuffix(outputPathSuffix + baseTint.serializedName)
if (tintOverlay) outputLocation = outputLocation.withSuffix(outputPathSuffix + overlayTint.serializedName)
val baseImage = LazyLoadedImage(base, baseRes, 1)
val maskImage = LazyLoadedImage(overlay, maskRes, 1)
output.add(outputLocation, Supplier(baseImage, if (tintBase) baseTint else null, maskImage, if (tintOverlay) overlayTint else null, outputLocation))
}
if (!tintBase) return
}
}
override fun type(): SpriteSourceType {
return SPRITE_SOURCE!!
}
fun trackGeneratedTextures(efh: ExistingFileHelper) : ColorizedSpriteSource {
for (baseTint in DyeColor.entries) {
for (overlayTint in DyeColor.entries) {
if (tintBase && baseTint == overlayTint) continue
var outputLocation = outputPathBase
if (tintBase) outputLocation = outputLocation.withSuffix(outputPathSuffix + baseTint.serializedName)
if (tintOverlay) outputLocation = outputLocation.withSuffix(outputPathSuffix + overlayTint.serializedName)
efh.trackGenerated(outputLocation, ModelProvider.TEXTURE)
}
if (!tintBase) return this
}
return this
}
class Supplier(val baseImage: LazyLoadedImage, val baseTint: DyeColor?, val maskImage: LazyLoadedImage, val maskTint: DyeColor?, val outputLocation: ResourceLocation) : SpriteSource.SpriteSupplier {
override fun apply(t: SpriteResourceLoader?): SpriteContents? {
val base = baseImage.get()
val mask = maskImage.get()
if (base.width != mask.width || base.height != mask.height) {
throw IllegalArgumentException("Base image doesn't match mask in texture size")
}
if (baseTint != null) {
val baseDiffCol = RGBAColor.argb(baseTint.textureDiffuseColor)
base.applyToAllPixels {
val a = (it and -0x1000000 ushr 24) / 255f
val b = (it and 0xFF0000 ushr 16) / 255f
val g = (it and 0xFF00 ushr 8) / 255f
val r = (it and 0xFF) / 255f
RGBAColor(r * baseDiffCol.red, g * baseDiffCol.green, b * baseDiffCol.blue, a).toRGBA()
}
}
if (maskTint != null) {
val maskDiffCol = RGBAColor.argb(maskTint.textureDiffuseColor)
mask.applyToAllPixels {
val a = (it and -0x1000000 ushr 24) / 255f
val b = (it and 0xFF0000 ushr 16) / 255f
val g = (it and 0xFF00 ushr 8) / 255f
val r = (it and 0xFF) / 255f
RGBAColor(r * maskDiffCol.red, g * maskDiffCol.green, b * maskDiffCol.blue, a).toRGBA()
}
}
for (i in 0 until base.width) {
for (j in 0 until base.height) {
base.blendPixel(i, j, mask.getPixelRGBA(i, j))
}
}
maskImage.release()
return SpriteContents(outputLocation, FrameSize(base.width, base.height), base, ResourceMetadata.EMPTY)
}
}
companion object {
val LOCATION = loc("colorized")
private val CODEC: MapCodec<ColorizedSpriteSource> = RecordCodecBuilder.mapCodec {
it.group(
ResourceLocation.CODEC.fieldOf("base").forGetter { it.base },
ResourceLocation.CODEC.fieldOf("overlay").forGetter { it.overlay },
ResourceLocation.CODEC.fieldOf("output_path_base").forGetter { it.outputPathBase },
Codec.STRING.optionalFieldOf("output_path_suffix", "/").forGetter { it.outputPathSuffix },
Codec.BOOL.optionalFieldOf("base_tint", false).forGetter { it.tintBase },
Codec.BOOL.optionalFieldOf("overlay_tint", true).forGetter{ it.tintOverlay }
).apply(it, ::ColorizedSpriteSource)
}
var SPRITE_SOURCE: SpriteSourceType? = null
fun register(event: RegisterSpriteSourceTypesEvent) {
SPRITE_SOURCE = event.register(LOCATION, CODEC)
}
}
}

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": {
"east": {"uv": [6, 6, 11, 12], "texture": "#0"},
"west": {"uv": [6, 6, 11, 12], "texture": "#0"},
"up": {"uv": [6, 6, 11, 12], "rotation": 90, "texture": "#0"},
"down": {"uv": [6, 6, 11, 12], "rotation": 90, "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": {
"north": {"uv": [0, 6, 6, 12], "texture": "#0"},
"east": {"uv": [0, 6, 6, 12], "texture": "#0"},
"south": {"uv": [0, 6, 6, 12], "texture": "#0"},
"west": {"uv": [0, 6, 6, 12], "texture": "#0"},
"up": {"uv": [0, 6, 6, 12], "texture": "#0"},
"down": {"uv": [0, 6, 6, 12], "texture": "#0"}
}
}
]
}

View File

@ -1,6 +0,0 @@
{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "overdrive_that_matters:block/decorative/metal_junk_a"
}
}

View File

@ -1,6 +0,0 @@
{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "overdrive_that_matters:block/decorative/metal_junk_b"
}
}

View File

@ -1,6 +0,0 @@
{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "overdrive_that_matters:block/decorative/metal_junk_c"
}
}

View File

@ -1,6 +0,0 @@
{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "overdrive_that_matters:block/decorative/metal_junk_d"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 593 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 593 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 593 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 593 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 593 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 593 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 593 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 593 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 593 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 607 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 732 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 793 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 699 B

Some files were not shown because too many files have changed in this diff Show More