Skip to content

Commit 81db64e

Browse files
committed
close sign screen when printing signs
1 parent 4e34ba6 commit 81db64e

2 files changed

Lines changed: 45 additions & 14 deletions

File tree

src/main/kotlin/com/lambda/interaction/managers/interacting/InteractManager.kt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import com.lambda.context.Automated
2121
import com.lambda.context.AutomatedSafeContext
2222
import com.lambda.context.SafeContext
2323
import com.lambda.event.events.ConnectionEvent
24+
import com.lambda.event.events.GuiEvent
2425
import com.lambda.event.events.MovementEvent
2526
import com.lambda.event.events.TickEvent
2627
import com.lambda.event.listener.SafeListener.Companion.listen
@@ -41,13 +42,18 @@ import com.lambda.interaction.managers.interacting.InteractedBlockHandler.pendin
4142
import com.lambda.interaction.managers.interacting.InteractedBlockHandler.setPendingConfigs
4243
import com.lambda.interaction.managers.interacting.InteractedBlockHandler.startPending
4344
import com.lambda.interaction.managers.inventory.InventoryRequest.Companion.inventoryRequest
45+
import com.lambda.module.modules.world.AutoSign.signWriteDelay
46+
import com.lambda.threading.runConcurrent
4447
import com.lambda.threading.runSafeAutomated
48+
import com.lambda.threading.runSafeGameScheduled
4549
import com.lambda.util.BlockUtils.blockState
4650
import com.lambda.util.item.ItemUtils.blockItem
4751
import com.lambda.util.player.MovementUtils.sneaking
4852
import com.lambda.util.player.gamemode
4953
import com.lambda.util.player.isItemOnCooldown
5054
import com.lambda.util.player.swingHand
55+
import kotlinx.coroutines.delay
56+
import net.minecraft.block.AbstractSignBlock
5157
import net.minecraft.block.BlockState
5258
import net.minecraft.block.pattern.CachedBlockPosition
5359
import net.minecraft.client.network.ClientPlayerEntity
@@ -56,6 +62,7 @@ import net.minecraft.item.ItemPlacementContext
5662
import net.minecraft.item.ItemStack
5763
import net.minecraft.item.ItemUsageContext
5864
import net.minecraft.network.packet.c2s.play.PlayerInteractBlockC2SPacket
65+
import net.minecraft.network.packet.c2s.play.UpdateSignC2SPacket
5966
import net.minecraft.sound.SoundCategory
6067
import net.minecraft.util.ActionResult
6168
import net.minecraft.util.ActionResult.PassToDefaultBlockAction
@@ -81,6 +88,8 @@ object InteractManager : Manager<InteractRequest>(
8188
override val blockedPositions
8289
get() = pendingActions.map { it.context.blockPos }
8390

91+
private var cancellingSignScreens = 0
92+
8493
override fun load(): String {
8594
super.load()
8695

@@ -104,6 +113,13 @@ object InteractManager : Manager<InteractRequest>(
104113
interactCooldown = 0
105114
}
106115

116+
listen<GuiEvent.SignEditorOpen> { event ->
117+
if (cancellingSignScreens > 0) {
118+
event.cancel()
119+
cancellingSignScreens--
120+
}
121+
}
122+
107123
return "Loaded Place Manager"
108124
}
109125

@@ -193,6 +209,18 @@ object InteractManager : Manager<InteractRequest>(
193209
mc.gameRenderer.firstPersonRenderer.resetEquipProgress(Hand.MAIN_HAND)
194210
}
195211
}
212+
val expectedState = ctx.expectedState
213+
if (ctx.preProcessingInfo.placing && expectedState.block is AbstractSignBlock) {
214+
cancellingSignScreens++
215+
runConcurrent {
216+
delay(signWriteDelay)
217+
runSafeGameScheduled {
218+
connection.sendPacket(
219+
UpdateSignC2SPacket(ctx.blockPos, true, "", "", "", "")
220+
)
221+
}
222+
}
223+
}
196224
}
197225
val interactDelay = ctx.interactConfig.interactDelay
198226
interactCooldown = if (interactDelay == 0) 0 else interactDelay + 1

src/main/kotlin/com/lambda/module/modules/world/AutoSign.kt

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,14 @@ object AutoSign : Module(
5050
""".trimMargin(),
5151
tag = ModuleTag.WORLD
5252
) {
53-
var autoWrite by setting("Auto Write", true)
54-
var line1 by setting("Line 1", "Welcome to Lambda!") { autoWrite }
55-
var line2 by setting("Line 2", "Enjoy your stay.") { autoWrite }
56-
var line3 by setting("Line 3", "Have fun!") { autoWrite }
57-
var line4 by setting("Line 4", "Lambda <dd>/<M>/<yy>") { autoWrite }
58-
var writeOnFront by setting("Write Front", true, description = "Write on front side of the sign") { autoWrite }
53+
private var autoWrite by setting("Auto Write", true)
54+
private var line1 by setting("Line 1", "Welcome to Lambda!") { autoWrite }
55+
private var line2 by setting("Line 2", "Enjoy your stay.") { autoWrite }
56+
private var line3 by setting("Line 3", "Have fun!") { autoWrite }
57+
private var line4 by setting("Line 4", "Lambda <dd>/<M>/<yy>") { autoWrite }
58+
private var writeOnFront by setting("Write Front", true, description = "Write on front side of the sign") { autoWrite }
5959

60-
var autoClose by setting("Auto Close", true)
60+
private var autoClose by setting("Auto Close", true)
6161
var signWriteDelay by setting("Sign Write Delay", 400L, 100L..1000L, 50L, description = "Delay in milliseconds before sending the sign text to the server") { autoClose }
6262

6363
init {
@@ -68,7 +68,7 @@ object AutoSign : Module(
6868
val calendar = Calendar.getInstance()
6969
val month = calendar.get(Calendar.MONTH) + 1 // Months are 0-based in Calendar
7070

71-
for (i in 0 until 4) {
71+
(0 until 4).forEach { i ->
7272
val formattedLine = formatLines[i]
7373
.replace("<dd>", String.format($$"%1$td", Date()))
7474
.replace("<d>", String.format($$"%1$te", Date()))
@@ -88,20 +88,23 @@ object AutoSign : Module(
8888

8989
var editor: AbstractSignEditScreen = if (event.sign is HangingSignBlockEntity) HangingSignEditScreen(event.sign, event.front, mc.shouldFilterText())
9090
else SignEditScreen(event.sign, event.front, mc.shouldFilterText())
91-
for (i in 0 until 4) editor.messages[i] = lines[i]
91+
(0 until 4).forEach { i -> editor.messages[i] = lines[i] }
9292
if (autoClose) {
9393
val pos = event.sign.pos
9494
val messages = editor.messages.copyOf()
9595
runConcurrent {
9696
delay(signWriteDelay)
9797
runSafeGameScheduled {
98-
if (writeOnFront) connection.sendPacket(UpdateSignC2SPacket(pos, true, messages[0], messages[1], messages[2], messages[3]))
99-
else connection.sendPacket(UpdateSignC2SPacket(pos, false, messages[0], messages[1], messages[2], messages[3]))
98+
connection.sendPacket(
99+
UpdateSignC2SPacket(
100+
pos,
101+
writeOnFront,
102+
messages[0], messages[1], messages[2], messages[3]
103+
)
104+
)
100105
}
101106
}
102-
} else {
103-
mc.setScreen(editor)
104-
}
107+
} else mc.setScreen(editor)
105108
event.cancel()
106109
}
107110
}

0 commit comments

Comments
 (0)