Skip to content

Commit

Permalink
diesel generator work
Browse files Browse the repository at this point in the history
  • Loading branch information
ttttdoy committed Jun 18, 2024
1 parent fccc078 commit a53eda2
Show file tree
Hide file tree
Showing 24 changed files with 284 additions and 48 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,5 @@ build
# other
eclipse
run
/src/generated
/src/generated
/advanced/src/generated/
38 changes: 21 additions & 17 deletions advanced/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ minecraft {
}
}

sourceSets.main.resources { srcDirs 'advanced/src/generated/resources/' }

dependencies {
minecraft "net.minecraftforge:forge:$minecraft_version-$forge_version"
implementation "thedarkcolour:kotlinforforge:$kff_version"
Expand Down Expand Up @@ -87,21 +89,23 @@ processResources {

tasks.register('prepareKotlinBuildScriptModel') {}

// Copy breadmod to runs/breadmod-x.jar for run
CopySpec constructParentModJarSpec = copySpec {
from rootProject.layout.buildDirectory.dir('libs')
include 'breadmod-*.jar'
}

tasks.register('copyParentBuild', Copy) {
dependsOn(':jar')
// Keeping this jar copy code here just in case something fucks up and we have to fall back to it

into layout.projectDirectory.dir("run").dir("mods")
with constructParentModJarSpec
}

afterEvaluate {
tasks.named("prepareRuns") {
dependsOn("copyParentBuild")
}
}
// Copy breadmod to runs/breadmod-x.jar for run
//CopySpec constructParentModJarSpec = copySpec {
// from rootProject.layout.buildDirectory.dir('libs')
// include 'breadmod-*.jar'
//}
//
//tasks.register('copyParentBuild', Copy) {
// dependsOn(':jar')
//
// into layout.projectDirectory.dir("run").dir("mods")
// with constructParentModJarSpec
//}
//
//afterEvaluate {
// tasks.named("prepareRuns") {
// dependsOn("copyParentBuild")
// }
//}
20 changes: 0 additions & 20 deletions advanced/src/main/kotlin/breadmod/advanced/registry/Registry.kt

This file was deleted.

24 changes: 24 additions & 0 deletions advanced/src/main/kotlin/breadmodadvanced/CommonModEventBusAdv.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package breadmodadvanced

import breadmod.ModMain
import breadmodadvanced.datagen.ModBlockStateProviderAdv
import net.minecraftforge.data.event.GatherDataEvent
import net.minecraftforge.eventbus.api.SubscribeEvent
import net.minecraftforge.fml.common.Mod

@Suppress("unused")
@Mod.EventBusSubscriber(modid = ModMainAdv.ID, bus = Mod.EventBusSubscriber.Bus.MOD)
object CommonModEventBusAdv {
@SubscribeEvent
fun gatherData(event: GatherDataEvent) {
val generator = event.generator
val packOutput = generator.packOutput
val existingFileHelper = event.existingFileHelper
val lookupProvider = event.lookupProvider

if(event.includeClient()) {
ModMain.LOGGER.info("Client datagen.")
generator.addProvider(true, ModBlockStateProviderAdv(packOutput, existingFileHelper))
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package breadmod.advanced
package breadmodadvanced

import breadmod.ModMain.LOGGER
import breadmod.advanced.registry.registerAll
import breadmodadvanced.registry.registerAll
import net.minecraftforge.fml.common.Mod
import thedarkcolour.kotlinforforge.forge.MOD_BUS

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package breadmodadvanced.block

import breadmod.block.machine.BaseAbstractMachineBlock
import breadmodadvanced.block.entity.DieselGeneratorBlockEntity
import breadmodadvanced.registry.block.ModBlockEntitiesAdv
import net.minecraft.world.item.context.BlockPlaceContext
import net.minecraft.world.level.Level
import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.SoundType
import net.minecraft.world.level.block.entity.BlockEntityTicker
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

class DieselGeneratorBlock: BaseAbstractMachineBlock.Powered<DieselGeneratorBlockEntity>(
ModBlockEntitiesAdv.DIESEL_GENERATOR,
Properties.of().noOcclusion()
.strength(2f, 6.0f)
.sound(SoundType.METAL),
false
) {
override fun adjustBlockStateDefinition(pBuilder: StateDefinition.Builder<Block, BlockState>) {
pBuilder.add(BlockStateProperties.HORIZONTAL_FACING)
}

override fun getStateForPlacement(pContext: BlockPlaceContext): BlockState? =
defaultBlockState()
.setValue(BlockStateProperties.HORIZONTAL_FACING, pContext.horizontalDirection.opposite)

override fun getServerTicker(pLevel: Level, pState: BlockState): BlockEntityTicker<DieselGeneratorBlockEntity> =
BlockEntityTicker { tLevel, pPos, tState, pBlockEntity -> pBlockEntity.tick(tLevel, pPos, tState, pBlockEntity) }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package breadmodadvanced.block.entity

import breadmod.block.machine.entity.AbstractMachineBlockEntity
import breadmod.util.capability.EnergyBattery
import breadmod.util.capability.IndexableItemHandler
import breadmodadvanced.recipe.fluidEnergy.generators.DieselGeneratorRecipe
import breadmodadvanced.registry.block.ModBlockEntitiesAdv
import breadmodadvanced.registry.recipe.ModRecipeTypesAdv
import net.minecraft.core.BlockPos
import net.minecraft.world.entity.player.Player
import net.minecraft.world.entity.player.StackedContents
import net.minecraft.world.item.ItemStack
import net.minecraft.world.level.block.state.BlockState
import net.minecraftforge.common.capabilities.ForgeCapabilities

class DieselGeneratorBlockEntity(
pPos: BlockPos,
pBlockState: BlockState,
) : AbstractMachineBlockEntity.Progressive.Powered<DieselGeneratorBlockEntity, DieselGeneratorRecipe>(
ModBlockEntitiesAdv.DIESEL_GENERATOR.get(),
pPos,
pBlockState,
ModRecipeTypesAdv.DIESEL_GENERATOR,
EnergyBattery(50000, 0, 2000) to mutableListOf(null)
) {
private fun getItemHandler() = capabilityHolder.capabilityOrNull<IndexableItemHandler>(ForgeCapabilities.ITEM_HANDLER)

override fun clearContent() { getItemHandler()?.clear() }
override fun getContainerSize(): Int = getItemHandler()?.size ?: 0
override fun isEmpty(): Boolean = getItemHandler()?.isEmpty() ?: true
override fun getItem(pSlot: Int): ItemStack = getItemHandler()?.get(pSlot) ?: ItemStack.EMPTY
override fun removeItem(pSlot: Int, pAmount: Int): ItemStack = getItemHandler()?.extractItem(pSlot, pAmount, false) ?: ItemStack.EMPTY
override fun removeItemNoUpdate(pSlot: Int): ItemStack = getItemHandler()?.removeAt(pSlot) ?: ItemStack.EMPTY
override fun setItem(pSlot: Int, pStack: ItemStack) { getItemHandler()?.set(pSlot, pStack) }
override fun stillValid(pPlayer: Player): Boolean = getItemHandler() != null
override fun fillStackedContents(pContents: StackedContents) { getItemHandler()?.get(0)?.let { pContents.accountStack(it) } }
override fun getWidth(): Int = 1
override fun getHeight(): Int = 1
override fun getItems(): MutableList<ItemStack> = getItemHandler() ?: mutableListOf()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package breadmodadvanced.block.entity.renderer

import breadmodadvanced.block.entity.DieselGeneratorBlockEntity
import com.mojang.blaze3d.vertex.PoseStack
import net.minecraft.client.renderer.MultiBufferSource
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer

//class DieselGeneratorRenderer: BlockEntityRenderer<DieselGeneratorBlockEntity> {
// override fun render(
// pBlockEntity: DieselGeneratorBlockEntity,
// pPartialTick: Float,
// pPoseStack: PoseStack,
// pBuffer: MultiBufferSource,
// pPackedLight: Int,
// pPackedOverlay: Int
// ) {
// TODO("Not yet implemented")
// }
//}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package breadmodadvanced.datagen

import breadmodadvanced.ModMainAdv
import breadmodadvanced.registry.block.ModBlocksAdv
import net.minecraft.data.PackOutput
import net.minecraftforge.client.model.generators.BlockStateProvider
import net.minecraftforge.client.model.generators.ModelProvider
import net.minecraftforge.common.data.ExistingFileHelper

class ModBlockStateProviderAdv(
output: PackOutput,
exFileHelper: ExistingFileHelper
) : BlockStateProvider(output, ModMainAdv.ID, exFileHelper) {
override fun registerStatesAndModels() {
horizontalBlock(ModBlocksAdv.DIESEL_GENERATOR.get().block) {
val name = "breadmodadv:block/diesel_generator"
val model = models().singleTexture(
name,
modLoc("${ModelProvider.BLOCK_FOLDER}/diesel_generator"),
modLoc("${ModelProvider.BLOCK_FOLDER}/diesel_generator")
)

return@horizontalBlock model
}
simpleBlockItem(
ModBlocksAdv.DIESEL_GENERATOR.get().block,
models().getBuilder("breadmodadv:block/diesel_generator")
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package breadmodadvanced.recipe.fluidEnergy.generators

import breadmod.recipe.fluidEnergy.FluidEnergyRecipe
import breadmod.recipe.serializer.SimpleFluidEnergyRecipeSerializer
import breadmodadvanced.registry.recipe.ModRecipeSerializersAdv
import breadmodadvanced.registry.recipe.ModRecipeTypesAdv
import net.minecraft.resources.ResourceLocation
import net.minecraft.tags.TagKey
import net.minecraft.world.item.Item
import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.crafting.RecipeType
import net.minecraft.world.level.material.Fluid
import net.minecraftforge.fluids.FluidStack

class DieselGeneratorRecipe(
pId: ResourceLocation,
time: Int = 0,
energy: Int? = null,
fluidsRequired: List<FluidStack>? = null,
fluidsRequiredTagged: List<Pair<TagKey<Fluid>, Int>>? = null,
itemsRequired: List<ItemStack>? = null,
itemsRequiredTagged: List<Pair<TagKey<Item>, Int>>? = null,
) : FluidEnergyRecipe(pId, time, energy, fluidsRequired, fluidsRequiredTagged, itemsRequired, itemsRequiredTagged) {
override fun getType(): RecipeType<*> = ModRecipeTypesAdv.DIESEL_GENERATOR.get()
override fun getSerializer(): SimpleFluidEnergyRecipeSerializer<*> = ModRecipeSerializersAdv.DIESEL_GENERATOR.get()
}
24 changes: 24 additions & 0 deletions advanced/src/main/kotlin/breadmodadvanced/registry/Registry.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package breadmodadvanced.registry

import breadmod.ModMain.LOGGER
import breadmodadvanced.registry.block.ModBlockEntitiesAdv
import breadmodadvanced.registry.block.ModBlocksAdv
import breadmodadvanced.registry.item.ModItemsAdv
import breadmodadvanced.registry.recipe.ModRecipeSerializersAdv
import breadmodadvanced.registry.recipe.ModRecipeTypesAdv
import net.minecraftforge.eventbus.api.IEventBus

val registerList = setOf(
ModBlocksAdv.deferredRegister,
ModItemsAdv.deferredRegister,
ModRecipeTypesAdv.deferredRegister,
ModRecipeSerializersAdv.deferredRegister,
ModBlockEntitiesAdv.deferredRegister
)

fun registerAll(bus: IEventBus) {
registerList.forEach {
LOGGER.info("Pushing register for ${it.registryName}")
it.register(bus)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package breadmodadvanced.registry.block

import breadmodadvanced.ModMainAdv
import breadmodadvanced.block.entity.DieselGeneratorBlockEntity
import net.minecraft.world.level.block.entity.BlockEntityType
import net.minecraftforge.registries.DeferredRegister
import net.minecraftforge.registries.ForgeRegistries
import net.minecraftforge.registries.RegistryObject

object ModBlockEntitiesAdv {
val deferredRegister: DeferredRegister<BlockEntityType<*>> = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, ModMainAdv.ID)

val DIESEL_GENERATOR: RegistryObject<BlockEntityType<DieselGeneratorBlockEntity>> = deferredRegister.register("diesel_generator_entity") {
BlockEntityType.Builder.of(
{ pPos, pState -> DieselGeneratorBlockEntity(pPos, pState) },
ModBlocksAdv.DIESEL_GENERATOR.get().block
).build(null)
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package breadmod.advanced.registry.block
package breadmodadvanced.registry.block

import breadmod.advanced.ModMainAdv
import breadmod.advanced.registry.item.ModItemsAdv
import breadmodadvanced.ModMainAdv
import breadmodadvanced.block.DieselGeneratorBlock
import breadmodadvanced.registry.item.ModItemsAdv
import net.minecraft.data.loot.BlockLootSubProvider
import net.minecraft.world.flag.FeatureFlags
import net.minecraft.world.item.BlockItem
import net.minecraft.world.item.Item
import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.state.BlockBehaviour
import net.minecraftforge.registries.DeferredRegister
import net.minecraftforge.registries.ForgeRegistries
import net.minecraftforge.registries.RegistryObject
Expand All @@ -22,7 +22,7 @@ object ModBlocksAdv {

val DIESEL_GENERATOR = registerBlockItem(
"diesel_generator",
{ Block(BlockBehaviour.Properties.of())},
{ DieselGeneratorBlock() },
Item.Properties()
)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package breadmod.advanced.registry.item
package breadmodadvanced.registry.item

import breadmod.advanced.ModMainAdv
import breadmodadvanced.ModMainAdv
import net.minecraft.world.item.Item
import net.minecraftforge.registries.DeferredRegister
import net.minecraftforge.registries.ForgeRegistries
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package breadmodadvanced.registry.recipe

import breadmod.recipe.serializer.SimpleFluidEnergyRecipeSerializer
import breadmodadvanced.ModMainAdv
import breadmodadvanced.recipe.fluidEnergy.generators.DieselGeneratorRecipe
import net.minecraft.world.item.crafting.RecipeSerializer
import net.minecraftforge.registries.DeferredRegister
import net.minecraftforge.registries.ForgeRegistries
import net.minecraftforge.registries.RegistryObject

object ModRecipeSerializersAdv {
val deferredRegister: DeferredRegister<RecipeSerializer<*>> =
DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, ModMainAdv.ID)

val DIESEL_GENERATOR: RegistryObject<SimpleFluidEnergyRecipeSerializer<DieselGeneratorRecipe>> = deferredRegister.register("deisel_generator") {
SimpleFluidEnergyRecipeSerializer { pId, pTime, pEnergy, pFluids, pFluidsTagged, pItems, pItemsTagged, _, _ -> DieselGeneratorRecipe(pId, pTime, pEnergy, pFluids, pFluidsTagged, pItems, pItemsTagged)}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package breadmodadvanced.registry.recipe

import breadmodadvanced.ModMainAdv
import breadmodadvanced.recipe.fluidEnergy.generators.DieselGeneratorRecipe
import net.minecraft.world.item.crafting.Recipe
import net.minecraft.world.item.crafting.RecipeType
import net.minecraftforge.registries.DeferredRegister
import net.minecraftforge.registries.ForgeRegistries
import net.minecraftforge.registries.RegistryObject

object ModRecipeTypesAdv {
val deferredRegister: DeferredRegister<RecipeType<*>> = DeferredRegister.create(ForgeRegistries.RECIPE_TYPES, ModMainAdv.ID)

private fun <T: Recipe<*>> register(name: String): RegistryObject<RecipeType<T>> =
deferredRegister.register(name) { object: RecipeType<T> { override fun toString(): String = name } }

val DIESEL_GENERATOR = register<DieselGeneratorRecipe>("diesel_generator")
}
Loading

0 comments on commit a53eda2

Please sign in to comment.