diff --git a/.github/workflows/build_head.yml b/.github/workflows/build_head.yml
index e01fac1..445e0ee 100644
--- a/.github/workflows/build_head.yml
+++ b/.github/workflows/build_head.yml
@@ -20,13 +20,12 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
with:
- java-version: 1.8
+ java-version: 16
- run: chmod +x gradlew
- uses: actions/cache@v2
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
- restore-keys: ${{ runner.os }}-gradle
- run: ./gradlew build
env:
MOD_VERSION: ${{ steps.vars.outputs.VERSION }}
diff --git a/.github/workflows/build_release.yml b/.github/workflows/build_release.yml
index e85441f..471ad3f 100644
--- a/.github/workflows/build_release.yml
+++ b/.github/workflows/build_release.yml
@@ -12,13 +12,12 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
with:
- java-version: 1.8
+ java-version: 16
- run: chmod +x gradlew
- uses: actions/cache@v2
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
- restore-keys: ${{ runner.os }}-gradle
- run: ./gradlew build curseforge
env:
MOD_VERSION: ${{ steps.vars.outputs.VERSION }}
diff --git a/build.gradle b/build.gradle
deleted file mode 100644
index bd176a9..0000000
--- a/build.gradle
+++ /dev/null
@@ -1,141 +0,0 @@
-import net.fabricmc.loom.task.RunGameTask
-
-plugins {
- id "org.jetbrains.kotlin.jvm" version "1.5.0"
- id "org.jetbrains.kotlin.plugin.serialization" version "1.5.0"
- id "com.matthewprenger.cursegradle" version "1.4.0"
- id "fabric-loom" version "0.6-SNAPSHOT"
- id "maven-publish"
-}
-
-
-sourceCompatibility = JavaVersion.VERSION_1_8
-targetCompatibility = JavaVersion.VERSION_1_8
-compileKotlin.kotlinOptions.jvmTarget = "1.8"
-
-archivesBaseName = project.archives_base_name
-group = project.maven_group
-
-def versionEnv = System.getenv("MOD_VERSION")
-if (versionEnv == null || versionEnv.isBlank()) {
- versionEnv = "SNAPSHOT"
-}
-
-version = "${versionEnv}+${project.minecraft_version}"
-
-sourceSets {
- dev {
- compileClasspath += main.compileClasspath
- runtimeClasspath += main.runtimeClasspath
- }
-}
-
-tasks.withType(RunGameTask) {
- classpath sourceSets.dev.runtimeClasspath
- jvmArgs project.run_args
-}
-
-repositories {
- maven { url "https://maven.shedaniel.me/" }
- maven { url "https://maven.terraformersmc.com/releases" }
-}
-
-dependencies {
- //to change the versions see the gradle.properties file
- minecraft "com.mojang:minecraft:${project.minecraft_version}"
- mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
- modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
-
- modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api}"
- modImplementation "net.fabricmc:fabric-language-kotlin:${project.fabric_kotlin}"
-
- modImplementation "me.shedaniel:RoughlyEnoughItems:${project.rei}"
-
- modRuntime "com.terraformersmc:modmenu:${project.modmenu}"
-
- devImplementation sourceSets.main.output
-}
-
-curseforge {
- if (System.getenv("CURSEFORGE_API") != null) {
- apiKey = System.getenv("CURSEFORGE_API")
- project {
- id = "391014"
- releaseType = "release"
-
- changelogType = "html"
- changelog = ""
-
- mainArtifact remapJar
-
- addGameVersion "Fabric"
- addGameVersion project.minecraft_version
-
- relations {
- requiredDependency "fabric-api"
- requiredDependency "fabric-language-kotlin"
- optionalDependency "roughly-enough-items"
- }
-
- afterEvaluate {
- uploadTask.dependsOn "build"
- }
- }
- }
-}
-
-processResources {
- inputs.property "version", project.version
-
- from(sourceSets.main.resources.srcDirs) {
- include "fabric.mod.json"
- expand "version": project.version
- }
-
- from(sourceSets.main.resources.srcDirs) {
- exclude "fabric.mod.json"
- }
-}
-
-// ensure that the encoding is set to UTF-8, no matter what the system default is
-// this fixes some edge cases with special characters not displaying correctly
-// see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html
-tasks.withType(JavaCompile) {
- options.encoding = "UTF-8"
-}
-
-// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
-// if it is present.
-// If you remove this task, sources will not be generated.
-task sourcesJar(type: Jar, dependsOn: classes) {
- classifier = "sources"
- from sourceSets.main.allSource
-}
-
-jar {
- from "LICENSE"
-}
-
-// configure the maven publication
-publishing {
- publications {
- mavenJava(MavenPublication) {
- // add all the jars that should be included when publishing to maven
- artifact(jar) {
- builtBy remapJar
- }
- artifact("${project.buildDir.absolutePath}/libs/${archivesBaseName}-${project.version}.jar") {
- builtBy remapJar
- }
- artifact(sourcesJar) {
- builtBy remapSourcesJar
- }
- }
- }
-
- // select the repositories you want to publish to
- repositories {
- // uncomment to publish to the local maven
- // mavenLocal()
- }
-}
diff --git a/build.gradle.kts b/build.gradle.kts
new file mode 100644
index 0000000..d34611d
--- /dev/null
+++ b/build.gradle.kts
@@ -0,0 +1,107 @@
+import com.matthewprenger.cursegradle.CurseArtifact
+import com.matthewprenger.cursegradle.CurseProject
+import com.matthewprenger.cursegradle.CurseRelation
+import net.fabricmc.loom.task.RunGameTask
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+plugins {
+ kotlin("jvm").version("1.5.0")
+ kotlin("plugin.serialization").version("1.5.0")
+
+ id("fabric-loom").version("0.8-SNAPSHOT")
+ id("com.matthewprenger.cursegradle").version("1.4.0")
+ id("maven-publish")
+}
+
+val prop = Property()
+val env: Map = System.getenv()
+
+version = env["MOD_VERSION"] ?: "local"
+
+sourceSets {
+ val main by getting
+ create("dev") {
+ compileClasspath += main.compileClasspath
+ runtimeClasspath += main.runtimeClasspath
+ }
+}
+
+repositories {
+ maven("https://maven.shedaniel.me/")
+ maven("https://maven.terraformersmc.com/releases")
+}
+
+dependencies {
+ val devImplementation by configurations.getting
+
+ minecraft("com.mojang:minecraft:${prop["minecraft"]}")
+ mappings("net.fabricmc:yarn:${prop["yarn"]}:v2")
+
+ modImplementation("net.fabricmc:fabric-loader:${prop["fabricLoader"]}")
+
+ modImplementation("net.fabricmc.fabric-api:fabric-api:${prop["fabricApi"]}")
+ modImplementation("net.fabricmc:fabric-language-kotlin:${prop["fabricKotlin"]}")
+
+ devImplementation(sourceSets["main"].output)
+}
+
+java {
+ sourceCompatibility = JavaVersion.VERSION_16
+ targetCompatibility = JavaVersion.VERSION_16
+}
+
+tasks.withType {
+ options.encoding = "UTF-8"
+}
+
+tasks.withType {
+ kotlinOptions {
+ jvmTarget = "15"
+ }
+}
+
+tasks.withType {
+ classpath = sourceSets["dev"].runtimeClasspath
+}
+
+tasks.processResources {
+ inputs.property("version", project.version)
+
+ filesMatching("fabric.mod.json") {
+ expand("version" to project.version)
+ }
+}
+
+curseforge {
+ env["CURSEFORGE_API"]?.let { CURSEFORGE_API ->
+ apiKey = CURSEFORGE_API
+ project(closureOf {
+ id = "391014"
+ releaseType = "release"
+
+ changelogType = "markdown"
+ changelog = "https://github.com/badasintended/slotlink/releases/tag/${project.version}"
+
+ mainArtifact(tasks["remapJar"], closureOf {
+ displayName = "[${prop["minecraft"]}] v${project.version}"
+ })
+
+ addGameVersion("Fabric")
+ addGameVersion(prop["minecraft"])
+
+ relations(closureOf {
+ requiredDependency("fabric-api")
+ requiredDependency("fabric-language-kotlin")
+ optionalDependency("roughly-enough-items")
+ })
+
+ uploadTask.dependsOn("build")
+ })
+ }
+}
+
+class Property {
+
+ operator fun get(name: String) = project.property(name).toString()
+
+}
diff --git a/gradle.properties b/gradle.properties
index 9e39519..a3c3704 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -4,16 +4,16 @@ org.gradle.jvmargs = -Xmx1G
run_args = -Dmixin.debug.export=true
# Fabric properties
-minecraft_version = 1.16.5
-yarn_mappings = 1.16.5+build.4
-loader_version = 0.11.1
+minecraft = 1.17-pre1
+yarn = 1.17-pre1+build.10
+fabricLoader = 0.11.3
# Mod properties
maven_group = com.github.badasintended
archives_base_name = slotlink
# Dependencies
-fabric_api = 0.34.0+1.16
-fabric_kotlin = 1.6.0+kotlin.1.5.0
+fabricApi = 0.34.8+1.17
+fabricKotlin = 1.6.0+kotlin.1.5.0
modmenu = 1.16.9
rei = 5.11.218
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 28a4a72..18e0307 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,4 @@
-#Thu May 28 11:20:34 ICT 2020
-distributionUrl = https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
+distributionUrl = https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
distributionBase = GRADLE_USER_HOME
distributionPath = wrapper/dists
zipStorePath = wrapper/dists
diff --git a/settings.gradle b/settings.gradle
deleted file mode 100644
index f91a4fe..0000000
--- a/settings.gradle
+++ /dev/null
@@ -1,9 +0,0 @@
-pluginManagement {
- repositories {
- maven {
- name = 'Fabric'
- url = 'https://maven.fabricmc.net/'
- }
- gradlePluginPortal()
- }
-}
diff --git a/settings.gradle.kts b/settings.gradle.kts
new file mode 100644
index 0000000..584e98c
--- /dev/null
+++ b/settings.gradle.kts
@@ -0,0 +1,8 @@
+pluginManagement {
+ repositories {
+ maven(url = "https://maven.fabricmc.net") {
+ name = "Fabric"
+ }
+ gradlePluginPortal()
+ }
+}
diff --git a/src/main/java/badasintended/slotlink/mixin/SlotAccessor.java b/src/main/java/badasintended/slotlink/mixin/SlotAccessor.java
deleted file mode 100644
index 9625b0a..0000000
--- a/src/main/java/badasintended/slotlink/mixin/SlotAccessor.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package badasintended.slotlink.mixin;
-
-import net.minecraft.screen.slot.Slot;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.gen.Accessor;
-
-@Mixin(Slot.class)
-public interface SlotAccessor {
-
- @Accessor
- int getIndex();
-
-}
diff --git a/src/main/kotlin/badasintended/slotlink/block/CableBlock.kt b/src/main/kotlin/badasintended/slotlink/block/CableBlock.kt
index 7ca0c33..38a555f 100644
--- a/src/main/kotlin/badasintended/slotlink/block/CableBlock.kt
+++ b/src/main/kotlin/badasintended/slotlink/block/CableBlock.kt
@@ -1,6 +1,7 @@
package badasintended.slotlink.block
import badasintended.slotlink.block.entity.CableBlockEntity
+import badasintended.slotlink.util.BlockEntityBuilder
import badasintended.slotlink.util.bbCuboid
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap
import java.util.function.IntFunction
@@ -10,7 +11,6 @@ import net.minecraft.block.Block
import net.minecraft.block.BlockState
import net.minecraft.block.Material
import net.minecraft.block.ShapeContext
-import net.minecraft.block.entity.BlockEntity
import net.minecraft.item.ItemPlacementContext
import net.minecraft.state.StateManager
import net.minecraft.state.property.BooleanProperty
@@ -21,7 +21,8 @@ import net.minecraft.util.shape.VoxelShapes
import net.minecraft.world.BlockView
import net.minecraft.world.WorldAccess
-open class CableBlock(id: String = "cable", be: () -> BlockEntity = ::CableBlockEntity) : ChildBlock(id, be, SETTINGS) {
+open class CableBlock(id: String = "cable", be: BlockEntityBuilder = ::CableBlockEntity) :
+ ChildBlock(id, be, SETTINGS) {
companion object {
diff --git a/src/main/kotlin/badasintended/slotlink/block/ChildBlock.kt b/src/main/kotlin/badasintended/slotlink/block/ChildBlock.kt
index 2aaaac7..31dd5e8 100644
--- a/src/main/kotlin/badasintended/slotlink/block/ChildBlock.kt
+++ b/src/main/kotlin/badasintended/slotlink/block/ChildBlock.kt
@@ -2,10 +2,10 @@ package badasintended.slotlink.block
import badasintended.slotlink.block.entity.ChildBlockEntity
import badasintended.slotlink.block.entity.MasterBlockEntity
+import badasintended.slotlink.util.BlockEntityBuilder
import net.minecraft.block.Block
import net.minecraft.block.BlockEntityProvider
import net.minecraft.block.BlockState
-import net.minecraft.block.entity.BlockEntity
import net.minecraft.client.item.TooltipContext
import net.minecraft.item.ItemStack
import net.minecraft.text.Text
@@ -15,8 +15,12 @@ import net.minecraft.util.math.BlockPos
import net.minecraft.world.BlockView
import net.minecraft.world.World
-abstract class ChildBlock(id: String, private val blockEntity: () -> BlockEntity, settings: Settings = SETTINGS) :
- ModBlock(id, settings), BlockEntityProvider {
+abstract class ChildBlock(
+ id: String,
+ private val blockEntityBuilder: BlockEntityBuilder,
+ settings: Settings = SETTINGS
+) : ModBlock(id, settings),
+ BlockEntityProvider {
// TODO: Optimize this part
override fun neighborUpdate(
@@ -69,7 +73,7 @@ abstract class ChildBlock(id: String, private val blockEntity: () -> BlockEntity
}
}
- override fun createBlockEntity(world: BlockView) = blockEntity.invoke()
+ override fun createBlockEntity(pos: BlockPos, state: BlockState) = blockEntityBuilder(pos, state)
override fun appendTooltip(
stack: ItemStack,
diff --git a/src/main/kotlin/badasintended/slotlink/block/ConnectorCableBlock.kt b/src/main/kotlin/badasintended/slotlink/block/ConnectorCableBlock.kt
index 0ff507e..2f3fec5 100644
--- a/src/main/kotlin/badasintended/slotlink/block/ConnectorCableBlock.kt
+++ b/src/main/kotlin/badasintended/slotlink/block/ConnectorCableBlock.kt
@@ -1,11 +1,11 @@
package badasintended.slotlink.block
import badasintended.slotlink.block.entity.ConnectorCableBlockEntity
+import badasintended.slotlink.util.BlockEntityBuilder
import badasintended.slotlink.util.bbCuboid
import net.minecraft.block.Block
import net.minecraft.block.BlockState
import net.minecraft.block.InventoryProvider
-import net.minecraft.block.entity.BlockEntity
import net.minecraft.client.item.TooltipContext
import net.minecraft.entity.LivingEntity
import net.minecraft.entity.player.PlayerEntity
@@ -25,7 +25,7 @@ import net.minecraft.world.BlockView
import net.minecraft.world.World
import net.minecraft.world.WorldAccess
-abstract class ConnectorCableBlock(id: String, be: () -> BlockEntity) : CableBlock(id, be) {
+abstract class ConnectorCableBlock(id: String, builder: BlockEntityBuilder) : CableBlock(id, builder) {
companion object {
diff --git a/src/main/kotlin/badasintended/slotlink/block/MasterBlock.kt b/src/main/kotlin/badasintended/slotlink/block/MasterBlock.kt
index 78bcd1c..8c6663f 100644
--- a/src/main/kotlin/badasintended/slotlink/block/MasterBlock.kt
+++ b/src/main/kotlin/badasintended/slotlink/block/MasterBlock.kt
@@ -2,35 +2,33 @@ package badasintended.slotlink.block
import badasintended.slotlink.block.entity.MasterBlockEntity
import badasintended.slotlink.util.chat
-import badasintended.slotlink.util.toTag
+import badasintended.slotlink.util.toNbt
import net.minecraft.block.Block
import net.minecraft.block.BlockEntityProvider
import net.minecraft.block.BlockState
-import net.minecraft.block.entity.BlockEntity
import net.minecraft.entity.LivingEntity
import net.minecraft.entity.player.PlayerEntity
import net.minecraft.item.ItemStack
-import net.minecraft.nbt.CompoundTag
-import net.minecraft.nbt.ListTag
+import net.minecraft.nbt.NbtCompound
+import net.minecraft.nbt.NbtList
import net.minecraft.util.ActionResult
import net.minecraft.util.Hand
import net.minecraft.util.hit.BlockHitResult
import net.minecraft.util.math.BlockPos
-import net.minecraft.world.BlockView
import net.minecraft.world.World
class MasterBlock : ModBlock("master"), BlockEntityProvider {
- override fun createBlockEntity(view: BlockView): BlockEntity = MasterBlockEntity()
+ override fun createBlockEntity(pos: BlockPos, state: BlockState) = MasterBlockEntity(pos, state)
override fun onPlaced(world: World, pos: BlockPos, state: BlockState, placer: LivingEntity?, itemStack: ItemStack) {
super.onPlaced(world, pos, state, placer, itemStack)
- val blockEntity = world.getBlockEntity(pos)
- val nbt = blockEntity!!.toTag(CompoundTag())
+ val blockEntity = world.getBlockEntity(pos)!!
+ val nbt = blockEntity.writeNbt(NbtCompound())
- nbt.put("storagePos", ListTag())
- blockEntity.fromTag(state, nbt)
+ nbt.put("storagePos", NbtList())
+ blockEntity.readNbt(nbt)
blockEntity.markDirty()
}
@@ -49,14 +47,14 @@ class MasterBlock : ModBlock("master"), BlockEntityProvider {
val neighborBlock = neighborState.block
if (neighborBlock is ChildBlock) {
- val neighborBlockEntity = world.getBlockEntity(neighborPos)
- val neighborNbt = neighborBlockEntity!!.toTag(CompoundTag())
+ val neighborBlockEntity = world.getBlockEntity(neighborPos)!!
+ val neighborNbt = neighborBlockEntity.writeNbt(NbtCompound())
val neighborHasMaster = neighborNbt.getBoolean("hasMaster")
if (!neighborHasMaster) {
- val masterPos = pos.toTag()
+ val masterPos = pos.toNbt()
neighborNbt.put("masterPos", masterPos)
neighborNbt.putBoolean("hasMaster", true)
- neighborBlockEntity.fromTag(neighborState, neighborNbt)
+ neighborBlockEntity.readNbt(neighborNbt)
neighborBlockEntity.markDirty()
world.updateNeighbors(neighborPos, neighborBlock)
}
@@ -80,10 +78,10 @@ class MasterBlock : ModBlock("master"), BlockEntityProvider {
player.chat("$translationKey.use2", inventories.size)
player.chat(
"$translationKey.use3",
- inventories.map { it.size() }.sum(),
- inventories.map { inv -> (0 until inv.size()).filter { inv.getStack(it).isEmpty }.size }.sum()
+ inventories.sumOf { it.size() },
+ inventories.sumOf { inv -> (0 until inv.size()).filter { inv.getStack(it).isEmpty }.size }
)
- player.chat("$translationKey.use4", inventories.map { it.size() * it.maxCountPerStack }.sum())
+ player.chat("$translationKey.use4", inventories.sumOf { it.size() * it.maxCountPerStack })
}
return ActionResult.SUCCESS
}
diff --git a/src/main/kotlin/badasintended/slotlink/block/TransferCableBlock.kt b/src/main/kotlin/badasintended/slotlink/block/TransferCableBlock.kt
index 32c8f96..fbd997d 100644
--- a/src/main/kotlin/badasintended/slotlink/block/TransferCableBlock.kt
+++ b/src/main/kotlin/badasintended/slotlink/block/TransferCableBlock.kt
@@ -1,12 +1,12 @@
package badasintended.slotlink.block
+import badasintended.slotlink.util.BlockEntityBuilder
import net.minecraft.block.Block
import net.minecraft.block.LeverBlock
-import net.minecraft.block.entity.BlockEntity
import net.minecraft.util.math.BlockPos
import net.minecraft.world.WorldAccess
-abstract class TransferCableBlock(id: String, be: () -> BlockEntity) : ConnectorCableBlock(id, be) {
+abstract class TransferCableBlock(id: String, builder: BlockEntityBuilder) : ConnectorCableBlock(id, builder) {
override fun Block.isIgnored() = this is ModBlock
diff --git a/src/main/kotlin/badasintended/slotlink/block/entity/CableBlockEntity.kt b/src/main/kotlin/badasintended/slotlink/block/entity/CableBlockEntity.kt
index 1b86ff3..c697de6 100644
--- a/src/main/kotlin/badasintended/slotlink/block/entity/CableBlockEntity.kt
+++ b/src/main/kotlin/badasintended/slotlink/block/entity/CableBlockEntity.kt
@@ -1,5 +1,7 @@
package badasintended.slotlink.block.entity
import badasintended.slotlink.init.BlockEntityTypes
+import net.minecraft.block.BlockState
+import net.minecraft.util.math.BlockPos
-class CableBlockEntity : ChildBlockEntity(BlockEntityTypes.CABLE)
+class CableBlockEntity(pos: BlockPos, state: BlockState) : ChildBlockEntity(BlockEntityTypes.CABLE, pos, state)
diff --git a/src/main/kotlin/badasintended/slotlink/block/entity/ChildBlockEntity.kt b/src/main/kotlin/badasintended/slotlink/block/entity/ChildBlockEntity.kt
index e62b11c..0380c33 100644
--- a/src/main/kotlin/badasintended/slotlink/block/entity/ChildBlockEntity.kt
+++ b/src/main/kotlin/badasintended/slotlink/block/entity/ChildBlockEntity.kt
@@ -1,14 +1,15 @@
package badasintended.slotlink.block.entity
+import badasintended.slotlink.util.toNbt
import badasintended.slotlink.util.toPos
-import badasintended.slotlink.util.toTag
import net.minecraft.block.BlockState
import net.minecraft.block.entity.BlockEntity
import net.minecraft.block.entity.BlockEntityType
-import net.minecraft.nbt.CompoundTag
+import net.minecraft.nbt.NbtCompound
import net.minecraft.util.math.BlockPos
-abstract class ChildBlockEntity(type: BlockEntityType) : ModBlockEntity(type) {
+abstract class ChildBlockEntity(type: BlockEntityType, pos: BlockPos, state: BlockState) :
+ ModBlockEntity(type, pos, state) {
var hasMaster = false
var masterPos: BlockPos = BlockPos.ORIGIN
@@ -16,17 +17,17 @@ abstract class ChildBlockEntity(type: BlockEntityType) : ModBlo
field = value.toImmutable()
}
- override fun toTag(tag: CompoundTag): CompoundTag {
- super.toTag(tag)
+ override fun writeNbt(tag: NbtCompound): NbtCompound {
+ super.writeNbt(tag)
tag.putBoolean("hasMaster", hasMaster)
- tag.put("masterPos", masterPos.toTag())
+ tag.put("masterPos", masterPos.toNbt())
return tag
}
- override fun fromTag(state: BlockState, tag: CompoundTag) {
- super.fromTag(state, tag)
+ override fun readNbt(tag: NbtCompound) {
+ super.readNbt(tag)
hasMaster = tag.getBoolean("hasMaster")
masterPos = tag.getCompound("masterPos").toPos()
diff --git a/src/main/kotlin/badasintended/slotlink/block/entity/ConnectorCableBlockEntity.kt b/src/main/kotlin/badasintended/slotlink/block/entity/ConnectorCableBlockEntity.kt
index 3c0594d..999eeb2 100644
--- a/src/main/kotlin/badasintended/slotlink/block/entity/ConnectorCableBlockEntity.kt
+++ b/src/main/kotlin/badasintended/slotlink/block/entity/ConnectorCableBlockEntity.kt
@@ -2,8 +2,8 @@ package badasintended.slotlink.block.entity
import badasintended.slotlink.api.Compat
import badasintended.slotlink.inventory.FilteredInventory
+import badasintended.slotlink.util.toNbt
import badasintended.slotlink.util.toPos
-import badasintended.slotlink.util.toTag
import badasintended.slotlink.util.writeFilter
import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory
import net.fabricmc.fabric.api.util.NbtType
@@ -16,8 +16,8 @@ import net.minecraft.block.entity.BlockEntityType
import net.minecraft.block.entity.ChestBlockEntity
import net.minecraft.inventory.Inventory
import net.minecraft.item.ItemStack
-import net.minecraft.nbt.CompoundTag
-import net.minecraft.nbt.ListTag
+import net.minecraft.nbt.NbtCompound
+import net.minecraft.nbt.NbtList
import net.minecraft.network.PacketByteBuf
import net.minecraft.server.network.ServerPlayerEntity
import net.minecraft.server.world.ServerWorld
@@ -28,7 +28,8 @@ import net.minecraft.util.math.ChunkPos
import net.minecraft.world.World
import net.minecraft.world.WorldAccess
-abstract class ConnectorCableBlockEntity(type: BlockEntityType) : ChildBlockEntity(type), ExtendedScreenHandlerFactory {
+abstract class ConnectorCableBlockEntity(type: BlockEntityType, pos: BlockPos, state: BlockState) :
+ ChildBlockEntity(type, pos, state), ExtendedScreenHandlerFactory {
var linkedPos: BlockPos = BlockPos.ORIGIN
set(value) {
@@ -43,7 +44,11 @@ abstract class ConnectorCableBlockEntity(type: BlockEntityType)
private val filtered = FilteredInventory(filter) { isBlackList }
- fun getInventory(world: WorldAccess, master: MasterBlockEntity? = null, request: Boolean = false): FilteredInventory {
+ fun getInventory(
+ world: WorldAccess,
+ master: MasterBlockEntity? = null,
+ request: Boolean = false
+ ): FilteredInventory {
if (world !is World) return filtered.none
if (!hasMaster) return filtered.none
@@ -83,21 +88,21 @@ abstract class ConnectorCableBlockEntity(type: BlockEntityType)
protected abstract fun Block.isIgnored(): Boolean
- override fun toTag(tag: CompoundTag): CompoundTag {
- super.toTag(tag)
+ override fun writeNbt(tag: NbtCompound): NbtCompound {
+ super.writeNbt(tag)
tag.putInt("priority", priority)
- tag.put("linkedPos", linkedPos.toTag())
+ tag.put("linkedPos", linkedPos.toNbt())
tag.putBoolean("isBlacklist", isBlackList)
- val filterTag = CompoundTag()
- val list = ListTag()
+ val filterTag = NbtCompound()
+ val list = NbtList()
filter.forEachIndexed { i, pair ->
if (!pair.first.isEmpty) {
- val compound = CompoundTag()
+ val compound = NbtCompound()
compound.putByte("Slot", i.toByte())
compound.putBoolean("matchNbt", pair.second)
- pair.first.toTag(compound)
+ pair.first.writeNbt(compound)
list.add(compound)
}
}
@@ -107,8 +112,8 @@ abstract class ConnectorCableBlockEntity(type: BlockEntityType)
return tag
}
- override fun fromTag(state: BlockState, tag: CompoundTag) {
- super.fromTag(state, tag)
+ override fun readNbt(tag: NbtCompound) {
+ super.readNbt(tag)
priority = tag.getInt("priority")
linkedPos = tag.getCompound("linkedPos").toPos()
@@ -118,11 +123,11 @@ abstract class ConnectorCableBlockEntity(type: BlockEntityType)
val list = filterTag.getList("Items", NbtType.COMPOUND)
list.forEach {
- it as CompoundTag
+ it as NbtCompound
val slot = it.getByte("Slot").toInt()
val nbt = it.getBoolean("matchNbt")
if (slot in 0 until 9) {
- val stack = ItemStack.fromTag(it)
+ val stack = ItemStack.fromNbt(it)
filter[slot] = stack to nbt
}
}
diff --git a/src/main/kotlin/badasintended/slotlink/block/entity/ExportCableBlockEntity.kt b/src/main/kotlin/badasintended/slotlink/block/entity/ExportCableBlockEntity.kt
index f1c82b4..0beff79 100644
--- a/src/main/kotlin/badasintended/slotlink/block/entity/ExportCableBlockEntity.kt
+++ b/src/main/kotlin/badasintended/slotlink/block/entity/ExportCableBlockEntity.kt
@@ -1,10 +1,13 @@
package badasintended.slotlink.block.entity
import badasintended.slotlink.init.BlockEntityTypes
+import net.minecraft.block.BlockState
+import net.minecraft.util.math.BlockPos
import net.minecraft.util.math.Direction
import net.minecraft.world.World
-class ExportCableBlockEntity : TransferCableBlockEntity(BlockEntityTypes.EXPORT_CABLE) {
+class ExportCableBlockEntity(pos: BlockPos, state: BlockState) :
+ TransferCableBlockEntity(BlockEntityTypes.EXPORT_CABLE, pos, state) {
override var side = Direction.UP
diff --git a/src/main/kotlin/badasintended/slotlink/block/entity/ImportCableBlockEntity.kt b/src/main/kotlin/badasintended/slotlink/block/entity/ImportCableBlockEntity.kt
index 61d4ede..d04d5dd 100644
--- a/src/main/kotlin/badasintended/slotlink/block/entity/ImportCableBlockEntity.kt
+++ b/src/main/kotlin/badasintended/slotlink/block/entity/ImportCableBlockEntity.kt
@@ -1,11 +1,14 @@
package badasintended.slotlink.block.entity
import badasintended.slotlink.init.BlockEntityTypes
+import net.minecraft.block.BlockState
import net.minecraft.item.ItemStack
+import net.minecraft.util.math.BlockPos
import net.minecraft.util.math.Direction
import net.minecraft.world.World
-class ImportCableBlockEntity : TransferCableBlockEntity(BlockEntityTypes.IMPORT_CABLE) {
+class ImportCableBlockEntity(pos: BlockPos, state: BlockState) :
+ TransferCableBlockEntity(BlockEntityTypes.IMPORT_CABLE, pos, state) {
override var side = Direction.DOWN
diff --git a/src/main/kotlin/badasintended/slotlink/block/entity/LinkCableBlockEntity.kt b/src/main/kotlin/badasintended/slotlink/block/entity/LinkCableBlockEntity.kt
index 1d6a6be..17d7717 100644
--- a/src/main/kotlin/badasintended/slotlink/block/entity/LinkCableBlockEntity.kt
+++ b/src/main/kotlin/badasintended/slotlink/block/entity/LinkCableBlockEntity.kt
@@ -6,12 +6,15 @@ import badasintended.slotlink.init.BlockEntityTypes
import badasintended.slotlink.screen.LinkScreenHandler
import badasintended.slotlink.util.ignoredTag
import net.minecraft.block.Block
+import net.minecraft.block.BlockState
import net.minecraft.entity.player.PlayerEntity
import net.minecraft.entity.player.PlayerInventory
import net.minecraft.screen.ScreenHandler
import net.minecraft.screen.ScreenHandlerContext
+import net.minecraft.util.math.BlockPos
-class LinkCableBlockEntity : ConnectorCableBlockEntity(BlockEntityTypes.LINK_CABLE) {
+class LinkCableBlockEntity(pos: BlockPos, state: BlockState) :
+ ConnectorCableBlockEntity(BlockEntityTypes.LINK_CABLE, pos, state) {
override fun Block.isIgnored(): Boolean {
if (this is ModBlock || Compat.isBlacklisted(this)) return true
diff --git a/src/main/kotlin/badasintended/slotlink/block/entity/MasterBlockEntity.kt b/src/main/kotlin/badasintended/slotlink/block/entity/MasterBlockEntity.kt
index 955bd4a..21471f4 100644
--- a/src/main/kotlin/badasintended/slotlink/block/entity/MasterBlockEntity.kt
+++ b/src/main/kotlin/badasintended/slotlink/block/entity/MasterBlockEntity.kt
@@ -5,18 +5,19 @@ import badasintended.slotlink.inventory.FilteredInventory
import badasintended.slotlink.util.BlockPosSet
import badasintended.slotlink.util.MasterWatcher
import badasintended.slotlink.util.fromTag
-import badasintended.slotlink.util.toTag
+import badasintended.slotlink.util.toNbt
import it.unimi.dsi.fastutil.objects.ObjectArrayList
import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet
-import java.util.SortedSet
+import java.util.*
import net.fabricmc.fabric.api.util.NbtType
import net.minecraft.block.BlockState
-import net.minecraft.nbt.CompoundTag
+import net.minecraft.block.entity.BlockEntityTicker
+import net.minecraft.nbt.NbtCompound
import net.minecraft.server.world.ServerWorld
-import net.minecraft.util.Tickable
+import net.minecraft.util.math.BlockPos
import net.minecraft.world.World
-class MasterBlockEntity : ModBlockEntity(BlockEntityTypes.MASTER), Tickable {
+class MasterBlockEntity(pos: BlockPos, state: BlockState) : ModBlockEntity(BlockEntityTypes.MASTER, pos, state) {
val linkPos = BlockPosSet()
val importPos = BlockPosSet()
@@ -97,18 +98,18 @@ class MasterBlockEntity : ModBlockEntity(BlockEntityTypes.MASTER), Tickable {
}
}
- override fun toTag(tag: CompoundTag): CompoundTag {
- super.toTag(tag)
+ override fun writeNbt(tag: NbtCompound): NbtCompound {
+ super.writeNbt(tag)
- tag.put("linkCables", linkPos.toTag())
- tag.put("exportCables", exportPos.toTag())
- tag.put("importCables", importPos.toTag())
+ tag.put("linkCables", linkPos.toNbt())
+ tag.put("exportCables", exportPos.toNbt())
+ tag.put("importCables", importPos.toNbt())
return tag
}
- override fun fromTag(state: BlockState, tag: CompoundTag) {
- super.fromTag(state, tag)
+ override fun readNbt(tag: NbtCompound) {
+ super.readNbt(tag)
linkPos.fromTag(tag.getList("linkCables", NbtType.COMPOUND))
exportPos.fromTag(tag.getList("exportCables", NbtType.COMPOUND))
@@ -127,32 +128,36 @@ class MasterBlockEntity : ModBlockEntity(BlockEntityTypes.MASTER), Tickable {
watchers.forEach { it.onMasterRemoved() }
}
- override fun tick() {
- tick++
- if (tick == 10) {
- importCables.clear()
- val world = getWorld() ?: return
- importPos.forEach {
- val blockEntity = world.getBlockEntity(it)
- if (blockEntity is ImportCableBlockEntity) importCables.add(blockEntity)
- }
- importCables.sortByDescending { it.priority }
- for (cable in importCables) {
- if (cable.transfer(world, this)) break
- }
- } else if (tick == 20) {
- tick = 0
- exportCables.clear()
- val world = getWorld() ?: return
- exportPos.forEach {
- val blockEntity = world.getBlockEntity(it)
- if (blockEntity is ExportCableBlockEntity) exportCables.add(blockEntity)
- }
- exportCables.sortByDescending { it.priority }
- for (cable in exportCables) {
- if (cable.transfer(world, this)) break
+ object Ticker : BlockEntityTicker {
+
+ override fun tick(world: World, pos: BlockPos, state: BlockState, masterBlockEntity: MasterBlockEntity) {
+ masterBlockEntity.apply {
+ tick++
+ if (tick == 10) {
+ importCables.clear()
+ importPos.forEach {
+ val blockEntity = world.getBlockEntity(it)
+ if (blockEntity is ImportCableBlockEntity) importCables.add(blockEntity)
+ }
+ importCables.sortByDescending { it.priority }
+ for (cable in importCables) {
+ if (cable.transfer(world, this)) break
+ }
+ } else if (tick == 20) {
+ tick = 0
+ exportCables.clear()
+ exportPos.forEach {
+ val blockEntity = world.getBlockEntity(it)
+ if (blockEntity is ExportCableBlockEntity) exportCables.add(blockEntity)
+ }
+ exportCables.sortByDescending { it.priority }
+ for (cable in exportCables) {
+ if (cable.transfer(world, this)) break
+ }
+ }
}
}
+
}
}
diff --git a/src/main/kotlin/badasintended/slotlink/block/entity/ModBlockEntity.kt b/src/main/kotlin/badasintended/slotlink/block/entity/ModBlockEntity.kt
index aacef50..7121cff 100644
--- a/src/main/kotlin/badasintended/slotlink/block/entity/ModBlockEntity.kt
+++ b/src/main/kotlin/badasintended/slotlink/block/entity/ModBlockEntity.kt
@@ -1,10 +1,13 @@
package badasintended.slotlink.block.entity
+import net.minecraft.block.BlockState
import net.minecraft.block.entity.BlockEntity
import net.minecraft.block.entity.BlockEntityType
import net.minecraft.server.world.ServerWorld
+import net.minecraft.util.math.BlockPos
-abstract class ModBlockEntity(type: BlockEntityType) : BlockEntity(type) {
+abstract class ModBlockEntity(type: BlockEntityType, pos: BlockPos, state: BlockState) :
+ BlockEntity(type, pos, state) {
override fun markDirty() {
super.markDirty()
diff --git a/src/main/kotlin/badasintended/slotlink/block/entity/RequestBlockEntity.kt b/src/main/kotlin/badasintended/slotlink/block/entity/RequestBlockEntity.kt
index c7cff2e..ee95a43 100644
--- a/src/main/kotlin/badasintended/slotlink/block/entity/RequestBlockEntity.kt
+++ b/src/main/kotlin/badasintended/slotlink/block/entity/RequestBlockEntity.kt
@@ -4,13 +4,17 @@ import badasintended.slotlink.init.BlockEntityTypes
import badasintended.slotlink.screen.RequestScreenHandler
import badasintended.slotlink.util.BlockEntityWatcher
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet
+import net.minecraft.block.BlockState
import net.minecraft.entity.player.PlayerEntity
import net.minecraft.entity.player.PlayerInventory
import net.minecraft.screen.NamedScreenHandlerFactory
import net.minecraft.screen.ScreenHandler
import net.minecraft.text.TranslatableText
+import net.minecraft.util.math.BlockPos
-class RequestBlockEntity : ChildBlockEntity(BlockEntityTypes.REQUEST), NamedScreenHandlerFactory {
+class RequestBlockEntity(pos: BlockPos, state: BlockState) :
+ ChildBlockEntity(BlockEntityTypes.REQUEST, pos, state),
+ NamedScreenHandlerFactory {
val watchers = ObjectOpenHashSet>()
diff --git a/src/main/kotlin/badasintended/slotlink/block/entity/TransferCableBlockEntity.kt b/src/main/kotlin/badasintended/slotlink/block/entity/TransferCableBlockEntity.kt
index fcc6e18..b0b2a17 100644
--- a/src/main/kotlin/badasintended/slotlink/block/entity/TransferCableBlockEntity.kt
+++ b/src/main/kotlin/badasintended/slotlink/block/entity/TransferCableBlockEntity.kt
@@ -13,15 +13,17 @@ import net.minecraft.block.entity.BlockEntity
import net.minecraft.block.entity.BlockEntityType
import net.minecraft.entity.player.PlayerEntity
import net.minecraft.entity.player.PlayerInventory
-import net.minecraft.nbt.CompoundTag
+import net.minecraft.nbt.NbtCompound
import net.minecraft.network.PacketByteBuf
import net.minecraft.screen.ScreenHandler
import net.minecraft.screen.ScreenHandlerContext
import net.minecraft.server.network.ServerPlayerEntity
+import net.minecraft.util.math.BlockPos
import net.minecraft.util.math.Direction
import net.minecraft.world.World
-abstract class TransferCableBlockEntity(type: BlockEntityType) : ConnectorCableBlockEntity(type) {
+abstract class TransferCableBlockEntity(type: BlockEntityType, pos: BlockPos, state: BlockState) :
+ ConnectorCableBlockEntity(type, pos, state) {
var redstone = OFF
@@ -41,15 +43,15 @@ abstract class TransferCableBlockEntity(type: BlockEntityType)
override fun Block.isIgnored() = this is ModBlock
- override fun fromTag(state: BlockState, tag: CompoundTag) {
- super.fromTag(state, tag)
+ override fun readNbt(tag: NbtCompound) {
+ super.readNbt(tag)
side = Direction.byId(tag.getInt("side"))
redstone = RedstoneMode.of(tag.getInt("redstone"))
}
- override fun toTag(tag: CompoundTag): CompoundTag {
- super.toTag(tag)
+ override fun writeNbt(tag: NbtCompound): NbtCompound {
+ super.writeNbt(tag)
tag.putInt("side", side.id)
tag.putInt("redstone", redstone.ordinal)
@@ -58,7 +60,16 @@ abstract class TransferCableBlockEntity(type: BlockEntityType)
}
override fun createMenu(syncId: Int, inv: PlayerInventory, player: PlayerEntity): ScreenHandler? {
- return TransferScreenHandler(syncId, inv, priority, isBlackList, filter, side, redstone, ScreenHandlerContext.create(world, pos))
+ return TransferScreenHandler(
+ syncId,
+ inv,
+ priority,
+ isBlackList,
+ filter,
+ side,
+ redstone,
+ ScreenHandlerContext.create(world, pos)
+ )
}
override fun writeScreenOpeningData(player: ServerPlayerEntity, buf: PacketByteBuf) {
diff --git a/src/main/kotlin/badasintended/slotlink/client/compat/rei/ReiPlugin.kt b/src/main/kotlin/badasintended/slotlink/client/compat/rei/ReiPlugin.kt
index 6a8574d..1022475 100644
--- a/src/main/kotlin/badasintended/slotlink/client/compat/rei/ReiPlugin.kt
+++ b/src/main/kotlin/badasintended/slotlink/client/compat/rei/ReiPlugin.kt
@@ -1,5 +1,5 @@
package badasintended.slotlink.client.compat.rei
-
+/*
import badasintended.slotlink.client.gui.screen.RequestScreen
import badasintended.slotlink.client.gui.screen.reiSearchHandler
import badasintended.slotlink.client.gui.widget.MultiSlotWidget
@@ -88,4 +88,4 @@ class ReiPlugin : REIPluginV0 {
})
}
-}
\ No newline at end of file
+}*/
diff --git a/src/main/kotlin/badasintended/slotlink/client/gui/screen/LinkScreen.kt b/src/main/kotlin/badasintended/slotlink/client/gui/screen/LinkScreen.kt
index f767fbb..5496acf 100644
--- a/src/main/kotlin/badasintended/slotlink/client/gui/screen/LinkScreen.kt
+++ b/src/main/kotlin/badasintended/slotlink/client/gui/screen/LinkScreen.kt
@@ -9,7 +9,6 @@ import badasintended.slotlink.util.bool
import badasintended.slotlink.util.int
import net.fabricmc.api.EnvType
import net.fabricmc.api.Environment
-import net.minecraft.client.MinecraftClient
import net.minecraft.client.util.math.MatrixStack
import net.minecraft.entity.player.PlayerInventory
import net.minecraft.text.Text
@@ -27,6 +26,8 @@ open class LinkScreen(h: H, inventory: PlayerInventory, t
override fun init() {
super.init()
+ titleX = (backgroundWidth - textRenderer.getWidth(title)) / 2
+
val x = x + 7
val y = y + titleY + 11
@@ -74,12 +75,6 @@ open class LinkScreen(h: H, inventory: PlayerInventory, t
}
}
- override fun init(client: MinecraftClient, width: Int, height: Int) {
- super.init(client, width, height)
-
- titleX = (backgroundWidth - textRenderer.getWidth(title)) / 2
- }
-
override fun drawForeground(matrices: MatrixStack, mouseX: Int, mouseY: Int) {
super.drawForeground(matrices, mouseX, mouseY)
diff --git a/src/main/kotlin/badasintended/slotlink/client/gui/screen/ModScreen.kt b/src/main/kotlin/badasintended/slotlink/client/gui/screen/ModScreen.kt
index dba15ac..580f85a 100644
--- a/src/main/kotlin/badasintended/slotlink/client/gui/screen/ModScreen.kt
+++ b/src/main/kotlin/badasintended/slotlink/client/gui/screen/ModScreen.kt
@@ -9,7 +9,7 @@ import badasintended.slotlink.screen.slot.LockedSlot
import net.fabricmc.api.EnvType
import net.fabricmc.api.Environment
import net.minecraft.client.gui.screen.ingame.HandledScreen
-import net.minecraft.client.gui.widget.AbstractButtonWidget
+import net.minecraft.client.gui.widget.ClickableWidget
import net.minecraft.client.util.math.MatrixStack
import net.minecraft.entity.player.PlayerInventory
import net.minecraft.screen.ScreenHandler
@@ -22,22 +22,22 @@ abstract class ModScreen(h: H, inventory: PlayerInventory, ti
abstract val baseTlKey: String
- private var clickedElement: AbstractButtonWidget? = null
- var hoveredElement: AbstractButtonWidget? = null
+ private var clickedElement: ClickableWidget? = null
+ var hoveredElement: ClickableWidget? = null
fun tl(key: String, vararg args: Any) = TranslatableText("$baseTlKey.$key", *args)
- protected inline fun add(t: T, func: T.() -> Unit = {}): T {
- return addButton(t).apply(func)
+ protected inline fun add(t: T, func: T.() -> Unit = {}): T {
+ return addDrawableChild(t).apply(func)
}
override fun render(matrices: MatrixStack, mouseX: Int, mouseY: Int, delta: Float) {
super.render(matrices, mouseX, mouseY, delta)
- if (playerInventory.cursorStack.isEmpty && focusedSlot != null && focusedSlot!!.hasStack()) {
+ if (handler.cursorStack.isEmpty && focusedSlot != null && focusedSlot!!.hasStack()) {
this.renderTooltip(matrices, focusedSlot!!.stack, mouseX, mouseY)
} else {
- hoveredElement = hoveredElement(mouseX.toDouble(), mouseY.toDouble()).orElse(null) as? AbstractButtonWidget
+ hoveredElement = hoveredElement(mouseX.toDouble(), mouseY.toDouble()).orElse(null) as? ClickableWidget
if (hoveredElement !is InventorySortButton) hoveredElement?.renderToolTip(matrices, mouseX, mouseY)
}
}
@@ -83,12 +83,12 @@ abstract class ModScreen(h: H, inventory: PlayerInventory, ti
}
override fun keyPressed(keyCode: Int, scanCode: Int, modifiers: Int): Boolean {
- return buttons.any { it is KeyGrabber && it.onKey(keyCode, scanCode, modifiers) }
+ return children().any { it is KeyGrabber && it.onKey(keyCode, scanCode, modifiers) }
|| super.keyPressed(keyCode, scanCode, modifiers)
}
override fun charTyped(char: Char, modifiers: Int): Boolean {
- return buttons.any { it is CharGrabber && it.onChar(char, modifiers) }
+ return children().any { it is CharGrabber && it.onChar(char, modifiers) }
|| super.charTyped(char, modifiers)
}
diff --git a/src/main/kotlin/badasintended/slotlink/client/gui/screen/RequestScreen.kt b/src/main/kotlin/badasintended/slotlink/client/gui/screen/RequestScreen.kt
index c739964..450bd4b 100644
--- a/src/main/kotlin/badasintended/slotlink/client/gui/screen/RequestScreen.kt
+++ b/src/main/kotlin/badasintended/slotlink/client/gui/screen/RequestScreen.kt
@@ -22,8 +22,9 @@ import badasintended.slotlink.util.int
import badasintended.slotlink.util.string
import net.fabricmc.api.EnvType
import net.fabricmc.api.Environment
-import net.minecraft.client.MinecraftClient
-import net.minecraft.client.gui.widget.AbstractButtonWidget
+import net.minecraft.client.gui.Element
+import net.minecraft.client.gui.Selectable
+import net.minecraft.client.gui.widget.ClickableWidget
import net.minecraft.client.util.math.MatrixStack
import net.minecraft.entity.player.PlayerInventory
import net.minecraft.text.Text
@@ -65,12 +66,27 @@ class RequestScreen(handler: H, inv: PlayerInventory,
private var skipChar = false
- private var inventorySortButton: AbstractButtonWidget? = null
+ private var inventorySortButton: ClickableWidget? = null
override val baseTlKey: String
get() = "container.slotlink.request"
override fun init() {
+ val craftHeight = if (craftingGrid) 67 else 0
+
+ var viewedHeight = 3
+ for (i in 3..6) if (height > (119 + craftHeight + (i * 18))) viewedHeight = i
+
+ backgroundWidth = 9 * 18 + 14
+ backgroundHeight = viewedHeight * 18 + 114 + craftHeight
+
+ handler.resize(viewedHeight, craftingGrid)
+ c2s(RESIZE) {
+ int(syncId)
+ int(viewedHeight)
+ bool(craftingGrid)
+ }
+
super.init()
playerInventoryTitleY = backgroundHeight - 94
@@ -78,8 +94,6 @@ class RequestScreen(handler: H, inv: PlayerInventory,
val x = x + 7
val y = y + titleY + 11
- val craftHeight = if (craftingGrid) 67 else 0
-
// Linked slot view
for (i in 0 until viewedHeight * 9) {
add(MultiSlotWidget(handler, i, x + (i % 9) * 18, y + (i / 9) * 18))
@@ -162,7 +176,7 @@ class RequestScreen(handler: H, inv: PlayerInventory,
}
}
onHovered = { matrices, x, y ->
- if (playerInventory.cursorStack.isEmpty) {
+ if (handler.cursorStack.isEmpty) {
renderTooltip(matrices, tl("move.all"), x, y)
} else {
renderTooltip(matrices, tl("move.type"), x, y)
@@ -181,7 +195,7 @@ class RequestScreen(handler: H, inv: PlayerInventory,
}
}
onHovered = { matrices, x, y ->
- if (playerInventory.cursorStack.isEmpty) {
+ if (handler.cursorStack.isEmpty) {
renderTooltip(matrices, tl("restock.all"), x, y)
} else {
renderTooltip(matrices, tl("restock.cursor"), x, y)
@@ -251,35 +265,13 @@ class RequestScreen(handler: H, inv: PlayerInventory,
}
}
- override fun addButton(button: T): T {
- if (button is InventorySortButton && !button.initialized) {
- button.initialized = true
- inventorySortButton = button
- return button
+ override fun addSelectableChild(child: T): T where T : Element?, T : Selectable? {
+ if (child is ClickableWidget && child is InventorySortButton && !child.initialized) {
+ child.initialized = true
+ inventorySortButton = child
+ return child
}
- return super.addButton(button)
- }
-
- /**
- * apparently this also called on resize
- */
- override fun init(client: MinecraftClient, width: Int, height: Int) {
- val craftHeight = if (craftingGrid) 67 else 0
-
- var viewedHeight = 3
- for (i in 3..6) if (height > (119 + craftHeight + (i * 18))) viewedHeight = i
-
- backgroundWidth = 9 * 18 + 14
- backgroundHeight = viewedHeight * 18 + 114 + craftHeight
-
- handler.resize(viewedHeight, craftingGrid)
- c2s(RESIZE) {
- int(syncId)
- int(viewedHeight)
- bool(craftingGrid)
- }
-
- super.init(client, width, height)
+ return super.addSelectableChild(child)
}
override fun tick() {
diff --git a/src/main/kotlin/badasintended/slotlink/client/gui/widget/ButtonWidget.kt b/src/main/kotlin/badasintended/slotlink/client/gui/widget/ButtonWidget.kt
index 9eb72b5..2d5a219 100644
--- a/src/main/kotlin/badasintended/slotlink/client/gui/widget/ButtonWidget.kt
+++ b/src/main/kotlin/badasintended/slotlink/client/gui/widget/ButtonWidget.kt
@@ -4,12 +4,13 @@ import badasintended.slotlink.client.util.bindGuiTexture
import badasintended.slotlink.client.util.drawNinePatch
import net.fabricmc.api.EnvType
import net.fabricmc.api.Environment
-import net.minecraft.client.gui.widget.AbstractButtonWidget
+import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder
+import net.minecraft.client.gui.widget.ClickableWidget
import net.minecraft.client.util.math.MatrixStack
import net.minecraft.text.LiteralText
@Environment(EnvType.CLIENT)
-class ButtonWidget(x: Int, y: Int, w: Int, h: Int = w) : AbstractButtonWidget(x, y, w, h, LiteralText.EMPTY) {
+class ButtonWidget(x: Int, y: Int, w: Int, h: Int = w) : ClickableWidget(x, y, w, h, LiteralText.EMPTY) {
var onHovered: (MatrixStack, Int, Int) -> Unit = { _, _, _ -> }
var onPressed = { }
@@ -65,6 +66,8 @@ class ButtonWidget(x: Int, y: Int, w: Int, h: Int = w) : AbstractButtonWidget(x,
return super.mouseReleased(mouseX, mouseY, button)
}
+ override fun appendNarrations(builder: NarrationMessageBuilder?) {}
+
override fun renderToolTip(matrices: MatrixStack, mouseX: Int, mouseY: Int) {
if (visible) onHovered.invoke(matrices, mouseX, mouseY)
}
diff --git a/src/main/kotlin/badasintended/slotlink/client/gui/widget/CraftingResultSlotWidget.kt b/src/main/kotlin/badasintended/slotlink/client/gui/widget/CraftingResultSlotWidget.kt
index ad71a1c..2b88dae 100644
--- a/src/main/kotlin/badasintended/slotlink/client/gui/widget/CraftingResultSlotWidget.kt
+++ b/src/main/kotlin/badasintended/slotlink/client/gui/widget/CraftingResultSlotWidget.kt
@@ -11,10 +11,8 @@ import net.fabricmc.api.Environment
import net.minecraft.client.gui.screen.Screen
@Environment(EnvType.CLIENT)
-class CraftingResultSlotWidget(
- private val handler: RequestScreenHandler,
- x: Int, y: Int
-) : SlotWidget(x, y, 26, handler.playerInventory, { handler.result.getStack(0) }) {
+class CraftingResultSlotWidget(handler: RequestScreenHandler, x: Int, y: Int) :
+ SlotWidget(x, y, 26, handler, { handler.result.getStack(0) }) {
override fun onClick(button: Int) {
c2s(Packets.CRAFTING_RESULT_SLOT_CLICK) {
diff --git a/src/main/kotlin/badasintended/slotlink/client/gui/widget/FilterSlotWidget.kt b/src/main/kotlin/badasintended/slotlink/client/gui/widget/FilterSlotWidget.kt
index 208479a..7efbebe 100644
--- a/src/main/kotlin/badasintended/slotlink/client/gui/widget/FilterSlotWidget.kt
+++ b/src/main/kotlin/badasintended/slotlink/client/gui/widget/FilterSlotWidget.kt
@@ -12,10 +12,10 @@ import net.minecraft.item.ItemStack
@Environment(EnvType.CLIENT)
class FilterSlotWidget(
- private val handler: LinkScreenHandler,
+ handler: LinkScreenHandler,
private val index: Int,
x: Int, y: Int
-) : SlotWidget(x, y, 18, handler.playerInv, { handler.filter[index].first }) {
+) : SlotWidget(x, y, 18, handler, { handler.filter[index].first }) {
private val nbt get() = handler.filter[index].second
diff --git a/src/main/kotlin/badasintended/slotlink/client/gui/widget/MultiSlotWidget.kt b/src/main/kotlin/badasintended/slotlink/client/gui/widget/MultiSlotWidget.kt
index f27cfdb..6ad8961 100644
--- a/src/main/kotlin/badasintended/slotlink/client/gui/widget/MultiSlotWidget.kt
+++ b/src/main/kotlin/badasintended/slotlink/client/gui/widget/MultiSlotWidget.kt
@@ -28,10 +28,10 @@ import net.minecraft.util.Formatting
*/
@Environment(EnvType.CLIENT)
class MultiSlotWidget(
- private val handler: RequestScreenHandler,
+ handler: RequestScreenHandler,
private val index: Int,
x: Int, y: Int
-) : SlotWidget(x, y, 18, handler.playerInventory, { handler.viewedStacks[index].first }),
+) : SlotWidget(x, y, 18, handler, { handler.viewedStacks[index].first }),
KeyGrabber {
private val count get() = handler.viewedStacks[index].second
diff --git a/src/main/kotlin/badasintended/slotlink/client/gui/widget/NoSoundWidget.kt b/src/main/kotlin/badasintended/slotlink/client/gui/widget/NoSoundWidget.kt
index 065a433..e3b5224 100644
--- a/src/main/kotlin/badasintended/slotlink/client/gui/widget/NoSoundWidget.kt
+++ b/src/main/kotlin/badasintended/slotlink/client/gui/widget/NoSoundWidget.kt
@@ -2,15 +2,18 @@ package badasintended.slotlink.client.gui.widget
import net.fabricmc.api.EnvType
import net.fabricmc.api.Environment
-import net.minecraft.client.gui.widget.AbstractButtonWidget
+import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder
+import net.minecraft.client.gui.widget.ClickableWidget
import net.minecraft.client.sound.SoundManager
import net.minecraft.text.LiteralText
import net.minecraft.text.Text
@Environment(EnvType.CLIENT)
abstract class NoSoundWidget(x: Int, y: Int, w: Int, h: Int, text: Text = LiteralText.EMPTY) :
- AbstractButtonWidget(x, y, w, h, text) {
+ ClickableWidget(x, y, w, h, text) {
override fun playDownSound(soundManager: SoundManager) {}
+ override fun appendNarrations(builder: NarrationMessageBuilder) {}
+
}
\ No newline at end of file
diff --git a/src/main/kotlin/badasintended/slotlink/client/gui/widget/SlotWidget.kt b/src/main/kotlin/badasintended/slotlink/client/gui/widget/SlotWidget.kt
index af37332..a4b6623 100644
--- a/src/main/kotlin/badasintended/slotlink/client/gui/widget/SlotWidget.kt
+++ b/src/main/kotlin/badasintended/slotlink/client/gui/widget/SlotWidget.kt
@@ -6,15 +6,15 @@ import badasintended.slotlink.client.util.drawNinePatch
import net.fabricmc.api.EnvType
import net.fabricmc.api.Environment
import net.minecraft.client.util.math.MatrixStack
-import net.minecraft.entity.player.PlayerInventory
import net.minecraft.item.ItemStack
+import net.minecraft.screen.ScreenHandler
import net.minecraft.text.LiteralText
import net.minecraft.text.Text
@Environment(EnvType.CLIENT)
-abstract class SlotWidget(
+abstract class SlotWidget(
x: Int, y: Int, s: Int,
- private val playerInventory: PlayerInventory,
+ protected val handler: SH,
private val stackGetter: () -> ItemStack
) : NoSoundWidget(x, y, s, s, LiteralText.EMPTY) {
@@ -51,7 +51,7 @@ abstract class SlotWidget(
fill(matrices, x, y, x + 16, y + 16, -2130706433 /*0x80ffffff fuck*/)
client.apply {
- if (playerInventory.cursorStack.isEmpty && !stack.isEmpty) {
+ if (handler.cursorStack.isEmpty && !stack.isEmpty) {
val tooltips = stack.getTooltip(player) { options.advancedItemTooltips }
appendTooltip(tooltips)
currentScreen?.renderTooltip(matrices, tooltips, mouseX, mouseY)
diff --git a/src/main/kotlin/badasintended/slotlink/client/gui/widget/TextFieldWidget.kt b/src/main/kotlin/badasintended/slotlink/client/gui/widget/TextFieldWidget.kt
index bdcfaf6..fd1368c 100644
--- a/src/main/kotlin/badasintended/slotlink/client/gui/widget/TextFieldWidget.kt
+++ b/src/main/kotlin/badasintended/slotlink/client/gui/widget/TextFieldWidget.kt
@@ -31,7 +31,7 @@ class TextFieldWidget(
val tooltip = arrayListOf()
init {
- setHasBorder(false)
+ setDrawsBackground(false)
setEditableColor(0xffffff)
}
diff --git a/src/main/kotlin/badasintended/slotlink/client/util/ClientUtils.kt b/src/main/kotlin/badasintended/slotlink/client/util/ClientUtils.kt
index 6ac8635..83ecac5 100644
--- a/src/main/kotlin/badasintended/slotlink/client/util/ClientUtils.kt
+++ b/src/main/kotlin/badasintended/slotlink/client/util/ClientUtils.kt
@@ -4,11 +4,13 @@ package badasintended.slotlink.client.util
import badasintended.slotlink.util.buf
import badasintended.slotlink.util.modId
+import com.mojang.blaze3d.systems.RenderSystem
import net.fabricmc.api.EnvType
import net.fabricmc.api.Environment
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking
import net.minecraft.client.MinecraftClient
import net.minecraft.client.gui.DrawableHelper
+import net.minecraft.client.render.GameRenderer
import net.minecraft.client.util.math.MatrixStack
import net.minecraft.network.PacketByteBuf
import net.minecraft.util.Identifier
@@ -26,7 +28,8 @@ inline fun c2s(id: Identifier, buf: PacketByteBuf.() -> Unit) {
}
fun bindGuiTexture() {
- client.textureManager.bindTexture(guiTexture)
+ RenderSystem.setShader(GameRenderer::getPositionTexShader)
+ RenderSystem.setShaderTexture(0, guiTexture)
}
private typealias DH = DrawableHelper
diff --git a/src/main/kotlin/badasintended/slotlink/init/BlockEntityTypes.kt b/src/main/kotlin/badasintended/slotlink/init/BlockEntityTypes.kt
index 53bbcf1..2922acd 100644
--- a/src/main/kotlin/badasintended/slotlink/init/BlockEntityTypes.kt
+++ b/src/main/kotlin/badasintended/slotlink/init/BlockEntityTypes.kt
@@ -6,8 +6,8 @@ import badasintended.slotlink.block.entity.ExportCableBlockEntity
import badasintended.slotlink.block.entity.ImportCableBlockEntity
import badasintended.slotlink.block.entity.LinkCableBlockEntity
import badasintended.slotlink.block.entity.MasterBlockEntity
-import badasintended.slotlink.block.entity.ModBlockEntity
import badasintended.slotlink.block.entity.RequestBlockEntity
+import badasintended.slotlink.util.BlockEntityBuilder
import net.minecraft.block.entity.BlockEntityType
import net.minecraft.util.registry.Registry
import badasintended.slotlink.init.Blocks as B
@@ -34,7 +34,7 @@ object BlockEntityTypes : Initializer {
EXPORT_CABLE = r(B.EXPORT_CABLE, ::ExportCableBlockEntity)
}
- private fun r(block: ModBlock, function: () -> E): BlockEntityType {
+ private fun r(block: ModBlock, function: BlockEntityBuilder): T {
return Registry.register(
Registry.BLOCK_ENTITY_TYPE, block.id, BlockEntityType.Builder.create(function, block).build(null)
)
diff --git a/src/main/kotlin/badasintended/slotlink/init/Packets.kt b/src/main/kotlin/badasintended/slotlink/init/Packets.kt
index 4e829fa..741d986 100644
--- a/src/main/kotlin/badasintended/slotlink/init/Packets.kt
+++ b/src/main/kotlin/badasintended/slotlink/init/Packets.kt
@@ -223,7 +223,7 @@ object Packets : Initializer {
val stack = buf.stack
client.execute {
- client.player!!.inventory.cursorStack = stack
+ client.player!!.currentScreenHandler.cursorStack = stack
}
}
diff --git a/src/main/kotlin/badasintended/slotlink/item/MultiDimRemoteItem.kt b/src/main/kotlin/badasintended/slotlink/item/MultiDimRemoteItem.kt
index 09f8186..65fa953 100644
--- a/src/main/kotlin/badasintended/slotlink/item/MultiDimRemoteItem.kt
+++ b/src/main/kotlin/badasintended/slotlink/item/MultiDimRemoteItem.kt
@@ -4,15 +4,14 @@ import badasintended.slotlink.block.MasterBlock
import badasintended.slotlink.block.entity.MasterBlockEntity
import badasintended.slotlink.screen.RemoteScreenHandler
import badasintended.slotlink.util.actionBar
+import badasintended.slotlink.util.toNbt
import badasintended.slotlink.util.toPos
-import badasintended.slotlink.util.toTag
import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory
import net.minecraft.client.item.TooltipContext
import net.minecraft.entity.player.PlayerEntity
import net.minecraft.entity.player.PlayerInventory
import net.minecraft.item.ItemStack
import net.minecraft.item.ItemUsageContext
-import net.minecraft.nbt.CompoundTag
import net.minecraft.network.PacketByteBuf
import net.minecraft.screen.ScreenHandler
import net.minecraft.server.network.ServerPlayerEntity
@@ -64,9 +63,9 @@ open class MultiDimRemoteItem(id: String = "multi_dim_remote") : ModItem(id, SET
}
val masterPosTag = stack.orCreateTag.getCompound("masterPos")
- val masterDim = RegistryKey.of(Registry.DIMENSION, Identifier(stack.orCreateTag.getString("masterDim")))
+ val masterDim = RegistryKey.of(Registry.WORLD_KEY, Identifier(stack.orCreateTag.getString("masterDim")))
- if (masterPosTag == CompoundTag()) {
+ if (masterPosTag.isEmpty) {
player.actionBar("${baseTlKey}.hasNoMaster")
} else use(world, player, stack, hand, masterPosTag.toPos(), masterDim)
@@ -83,7 +82,7 @@ open class MultiDimRemoteItem(id: String = "multi_dim_remote") : ModItem(id, SET
val block = world.getBlockState(pos).block
if (block is MasterBlock) {
if (player != null) if (player.isSneaking) {
- stack.orCreateTag.put("masterPos", pos.toTag())
+ stack.orCreateTag.put("masterPos", pos.toNbt())
stack.orCreateTag.putString("masterDim", dimId)
player.actionBar("${baseTlKey}.linked", pos.x, pos.y, pos.z, dimId)
return ActionResult.SUCCESS
@@ -99,7 +98,7 @@ open class MultiDimRemoteItem(id: String = "multi_dim_remote") : ModItem(id, SET
tooltip.add(TranslatableText("${baseTlKey}.useTooltip").formatted(Formatting.GRAY))
val masterPosTag = stack.orCreateTag.getCompound("masterPos")
- if (masterPosTag != CompoundTag()) {
+ if (!masterPosTag.isEmpty) {
val masterPos = masterPosTag.toPos()
val masterDim = Identifier(stack.orCreateTag.getString("masterDim"))
tooltip.add(
diff --git a/src/main/kotlin/badasintended/slotlink/screen/LinkScreenHandler.kt b/src/main/kotlin/badasintended/slotlink/screen/LinkScreenHandler.kt
index 9edc78b..92d37db 100644
--- a/src/main/kotlin/badasintended/slotlink/screen/LinkScreenHandler.kt
+++ b/src/main/kotlin/badasintended/slotlink/screen/LinkScreenHandler.kt
@@ -15,7 +15,7 @@ import net.minecraft.screen.slot.Slot
@Suppress("LeakingThis")
open class LinkScreenHandler(
syncId: Int,
- val playerInv: PlayerInventory,
+ playerInv: PlayerInventory,
var priority: Int,
var blacklist: Boolean,
val filter: MutableList>,
@@ -37,14 +37,14 @@ open class LinkScreenHandler(
fun filterSlotClick(i: Int, button: Int) {
if (button !in 0..1) return
- val stack = playerInv.cursorStack.copy().apply { count = 1 }
+ val stack = cursorStack.copy().apply { count = 1 }
if (button != 1) stack.tag = null
- filter[i] = stack to (button == 1 && !playerInv.cursorStack.isEmpty)
+ filter[i] = stack to (button == 1 && cursorStack.isEmpty)
}
override fun transferSlot(player: PlayerEntity, index: Int): ItemStack {
var itemStack = ItemStack.EMPTY
- val slot = slots[index] ?: return itemStack
+ val slot = slots[index]
if (slot.hasStack()) {
val itemStack2 = slot.stack
itemStack = itemStack2.copy()
diff --git a/src/main/kotlin/badasintended/slotlink/screen/RemoteScreenHandler.kt b/src/main/kotlin/badasintended/slotlink/screen/RemoteScreenHandler.kt
index a6ea9a5..f2eb1b4 100644
--- a/src/main/kotlin/badasintended/slotlink/screen/RemoteScreenHandler.kt
+++ b/src/main/kotlin/badasintended/slotlink/screen/RemoteScreenHandler.kt
@@ -5,7 +5,6 @@ import badasintended.slotlink.init.Screens
import badasintended.slotlink.inventory.FilteredInventory
import badasintended.slotlink.item.MultiDimRemoteItem
import badasintended.slotlink.screen.slot.LockedSlot
-import badasintended.slotlink.util.index
import net.minecraft.entity.player.PlayerInventory
import net.minecraft.network.PacketByteBuf
import net.minecraft.screen.ScreenHandlerType
diff --git a/src/main/kotlin/badasintended/slotlink/screen/RequestScreenHandler.kt b/src/main/kotlin/badasintended/slotlink/screen/RequestScreenHandler.kt
index d45cbf5..5306a56 100644
--- a/src/main/kotlin/badasintended/slotlink/screen/RequestScreenHandler.kt
+++ b/src/main/kotlin/badasintended/slotlink/screen/RequestScreenHandler.kt
@@ -14,7 +14,6 @@ import badasintended.slotlink.util.MasterWatcher
import badasintended.slotlink.util.Sort
import badasintended.slotlink.util.actionBar
import badasintended.slotlink.util.allEmpty
-import badasintended.slotlink.util.index
import badasintended.slotlink.util.input
import badasintended.slotlink.util.int
import badasintended.slotlink.util.isItemAndTagEqual
@@ -114,7 +113,6 @@ open class RequestScreenHandler(
}
addListener(object : ScreenHandlerListener {
- override fun onHandlerRegistered(handler: ScreenHandler, stacks: DefaultedList) {}
override fun onPropertyUpdate(handler: ScreenHandler, property: Int, value: Int) {}
override fun onSlotUpdate(handler: ScreenHandler, slotId: Int, stack: ItemStack) {
@@ -153,8 +151,9 @@ open class RequestScreenHandler(
!Registry.ITEM.getId(it.stack.item).toString().contains(value, true)
}
'#' -> filledSlots.removeIf r@{ entry ->
- val tags =
- player.world.tagManager.items.tags.filterValues { it.contains(entry.stack.item) }.keys
+ val tags = player.world.tagManager
+ .getOrCreateTagGroup(Registry.ITEM_KEY)
+ .tags.filterValues { it.contains(entry.stack.item) }.keys
if (tags.isEmpty() && value.isBlank()) return@r false
else return@r tags.none { it.toString().contains(value, true) }
}
@@ -207,7 +206,7 @@ open class RequestScreenHandler(
/** server only **/
fun multiSlotAction(i: Int, data: Int, type: SlotActionType) {
val viewed = viewedStacks[i].first
- var cursor = playerInventory.cursorStack
+ var cursor = cursorStack
if (cursor.isEmpty) {
if (type == CLONE) {
@@ -256,7 +255,7 @@ open class RequestScreenHandler(
fun craftingResultSlotClick(button: Int, quickMove: Boolean) {
if (button !in 0..2) return
- var cursor = playerInventory.cursorStack
+ var cursor = cursorStack
val resultStack = result.getStack(0)
if (button == 2) {
@@ -316,7 +315,7 @@ open class RequestScreenHandler(
if (recipe.type == RecipeType.CRAFTING) {
clearCraftingGrid()
sendContentUpdates()
- alignRecipeToGrid(3, 3, -1, recipe, recipe.previewInputs.iterator(), 0)
+ alignRecipeToGrid(3, 3, -1, recipe, recipe.ingredients.iterator(), 0)
}
}
@@ -328,7 +327,7 @@ open class RequestScreenHandler(
}
fun move() {
- var cursor = playerInventory.cursorStack
+ var cursor = cursorStack
slots.forEach {
if (it.inventory is PlayerInventory
&& it.index >= 9
@@ -347,7 +346,7 @@ open class RequestScreenHandler(
}
fun restock() {
- var cursor = playerInventory.cursorStack
+ var cursor = cursorStack
if (cursor.isEmpty) slots.filter { it.inventory is PlayerInventory }.forEach {
it.stack = it.stack.restock()
} else {
@@ -382,7 +381,7 @@ open class RequestScreenHandler(
}
private fun updateCursor(stack: ItemStack) {
- playerInventory.cursorStack = stack
+ cursorStack = stack
s2c(player, UPDATE_CURSOR) {
stack(stack)
}
@@ -433,13 +432,12 @@ open class RequestScreenHandler(
}
}
- override fun onSlotClick(i: Int, j: Int, actionType: SlotActionType, playerEntity: PlayerEntity): ItemStack {
- if (playerEntity !is ServerPlayerEntity) return ItemStack.EMPTY
- val result = super.onSlotClick(i, j, actionType, playerEntity)
+ override fun onSlotClick(i: Int, j: Int, actionType: SlotActionType, playerEntity: PlayerEntity) {
+ if (playerEntity !is ServerPlayerEntity) return
+ super.onSlotClick(i, j, actionType, playerEntity)
s2c(playerEntity, UPDATE_CURSOR) {
- stack(playerEntity.inventory.cursorStack)
+ stack(cursorStack)
}
- return result
}
override fun transferSlot(player: PlayerEntity, index: Int): ItemStack {
@@ -548,7 +546,7 @@ open class RequestScreenHandler(
slots.filter { it.inventory is CraftingInventory }.forEach {
it.stack = moveStack(it.stack)
}
- dropInventory(player, player.world, input)
+ dropInventory(player, input)
request?.watchers?.remove(this)
request?.markDirty()
master?.watchers?.remove(this)
diff --git a/src/main/kotlin/badasintended/slotlink/util/AccessorUtils.kt b/src/main/kotlin/badasintended/slotlink/util/AccessorUtils.kt
index 345587b..14ce5b5 100644
--- a/src/main/kotlin/badasintended/slotlink/util/AccessorUtils.kt
+++ b/src/main/kotlin/badasintended/slotlink/util/AccessorUtils.kt
@@ -1,13 +1,9 @@
package badasintended.slotlink.util
import badasintended.slotlink.mixin.CraftingScreenHandlerAccessor
-import badasintended.slotlink.mixin.SlotAccessor
import badasintended.slotlink.mixin.TextFieldWidgetAccessor
import net.minecraft.client.gui.widget.TextFieldWidget
import net.minecraft.screen.CraftingScreenHandler
-import net.minecraft.screen.slot.Slot
-
-inline val Slot.index get() = (this as SlotAccessor).index
inline val CraftingScreenHandler.input get() = (this as CraftingScreenHandlerAccessor).input
inline val CraftingScreenHandler.result get() = (this as CraftingScreenHandlerAccessor).result
diff --git a/src/main/kotlin/badasintended/slotlink/util/Utils.kt b/src/main/kotlin/badasintended/slotlink/util/Utils.kt
index bd30f7a..17f8d7d 100644
--- a/src/main/kotlin/badasintended/slotlink/util/Utils.kt
+++ b/src/main/kotlin/badasintended/slotlink/util/Utils.kt
@@ -10,11 +10,13 @@ import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking
import net.fabricmc.fabric.api.tag.TagRegistry
import net.fabricmc.loader.api.FabricLoader
import net.minecraft.block.Block
+import net.minecraft.block.BlockState
+import net.minecraft.block.entity.BlockEntity
import net.minecraft.entity.player.PlayerEntity
import net.minecraft.inventory.Inventory
import net.minecraft.item.ItemStack
-import net.minecraft.nbt.CompoundTag
-import net.minecraft.nbt.ListTag
+import net.minecraft.nbt.NbtCompound
+import net.minecraft.nbt.NbtList
import net.minecraft.network.Packet
import net.minecraft.network.PacketByteBuf
import net.minecraft.server.network.ServerPlayerEntity
@@ -28,15 +30,18 @@ import net.minecraft.util.shape.VoxelShapes
import org.apache.logging.log4j.LogManager
import org.apache.logging.log4j.Logger
-fun BlockPos.toTag(): CompoundTag {
- val tag = CompoundTag()
+typealias BlockPosSet = ObjectOpenHashSet
+typealias BlockEntityBuilder = (BlockPos, BlockState) -> BlockEntity
+
+fun BlockPos.toNbt(): NbtCompound {
+ val tag = NbtCompound()
tag.putInt("x", x)
tag.putInt("y", y)
tag.putInt("z", z)
return tag
}
-fun CompoundTag.toPos(): BlockPos {
+fun NbtCompound.toPos(): BlockPos {
return BlockPos(getInt("x"), getInt("y"), getInt("z"))
}
@@ -131,13 +136,12 @@ var Pair.stack: ItemStack
get() = first.getStack(second)
set(value) = first.setStack(second, value)
-typealias BlockPosSet = ObjectOpenHashSet
-fun BlockPosSet.toTag() = mapTo(ListTag(), BlockPos::toTag)
+fun BlockPosSet.toNbt() = mapTo(NbtList(), BlockPos::toNbt)
-fun BlockPosSet.fromTag(tag: ListTag) {
+fun BlockPosSet.fromTag(tag: NbtList) {
clear()
- tag.mapTo(this) { (it as CompoundTag).toPos() }
+ tag.mapTo(this) { (it as NbtCompound).toPos() }
}
fun hasMod(id: String) = FabricLoader.getInstance().isModLoaded(id)
@@ -148,4 +152,4 @@ fun Int.toFormattedString(): String = when {
val exp = (ln(this.toDouble()) / ln(1000.0)).toInt()
String.format("%.1f%c", this / 1000.0.pow(exp.toDouble()), "KMGTPE"[exp - 1])
}
-}
\ No newline at end of file
+}
diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json
index 902ef94..01ea1c4 100644
--- a/src/main/resources/fabric.mod.json
+++ b/src/main/resources/fabric.mod.json
@@ -24,7 +24,7 @@
"mixins" : ["slotlink.mixins.json"],
"depends" : {
"fabricloader" : ">=0.8",
- "minecraft" : "1.16.x",
+ "minecraft" : "1.17.x",
"fabric" : "*",
"fabric-language-kotlin": ">=1.6"
}
diff --git a/src/main/resources/slotlink.mixins.json b/src/main/resources/slotlink.mixins.json
index 0804dd7..c0ef91d 100644
--- a/src/main/resources/slotlink.mixins.json
+++ b/src/main/resources/slotlink.mixins.json
@@ -2,18 +2,14 @@
"required" : true,
"minVersion" : "0.8",
"package" : "badasintended.slotlink.mixin",
- "compatibilityLevel": "JAVA_8",
+ "compatibilityLevel": "JAVA_16",
"mixins" : [
"CraftingScreenHandlerAccessor",
"DoubleInventoryMixin",
- "SlotAccessor",
- "TextFieldWidgetAccessor",
"WallMountedBlockMixin",
"pseudo.DoubleSidedInventoryMixin"
],
- "client" : [
- "pseudo.SortButtonWidgetMixin"
- ],
+ "client" : ["TextFieldWidgetAccessor", "pseudo.SortButtonWidgetMixin"],
"injectors" : {
"defaultRequire": 1
}