Skip to content

Commit f46c31e

Browse files
committed
feat: fix & complete firmware programmer
1 parent 3d57c18 commit f46c31e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+614
-671
lines changed

build.gradle

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ repositories {
1919
maven {
2020
name = 'Kotlin for Forge'
2121
url = 'https://thedarkcolour.github.io/KotlinForForge/'
22+
content { includeGroup "thedarkcolour" }
2223
}
2324
}
2425

@@ -81,15 +82,20 @@ configurations {
8182
sourceSets.main.resources { srcDir 'src/generated/resources' }
8283

8384
dependencies {
84-
implementation 'thedarkcolour:kotlinforforge-neoforge:5.6.0'
85-
86-
implementation(jarJar("org.mozilla:rhino") {
85+
implementation 'thedarkcolour:kotlinforforge-neoforge:5.7.0:slim'
86+
additionalRuntimeClasspath 'org.jetbrains.kotlin:kotlin-stdlib'
87+
additionalRuntimeClasspath 'org.jetbrains.kotlin:kotlin-reflect'
88+
additionalRuntimeClasspath 'org.jetbrains.kotlinx:kotlinx-coroutines-core'
89+
additionalRuntimeClasspath 'org.jetbrains.kotlinx:kotlinx-serialization-core'
90+
additionalRuntimeClasspath 'org.jetbrains.kotlinx:kotlinx-serialization-json'
91+
92+
implementation(jarJar("io.github.dokar3:quickjs-kt") {
8793
version {
88-
strictly '[1.7.14, 1.9)'
89-
prefer '1.8.0'
94+
strictly '[1.0.0-alpha13, 2.0.0)'
95+
prefer '1.0.0-alpha13'
9096
}
9197
})
92-
additionalRuntimeClasspath(group: "org.mozilla", name: "rhino", version: "1.8.0")
98+
additionalRuntimeClasspath(group: "io.github.dokar3", name: "quickjs-kt", version: "1.0.0-alpha13")
9399
}
94100

95101
var generateModMetadata = tasks.register("generateModMetadata", ProcessResources) {

settings.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ pluginManagement {
55
maven { url = 'https://maven.neoforged.net/releases' }
66
}
77
plugins {
8-
id 'org.jetbrains.kotlin.jvm' version '2.1.10'
8+
id 'org.jetbrains.kotlin.jvm' version '2.1.0'
99
}
1010
}
1111

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
// 1.20.4 2024-03-29T01:13:52.7370814 Languages: en_us for mod: botjs
2-
9f3d2502c5a8c1067b4305315002e3d6c1744f1d assets/botjs/lang/en_us.json
1+
// 1.21.4 2025-02-08T20:23:07.8939457 Languages: en_us for mod: botjs
2+
191db04cc935127fd2c3fbf310a084861f3a273a assets/botjs/lang/en_us.json

src/generated/resources/.cache/d23ba213a96ac847e32ecbdb70652c60e27608db

Lines changed: 0 additions & 6 deletions
This file was deleted.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// 1.21.4 2025-02-08T20:24:02.4866725 Model Definitions - botjs
2+
16dae577831793bf0971fffe39a5e94e7cedd36d assets/botjs/blockstates/bot_assembler.json
3+
2fe5d5574d0510974668e818d7c3a07b590d10be assets/botjs/blockstates/firmware_programmer.json
4+
d2058bd047622e6310f8525ab232550d6ef1fd58 assets/botjs/items/basic_mcu.json
5+
04ad07ff81592fce64ba95cba933d0372d08af19 assets/botjs/items/bio_sensor_module.json
6+
e4c7af584b627e984db64d5569f562f02bef13d1 assets/botjs/items/firmware_programmer.json
7+
d39b597cdbac588c57804fe825070d5a5b1bc297 assets/botjs/items/log_downloader.json
8+
261aa1602ba52b08f9d0133ea31fc1bf8055e88d assets/botjs/items/script.json
9+
234889b6a17d896b5936683892773ce3582b24c8 assets/botjs/items/switch.json
10+
98f27859e66453c86d9a4fe21f50ae48c95becb2 assets/botjs/items/wrench.json
11+
1105d15e1477343239e0b6ca3725c9f895acd922 assets/botjs/models/block/bot_assembler.json
12+
6eefb087d8abc8319199af73c8c65f22dc0ed20b assets/botjs/models/block/firmware_programmer.json
13+
9b7a39944acd3c36bfa86c31046f259d3ed6eb54 assets/botjs/models/item/basic_mcu.json
14+
47a8a65399efe8ec71d5730911eb4ffb546db501 assets/botjs/models/item/bio_sensor_module.json
15+
e1a4e8f0946b86726fd0406f8ec8a58585d97572 assets/botjs/models/item/log_downloader.json
16+
104fdb17f8b78a69ade583ebffd08adc67f75a70 assets/botjs/models/item/script.json
17+
800549bf0f0ab48fcec0899ed809b920263ee827 assets/botjs/models/item/switch.json
18+
0f0d9a05592aba769254401ca33745b0606fbe2c assets/botjs/models/item/wrench.json
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"variants": {
3+
"": {
4+
"model": "botjs:block/bot_assembler"
5+
}
6+
}
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"variants": {
3+
"": {
4+
"model": "botjs:block/firmware_programmer"
5+
}
6+
}
7+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"model": {
3+
"type": "minecraft:model",
4+
"model": "botjs:item/basic_mcu"
5+
}
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"model": {
3+
"type": "minecraft:model",
4+
"model": "botjs:item/bio_sensor_module"
5+
}
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"model": {
3+
"type": "minecraft:model",
4+
"model": "botjs:block/firmware_programmer"
5+
}
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"model": {
3+
"type": "minecraft:model",
4+
"model": "botjs:item/log_downloader"
5+
}
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"model": {
3+
"type": "minecraft:model",
4+
"model": "botjs:item/script"
5+
}
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"model": {
3+
"type": "minecraft:model",
4+
"model": "botjs:item/switch"
5+
}
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"model": {
3+
"type": "minecraft:model",
4+
"model": "botjs:item/wrench"
5+
}
6+
}
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
{
22
"block.botjs.firmware_programmer": "Firmware Programmer",
3+
"botjs.networking.failed": "Network failed due to: %1$s",
34
"entity.botjs.bot": "Bot",
45
"item.botjs.basic_mcu": "Basic Mcu",
56
"item.botjs.bio_sensor_module": "Bio Sensor Module",
67
"item.botjs.log_downloader": "Log Downloader",
8+
"item.botjs.script": "Script",
79
"item.botjs.switch": "Switch",
810
"item.botjs.wrench": "Wrench",
911
"item_group.botjs": "BotJS",
10-
"menu.botjs.firmware_programmer.flash": "Flash",
11-
"menu.botjs.firmware_programmer.flash_result.nothing_to_flash": "No MCU found in input slot!",
12-
"menu.botjs.firmware_programmer.flash_result.output_occupied": "Output slot is occupied!",
12+
"menu.botjs.firmware_programmer.flash.error": "Compile error: %1$s",
13+
"menu.botjs.firmware_programmer.flash.nothing_to_flash": "No MCU found in MCU slot!",
14+
"menu.botjs.firmware_programmer.flash.success": "Flush success",
1315
"menu.botjs.firmware_programmer.script_here": "Script Here...",
14-
"menu.botjs.firmware_programmer.title": "Firmware Programmer",
15-
"toast.botjs.flash_failed": "Failed to flash the MCU!"
16+
"menu.botjs.firmware_programmer.title": "Firmware Programmer"
1617
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"parent": "minecraft:block/cube_all",
3+
"textures": {
4+
"all": "botjs:block/bot_assembler"
5+
}
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"parent": "minecraft:block/cube_all",
3+
"textures": {
4+
"all": "botjs:block/firmware_programmer"
5+
}
6+
}

src/generated/resources/assets/botjs/models/item/basic_mcu.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"parent": "minecraft:item/handheld",
2+
"parent": "minecraft:item/generated",
33
"textures": {
44
"layer0": "botjs:item/basic_mcu"
55
}

src/generated/resources/assets/botjs/models/item/bio_sensor_module.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"parent": "minecraft:item/handheld",
2+
"parent": "minecraft:item/generated",
33
"textures": {
44
"layer0": "botjs:item/bio_sensor_module"
55
}

src/generated/resources/assets/botjs/models/item/log_downloader.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"parent": "minecraft:item/handheld",
2+
"parent": "minecraft:item/generated",
33
"textures": {
44
"layer0": "botjs:item/log_downloader"
55
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"parent": "minecraft:item/generated",
3+
"textures": {
4+
"layer0": "botjs:item/script"
5+
}
6+
}

src/main/kotlin/com/sifsstudio/botjs/BotJS.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.sifsstudio.botjs.blockentity.BlockEntities
55
import com.sifsstudio.botjs.entity.Entities
66
import com.sifsstudio.botjs.inventory.MenuTypes
77
import com.sifsstudio.botjs.item.Items
8+
import com.sifsstudio.botjs.item.component.DataComponents
89
import com.sifsstudio.botjs.runtime.threading.onServerStarting
910
import com.sifsstudio.botjs.runtime.threading.onServerStopped
1011
import net.minecraft.core.registries.Registries
@@ -41,6 +42,7 @@ object BotJS {
4142
init {
4243
CREATIVE_TABS.register(MOD_BUS)
4344
Items.REGISTRY.register(MOD_BUS)
45+
DataComponents.REGISTRY.register(MOD_BUS)
4446
Blocks.REGISTRY.register(MOD_BUS)
4547
Entities.REGISTRY.register(MOD_BUS)
4648
BlockEntities.REGISTRY.register(MOD_BUS)

src/main/kotlin/com/sifsstudio/botjs/block/FirmwareProgrammer.kt

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@ import net.minecraft.world.InteractionResult
1010
import net.minecraft.world.MenuProvider
1111
import net.minecraft.world.SimpleMenuProvider
1212
import net.minecraft.world.entity.player.Player
13+
import net.minecraft.world.inventory.ContainerLevelAccess
1314
import net.minecraft.world.level.Level
1415
import net.minecraft.world.level.block.BaseEntityBlock
1516
import net.minecraft.world.level.block.state.BlockState
1617
import net.minecraft.world.phys.BlockHitResult
18+
import java.util.UUID
1719

1820
class FirmwareProgrammer(properties: Properties) : BaseEntityBlock(properties) {
1921
companion object {
@@ -32,10 +34,10 @@ class FirmwareProgrammer(properties: Properties) : BaseEntityBlock(properties) {
3234
FirmwareProgrammerMenu(
3335
pContainerId,
3436
pPlayerInventory,
35-
pPos,
37+
ContainerLevelAccess.create(pLevel, pPos),
38+
UUID(0, 0), // you never need it on server :D
3639
blockEntity.script,
37-
blockEntity.mcuIn,
38-
blockEntity.mcuOut
40+
blockEntity.mcu,
3941
)
4042
}, Component.translatable("menu.botjs.firmware_programmer.title"))
4143

@@ -50,11 +52,13 @@ class FirmwareProgrammer(properties: Properties) : BaseEntityBlock(properties) {
5052
): InteractionResult {
5153
if (!pLevel.isClientSide && pPlayer is ServerPlayer) {
5254
pState.getMenuProvider(pLevel, pPos)?.let { menu ->
53-
pPlayer.openMenu(menu) {
54-
it.writeBlockPos(pPos)
55-
pLevel.getBlockEntity(pPos)?.let { blockEntity ->
56-
if (blockEntity is FirmwareProgrammerBlockEntity) {
57-
it.writeUtf(blockEntity.script)
55+
pLevel.getBlockEntity(pPos)?.let { blockEntity ->
56+
if (blockEntity is FirmwareProgrammerBlockEntity) {
57+
pPlayer.openMenu(menu) {
58+
it.writeBlockPos(pPos)
59+
val session = UUID.randomUUID()
60+
it.writeUUID(session)
61+
blockEntity.currentSession = session
5862
}
5963
}
6064
}

src/main/kotlin/com/sifsstudio/botjs/blockentity/BaseBlockEntity.kt

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,13 @@ import net.minecraft.nbt.CompoundTag
66
import net.minecraft.network.protocol.Packet
77
import net.minecraft.network.protocol.game.ClientGamePacketListener
88
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket
9-
import net.minecraft.server.level.ServerLevel
9+
import net.minecraft.world.level.block.Block
1010
import net.minecraft.world.level.block.entity.BlockEntity
1111
import net.minecraft.world.level.block.entity.BlockEntityType
1212
import net.minecraft.world.level.block.state.BlockState
1313

1414
/**
1515
* Sync data from server to client using ```BlockEntity.getUpdatePacket()```
16-
*
17-
* How can you write such shit code Mojang?
18-
* What the fuck???
1916
*/
2017
abstract class BaseBlockEntity(
2118
pType: BlockEntityType<*>,
@@ -26,20 +23,14 @@ abstract class BaseBlockEntity(
2623

2724
override fun getUpdatePacket(): Packet<ClientGamePacketListener> = ClientboundBlockEntityDataPacket.create(this)
2825

29-
abstract override fun getUpdateTag(pRegistries: HolderLookup.Provider): CompoundTag
30-
31-
abstract override fun handleUpdateTag(tag: CompoundTag, lookupProvider: HolderLookup.Provider)
32-
33-
fun sync() {
34-
val lvl = level
35-
if (lvl !is ServerLevel || !sync) {
36-
return
37-
}
38-
lvl.chunkSource.blockChanged(blockPos)
26+
override fun getUpdateTag(pRegistries: HolderLookup.Provider): CompoundTag = super.getUpdateTag(pRegistries).apply {
27+
saveAdditional(this, pRegistries)
3928
}
4029

41-
fun setChangedAndSync() {
30+
fun syncChange() {
4231
setChanged()
43-
sync()
32+
if (sync) {
33+
this.level?.sendBlockUpdated(blockPos, blockState, blockState, Block.UPDATE_NEIGHBORS or Block.UPDATE_CLIENTS)
34+
}
4435
}
4536
}

0 commit comments

Comments
 (0)