block models and stuff
This commit is contained in:
@@ -32,6 +32,7 @@ object Blocks {
|
|||||||
|
|
||||||
fun registerBlockItems() {
|
fun registerBlockItems() {
|
||||||
BLOCKS.forEach(Consumer { sup: RegistrySupplier<Block> ->
|
BLOCKS.forEach(Consumer { sup: RegistrySupplier<Block> ->
|
||||||
|
NeoComputers.LOGGER.info(sup.id.toString())
|
||||||
val id = ResourceKey.create(Registries.ITEM, sup.id)
|
val id = ResourceKey.create(Registries.ITEM, sup.id)
|
||||||
Items.ITEMS.register(sup.id.path) { BlockItem(sup.get()!!, Item.Properties().`arch$tab`(Tabs.TAB))}
|
Items.ITEMS.register(sup.id.path) { BlockItem(sup.get()!!, Item.Properties().`arch$tab`(Tabs.TAB))}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -7,61 +7,25 @@ import net.minecraft.world.entity.player.Player
|
|||||||
import net.minecraft.world.inventory.AbstractContainerMenu
|
import net.minecraft.world.inventory.AbstractContainerMenu
|
||||||
import net.minecraft.world.inventory.Slot
|
import net.minecraft.world.inventory.Slot
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
|
import org.neoflock.neocomputers.utils.ContainerUtils
|
||||||
|
import org.neoflock.neocomputers.utils.GenericContainerMenu
|
||||||
|
|
||||||
class CombustionGeneratorMenu: AbstractContainerMenu {
|
class CombustionFuelSlot(container: Container, slot: Int, x: Int, y: Int): Slot(container, slot, x, y) {
|
||||||
var container: Container
|
override fun mayPlace(itemStack: ItemStack): Boolean {
|
||||||
|
return ContainerUtils.isBurningFuel(itemStack)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class CombustionGeneratorMenu: GenericContainerMenu {
|
||||||
// Client-side constructor, idk forge tells me to do this
|
// Client-side constructor, idk forge tells me to do this
|
||||||
constructor(id: Int, inventory: Inventory): this(id, inventory, SimpleContainer(1))
|
constructor(id: Int, inventory: Inventory): this(id, inventory, SimpleContainer(1))
|
||||||
|
|
||||||
// Server-side constructor
|
// Server-side constructor
|
||||||
constructor(id: Int, inventory: Inventory, container: Container): super(Menus.COMBUSTGEN_MENU.get(), id) {
|
constructor(id: Int, inventory: Inventory, container: Container): super(Menus.COMBUSTGEN_MENU.get(), id, container) {
|
||||||
this.container = container
|
|
||||||
|
|
||||||
container.startOpen(inventory.player)
|
container.startOpen(inventory.player)
|
||||||
|
|
||||||
this.addSlot(Slot(container, 0, 80, 35))
|
this.addSlot(CombustionFuelSlot(container, 0, 80, 35))
|
||||||
|
|
||||||
// Based off the code in ChestMenu
|
this.addInventorySlots(inventory, 8, 84)
|
||||||
for (l in 0..2) {
|
|
||||||
for (m in 0..8) {
|
|
||||||
this.addSlot(Slot(inventory, m + l * 9 + 9, 8 + m * 18, 84 + l * 18))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (l in 0..8) {
|
|
||||||
this.addSlot(Slot(inventory, l, 8 + l * 18, 84 + 3 * 18 + 4))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// taken from https://docs.fabricmc.net/develop/blocks/container-menus
|
|
||||||
override fun quickMoveStack(player: Player, i: Int): ItemStack? {
|
|
||||||
val slot = slots[i]
|
|
||||||
|
|
||||||
if(!slot.hasItem()) return ItemStack.EMPTY
|
|
||||||
|
|
||||||
val stack = slot.item
|
|
||||||
val copied = stack.copy()
|
|
||||||
val contSize = container.containerSize
|
|
||||||
|
|
||||||
if(i < contSize) {
|
|
||||||
if(!this.moveItemStackTo(stack, contSize, slots.size, true)) {
|
|
||||||
return ItemStack.EMPTY
|
|
||||||
}
|
|
||||||
} else if(!this.moveItemStackTo(stack, 0, contSize, false)) {
|
|
||||||
return ItemStack.EMPTY
|
|
||||||
}
|
|
||||||
|
|
||||||
if(stack.isEmpty) {
|
|
||||||
slot.setByPlayer(ItemStack.EMPTY)
|
|
||||||
} else {
|
|
||||||
slot.setChanged()
|
|
||||||
}
|
|
||||||
|
|
||||||
return copied
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun stillValid(player: Player): Boolean {
|
|
||||||
return container.stillValid(player)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,29 +1,29 @@
|
|||||||
package org.neoflock.neocomputers.gui.screen
|
package org.neoflock.neocomputers.gui.screen
|
||||||
|
|
||||||
import net.minecraft.client.gui.GuiGraphics
|
import net.minecraft.client.gui.GuiGraphics
|
||||||
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen
|
|
||||||
import net.minecraft.network.chat.Component
|
import net.minecraft.network.chat.Component
|
||||||
import net.minecraft.resources.ResourceLocation
|
import net.minecraft.resources.ResourceLocation
|
||||||
import net.minecraft.world.entity.player.Inventory
|
import net.minecraft.world.entity.player.Inventory
|
||||||
import org.neoflock.neocomputers.NeoComputers
|
import org.neoflock.neocomputers.NeoComputers
|
||||||
import org.neoflock.neocomputers.gui.menu.CombustionGeneratorMenu
|
import org.neoflock.neocomputers.gui.menu.CombustionGeneratorMenu
|
||||||
|
import org.neoflock.neocomputers.utils.GenericContainerScreen
|
||||||
|
|
||||||
class CombustionGeneratorScreen(abstractContainerMenu: CombustionGeneratorMenu, inventory: Inventory, component: Component) : AbstractContainerScreen<CombustionGeneratorMenu>(abstractContainerMenu, inventory, component) {
|
class CombustionGeneratorScreen(abstractContainerMenu: CombustionGeneratorMenu, inventory: Inventory, component: Component) : GenericContainerScreen<CombustionGeneratorMenu>(abstractContainerMenu, inventory, component) {
|
||||||
override fun init() {
|
override fun findMenuTexture(): ResourceLocation = ResourceLocation.withDefaultNamespace("textures/gui/container/dispenser.png")
|
||||||
super.init()
|
|
||||||
|
|
||||||
this.titleLabelX = (this.imageWidth - this.font.width(this.title)) / 2
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun renderBg(guiGraphics: GuiGraphics, f: Float, i: Int, j: Int) {
|
|
||||||
val cx = (width - imageWidth) / 2
|
|
||||||
val cy = (height - imageHeight) / 2
|
|
||||||
|
|
||||||
val containerTexture: ResourceLocation = ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "textures/gui/linux.png")
|
|
||||||
guiGraphics.blitSprite(containerTexture, cx, cy, imageWidth, imageHeight)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun render(graphics: GuiGraphics, mouseX: Int, mouseY: Int, something: Float) {
|
override fun render(graphics: GuiGraphics, mouseX: Int, mouseY: Int, something: Float) {
|
||||||
super.render(graphics, mouseX, mouseY, something)
|
super.render(graphics, mouseX, mouseY, something)
|
||||||
super.renderTooltip(graphics, mouseX, mouseY)
|
|
||||||
|
val lineBg = 0xFF002200.toInt()
|
||||||
|
val lineFg = 0xFF00FF00.toInt()
|
||||||
|
|
||||||
|
val lineX = imageX + 8
|
||||||
|
val lineY = imageY + 6
|
||||||
|
val lineHeight = 60
|
||||||
|
|
||||||
|
val power = 0.2
|
||||||
|
|
||||||
|
graphics.fill(lineX, lineY, lineX + 2, lineY + lineHeight, lineFg)
|
||||||
|
graphics.fill(lineX, lineY, lineX + 2, lineY + (lineHeight * (1.0 - power)).toInt(), lineBg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,9 +1,19 @@
|
|||||||
package org.neoflock.neocomputers.utils
|
package org.neoflock.neocomputers.utils
|
||||||
|
|
||||||
// based off the ImplementedContainer of https://docs.fabricmc.net/develop/blocks/block-containers
|
// based off the ImplementedContainer of https://docs.fabricmc.net/develop/blocks/block-containers
|
||||||
|
import net.minecraft.client.gui.GuiGraphics
|
||||||
|
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen
|
||||||
import net.minecraft.world.Container;
|
import net.minecraft.world.Container;
|
||||||
import net.minecraft.core.NonNullList;
|
import net.minecraft.core.NonNullList;
|
||||||
|
import net.minecraft.network.chat.Component
|
||||||
|
import net.minecraft.resources.ResourceLocation
|
||||||
|
import net.minecraft.server.packs.resources.Resource
|
||||||
import net.minecraft.world.ContainerHelper
|
import net.minecraft.world.ContainerHelper
|
||||||
|
import net.minecraft.world.entity.player.Inventory
|
||||||
|
import net.minecraft.world.entity.player.Player
|
||||||
|
import net.minecraft.world.inventory.AbstractContainerMenu
|
||||||
|
import net.minecraft.world.inventory.MenuType
|
||||||
|
import net.minecraft.world.inventory.Slot
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
|
|
||||||
// Common container interface, assumes the entire purpose is purely raw item storage
|
// Common container interface, assumes the entire purpose is purely raw item storage
|
||||||
@@ -46,3 +56,86 @@ interface GenericContainer : Container {
|
|||||||
getItems().clear()
|
getItems().clear()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract class GenericContainerMenu(menuType: MenuType<*>, id: Int, var container: Container): AbstractContainerMenu(menuType, id) {
|
||||||
|
fun addInventorySlots(inventory: Inventory, x: Int, y: Int) {
|
||||||
|
// Based off the code in ChestMenu
|
||||||
|
for (i in 0..2) {
|
||||||
|
for (j in 0..8) {
|
||||||
|
this.addSlot(Slot(inventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
addInventoryHotbar(inventory, x, y + 3 * 18 + 4)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun addInventoryHotbar(inventory: Inventory, x: Int, y: Int) {
|
||||||
|
for (i in 0..8) {
|
||||||
|
this.addSlot(Slot(inventory, i, x + i * 18, y))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// taken from https://docs.fabricmc.net/develop/blocks/container-menus
|
||||||
|
override fun quickMoveStack(player: Player, i: Int): ItemStack? {
|
||||||
|
val slot = slots[i]
|
||||||
|
|
||||||
|
if(!slot.hasItem()) return ItemStack.EMPTY
|
||||||
|
|
||||||
|
val stack = slot.item
|
||||||
|
val copied = stack.copy()
|
||||||
|
val contSize = container.containerSize
|
||||||
|
|
||||||
|
if(i < contSize) {
|
||||||
|
if(!this.moveItemStackTo(stack, contSize, slots.size, true)) {
|
||||||
|
return ItemStack.EMPTY
|
||||||
|
}
|
||||||
|
} else if(!this.moveItemStackTo(stack, 0, contSize, false)) {
|
||||||
|
return ItemStack.EMPTY
|
||||||
|
}
|
||||||
|
|
||||||
|
if(stack.isEmpty) {
|
||||||
|
slot.setByPlayer(ItemStack.EMPTY)
|
||||||
|
} else {
|
||||||
|
slot.setChanged()
|
||||||
|
}
|
||||||
|
|
||||||
|
return copied
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun stillValid(player: Player): Boolean {
|
||||||
|
return container.stillValid(player)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class GenericContainerScreen<T: GenericContainerMenu>(menu: T, inventory: Inventory, component: Component): AbstractContainerScreen<T>(menu, inventory, component) {
|
||||||
|
open fun shouldCenterTitle() = true
|
||||||
|
open fun shouldRenderTooltip() = true
|
||||||
|
open fun findMenuTexture(): ResourceLocation? = null
|
||||||
|
|
||||||
|
val imageX: Int
|
||||||
|
get() = (width - imageWidth) / 2
|
||||||
|
|
||||||
|
val imageY: Int
|
||||||
|
get() = (height - imageHeight) / 2
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
super.init()
|
||||||
|
|
||||||
|
if(shouldCenterTitle()) this.titleLabelX = (this.imageWidth - this.font.width(this.title)) / 2
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun renderBg(guiGraphics: GuiGraphics, f: Float, i: Int, j: Int) {
|
||||||
|
val menuTex = findMenuTexture()
|
||||||
|
if(menuTex != null) {
|
||||||
|
val cx = (width - imageWidth) / 2
|
||||||
|
val cy = (height - imageHeight) / 2
|
||||||
|
|
||||||
|
guiGraphics.blit(menuTex, imageX, imageY, 0, 0, imageWidth, imageHeight)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun render(graphics: GuiGraphics, mouseX: Int, mouseY: Int, something: Float) {
|
||||||
|
super.render(graphics, mouseX, mouseY, something)
|
||||||
|
if(shouldRenderTooltip()) super.renderTooltip(graphics, mouseX, mouseY)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"": {
|
||||||
|
"model": "neocomputers:block/combustgen"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"parent": "minecraft:block/cube_all",
|
||||||
|
"textures": {
|
||||||
|
"all": "neocomputers:block/teto"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"parent": "neocomputers:block/combustgen"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user