diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..e96534f
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/NFCreativeTabs.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/NFCreativeTabs.kt
deleted file mode 100644
index e3e0fae..0000000
--- a/src/main/kotlin/de/wulkanat/www/new_frontiers/NFCreativeTabs.kt
+++ /dev/null
@@ -1,19 +0,0 @@
-package de.wulkanat.www.new_frontiers
-
-import net.minecraft.creativetab.CreativeTabs
-import net.minecraft.init.Blocks
-import net.minecraft.item.Item
-import net.minecraft.item.ItemStack
-import net.minecraftforge.fml.relauncher.Side
-import net.minecraftforge.fml.relauncher.SideOnly
-
-class NFCreativeTabs : CreativeTabs("new_frontiers") {
- override fun getTabLabel(): String {
- return "new_frontiers"
- }
-
- @SideOnly(Side.CLIENT)
- override fun createIcon(): ItemStack {
- return ItemStack(Item.getItemFromBlock(NewFrontiers.ObjectRegistryHandler.blocks[0]))
- }
-}
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/NewFrontiers.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/NewFrontiers.kt
index e91b845..f79e93b 100644
--- a/src/main/kotlin/de/wulkanat/www/new_frontiers/NewFrontiers.kt
+++ b/src/main/kotlin/de/wulkanat/www/new_frontiers/NewFrontiers.kt
@@ -1,14 +1,13 @@
package de.wulkanat.www.new_frontiers
-import de.wulkanat.www.new_frontiers.blocks.FTLDrive
-import de.wulkanat.www.new_frontiers.blocks.NFBlock
-import de.wulkanat.www.new_frontiers.blocks.SpaceTeleporter
-import de.wulkanat.www.new_frontiers.dimensions.Space
+import de.wulkanat.www.new_frontiers.init.Blocks
+import de.wulkanat.www.new_frontiers.init.Items
+import de.wulkanat.www.new_frontiers.init.registerBiomes
+import de.wulkanat.www.new_frontiers.init.registerDimensions
import net.minecraft.block.Block
import net.minecraft.item.Item
import net.minecraft.item.ItemBlock
-import net.minecraft.world.DimensionType
-import net.minecraftforge.common.DimensionManager
+import net.minecraftforge.client.event.ModelRegistryEvent
import net.minecraftforge.event.RegistryEvent
import net.minecraftforge.fml.common.Mod
import net.minecraftforge.fml.common.event.FMLInitializationEvent
@@ -27,65 +26,56 @@ object NewFrontiers {
const val MOD_NAME = "New Frontiers"
const val VERSION = "1.0-SNAPSHOT"
- val NF_CREATIVE_TAB = NFCreativeTabs()
-
- /**
- * This is the first initialization event. Register tile entities here.
- * The registry events below will have fired prior to entry to this method.
- */
@Mod.EventHandler
fun preinit(event: FMLPreInitializationEvent) {
- val a = DimensionType.register("Space", "_space", 2, Space::class.java, false)
- DimensionManager.registerDimension(2, a)
+ // TODO: register world generator
+
+ registerBiomes()
+ registerDimensions()
+
+ // TODO: register entities
}
- /**
- * This is the second initialization event. Register custom recipes
- */
@Mod.EventHandler
fun init(event: FMLInitializationEvent) {
}
- /**
- * This is the final initialization event. Register actions from other mods here
- */
@Mod.EventHandler
fun postinit(event: FMLPostInitializationEvent) {
}
- /**
- * This is a special class that listens to registry events, to allow creation of mod blocks and items at the proper time.
- */
@Mod.EventBusSubscriber(modid = MOD_ID)
object ObjectRegistryHandler {
- val blocks: Array = arrayOf(
- SpaceTeleporter(),
- FTLDrive()
- )
-
- /**
- * Listen for the register event for creating custom items
- */
@SubscribeEvent
@JvmStatic
fun addItems(event: RegistryEvent.Register- ) {
- for (block in blocks) {
- if (block.hasItemBlock) {
- event.registry.register(ItemBlock(block).setRegistryName(block.registryName))
+ for (block in Blocks.values()) {
+ if (block.value.hasItemBlock) {
+ event.registry.register(ItemBlock(block.value).setRegistryName(block.value.registryName))
+ }
+ }
+
+ for (item in Items.values()) {
+ event.registry.register(item.value)
+ }
+ }
+
+ @SubscribeEvent
+ @JvmStatic
+ fun registerModels(even: ModelRegistryEvent) {
+ for (item in Items.values()) {
+ if (item.value.hasCustomModel) {
+ item.value.registerModels()
}
}
- // TODO: register items
}
- /**
- * Listen for the register event for creating custom blocks
- */
@SubscribeEvent
@JvmStatic
fun addBlocks(event: RegistryEvent.Register) {
- for (block in blocks) {
- event.registry.register(block)
+ for (block in Blocks.values()) {
+ event.registry.register(block.value)
}
}
}
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/abstract_helpers/NFBiome.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/abstract_helpers/NFBiome.kt
new file mode 100644
index 0000000..1a9a060
--- /dev/null
+++ b/src/main/kotlin/de/wulkanat/www/new_frontiers/abstract_helpers/NFBiome.kt
@@ -0,0 +1,53 @@
+package de.wulkanat.www.new_frontiers.abstract_helpers
+
+import net.minecraft.block.state.IBlockState
+import net.minecraft.world.biome.Biome
+import net.minecraftforge.common.BiomeDictionary
+import net.minecraftforge.common.BiomeManager
+
+abstract class NFBiome(
+ val name: String,
+ val biomeType: BiomeManager.BiomeType,
+ val types: Array,
+ baseHeight: Float = 1.0F,
+ heightVariation: Float = 1.0F,
+ temperature: Float = 0.5F,
+ rainFrequency: Float = 0.6F,
+ rain: Boolean = true,
+ snow: Boolean = false,
+ waterColor: Int = 16711680,
+ topBlock: IBlockState,
+ fillerBlock: IBlockState,
+ spawnableCaveCreatureList: List = arrayListOf(),
+ spawnableCreatureList: List = arrayListOf(),
+ spawnableMonsterList: List = arrayListOf(),
+ spawnableWaterCreatureList: List = arrayListOf()
+) : Biome(setRainAndSnow(BiomeProperties(name)
+ .setBaseHeight(baseHeight)
+ .setHeightVariation(heightVariation)
+ .setTemperature(temperature)
+ .setRainfall(rainFrequency)
+ .setWaterColor(waterColor), rain, snow)) {
+ init {
+ this.topBlock = topBlock
+ this.fillerBlock = fillerBlock
+
+ this.spawnableCaveCreatureList = spawnableCaveCreatureList
+ this.spawnableCreatureList = spawnableCreatureList
+ this.spawnableMonsterList = spawnableMonsterList
+ this.spawnableWaterCreatureList = spawnableWaterCreatureList
+
+ // TODO: decorator
+ }
+
+ companion object {
+ private fun setRainAndSnow(properties: BiomeProperties, rain: Boolean, snow: Boolean): BiomeProperties {
+ if (!rain)
+ properties.setRainDisabled()
+ if (snow)
+ properties.setSnowEnabled()
+
+ return properties
+ }
+ }
+}
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/blocks/NFBlock.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/abstract_helpers/NFBlock.kt
similarity index 85%
rename from src/main/kotlin/de/wulkanat/www/new_frontiers/blocks/NFBlock.kt
rename to src/main/kotlin/de/wulkanat/www/new_frontiers/abstract_helpers/NFBlock.kt
index a547039..cc4df61 100644
--- a/src/main/kotlin/de/wulkanat/www/new_frontiers/blocks/NFBlock.kt
+++ b/src/main/kotlin/de/wulkanat/www/new_frontiers/abstract_helpers/NFBlock.kt
@@ -1,4 +1,4 @@
-package de.wulkanat.www.new_frontiers.blocks
+package de.wulkanat.www.new_frontiers.abstract_helpers
import de.wulkanat.www.new_frontiers.NewFrontiers
import net.minecraft.block.Block
@@ -16,7 +16,7 @@ abstract class NFBlock(
lightLevel: Int = 0,
lightOpacity: Int = 0,
name: String,
- creativeTabs: CreativeTabs = NewFrontiers.NF_CREATIVE_TAB
+ creativeTab: CreativeTabs = de.wulkanat.www.new_frontiers.init.CreativeTabs.NF_BLOCKS.value
) : Block(material) {
init {
// The Java code is a lot of hot garbage, so most of this is copied from the setter functions
@@ -31,7 +31,7 @@ abstract class NFBlock(
this.translationKey = name
this.lightValue = lightLevel
this.lightOpacity = lightOpacity
- this.creativeTab = creativeTabs
+ this.creativeTab = creativeTab
}
override fun isCollidable(): Boolean {
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/abstract_helpers/NFCreativeTabs.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/abstract_helpers/NFCreativeTabs.kt
new file mode 100644
index 0000000..4c17184
--- /dev/null
+++ b/src/main/kotlin/de/wulkanat/www/new_frontiers/abstract_helpers/NFCreativeTabs.kt
@@ -0,0 +1,27 @@
+package de.wulkanat.www.new_frontiers.abstract_helpers
+
+import net.minecraft.creativetab.CreativeTabs
+import net.minecraft.item.Item
+import net.minecraft.item.ItemStack
+import net.minecraftforge.fml.relauncher.Side
+import net.minecraftforge.fml.relauncher.SideOnly
+
+abstract class NFCreativeTabs(
+ val name: String,
+ val tabIcon: () -> Item,
+ tabBackground: String? = null
+) : CreativeTabs(name) {
+ init {
+ if (tabBackground != null)
+ backgroundImageName = tabBackground
+ }
+
+ override fun getTabLabel(): String {
+ return name
+ }
+
+ @SideOnly(Side.CLIENT)
+ override fun createIcon(): ItemStack {
+ return ItemStack(tabIcon())
+ }
+}
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/abstract_helpers/NFDimension.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/abstract_helpers/NFDimension.kt
new file mode 100644
index 0000000..2bb5749
--- /dev/null
+++ b/src/main/kotlin/de/wulkanat/www/new_frontiers/abstract_helpers/NFDimension.kt
@@ -0,0 +1,34 @@
+package de.wulkanat.www.new_frontiers.abstract_helpers
+
+import net.minecraft.world.DimensionType
+import net.minecraft.world.WorldProvider
+import net.minecraft.world.biome.BiomeProvider
+import net.minecraft.world.gen.IChunkGenerator
+
+abstract class NFDimension(
+ private val canRespawn: Boolean = true,
+ private val surfaceDimension: Boolean = false,
+ val name: String,
+ val id: Int,
+ biomeProvider: BiomeProvider
+) : WorldProvider() {
+ init {
+ this.biomeProvider = biomeProvider
+ }
+
+ private val dimType: DimensionType = DimensionType.register(name, "_${name.toLowerCase()}", id, this.javaClass, false)
+
+ override fun getDimensionType(): DimensionType? {
+ return dimType
+ }
+
+ abstract override fun createChunkGenerator(): IChunkGenerator
+
+ override fun canRespawnHere(): Boolean {
+ return canRespawn
+ }
+
+ override fun isSurfaceWorld(): Boolean {
+ return surfaceDimension
+ }
+}
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/abstract_helpers/NFItem.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/abstract_helpers/NFItem.kt
new file mode 100644
index 0000000..d79afff
--- /dev/null
+++ b/src/main/kotlin/de/wulkanat/www/new_frontiers/abstract_helpers/NFItem.kt
@@ -0,0 +1,22 @@
+package de.wulkanat.www.new_frontiers.abstract_helpers
+
+import de.wulkanat.www.new_frontiers.NewFrontiers
+import de.wulkanat.www.new_frontiers.proxy.registerItemRenderer
+import net.minecraft.creativetab.CreativeTabs
+import net.minecraft.item.Item
+
+abstract class NFItem(
+ name: String,
+ creativeTab: CreativeTabs = de.wulkanat.www.new_frontiers.init.CreativeTabs.NF_ITEMS.value,
+ val hasCustomModel: Boolean = false
+) : Item() {
+ init {
+ setRegistryName("${NewFrontiers.MOD_ID}:$name")
+ this.translationKey = name
+ this.creativeTab = creativeTab
+ }
+
+ fun registerModels() {
+ registerItemRenderer(this, 0, "inventory")
+ }
+}
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/biomes/BiomeDeepSpace.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/biomes/BiomeDeepSpace.kt
new file mode 100644
index 0000000..cc6e80d
--- /dev/null
+++ b/src/main/kotlin/de/wulkanat/www/new_frontiers/biomes/BiomeDeepSpace.kt
@@ -0,0 +1,18 @@
+package de.wulkanat.www.new_frontiers.biomes
+
+import de.wulkanat.www.new_frontiers.abstract_helpers.NFBiome
+import net.minecraft.block.BlockClay
+import net.minecraft.block.BlockStone
+import net.minecraftforge.common.BiomeDictionary
+import net.minecraftforge.common.BiomeManager
+
+class BiomeDeepSpace : NFBiome(
+ name = "deep_space",
+ biomeType = BiomeManager.BiomeType.COOL,
+ types = arrayOf(BiomeDictionary.Type.VOID),
+ rain = false,
+ snow = false,
+ temperature = 0F,
+ topBlock = BlockStone().defaultState,
+ fillerBlock = BlockClay().defaultState
+)
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/biomes/NFBiome.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/biomes/NFBiome.kt
deleted file mode 100644
index 4bfc4db..0000000
--- a/src/main/kotlin/de/wulkanat/www/new_frontiers/biomes/NFBiome.kt
+++ /dev/null
@@ -1,2 +0,0 @@
-package de.wulkanat.www.new_frontiers.biomes
-
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/blocks/FTLDrive.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/blocks/BlockFTLDrive.kt
similarity index 61%
rename from src/main/kotlin/de/wulkanat/www/new_frontiers/blocks/FTLDrive.kt
rename to src/main/kotlin/de/wulkanat/www/new_frontiers/blocks/BlockFTLDrive.kt
index ae3ddfa..09dd814 100644
--- a/src/main/kotlin/de/wulkanat/www/new_frontiers/blocks/FTLDrive.kt
+++ b/src/main/kotlin/de/wulkanat/www/new_frontiers/blocks/BlockFTLDrive.kt
@@ -1,8 +1,9 @@
package de.wulkanat.www.new_frontiers.blocks
+import de.wulkanat.www.new_frontiers.abstract_helpers.NFBlock
import net.minecraft.block.material.Material
-class FTLDrive : NFBlock(
+class BlockFTLDrive : NFBlock(
material = Material.ANVIL,
name = "ftl_drive"
)
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/blocks/SpaceTeleporter.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/blocks/BlockSpaceTeleporter.kt
similarity index 68%
rename from src/main/kotlin/de/wulkanat/www/new_frontiers/blocks/SpaceTeleporter.kt
rename to src/main/kotlin/de/wulkanat/www/new_frontiers/blocks/BlockSpaceTeleporter.kt
index 2797f02..e249035 100644
--- a/src/main/kotlin/de/wulkanat/www/new_frontiers/blocks/SpaceTeleporter.kt
+++ b/src/main/kotlin/de/wulkanat/www/new_frontiers/blocks/BlockSpaceTeleporter.kt
@@ -1,8 +1,9 @@
package de.wulkanat.www.new_frontiers.blocks
+import de.wulkanat.www.new_frontiers.abstract_helpers.NFBlock
import net.minecraft.block.material.Material
-class SpaceTeleporter : NFBlock(
+class BlockSpaceTeleporter : NFBlock(
material = Material.GROUND,
hardness = 1.5F,
resistance = 2.5F,
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/creativetabs/CreativeTabNFBlocks.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/creativetabs/CreativeTabNFBlocks.kt
new file mode 100644
index 0000000..1f1093d
--- /dev/null
+++ b/src/main/kotlin/de/wulkanat/www/new_frontiers/creativetabs/CreativeTabNFBlocks.kt
@@ -0,0 +1,10 @@
+package de.wulkanat.www.new_frontiers.creativetabs
+
+import de.wulkanat.www.new_frontiers.abstract_helpers.NFCreativeTabs
+import de.wulkanat.www.new_frontiers.init.Blocks
+import net.minecraft.item.Item
+
+class CreativeTabNFBlocks : NFCreativeTabs(
+ name = "nf_blocks",
+ tabIcon = { Item.getItemFromBlock(Blocks.SPACE_TELEPORTER.value) }
+)
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/creativetabs/CreativeTabNFItems.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/creativetabs/CreativeTabNFItems.kt
new file mode 100644
index 0000000..d71fc79
--- /dev/null
+++ b/src/main/kotlin/de/wulkanat/www/new_frontiers/creativetabs/CreativeTabNFItems.kt
@@ -0,0 +1,9 @@
+package de.wulkanat.www.new_frontiers.creativetabs
+
+import de.wulkanat.www.new_frontiers.abstract_helpers.NFCreativeTabs
+import de.wulkanat.www.new_frontiers.init.Items
+
+class CreativeTabNFItems : NFCreativeTabs(
+ name = "nf_items",
+ tabIcon = { Items.TEST_ITEM.value }
+)
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/dimensions/DimensionSpace.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/dimensions/DimensionSpace.kt
new file mode 100644
index 0000000..a859b0f
--- /dev/null
+++ b/src/main/kotlin/de/wulkanat/www/new_frontiers/dimensions/DimensionSpace.kt
@@ -0,0 +1,19 @@
+package de.wulkanat.www.new_frontiers.dimensions
+
+import de.wulkanat.www.new_frontiers.abstract_helpers.NFDimension
+import de.wulkanat.www.new_frontiers.dimensions.chunkgen.VoidChunkGenerator
+import de.wulkanat.www.new_frontiers.init.Biomes
+import net.minecraft.world.biome.BiomeProviderSingle
+import net.minecraft.world.gen.IChunkGenerator
+
+class DimensionSpace : NFDimension(
+ name = "space",
+ id = 2,
+ canRespawn = true,
+ surfaceDimension = false,
+ biomeProvider = BiomeProviderSingle(Biomes.DEEP_SPACE.value)
+) {
+ override fun createChunkGenerator(): IChunkGenerator {
+ return VoidChunkGenerator(this.world)
+ }
+}
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/dimensions/NFDimension.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/dimensions/NFDimension.kt
deleted file mode 100644
index 134d411..0000000
--- a/src/main/kotlin/de/wulkanat/www/new_frontiers/dimensions/NFDimension.kt
+++ /dev/null
@@ -1,21 +0,0 @@
-package de.wulkanat.www.new_frontiers.dimensions
-
-import net.minecraft.world.DimensionType
-import net.minecraft.world.WorldProvider
-import net.minecraft.world.gen.IChunkGenerator
-
-abstract class NFDimension(
- private val canRespawn: Boolean = true,
- private val surfaceDimension: Boolean = false
-) : WorldProvider() {
- abstract override fun getDimensionType(): DimensionType
- abstract override fun createChunkGenerator(): IChunkGenerator
-
- override fun canRespawnHere(): Boolean {
- return canRespawn
- }
-
- override fun isSurfaceWorld(): Boolean {
- return surfaceDimension
- }
-}
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/dimensions/Space.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/dimensions/Space.kt
deleted file mode 100644
index 4c92cdf..0000000
--- a/src/main/kotlin/de/wulkanat/www/new_frontiers/dimensions/Space.kt
+++ /dev/null
@@ -1,17 +0,0 @@
-package de.wulkanat.www.new_frontiers.dimensions
-
-import net.minecraft.world.DimensionType
-import net.minecraft.world.gen.IChunkGenerator
-
-class Space : NFDimension(
- canRespawn = true,
- surfaceDimension = false
-) {
- override fun getDimensionType(): DimensionType {
- TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
- }
-
- override fun createChunkGenerator(): IChunkGenerator {
- TODO("not implemented")
- }
-}
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/dimensions/chunkgen/VoidChunkGenerator.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/dimensions/chunkgen/VoidChunkGenerator.kt
new file mode 100644
index 0000000..e673311
--- /dev/null
+++ b/src/main/kotlin/de/wulkanat/www/new_frontiers/dimensions/chunkgen/VoidChunkGenerator.kt
@@ -0,0 +1,40 @@
+package de.wulkanat.www.new_frontiers.dimensions.chunkgen
+
+import net.minecraft.entity.EnumCreatureType
+import net.minecraft.util.math.BlockPos
+import net.minecraft.world.World
+import net.minecraft.world.biome.Biome
+import net.minecraft.world.chunk.Chunk
+import net.minecraft.world.gen.IChunkGenerator
+
+class VoidChunkGenerator(
+ private val world: World
+) : IChunkGenerator {
+ override fun generateStructures(p0: Chunk, p1: Int, p2: Int): Boolean {
+ return false
+ }
+
+ override fun getPossibleCreatures(p0: EnumCreatureType, p1: BlockPos): MutableList {
+ return arrayListOf()
+ }
+
+ override fun populate(p0: Int, p1: Int) {
+ // noop
+ }
+
+ override fun recreateStructures(p0: Chunk, p1: Int, p2: Int) {
+ // noop
+ }
+
+ override fun getNearestStructurePos(p0: World, p1: String, p2: BlockPos, p3: Boolean): BlockPos? {
+ return null
+ }
+
+ override fun generateChunk(p0: Int, p1: Int): Chunk {
+ return Chunk(world, p0, p1)
+ }
+
+ override fun isInsideStructure(p0: World, p1: String, p2: BlockPos): Boolean {
+ return false
+ }
+}
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/init/biome_init.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/init/biome_init.kt
new file mode 100644
index 0000000..5c8f00c
--- /dev/null
+++ b/src/main/kotlin/de/wulkanat/www/new_frontiers/init/biome_init.kt
@@ -0,0 +1,27 @@
+package de.wulkanat.www.new_frontiers.init
+
+import de.wulkanat.www.new_frontiers.biomes.BiomeDeepSpace
+import de.wulkanat.www.new_frontiers.abstract_helpers.NFBiome
+import net.minecraft.world.biome.Biome
+import net.minecraftforge.common.BiomeDictionary
+import net.minecraftforge.common.BiomeManager
+import net.minecraftforge.fml.common.registry.ForgeRegistries
+
+enum class Biomes(val value: NFBiome) {
+ DEEP_SPACE(BiomeDeepSpace())
+}
+
+fun registerBiomes() {
+ for (biome in Biomes.values()) {
+ initBiome(biome.value, biome.value.name, biome.value.biomeType, *biome.value.types)
+ }
+}
+
+fun initBiome(biome: Biome, name: String, biomeType: BiomeManager.BiomeType, vararg types: BiomeDictionary.Type): Biome {
+ biome.setRegistryName(name)
+ ForgeRegistries.BIOMES.register(biome)
+ BiomeDictionary.addTypes(biome, *types)
+ BiomeManager.addBiome(biomeType, BiomeManager.BiomeEntry(biome, 10))
+ BiomeManager.addSpawnBiome(biome)
+ return biome
+}
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/init/block_init.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/init/block_init.kt
new file mode 100644
index 0000000..aeb6484
--- /dev/null
+++ b/src/main/kotlin/de/wulkanat/www/new_frontiers/init/block_init.kt
@@ -0,0 +1,32 @@
+package de.wulkanat.www.new_frontiers.init
+
+import de.wulkanat.www.new_frontiers.blocks.BlockFTLDrive
+import de.wulkanat.www.new_frontiers.abstract_helpers.NFBlock
+import de.wulkanat.www.new_frontiers.blocks.BlockSpaceTeleporter
+
+enum class Blocks(value: NFBlock) {
+ SPACE_TELEPORTER(BlockSpaceTeleporter()),
+ FTL_DRIVE(BlockFTLDrive());
+
+ val value: NFBlock by lazy {
+ value
+ }
+}
+
+class B(val a: String) {
+ init {
+ println("B Created")
+ }
+}
+
+class A(a: B) {
+ val b by lazy {
+ a
+ }
+}
+
+fun main() {
+ val a = A(B("something"))
+
+ println(a.b)
+}
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/init/creativetabs_init.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/init/creativetabs_init.kt
new file mode 100644
index 0000000..49dc9e0
--- /dev/null
+++ b/src/main/kotlin/de/wulkanat/www/new_frontiers/init/creativetabs_init.kt
@@ -0,0 +1,10 @@
+package de.wulkanat.www.new_frontiers.init
+
+import de.wulkanat.www.new_frontiers.creativetabs.CreativeTabNFBlocks
+import de.wulkanat.www.new_frontiers.abstract_helpers.NFCreativeTabs
+import de.wulkanat.www.new_frontiers.creativetabs.CreativeTabNFItems
+
+enum class CreativeTabs(val value: NFCreativeTabs) {
+ NF_BLOCKS(CreativeTabNFBlocks()),
+ NF_ITEMS(CreativeTabNFItems())
+}
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/init/dimension_init.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/init/dimension_init.kt
new file mode 100644
index 0000000..9e87b70
--- /dev/null
+++ b/src/main/kotlin/de/wulkanat/www/new_frontiers/init/dimension_init.kt
@@ -0,0 +1,15 @@
+package de.wulkanat.www.new_frontiers.init
+
+import de.wulkanat.www.new_frontiers.dimensions.DimensionSpace
+import de.wulkanat.www.new_frontiers.abstract_helpers.NFDimension
+import net.minecraftforge.common.DimensionManager
+
+enum class DimensionTypes(val value: NFDimension) {
+ SPACE(DimensionSpace());
+}
+
+fun registerDimensions() {
+ for (dimensionType in DimensionTypes.values()) {
+ DimensionManager.registerDimension(dimensionType.value.id, dimensionType.value.dimensionType)
+ }
+}
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/init/item_init.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/init/item_init.kt
new file mode 100644
index 0000000..a1e599c
--- /dev/null
+++ b/src/main/kotlin/de/wulkanat/www/new_frontiers/init/item_init.kt
@@ -0,0 +1,8 @@
+package de.wulkanat.www.new_frontiers.init
+
+import de.wulkanat.www.new_frontiers.abstract_helpers.NFItem
+import de.wulkanat.www.new_frontiers.items.ItemTestItem
+
+enum class Items(val value: NFItem) {
+ TEST_ITEM(ItemTestItem())
+}
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/items/ItemTestItem.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/items/ItemTestItem.kt
new file mode 100644
index 0000000..faa8bd6
--- /dev/null
+++ b/src/main/kotlin/de/wulkanat/www/new_frontiers/items/ItemTestItem.kt
@@ -0,0 +1,7 @@
+package de.wulkanat.www.new_frontiers.items
+
+import de.wulkanat.www.new_frontiers.abstract_helpers.NFItem
+
+class ItemTestItem : NFItem(
+ name = "test_item"
+)
diff --git a/src/main/kotlin/de/wulkanat/www/new_frontiers/proxy/client-proxy.kt b/src/main/kotlin/de/wulkanat/www/new_frontiers/proxy/client-proxy.kt
new file mode 100644
index 0000000..e62ac5f
--- /dev/null
+++ b/src/main/kotlin/de/wulkanat/www/new_frontiers/proxy/client-proxy.kt
@@ -0,0 +1,10 @@
+package de.wulkanat.www.new_frontiers.proxy
+
+import net.minecraft.client.renderer.block.model.ModelResourceLocation
+import net.minecraft.item.Item
+import net.minecraft.util.ResourceLocation
+import net.minecraftforge.client.model.ModelLoader
+
+fun registerItemRenderer(item: Item, meta: Int, id: String) {
+ ModelLoader.setCustomModelResourceLocation(item, meta, ModelResourceLocation(item.registryName as ResourceLocation, id))
+}
diff --git a/src/main/resources/assets/new_frontiers/lang/en_US.lang b/src/main/resources/assets/new_frontiers/lang/en_US.lang
index fdcc93b..97ebc18 100644
--- a/src/main/resources/assets/new_frontiers/lang/en_US.lang
+++ b/src/main/resources/assets/new_frontiers/lang/en_US.lang
@@ -1,4 +1,5 @@
tile.space_teleporter.name=Space Teleporter
tile.ftl_drive.name=FTL Drive
-itemGroup.new_frontiers=New Frontiers
+itemGroup.nf_blocks=New Frontiers Blocks
+itemGroup.nf_items=New Frontiers Items
diff --git a/src/main/resources/assets/new_frontiers/models/item/test_item.json b/src/main/resources/assets/new_frontiers/models/item/test_item.json
new file mode 100644
index 0000000..56d7f7d
--- /dev/null
+++ b/src/main/resources/assets/new_frontiers/models/item/test_item.json
@@ -0,0 +1,6 @@
+{
+ "parent": "item/generated",
+ "textures": {
+ "layer0": "new_frontiers:items/test_item"
+ }
+}
diff --git a/src/main/resources/assets/new_frontiers/textures/items/test_item.png b/src/main/resources/assets/new_frontiers/textures/items/test_item.png
new file mode 100644
index 0000000..387f4e5
Binary files /dev/null and b/src/main/resources/assets/new_frontiers/textures/items/test_item.png differ