Merge branch 'main' of https://gitea.codersquack.nl/NeoFlock/NeoComputers
This commit is contained in:
@@ -0,0 +1,32 @@
|
|||||||
|
package org.neoflock.neocomputers.entity
|
||||||
|
|
||||||
|
import net.minecraft.core.BlockPos
|
||||||
|
import net.minecraft.core.Direction
|
||||||
|
import org.neoflock.neocomputers.item.ComponentItem
|
||||||
|
import org.neoflock.neocomputers.network.Networking
|
||||||
|
|
||||||
|
abstract class MachineEvent {
|
||||||
|
abstract val machine: MachineEntity
|
||||||
|
}
|
||||||
|
|
||||||
|
data class MachineRedstoneEvent(override val machine: MachineEntity, val side: Direction): MachineEvent()
|
||||||
|
|
||||||
|
interface MachineEntity {
|
||||||
|
// Block position of machine, for wireless tech
|
||||||
|
fun getBlockPosition(): BlockPos
|
||||||
|
|
||||||
|
fun isRunning(): Boolean
|
||||||
|
fun start(): Boolean
|
||||||
|
fun stop(): Boolean
|
||||||
|
fun crash(error: String): Boolean
|
||||||
|
|
||||||
|
fun getMachineNode(): Networking.Node
|
||||||
|
|
||||||
|
// Redstone signals
|
||||||
|
fun getRedstoneInput(direction: Direction): Int
|
||||||
|
fun getRedstoneOutput(direction: Direction): Int
|
||||||
|
// returns the old one
|
||||||
|
fun setRedstoneOutput(direction: Direction, newValue: Int): Int
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: add dummy machine class which implements the machine entity interface meant to be used on the client
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
package org.neoflock.neocomputers.gui.menu;
|
package org.neoflock.neocomputers.gui.menu;
|
||||||
|
|
||||||
|
import net.minecraft.core.BlockPos
|
||||||
|
import net.minecraft.core.Direction
|
||||||
import net.minecraft.world.Container
|
import net.minecraft.world.Container
|
||||||
import net.minecraft.world.SimpleContainer
|
import net.minecraft.world.SimpleContainer
|
||||||
import net.minecraft.world.entity.player.Inventory
|
import net.minecraft.world.entity.player.Inventory
|
||||||
@@ -9,12 +11,36 @@ import net.minecraft.world.inventory.AbstractContainerMenu
|
|||||||
import net.minecraft.world.inventory.MenuType
|
import net.minecraft.world.inventory.MenuType
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
import org.neoflock.neocomputers.NeoComputers
|
import org.neoflock.neocomputers.NeoComputers
|
||||||
|
import org.neoflock.neocomputers.entity.MachineEntity
|
||||||
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
||||||
import org.neoflock.neocomputers.gui.widget.ComponentSlot
|
import org.neoflock.neocomputers.gui.widget.ComponentSlot
|
||||||
import org.neoflock.neocomputers.gui.widget.ComponentSlotRequirement
|
import org.neoflock.neocomputers.gui.widget.ComponentSlotRequirement
|
||||||
import org.neoflock.neocomputers.gui.widget.DynamicSlot
|
import org.neoflock.neocomputers.gui.widget.DynamicSlot
|
||||||
|
import org.neoflock.neocomputers.item.ComponentItem
|
||||||
|
import org.neoflock.neocomputers.network.Networking
|
||||||
import org.neoflock.neocomputers.utils.GenericContainerMenu
|
import org.neoflock.neocomputers.utils.GenericContainerMenu
|
||||||
|
|
||||||
|
// lowest IQ machine to exist
|
||||||
|
class DumbMachine: MachineEntity {
|
||||||
|
override fun getBlockPosition() = BlockPos.ZERO!!
|
||||||
|
|
||||||
|
override fun isRunning() = false
|
||||||
|
|
||||||
|
override fun start() = false
|
||||||
|
|
||||||
|
override fun stop() = false
|
||||||
|
|
||||||
|
override fun crash(error: String) = false
|
||||||
|
|
||||||
|
override fun getMachineNode() = Networking.Node()
|
||||||
|
|
||||||
|
override fun getRedstoneInput(direction: Direction): Int = 0
|
||||||
|
|
||||||
|
override fun getRedstoneOutput(direction: Direction): Int = 0
|
||||||
|
|
||||||
|
override fun setRedstoneOutput(direction: Direction, newValue: Int): Int = 0
|
||||||
|
}
|
||||||
|
|
||||||
class CaseMenu : GenericContainerMenu {
|
class CaseMenu : GenericContainerMenu {
|
||||||
constructor(i: Int, inv: Inventory) : this(i, inv, SimpleContainer(7))
|
constructor(i: Int, inv: Inventory) : this(i, inv, SimpleContainer(7))
|
||||||
|
|
||||||
@@ -28,12 +54,12 @@ class CaseMenu : GenericContainerMenu {
|
|||||||
constructor(i: Int, inv: Inventory, container: Container) : super(Menus.CASE_MENU.get(), i, container) {
|
constructor(i: Int, inv: Inventory, container: Container) : super(Menus.CASE_MENU.get(), i, container) {
|
||||||
this.addInventorySlots(inv, 8, 84)
|
this.addInventorySlots(inv, 8, 84)
|
||||||
|
|
||||||
this.addSlot(ComponentSlot(this.container!!, 0, 20, 34, eepromRequirement))
|
this.addSlot(ComponentSlot(this.container!!, 0, 20, 34, DumbMachine(), eepromRequirement))
|
||||||
|
|
||||||
var i = 1
|
var i = 1
|
||||||
for ((col, slotCol) in slotRequirements.withIndex()) {
|
for ((col, slotCol) in slotRequirements.withIndex()) {
|
||||||
for ((row, slotReq) in slotCol.withIndex()) {
|
for ((row, slotReq) in slotCol.withIndex()) {
|
||||||
this.addSlot(ComponentSlot(this.container!!, i, 98+(col*22), 18*(row+1)-2, slotReq))
|
this.addSlot(ComponentSlot(this.container!!, i, 98+(col*22), 18*(row+1)-2, DumbMachine(), slotReq))
|
||||||
i++
|
i++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import net.minecraft.world.item.Item
|
|||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
import net.minecraft.world.level.ItemLike
|
import net.minecraft.world.level.ItemLike
|
||||||
import org.neoflock.neocomputers.NeoComputers
|
import org.neoflock.neocomputers.NeoComputers
|
||||||
|
import org.neoflock.neocomputers.entity.MachineEntity
|
||||||
import org.neoflock.neocomputers.item.ComponentItem
|
import org.neoflock.neocomputers.item.ComponentItem
|
||||||
|
|
||||||
// Sort of a mis-nomer, does not need to be associated with components specifically
|
// Sort of a mis-nomer, does not need to be associated with components specifically
|
||||||
@@ -84,7 +85,7 @@ data class ComponentSlotRequirement(val tier: Int, val role: String) {
|
|||||||
|
|
||||||
// Tier 0 allows ALL tiers, making it completely untiered.
|
// Tier 0 allows ALL tiers, making it completely untiered.
|
||||||
// Role determines what the role is.
|
// Role determines what the role is.
|
||||||
class ComponentSlot(container: Container, slot: Int, x: Int, y: Int, val requirement: ComponentSlotRequirement): DynamicSlot(container, slot, x, y) {
|
class ComponentSlot(container: Container, slot: Int, x: Int, y: Int, val machine: MachineEntity, val requirement: ComponentSlotRequirement): DynamicSlot(container, slot, x, y) {
|
||||||
override fun draw(graphics: GuiGraphics, relX: Int, relY: Int, mouseX: Int, mouseY: Int) {
|
override fun draw(graphics: GuiGraphics, relX: Int, relY: Int, mouseX: Int, mouseY: Int) {
|
||||||
super.draw(graphics, relX, relY, mouseX, mouseY)
|
super.draw(graphics, relX, relY, mouseX, mouseY)
|
||||||
if(!hasItem()) {
|
if(!hasItem()) {
|
||||||
@@ -116,14 +117,14 @@ class ComponentSlot(container: Container, slot: Int, x: Int, y: Int, val require
|
|||||||
super.set(itemStack)
|
super.set(itemStack)
|
||||||
val item = itemStack.item
|
val item = itemStack.item
|
||||||
if(item is ComponentItem) {
|
if(item is ComponentItem) {
|
||||||
item.whenComponentPlaced(itemStack, requirement.role)
|
item.whenComponentPlaced(itemStack, machine, requirement.role)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onTake(player: Player, itemStack: ItemStack) {
|
override fun onTake(player: Player, itemStack: ItemStack) {
|
||||||
val item = itemStack.item
|
val item = itemStack.item
|
||||||
if(item is ComponentItem) {
|
if(item is ComponentItem) {
|
||||||
item.whenComponentTaken(itemStack, requirement.role)
|
item.whenComponentTaken(itemStack, machine, requirement.role)
|
||||||
}
|
}
|
||||||
super.onTake(player, itemStack)
|
super.onTake(player, itemStack)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package org.neoflock.neocomputers.item
|
|||||||
|
|
||||||
import net.minecraft.world.item.Item
|
import net.minecraft.world.item.Item
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
|
import org.neoflock.neocomputers.entity.MachineEntity
|
||||||
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
||||||
import org.neoflock.neocomputers.network.Networking
|
import org.neoflock.neocomputers.network.Networking
|
||||||
|
|
||||||
@@ -12,7 +13,7 @@ open class CBUSItem(val tier: Int, val maxComponents: Int): Item(Item.Properties
|
|||||||
|
|
||||||
override fun getComponentCapacity(itemStack: ItemStack): Int = maxComponents
|
override fun getComponentCapacity(itemStack: ItemStack): Int = maxComponents
|
||||||
|
|
||||||
override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null
|
override fun toComponentNode(itemStack: ItemStack, machine: MachineEntity): Networking.Node? = null
|
||||||
}
|
}
|
||||||
class CBUS0: CBUSItem(1, 8)
|
class CBUS0: CBUSItem(1, 8)
|
||||||
class CBUS1: CBUSItem(2, 12)
|
class CBUS1: CBUSItem(2, 12)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package org.neoflock.neocomputers.item
|
|||||||
|
|
||||||
import net.minecraft.world.item.Item
|
import net.minecraft.world.item.Item
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
|
import org.neoflock.neocomputers.entity.MachineEntity
|
||||||
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
||||||
import org.neoflock.neocomputers.network.Networking
|
import org.neoflock.neocomputers.network.Networking
|
||||||
|
|
||||||
@@ -12,7 +13,7 @@ open class CPUItem(val tier: Int, val maxComponents: Int): Item(Item.Properties(
|
|||||||
|
|
||||||
override fun getComponentCapacity(itemStack: ItemStack): Int = maxComponents
|
override fun getComponentCapacity(itemStack: ItemStack): Int = maxComponents
|
||||||
|
|
||||||
override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null
|
override fun toComponentNode(itemStack: ItemStack, machine: MachineEntity): Networking.Node? = null
|
||||||
}
|
}
|
||||||
|
|
||||||
class CPU0: CPUItem(1, 8)
|
class CPU0: CPUItem(1, 8)
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package org.neoflock.neocomputers.item
|
package org.neoflock.neocomputers.item
|
||||||
|
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
|
import org.neoflock.neocomputers.entity.MachineEntity
|
||||||
|
import org.neoflock.neocomputers.entity.MachineEvent
|
||||||
import org.neoflock.neocomputers.network.Networking
|
import org.neoflock.neocomputers.network.Networking
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
@@ -14,19 +16,28 @@ interface ComponentItem {
|
|||||||
fun getComponentCapacity(itemStack: ItemStack): Int = 0
|
fun getComponentCapacity(itemStack: ItemStack): Int = 0
|
||||||
|
|
||||||
// Component placed, node must now exist
|
// Component placed, node must now exist
|
||||||
fun whenComponentPlaced(itemStack: ItemStack, newRole: String) {
|
fun whenComponentPlaced(itemStack: ItemStack, machine: MachineEntity, newRole: String) {
|
||||||
val node = toComponentNode(itemStack) ?: return
|
val oldNode = getComponentNode(itemStack)
|
||||||
|
if(oldNode != null) Networking.removeNode(oldNode) // did a mod forget to call whenComponentTaken?
|
||||||
|
val node = toComponentNode(itemStack, machine) ?: return
|
||||||
Networking.addNode(node)
|
Networking.addNode(node)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Component taken, and thus removed
|
// Component taken, and thus removed
|
||||||
fun whenComponentTaken(itemStack: ItemStack, previousRole: String) {
|
fun whenComponentTaken(itemStack: ItemStack, machine: MachineEntity, previousRole: String) {
|
||||||
val node = toComponentNode(itemStack) ?: return
|
val node = getComponentNode(itemStack) ?: return
|
||||||
Networking.removeNode(node)
|
Networking.removeNode(node)
|
||||||
}
|
}
|
||||||
|
|
||||||
// To node, if applicable
|
// To node, if applicable. Meant to create the node, but not add it, as it will use the itemStack's address to find it again
|
||||||
fun toComponentNode(itemStack: ItemStack): Networking.Node?
|
fun toComponentNode(itemStack: ItemStack, machine: MachineEntity): Networking.Node?
|
||||||
|
|
||||||
|
// Gets the node associated to an item, if it exists
|
||||||
|
fun getComponentNode(itemStack: ItemStack): Networking.Node? {
|
||||||
|
val address = itemStack.get(DataComponents.ADDRESS) ?: return null
|
||||||
|
val uuid = UUID.fromString(address) ?: return null
|
||||||
|
return Networking.getNode(uuid)
|
||||||
|
}
|
||||||
|
|
||||||
fun ensureHasAddress(itemStack: ItemStack): UUID {
|
fun ensureHasAddress(itemStack: ItemStack): UUID {
|
||||||
if(!itemStack.has(DataComponents.ADDRESS)) {
|
if(!itemStack.has(DataComponents.ADDRESS)) {
|
||||||
@@ -34,4 +45,6 @@ interface ComponentItem {
|
|||||||
}
|
}
|
||||||
return UUID.fromString(itemStack.get(DataComponents.ADDRESS))
|
return UUID.fromString(itemStack.get(DataComponents.ADDRESS))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun onMachineEvent(itemStack: ItemStack, machine: MachineEntity, event: MachineEvent) {}
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,7 @@ import net.minecraft.network.chat.Component
|
|||||||
import net.minecraft.world.item.Item
|
import net.minecraft.world.item.Item
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
import net.minecraft.world.item.TooltipFlag
|
import net.minecraft.world.item.TooltipFlag
|
||||||
|
import org.neoflock.neocomputers.entity.MachineEntity
|
||||||
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
||||||
import org.neoflock.neocomputers.network.Networking
|
import org.neoflock.neocomputers.network.Networking
|
||||||
import org.neoflock.neocomputers.utils.Formatting
|
import org.neoflock.neocomputers.utils.Formatting
|
||||||
@@ -15,13 +16,13 @@ open class DataCard(val tier: Int, val limit: Long): Item(Properties()), Compone
|
|||||||
|
|
||||||
override fun getComponentTier(itemStack: ItemStack): Int = tier
|
override fun getComponentTier(itemStack: ItemStack): Int = tier
|
||||||
|
|
||||||
override fun whenComponentPlaced(itemStack: ItemStack, newRole: String) {
|
override fun whenComponentPlaced(itemStack: ItemStack, machine: MachineEntity, newRole: String) {
|
||||||
ensureHasAddress(itemStack)
|
ensureHasAddress(itemStack)
|
||||||
super.whenComponentPlaced(itemStack, newRole)
|
super.whenComponentPlaced(itemStack, machine, newRole)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Modem Component
|
// TODO: Modem Component
|
||||||
override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null
|
override fun toComponentNode(itemStack: ItemStack, machine: MachineEntity): Networking.Node? = null
|
||||||
|
|
||||||
override fun appendHoverText(
|
override fun appendHoverText(
|
||||||
itemStack: ItemStack,
|
itemStack: ItemStack,
|
||||||
@@ -34,7 +35,7 @@ open class DataCard(val tier: Int, val limit: Long): Item(Properties()), Compone
|
|||||||
val addrComp = if(addr == null) Component.translatable("neocomputers.noaddr") else Component.literal(addr)
|
val addrComp = if(addr == null) Component.translatable("neocomputers.noaddr") else Component.literal(addr)
|
||||||
list.addLast(addrComp)
|
list.addLast(addrComp)
|
||||||
list.addLast(Component.translatable("neocomputers.data.limit", Formatting.formatMemory(limit)))
|
list.addLast(Component.translatable("neocomputers.data.limit", Formatting.formatMemory(limit)))
|
||||||
// TODO: show HTTP/TCP/TLS support
|
// TODO: show encryption support
|
||||||
}
|
}
|
||||||
super.appendHoverText(itemStack, tooltipContext, list, tooltipFlag)
|
super.appendHoverText(itemStack, tooltipContext, list, tooltipFlag)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import net.minecraft.network.chat.Component
|
|||||||
import net.minecraft.world.item.Item
|
import net.minecraft.world.item.Item
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
import net.minecraft.world.item.TooltipFlag
|
import net.minecraft.world.item.TooltipFlag
|
||||||
|
import org.neoflock.neocomputers.entity.MachineEntity
|
||||||
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
||||||
import org.neoflock.neocomputers.network.Networking
|
import org.neoflock.neocomputers.network.Networking
|
||||||
import org.neoflock.neocomputers.utils.Formatting
|
import org.neoflock.neocomputers.utils.Formatting
|
||||||
@@ -24,12 +25,12 @@ open class EEPROMItem(val tier: Int, val codeCapacity: Int, val dataCapacity: In
|
|||||||
|
|
||||||
override fun getComponentCapacity(itemStack: ItemStack): Int = 0
|
override fun getComponentCapacity(itemStack: ItemStack): Int = 0
|
||||||
|
|
||||||
override fun whenComponentPlaced(itemStack: ItemStack, newRole: String) {
|
override fun whenComponentPlaced(itemStack: ItemStack, machine: MachineEntity, newRole: String) {
|
||||||
ensureHasAddress(itemStack)
|
ensureHasAddress(itemStack)
|
||||||
super.whenComponentPlaced(itemStack, newRole)
|
super.whenComponentPlaced(itemStack, machine, newRole)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null
|
override fun toComponentNode(itemStack: ItemStack, machine: MachineEntity): Networking.Node? = null
|
||||||
|
|
||||||
override fun appendHoverText(
|
override fun appendHoverText(
|
||||||
itemStack: ItemStack,
|
itemStack: ItemStack,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import net.minecraft.network.chat.Component
|
|||||||
import net.minecraft.world.item.Item
|
import net.minecraft.world.item.Item
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
import net.minecraft.world.item.TooltipFlag
|
import net.minecraft.world.item.TooltipFlag
|
||||||
|
import org.neoflock.neocomputers.entity.MachineEntity
|
||||||
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
||||||
import org.neoflock.neocomputers.network.Networking
|
import org.neoflock.neocomputers.network.Networking
|
||||||
|
|
||||||
@@ -14,13 +15,13 @@ open class GPUCard(val tier: Int, val vram: Long): Item(Properties()), Component
|
|||||||
|
|
||||||
override fun getComponentTier(itemStack: ItemStack): Int = tier
|
override fun getComponentTier(itemStack: ItemStack): Int = tier
|
||||||
|
|
||||||
override fun whenComponentPlaced(itemStack: ItemStack, newRole: String) {
|
override fun whenComponentPlaced(itemStack: ItemStack, machine: MachineEntity, newRole: String) {
|
||||||
ensureHasAddress(itemStack)
|
ensureHasAddress(itemStack)
|
||||||
super.whenComponentPlaced(itemStack, newRole)
|
super.whenComponentPlaced(itemStack, machine, newRole)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Modem Component
|
// TODO: Modem Component
|
||||||
override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null
|
override fun toComponentNode(itemStack: ItemStack, machine: MachineEntity): Networking.Node? = null
|
||||||
|
|
||||||
override fun appendHoverText(
|
override fun appendHoverText(
|
||||||
itemStack: ItemStack,
|
itemStack: ItemStack,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import net.minecraft.network.chat.Component
|
|||||||
import net.minecraft.world.item.Item
|
import net.minecraft.world.item.Item
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
import net.minecraft.world.item.TooltipFlag
|
import net.minecraft.world.item.TooltipFlag
|
||||||
|
import org.neoflock.neocomputers.entity.MachineEntity
|
||||||
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
||||||
import org.neoflock.neocomputers.network.Networking
|
import org.neoflock.neocomputers.network.Networking
|
||||||
import org.neoflock.neocomputers.utils.Formatting
|
import org.neoflock.neocomputers.utils.Formatting
|
||||||
@@ -22,12 +23,12 @@ open class HardDiskItem(val tier: Int, val capacity: Long): Item(getDiskProperti
|
|||||||
|
|
||||||
override fun getComponentCapacity(itemStack: ItemStack): Int = 0
|
override fun getComponentCapacity(itemStack: ItemStack): Int = 0
|
||||||
|
|
||||||
override fun whenComponentPlaced(itemStack: ItemStack, newRole: String) {
|
override fun whenComponentPlaced(itemStack: ItemStack, machine: MachineEntity, newRole: String) {
|
||||||
ensureHasAddress(itemStack)
|
ensureHasAddress(itemStack)
|
||||||
super.whenComponentPlaced(itemStack, newRole)
|
super.whenComponentPlaced(itemStack, machine, newRole)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null
|
override fun toComponentNode(itemStack: ItemStack, machine: MachineEntity): Networking.Node? = null
|
||||||
|
|
||||||
override fun appendHoverText(
|
override fun appendHoverText(
|
||||||
itemStack: ItemStack,
|
itemStack: ItemStack,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import net.minecraft.network.chat.Component
|
|||||||
import net.minecraft.world.item.Item
|
import net.minecraft.world.item.Item
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
import net.minecraft.world.item.TooltipFlag
|
import net.minecraft.world.item.TooltipFlag
|
||||||
|
import org.neoflock.neocomputers.entity.MachineEntity
|
||||||
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
||||||
import org.neoflock.neocomputers.network.Networking
|
import org.neoflock.neocomputers.network.Networking
|
||||||
import org.neoflock.neocomputers.utils.Formatting
|
import org.neoflock.neocomputers.utils.Formatting
|
||||||
@@ -13,13 +14,13 @@ class InternetCard: Item(Item.Properties()), ComponentItem {
|
|||||||
|
|
||||||
override fun getComponentTier(itemStack: ItemStack): Int = 1
|
override fun getComponentTier(itemStack: ItemStack): Int = 1
|
||||||
|
|
||||||
override fun whenComponentPlaced(itemStack: ItemStack, newRole: String) {
|
override fun whenComponentPlaced(itemStack: ItemStack, machine: MachineEntity, newRole: String) {
|
||||||
ensureHasAddress(itemStack)
|
ensureHasAddress(itemStack)
|
||||||
super.whenComponentPlaced(itemStack, newRole)
|
super.whenComponentPlaced(itemStack, machine, newRole)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Internet Component
|
// TODO: Internet Component
|
||||||
override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null
|
override fun toComponentNode(itemStack: ItemStack, machine: MachineEntity): Networking.Node? = null
|
||||||
|
|
||||||
override fun appendHoverText(
|
override fun appendHoverText(
|
||||||
itemStack: ItemStack,
|
itemStack: ItemStack,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import net.minecraft.network.chat.Component
|
|||||||
import net.minecraft.world.item.Item
|
import net.minecraft.world.item.Item
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
import net.minecraft.world.item.TooltipFlag
|
import net.minecraft.world.item.TooltipFlag
|
||||||
|
import org.neoflock.neocomputers.entity.MachineEntity
|
||||||
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
||||||
import org.neoflock.neocomputers.network.Networking
|
import org.neoflock.neocomputers.network.Networking
|
||||||
import org.neoflock.neocomputers.utils.Formatting
|
import org.neoflock.neocomputers.utils.Formatting
|
||||||
@@ -17,12 +18,8 @@ open class MemoryItem(val tier: Int, val capacity: Int): Item(Item.Properties().
|
|||||||
|
|
||||||
override fun getComponentCapacity(itemStack: ItemStack): Int = 0
|
override fun getComponentCapacity(itemStack: ItemStack): Int = 0
|
||||||
|
|
||||||
override fun whenComponentPlaced(itemStack: ItemStack, newRole: String) {}
|
|
||||||
|
|
||||||
override fun whenComponentTaken(itemStack: ItemStack, previousRole: String) {}
|
|
||||||
|
|
||||||
// no node for memory
|
// no node for memory
|
||||||
override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null
|
override fun toComponentNode(itemStack: ItemStack, machine: MachineEntity): Networking.Node? = null
|
||||||
|
|
||||||
override fun appendHoverText(
|
override fun appendHoverText(
|
||||||
itemStack: ItemStack,
|
itemStack: ItemStack,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import net.minecraft.network.chat.Component
|
|||||||
import net.minecraft.world.item.Item
|
import net.minecraft.world.item.Item
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
import net.minecraft.world.item.TooltipFlag
|
import net.minecraft.world.item.TooltipFlag
|
||||||
|
import org.neoflock.neocomputers.entity.MachineEntity
|
||||||
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
||||||
import org.neoflock.neocomputers.network.Networking
|
import org.neoflock.neocomputers.network.Networking
|
||||||
|
|
||||||
@@ -12,12 +13,13 @@ open class NetworkCard(val tier: Int, val maxRange: Int, val isWired: Boolean):
|
|||||||
|
|
||||||
override fun getComponentTier(itemStack: ItemStack): Int = tier
|
override fun getComponentTier(itemStack: ItemStack): Int = tier
|
||||||
|
|
||||||
override fun whenComponentPlaced(itemStack: ItemStack, newRole: String) {
|
override fun whenComponentPlaced(itemStack: ItemStack, machine: MachineEntity, newRole: String) {
|
||||||
ensureHasAddress(itemStack)
|
ensureHasAddress(itemStack)
|
||||||
|
super.whenComponentPlaced(itemStack, machine, newRole)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Modem Component
|
// TODO: Modem Component
|
||||||
override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null
|
override fun toComponentNode(itemStack: ItemStack, machine: MachineEntity): Networking.Node? = null
|
||||||
|
|
||||||
override fun appendHoverText(
|
override fun appendHoverText(
|
||||||
itemStack: ItemStack,
|
itemStack: ItemStack,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import net.minecraft.network.chat.Component
|
|||||||
import net.minecraft.world.item.Item
|
import net.minecraft.world.item.Item
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
import net.minecraft.world.item.TooltipFlag
|
import net.minecraft.world.item.TooltipFlag
|
||||||
|
import org.neoflock.neocomputers.entity.MachineEntity
|
||||||
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
||||||
import org.neoflock.neocomputers.network.Networking
|
import org.neoflock.neocomputers.network.Networking
|
||||||
|
|
||||||
@@ -14,13 +15,13 @@ open class RedstoneCard(val tier: Int): Item(Properties()), ComponentItem {
|
|||||||
|
|
||||||
override fun getComponentTier(itemStack: ItemStack): Int = tier
|
override fun getComponentTier(itemStack: ItemStack): Int = tier
|
||||||
|
|
||||||
override fun whenComponentPlaced(itemStack: ItemStack, newRole: String) {
|
override fun whenComponentPlaced(itemStack: ItemStack, machine: MachineEntity, newRole: String) {
|
||||||
ensureHasAddress(itemStack)
|
ensureHasAddress(itemStack)
|
||||||
super.whenComponentPlaced(itemStack, newRole)
|
super.whenComponentPlaced(itemStack, machine, newRole)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Redstone Component
|
// TODO: Redstone Component
|
||||||
override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null
|
override fun toComponentNode(itemStack: ItemStack, machine: MachineEntity): Networking.Node? = null
|
||||||
|
|
||||||
override fun appendHoverText(
|
override fun appendHoverText(
|
||||||
itemStack: ItemStack,
|
itemStack: ItemStack,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import net.minecraft.network.chat.Component
|
|||||||
import net.minecraft.world.item.Item
|
import net.minecraft.world.item.Item
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
import net.minecraft.world.item.TooltipFlag
|
import net.minecraft.world.item.TooltipFlag
|
||||||
|
import org.neoflock.neocomputers.entity.MachineEntity
|
||||||
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
import org.neoflock.neocomputers.gui.widget.ComponentRoles
|
||||||
import org.neoflock.neocomputers.network.Networking
|
import org.neoflock.neocomputers.network.Networking
|
||||||
import org.neoflock.neocomputers.utils.Formatting
|
import org.neoflock.neocomputers.utils.Formatting
|
||||||
@@ -14,13 +15,13 @@ class TunnelCard: Item(Properties()), ComponentItem {
|
|||||||
|
|
||||||
override fun getComponentTier(itemStack: ItemStack): Int = 3
|
override fun getComponentTier(itemStack: ItemStack): Int = 3
|
||||||
|
|
||||||
override fun whenComponentPlaced(itemStack: ItemStack, newRole: String) {
|
override fun whenComponentPlaced(itemStack: ItemStack, machine: MachineEntity, newRole: String) {
|
||||||
ensureHasAddress(itemStack)
|
ensureHasAddress(itemStack)
|
||||||
super.whenComponentPlaced(itemStack, newRole)
|
super.whenComponentPlaced(itemStack, machine, newRole)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Tunnel Component
|
// TODO: Tunnel Component
|
||||||
override fun toComponentNode(itemStack: ItemStack): Networking.Node? = null
|
override fun toComponentNode(itemStack: ItemStack, machine: MachineEntity): Networking.Node? = null
|
||||||
|
|
||||||
override fun appendHoverText(
|
override fun appendHoverText(
|
||||||
itemStack: ItemStack,
|
itemStack: ItemStack,
|
||||||
|
|||||||
@@ -44,10 +44,10 @@ object Networking {
|
|||||||
class ComputerCheckedSignal(sender: Node, val player: String?, val name: String, val data: Array<Any>): Message(sender)
|
class ComputerCheckedSignal(sender: Node, val player: String?, val name: String, val data: Array<Any>): Message(sender)
|
||||||
class ComputerUncheckedSignal(sender: Node, val name: String, val data: Array<Any>): Message(sender)
|
class ComputerUncheckedSignal(sender: Node, val name: String, val data: Array<Any>): Message(sender)
|
||||||
|
|
||||||
open class Node {
|
open class Node(_address: UUID? = null) {
|
||||||
val connections = mutableSetOf<Node>()
|
val connections = mutableSetOf<Node>()
|
||||||
private var reachableCache: Set<Node>? = null
|
private var reachableCache: Set<Node>? = null
|
||||||
open var address = UUID.randomUUID()
|
var address = _address ?: UUID.randomUUID()
|
||||||
|
|
||||||
open var reachability = Visibility.NETWORK
|
open var reachability = Visibility.NETWORK
|
||||||
open var powerRole = PowerRole.CONSUMER
|
open var powerRole = PowerRole.CONSUMER
|
||||||
@@ -237,9 +237,7 @@ object Networking {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class WirelessEndpoint : Node {
|
abstract class WirelessEndpoint(address: UUID?) : Node(address) {
|
||||||
|
|
||||||
constructor(position: BlockPos);
|
|
||||||
|
|
||||||
abstract fun getRange(): Double
|
abstract fun getRange(): Double
|
||||||
abstract fun getDimension(): Int
|
abstract fun getDimension(): Int
|
||||||
@@ -249,7 +247,7 @@ object Networking {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val wirelessNodes = mutableSetOf<WirelessEndpoint>()
|
val wirelessNodes = mutableSetOf<WirelessEndpoint>()
|
||||||
val allNodes = mutableSetOf<Node>()
|
val allNodes = mutableMapOf<UUID, Node>()
|
||||||
|
|
||||||
// node may differ from message.sender in the case of relays,
|
// node may differ from message.sender in the case of relays,
|
||||||
// as they might have DIRECT reachability but
|
// as they might have DIRECT reachability but
|
||||||
@@ -281,18 +279,27 @@ object Networking {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun tickAllNodes() {
|
fun tickAllNodes() {
|
||||||
allNodes.forEach { it.tick() }
|
allNodes.forEach { it.value.tick() }
|
||||||
tickCount++
|
tickCount++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getNode(address: UUID): Node? = allNodes[address]
|
||||||
|
|
||||||
|
// TODO: use setter, more convenient
|
||||||
|
fun changeNodeAddress(node: Node, address: UUID) {
|
||||||
|
allNodes.remove(node.address)
|
||||||
|
node.address = address
|
||||||
|
allNodes[address] = node
|
||||||
|
}
|
||||||
|
|
||||||
fun addNode(node: Node) {
|
fun addNode(node: Node) {
|
||||||
if(node in allNodes) return;
|
if(node.address in allNodes) return;
|
||||||
allNodes.add(node)
|
allNodes[node.address] = node
|
||||||
if(node is WirelessEndpoint) {
|
if(node is WirelessEndpoint) {
|
||||||
wirelessNodes.add(node);
|
wirelessNodes.add(node);
|
||||||
}
|
}
|
||||||
// notify at the end so it is notified of its own creation
|
// notify at the end so it is notified of its own creation
|
||||||
allNodes.forEach { it.onNodeAdded(node) }
|
allNodes.forEach { it.value.onNodeAdded(node) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addNodes(vararg nodes: Node) {
|
fun addNodes(vararg nodes: Node) {
|
||||||
@@ -300,14 +307,14 @@ object Networking {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun removeNode(node: Node) {
|
fun removeNode(node: Node) {
|
||||||
if(node !in allNodes) return
|
if(node.address !in allNodes) return
|
||||||
allNodes.forEach { it.onNodeRemoved(node) }
|
allNodes.forEach { it.value.onNodeRemoved(node) }
|
||||||
// toList() in order to copy it
|
// toList() in order to copy it
|
||||||
node.connections.toList().forEach {
|
node.connections.toList().forEach {
|
||||||
node.disconnectFrom(it)
|
node.disconnectFrom(it)
|
||||||
}
|
}
|
||||||
// actually remove at the end so it can listen to its own removal
|
// actually remove at the end so it can listen to its own removal
|
||||||
allNodes.remove(node)
|
allNodes.remove(node.address)
|
||||||
if(node is WirelessEndpoint) {
|
if(node is WirelessEndpoint) {
|
||||||
wirelessNodes.remove(node);
|
wirelessNodes.remove(node);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ object PowerManager {
|
|||||||
entity, dir -> object : EnergyStorage {
|
entity, dir -> object : EnergyStorage {
|
||||||
override fun getAmount() = entity.node.energy
|
override fun getAmount() = entity.node.energy
|
||||||
override fun getCapacity() = entity.node.energyCapacity
|
override fun getCapacity() = entity.node.energyCapacity
|
||||||
override fun supportsExtraction() = entity.node.powerRole != PowerRole.CONSUMER
|
override fun supportsExtraction() = entity.node.powerRole != PowerRole.CONSUMER && entity.node.energyCapacity > 0
|
||||||
override fun supportsInsertion() = entity.node.powerRole != PowerRole.GENERATOR
|
override fun supportsInsertion() = entity.node.powerRole != PowerRole.GENERATOR
|
||||||
override fun extract(maxAmount: Long, transaction: TransactionContext?): Long {
|
override fun extract(maxAmount: Long, transaction: TransactionContext?): Long {
|
||||||
if(entity.node.powerRole == PowerRole.CONSUMER) return 0
|
if(entity.node.powerRole == PowerRole.CONSUMER) return 0
|
||||||
|
|||||||
Reference in New Issue
Block a user