mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-19 04:15:14 -04:00
outsource container actions from container
This commit is contained in:
parent
493f1acf7d
commit
a446472b67
@ -33,7 +33,7 @@ class CloneContainerActionTest {
|
|||||||
fun testEmpty() {
|
fun testEmpty() {
|
||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container.invokeAction(CloneContainerAction(0))
|
container.actions.invoke(CloneContainerAction(0))
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
connection.assertNoPacket()
|
connection.assertNoPacket()
|
||||||
}
|
}
|
||||||
@ -42,7 +42,7 @@ class CloneContainerActionTest {
|
|||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container.floatingItem = ItemStack(EggTestO.item, count = 7)
|
container.floatingItem = ItemStack(EggTestO.item, count = 7)
|
||||||
container.invokeAction(CloneContainerAction(6))
|
container.actions.invoke(CloneContainerAction(6))
|
||||||
assertEquals(container.floatingItem, ItemStack(EggTestO.item, count = 7))
|
assertEquals(container.floatingItem, ItemStack(EggTestO.item, count = 7))
|
||||||
assertNull(container[6])
|
assertNull(container[6])
|
||||||
connection.assertNoPacket()
|
connection.assertNoPacket()
|
||||||
@ -53,7 +53,7 @@ class CloneContainerActionTest {
|
|||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container[6] = ItemStack(AppleTestO.item, count = 7)
|
container[6] = ItemStack(AppleTestO.item, count = 7)
|
||||||
container.floatingItem = ItemStack(EggTestO.item, count = 7)
|
container.floatingItem = ItemStack(EggTestO.item, count = 7)
|
||||||
container.invokeAction(CloneContainerAction(6))
|
container.actions.invoke(CloneContainerAction(6))
|
||||||
assertEquals(container.floatingItem, ItemStack(EggTestO.item, count = 7))
|
assertEquals(container.floatingItem, ItemStack(EggTestO.item, count = 7))
|
||||||
assertEquals(container[6], ItemStack(AppleTestO.item, count = 7))
|
assertEquals(container[6], ItemStack(AppleTestO.item, count = 7))
|
||||||
connection.assertNoPacket()
|
connection.assertNoPacket()
|
||||||
@ -63,7 +63,7 @@ class CloneContainerActionTest {
|
|||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container[1] = ItemStack(AppleTestO.item)
|
container[1] = ItemStack(AppleTestO.item)
|
||||||
container.invokeAction(CloneContainerAction(1))
|
container.actions.invoke(CloneContainerAction(1))
|
||||||
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 64))
|
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 64))
|
||||||
// TODO: Not sending any packet in 1.18.2?
|
// TODO: Not sending any packet in 1.18.2?
|
||||||
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 1, 3, 0, 0, slotsOf(), ItemStack(AppleTestO.item, count = 64)))
|
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 1, 3, 0, 0, slotsOf(), ItemStack(AppleTestO.item, count = 64)))
|
||||||
@ -73,7 +73,7 @@ class CloneContainerActionTest {
|
|||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container[3] = ItemStack(AppleTestO.item, count = 8)
|
container[3] = ItemStack(AppleTestO.item, count = 8)
|
||||||
container.invokeAction(CloneContainerAction(3))
|
container.actions.invoke(CloneContainerAction(3))
|
||||||
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 64))
|
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 64))
|
||||||
// TODO: Not sending any packet in 1.18.2?
|
// TODO: Not sending any packet in 1.18.2?
|
||||||
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 3, 3, 0, 0, slotsOf(), ItemStack(AppleTestO.item, count = 64)))
|
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 3, 3, 0, 0, slotsOf(), ItemStack(AppleTestO.item, count = 64)))
|
||||||
@ -83,7 +83,7 @@ class CloneContainerActionTest {
|
|||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container[8] = ItemStack(EggTestO.item, count = 9)
|
container[8] = ItemStack(EggTestO.item, count = 9)
|
||||||
container.invokeAction(CloneContainerAction(8))
|
container.actions.invoke(CloneContainerAction(8))
|
||||||
assertEquals(container.floatingItem, ItemStack(EggTestO.item, count = 16))
|
assertEquals(container.floatingItem, ItemStack(EggTestO.item, count = 16))
|
||||||
// TODO: Not sending any packet in 1.18.2?
|
// TODO: Not sending any packet in 1.18.2?
|
||||||
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 8, 3, 0, 0, slotsOf(), ItemStack(EggTestO.item, count = 16)))
|
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 8, 3, 0, 0, slotsOf(), ItemStack(EggTestO.item, count = 16)))
|
||||||
@ -94,9 +94,9 @@ class CloneContainerActionTest {
|
|||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container[8] = ItemStack(EggTestO.item, count = 9)
|
container[8] = ItemStack(EggTestO.item, count = 9)
|
||||||
val action = CloneContainerAction(8)
|
val action = CloneContainerAction(8)
|
||||||
container.invokeAction(action)
|
container.actions.invoke(action)
|
||||||
assertEquals(container.floatingItem, ItemStack(EggTestO.item, count = 16))
|
assertEquals(container.floatingItem, ItemStack(EggTestO.item, count = 16))
|
||||||
container.revertAction(action)
|
container.actions.revert(action)
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ class DropContainerActionTest {
|
|||||||
fun dropEmptySingle() {
|
fun dropEmptySingle() {
|
||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container.invokeAction(DropContainerAction(7, false))
|
container.actions.invoke(DropContainerAction(7, false))
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
connection.assertNoPacket()
|
connection.assertNoPacket()
|
||||||
}
|
}
|
||||||
@ -41,7 +41,7 @@ class DropContainerActionTest {
|
|||||||
fun dropEmptyStack() {
|
fun dropEmptyStack() {
|
||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container.invokeAction(DropContainerAction(9, true))
|
container.actions.invoke(DropContainerAction(9, true))
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
connection.assertNoPacket()
|
connection.assertNoPacket()
|
||||||
}
|
}
|
||||||
@ -50,7 +50,7 @@ class DropContainerActionTest {
|
|||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container[9] = ItemStack(AppleTestO.item, count = 8)
|
container[9] = ItemStack(AppleTestO.item, count = 8)
|
||||||
container.invokeAction(DropContainerAction(9, false))
|
container.actions.invoke(DropContainerAction(9, false))
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
assertEquals(container[9], ItemStack(AppleTestO.item, count = 7))
|
assertEquals(container[9], ItemStack(AppleTestO.item, count = 7))
|
||||||
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 9, 4, 0, 0, slotsOf(9 to ItemStack(AppleTestO.item, count = 7)), null))
|
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 9, 4, 0, 0, slotsOf(9 to ItemStack(AppleTestO.item, count = 7)), null))
|
||||||
@ -60,7 +60,7 @@ class DropContainerActionTest {
|
|||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container[9] = ItemStack(AppleTestO.item, count = 1)
|
container[9] = ItemStack(AppleTestO.item, count = 1)
|
||||||
container.invokeAction(DropContainerAction(9, false))
|
container.actions.invoke(DropContainerAction(9, false))
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
assertEquals(container[9], null)
|
assertEquals(container[9], null)
|
||||||
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 9, 4, 0, 0, slotsOf(9 to null), null))
|
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 9, 4, 0, 0, slotsOf(9 to null), null))
|
||||||
@ -70,7 +70,7 @@ class DropContainerActionTest {
|
|||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container[9] = ItemStack(AppleTestO.item, count = 12)
|
container[9] = ItemStack(AppleTestO.item, count = 12)
|
||||||
container.invokeAction(DropContainerAction(9, true))
|
container.actions.invoke(DropContainerAction(9, true))
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
assertEquals(container[9], null)
|
assertEquals(container[9], null)
|
||||||
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 9, 4, 1, 0, slotsOf(9 to null), null))
|
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 9, 4, 1, 0, slotsOf(9 to null), null))
|
||||||
@ -81,8 +81,8 @@ class DropContainerActionTest {
|
|||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container[8] = ItemStack(EggTestO.item, count = 9)
|
container[8] = ItemStack(EggTestO.item, count = 9)
|
||||||
val action = DropContainerAction(8, false)
|
val action = DropContainerAction(8, false)
|
||||||
container.invokeAction(action)
|
container.actions.invoke(action)
|
||||||
container.revertAction(action)
|
container.actions.revert(action)
|
||||||
assertEquals(container[8], ItemStack(EggTestO.item, count = 9))
|
assertEquals(container[8], ItemStack(EggTestO.item, count = 9))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,8 +91,8 @@ class DropContainerActionTest {
|
|||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container[8] = ItemStack(EggTestO.item, count = 9)
|
container[8] = ItemStack(EggTestO.item, count = 9)
|
||||||
val action = DropContainerAction(8, true)
|
val action = DropContainerAction(8, true)
|
||||||
container.invokeAction(action)
|
container.actions.invoke(action)
|
||||||
container.revertAction(action)
|
container.actions.revert(action)
|
||||||
assertEquals(container[8], ItemStack(EggTestO.item, count = 9))
|
assertEquals(container[8], ItemStack(EggTestO.item, count = 9))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ class FastMoveContainerActionTest {
|
|||||||
fun empty() {
|
fun empty() {
|
||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createChest(connection)
|
val container = createChest(connection)
|
||||||
container.invokeAction(FastMoveContainerAction(0))
|
container.actions.invoke(FastMoveContainerAction(0))
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
assertEquals(container.slots, slotsOf())
|
assertEquals(container.slots, slotsOf())
|
||||||
connection.assertNoPacket()
|
connection.assertNoPacket()
|
||||||
@ -46,7 +46,7 @@ class FastMoveContainerActionTest {
|
|||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createChest(connection)
|
val container = createChest(connection)
|
||||||
container[54] = ItemStack(AppleTestO.item, 9)
|
container[54] = ItemStack(AppleTestO.item, 9)
|
||||||
container.invokeAction(FastMoveContainerAction(54))
|
container.actions.invoke(FastMoveContainerAction(54))
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
assertEquals(container.slots, slotsOf(0 to ItemStack(AppleTestO.item, 9)))
|
assertEquals(container.slots, slotsOf(0 to ItemStack(AppleTestO.item, 9)))
|
||||||
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 54, 1, 0, 0, slotsOf(54 to null, 0 to ItemStack(AppleTestO.item, count = 9)), null))
|
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 54, 1, 0, 0, slotsOf(54 to null, 0 to ItemStack(AppleTestO.item, count = 9)), null))
|
||||||
@ -56,7 +56,7 @@ class FastMoveContainerActionTest {
|
|||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createChest(connection)
|
val container = createChest(connection)
|
||||||
container[0] = ItemStack(AppleTestO.item, 9)
|
container[0] = ItemStack(AppleTestO.item, 9)
|
||||||
container.invokeAction(FastMoveContainerAction(0))
|
container.actions.invoke(FastMoveContainerAction(0))
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
assertEquals(container.slots, slotsOf(62 to ItemStack(AppleTestO.item, 9)))
|
assertEquals(container.slots, slotsOf(62 to ItemStack(AppleTestO.item, 9)))
|
||||||
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 0, 1, 0, 0, slotsOf(0 to null, 62 to ItemStack(AppleTestO.item, count = 9)), null))
|
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 0, 1, 0, 0, slotsOf(0 to null, 62 to ItemStack(AppleTestO.item, count = 9)), null))
|
||||||
@ -78,7 +78,7 @@ class FastMoveContainerActionTest {
|
|||||||
|
|
||||||
container[0] = ItemStack(AppleTestO.item, 9)
|
container[0] = ItemStack(AppleTestO.item, 9)
|
||||||
|
|
||||||
container.invokeAction(FastMoveContainerAction(0))
|
container.actions.invoke(FastMoveContainerAction(0))
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
assertNull(container[0])
|
assertNull(container[0])
|
||||||
assertEquals(container[53], ItemStack(AppleTestO.item, 9))
|
assertEquals(container[53], ItemStack(AppleTestO.item, 9))
|
||||||
@ -97,7 +97,7 @@ class FastMoveContainerActionTest {
|
|||||||
|
|
||||||
container[0] = ItemStack(CoalTest0.item, 63)
|
container[0] = ItemStack(CoalTest0.item, 63)
|
||||||
|
|
||||||
container.invokeAction(FastMoveContainerAction(0))
|
container.actions.invoke(FastMoveContainerAction(0))
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
assertEquals(
|
assertEquals(
|
||||||
container.slots, slotsOf(
|
container.slots, slotsOf(
|
||||||
@ -121,7 +121,7 @@ class FastMoveContainerActionTest {
|
|||||||
|
|
||||||
container[30] = ItemStack(EggTestO.item, 12)
|
container[30] = ItemStack(EggTestO.item, 12)
|
||||||
|
|
||||||
container.invokeAction(FastMoveContainerAction(30))
|
container.actions.invoke(FastMoveContainerAction(30))
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
assertEquals(container.slots, slotsOf(3 to ItemStack(EggTestO.item, 12)))
|
assertEquals(container.slots, slotsOf(3 to ItemStack(EggTestO.item, 12)))
|
||||||
|
|
||||||
@ -134,7 +134,7 @@ class FastMoveContainerActionTest {
|
|||||||
|
|
||||||
container[30] = ItemStack(CoalTest0.item, 12)
|
container[30] = ItemStack(CoalTest0.item, 12)
|
||||||
|
|
||||||
container.invokeAction(FastMoveContainerAction(30))
|
container.actions.invoke(FastMoveContainerAction(30))
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
assertEquals(container.slots, slotsOf(1 to ItemStack(CoalTest0.item, 12)))
|
assertEquals(container.slots, slotsOf(1 to ItemStack(CoalTest0.item, 12)))
|
||||||
|
|
||||||
@ -146,7 +146,7 @@ class FastMoveContainerActionTest {
|
|||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createInventory(connection)
|
val container = createInventory(connection)
|
||||||
container[9] = ItemStack(AppleTestO.item)
|
container[9] = ItemStack(AppleTestO.item)
|
||||||
container.invokeAction(FastMoveContainerAction(9))
|
container.actions.invoke(FastMoveContainerAction(9))
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
assertEquals(container.slots, slotsOf(36 to ItemStack(AppleTestO.item)))
|
assertEquals(container.slots, slotsOf(36 to ItemStack(AppleTestO.item)))
|
||||||
}
|
}
|
||||||
@ -155,7 +155,7 @@ class FastMoveContainerActionTest {
|
|||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createInventory(connection)
|
val container = createInventory(connection)
|
||||||
container[1] = ItemStack(AppleTestO.item)
|
container[1] = ItemStack(AppleTestO.item)
|
||||||
container.invokeAction(FastMoveContainerAction(1))
|
container.actions.invoke(FastMoveContainerAction(1))
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
assertEquals(container.slots, slotsOf(9 to ItemStack(AppleTestO.item)))
|
assertEquals(container.slots, slotsOf(9 to ItemStack(AppleTestO.item)))
|
||||||
}
|
}
|
||||||
@ -164,7 +164,7 @@ class FastMoveContainerActionTest {
|
|||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createInventory(connection)
|
val container = createInventory(connection)
|
||||||
container[36] = ItemStack(AppleTestO.item)
|
container[36] = ItemStack(AppleTestO.item)
|
||||||
container.invokeAction(FastMoveContainerAction(36))
|
container.actions.invoke(FastMoveContainerAction(36))
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
assertEquals(container.slots, slotsOf(9 to ItemStack(AppleTestO.item)))
|
assertEquals(container.slots, slotsOf(9 to ItemStack(AppleTestO.item)))
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ class PickAllContainerActionTest {
|
|||||||
fun testEmpty() {
|
fun testEmpty() {
|
||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container.invokeAction(PickAllContainerAction(0))
|
container.actions.invoke(PickAllContainerAction(0))
|
||||||
assertEquals(container.slots, slotsOf())
|
assertEquals(container.slots, slotsOf())
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
connection.assertNoPacket()
|
connection.assertNoPacket()
|
||||||
@ -43,7 +43,7 @@ class PickAllContainerActionTest {
|
|||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container.floatingItem = ItemStack(EggTestO.item, count = 7)
|
container.floatingItem = ItemStack(EggTestO.item, count = 7)
|
||||||
container.invokeAction(PickAllContainerAction(6))
|
container.actions.invoke(PickAllContainerAction(6))
|
||||||
assertEquals(container.slots, slotsOf())
|
assertEquals(container.slots, slotsOf())
|
||||||
// connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 0, 6, 0, 0, slotsOf(), ItemStack(EggTestO.item, count = 7)))
|
// connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 0, 6, 0, 0, slotsOf(), ItemStack(EggTestO.item, count = 7)))
|
||||||
}
|
}
|
||||||
@ -53,7 +53,7 @@ class PickAllContainerActionTest {
|
|||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container.floatingItem = ItemStack(AppleTestO.item, 1)
|
container.floatingItem = ItemStack(AppleTestO.item, 1)
|
||||||
container[1] = ItemStack(AppleTestO.item, 2)
|
container[1] = ItemStack(AppleTestO.item, 2)
|
||||||
container.invokeAction(PickAllContainerAction(0))
|
container.actions.invoke(PickAllContainerAction(0))
|
||||||
assertEquals(container.slots, slotsOf())
|
assertEquals(container.slots, slotsOf())
|
||||||
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 3))
|
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 3))
|
||||||
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 0, 6, 0, 0, slotsOf(1 to null), ItemStack(AppleTestO.item, count = 3)))
|
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 0, 6, 0, 0, slotsOf(1 to null), ItemStack(AppleTestO.item, count = 3)))
|
||||||
@ -65,7 +65,7 @@ class PickAllContainerActionTest {
|
|||||||
container.floatingItem = ItemStack(AppleTestO.item, 1)
|
container.floatingItem = ItemStack(AppleTestO.item, 1)
|
||||||
container[1] = ItemStack(EggTestO.item, 1)
|
container[1] = ItemStack(EggTestO.item, 1)
|
||||||
container[2] = ItemStack(AppleTestO.item, 2)
|
container[2] = ItemStack(AppleTestO.item, 2)
|
||||||
container.invokeAction(PickAllContainerAction(0))
|
container.actions.invoke(PickAllContainerAction(0))
|
||||||
|
|
||||||
assertEquals(container.slots, slotsOf(1 to ItemStack(EggTestO.item, 1)))
|
assertEquals(container.slots, slotsOf(1 to ItemStack(EggTestO.item, 1)))
|
||||||
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 3))
|
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 3))
|
||||||
@ -77,7 +77,7 @@ class PickAllContainerActionTest {
|
|||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container.floatingItem = ItemStack(AppleTestO.item, 64)
|
container.floatingItem = ItemStack(AppleTestO.item, 64)
|
||||||
container[5] = ItemStack(AppleTestO.item, 2)
|
container[5] = ItemStack(AppleTestO.item, 2)
|
||||||
container.invokeAction(PickAllContainerAction(0))
|
container.actions.invoke(PickAllContainerAction(0))
|
||||||
assertEquals(container.slots, slotsOf(5 to ItemStack(AppleTestO.item, 2)))
|
assertEquals(container.slots, slotsOf(5 to ItemStack(AppleTestO.item, 2)))
|
||||||
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 64))
|
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 64))
|
||||||
connection.assertNoPacket()
|
connection.assertNoPacket()
|
||||||
@ -88,7 +88,7 @@ class PickAllContainerActionTest {
|
|||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container[0] = ItemStack(AppleTestO.item, 63)
|
container[0] = ItemStack(AppleTestO.item, 63)
|
||||||
container.floatingItem = ItemStack(AppleTestO.item, 3)
|
container.floatingItem = ItemStack(AppleTestO.item, 3)
|
||||||
container.invokeAction(PickAllContainerAction(5))
|
container.actions.invoke(PickAllContainerAction(5))
|
||||||
assertEquals(container.slots, slotsOf(0 to ItemStack(AppleTestO.item, 2)))
|
assertEquals(container.slots, slotsOf(0 to ItemStack(AppleTestO.item, 2)))
|
||||||
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 64))
|
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 64))
|
||||||
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 5, 6, 0, 0, slotsOf(0 to ItemStack(AppleTestO.item, count = 2)), ItemStack(AppleTestO.item, count = 64)))
|
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 5, 6, 0, 0, slotsOf(0 to ItemStack(AppleTestO.item, count = 2)), ItemStack(AppleTestO.item, count = 64)))
|
||||||
@ -101,10 +101,10 @@ class PickAllContainerActionTest {
|
|||||||
container[0] = ItemStack(AppleTestO.item, 7)
|
container[0] = ItemStack(AppleTestO.item, 7)
|
||||||
container.floatingItem = ItemStack(AppleTestO.item, 9)
|
container.floatingItem = ItemStack(AppleTestO.item, 9)
|
||||||
val action = PickAllContainerAction(1)
|
val action = PickAllContainerAction(1)
|
||||||
container.invokeAction(action)
|
container.actions.invoke(action)
|
||||||
assertEquals(container.slots, slotsOf())
|
assertEquals(container.slots, slotsOf())
|
||||||
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 16))
|
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 16))
|
||||||
container.revertAction(action)
|
container.actions.revert(action)
|
||||||
assertEquals(container.slots, slotsOf(0 to ItemStack(AppleTestO.item, 7)))
|
assertEquals(container.slots, slotsOf(0 to ItemStack(AppleTestO.item, 7)))
|
||||||
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 9))
|
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 9))
|
||||||
}
|
}
|
||||||
@ -117,11 +117,11 @@ class PickAllContainerActionTest {
|
|||||||
container[1] = ItemStack(AppleTestO.item, 8)
|
container[1] = ItemStack(AppleTestO.item, 8)
|
||||||
container.floatingItem = ItemStack(AppleTestO.item, 4)
|
container.floatingItem = ItemStack(AppleTestO.item, 4)
|
||||||
val action = PickAllContainerAction(2)
|
val action = PickAllContainerAction(2)
|
||||||
container.invokeAction(action)
|
container.actions.invoke(action)
|
||||||
assertNull(container[0])
|
assertNull(container[0])
|
||||||
assertNull(container[1])
|
assertNull(container[1])
|
||||||
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 19))
|
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 19))
|
||||||
container.revertAction(action)
|
container.actions.revert(action)
|
||||||
assertEquals(container[0], ItemStack(AppleTestO.item, count = 7))
|
assertEquals(container[0], ItemStack(AppleTestO.item, count = 7))
|
||||||
assertEquals(container[1], ItemStack(AppleTestO.item, count = 8))
|
assertEquals(container[1], ItemStack(AppleTestO.item, count = 8))
|
||||||
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, 4))
|
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, 4))
|
||||||
|
@ -33,7 +33,7 @@ class SimpleContainerActionTest {
|
|||||||
fun testEmpty() {
|
fun testEmpty() {
|
||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container.invokeAction(SimpleContainerAction(0, SimpleContainerAction.ContainerCounts.ALL))
|
container.actions.invoke(SimpleContainerAction(0, SimpleContainerAction.ContainerCounts.ALL))
|
||||||
assertEquals(container.slots, slotsOf())
|
assertEquals(container.slots, slotsOf())
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
// connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 0, 0, 0, 0, slotsOf(), null))
|
// connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 0, 0, 0, 0, slotsOf(), null))
|
||||||
@ -44,7 +44,7 @@ class SimpleContainerActionTest {
|
|||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container.floatingItem = ItemStack(AppleTestO.item, count = 7)
|
container.floatingItem = ItemStack(AppleTestO.item, count = 7)
|
||||||
container.invokeAction(SimpleContainerAction(0, SimpleContainerAction.ContainerCounts.ALL))
|
container.actions.invoke(SimpleContainerAction(0, SimpleContainerAction.ContainerCounts.ALL))
|
||||||
assertEquals(container.slots, slotsOf(0 to ItemStack(AppleTestO.item, count = 7)))
|
assertEquals(container.slots, slotsOf(0 to ItemStack(AppleTestO.item, count = 7)))
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 0, 0, 0, 0, slotsOf(0 to ItemStack(AppleTestO.item, count = 7)), null))
|
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 0, 0, 0, 0, slotsOf(0 to ItemStack(AppleTestO.item, count = 7)), null))
|
||||||
@ -54,7 +54,7 @@ class SimpleContainerActionTest {
|
|||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container.floatingItem = ItemStack(AppleTestO.item, count = 7)
|
container.floatingItem = ItemStack(AppleTestO.item, count = 7)
|
||||||
container.invokeAction(SimpleContainerAction(0, SimpleContainerAction.ContainerCounts.PART))
|
container.actions.invoke(SimpleContainerAction(0, SimpleContainerAction.ContainerCounts.PART))
|
||||||
assertEquals(container.slots, slotsOf(0 to ItemStack(AppleTestO.item, count = 1)))
|
assertEquals(container.slots, slotsOf(0 to ItemStack(AppleTestO.item, count = 1)))
|
||||||
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 6))
|
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 6))
|
||||||
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 0, 0, 1, 0, slotsOf(0 to ItemStack(AppleTestO.item, count = 1)), ItemStack(AppleTestO.item, count = 6)))
|
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 0, 0, 1, 0, slotsOf(0 to ItemStack(AppleTestO.item, count = 1)), ItemStack(AppleTestO.item, count = 6)))
|
||||||
@ -65,7 +65,7 @@ class SimpleContainerActionTest {
|
|||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container.floatingItem = ItemStack(AppleTestO.item, count = 7)
|
container.floatingItem = ItemStack(AppleTestO.item, count = 7)
|
||||||
container[8] = ItemStack(AppleTestO.item, count = 2)
|
container[8] = ItemStack(AppleTestO.item, count = 2)
|
||||||
container.invokeAction(SimpleContainerAction(8, SimpleContainerAction.ContainerCounts.ALL))
|
container.actions.invoke(SimpleContainerAction(8, SimpleContainerAction.ContainerCounts.ALL))
|
||||||
assertEquals(container.slots, slotsOf(8 to ItemStack(AppleTestO.item, count = 9)))
|
assertEquals(container.slots, slotsOf(8 to ItemStack(AppleTestO.item, count = 9)))
|
||||||
assertNull(container.floatingItem)
|
assertNull(container.floatingItem)
|
||||||
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 8, 0, 0, 0, slotsOf(8 to ItemStack(AppleTestO.item, count = 9)), null))
|
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 8, 0, 0, 0, slotsOf(8 to ItemStack(AppleTestO.item, count = 9)), null))
|
||||||
@ -76,7 +76,7 @@ class SimpleContainerActionTest {
|
|||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container.floatingItem = ItemStack(AppleTestO.item, count = 7)
|
container.floatingItem = ItemStack(AppleTestO.item, count = 7)
|
||||||
container[12] = ItemStack(AppleTestO.item, count = 3)
|
container[12] = ItemStack(AppleTestO.item, count = 3)
|
||||||
container.invokeAction(SimpleContainerAction(12, SimpleContainerAction.ContainerCounts.PART))
|
container.actions.invoke(SimpleContainerAction(12, SimpleContainerAction.ContainerCounts.PART))
|
||||||
assertEquals(container.slots, slotsOf(12 to ItemStack(AppleTestO.item, count = 4)))
|
assertEquals(container.slots, slotsOf(12 to ItemStack(AppleTestO.item, count = 4)))
|
||||||
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 6))
|
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 6))
|
||||||
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 12, 0, 1, 0, slotsOf(12 to ItemStack(AppleTestO.item, count = 4)), ItemStack(AppleTestO.item, count = 6)))
|
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 12, 0, 1, 0, slotsOf(12 to ItemStack(AppleTestO.item, count = 4)), ItemStack(AppleTestO.item, count = 6)))
|
||||||
@ -87,7 +87,7 @@ class SimpleContainerActionTest {
|
|||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container.floatingItem = ItemStack(EggTestO.item, count = 14)
|
container.floatingItem = ItemStack(EggTestO.item, count = 14)
|
||||||
container[12] = ItemStack(EggTestO.item, count = 15)
|
container[12] = ItemStack(EggTestO.item, count = 15)
|
||||||
container.invokeAction(SimpleContainerAction(12, SimpleContainerAction.ContainerCounts.ALL))
|
container.actions.invoke(SimpleContainerAction(12, SimpleContainerAction.ContainerCounts.ALL))
|
||||||
assertEquals(container.slots, slotsOf(12 to ItemStack(EggTestO.item, count = 16)))
|
assertEquals(container.slots, slotsOf(12 to ItemStack(EggTestO.item, count = 16)))
|
||||||
assertEquals(container.floatingItem, ItemStack(EggTestO.item, 13))
|
assertEquals(container.floatingItem, ItemStack(EggTestO.item, 13))
|
||||||
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 12, 0, 0, 0, slotsOf(12 to ItemStack(EggTestO.item, count = 16)), ItemStack(EggTestO.item, count = 13)))
|
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 12, 0, 0, 0, slotsOf(12 to ItemStack(EggTestO.item, count = 16)), ItemStack(EggTestO.item, count = 13)))
|
||||||
@ -97,7 +97,7 @@ class SimpleContainerActionTest {
|
|||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container[12] = ItemStack(AppleTestO.item, count = 3)
|
container[12] = ItemStack(AppleTestO.item, count = 3)
|
||||||
container.invokeAction(SimpleContainerAction(12, SimpleContainerAction.ContainerCounts.ALL))
|
container.actions.invoke(SimpleContainerAction(12, SimpleContainerAction.ContainerCounts.ALL))
|
||||||
assertEquals(container.slots, slotsOf())
|
assertEquals(container.slots, slotsOf())
|
||||||
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 3))
|
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 3))
|
||||||
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 12, 0, 0, 0, slotsOf(12 to null), ItemStack(AppleTestO.item, count = 3)))
|
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 12, 0, 0, 0, slotsOf(12 to null), ItemStack(AppleTestO.item, count = 3)))
|
||||||
@ -107,7 +107,7 @@ class SimpleContainerActionTest {
|
|||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container[12] = ItemStack(AppleTestO.item, count = 8)
|
container[12] = ItemStack(AppleTestO.item, count = 8)
|
||||||
container.invokeAction(SimpleContainerAction(12, SimpleContainerAction.ContainerCounts.PART))
|
container.actions.invoke(SimpleContainerAction(12, SimpleContainerAction.ContainerCounts.PART))
|
||||||
assertEquals(container.slots, slotsOf(12 to ItemStack(AppleTestO.item, 4)))
|
assertEquals(container.slots, slotsOf(12 to ItemStack(AppleTestO.item, 4)))
|
||||||
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 4))
|
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 4))
|
||||||
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 12, 0, 1, 0, slotsOf(12 to ItemStack(AppleTestO.item, 4)), ItemStack(AppleTestO.item, count = 4)))
|
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 12, 0, 1, 0, slotsOf(12 to ItemStack(AppleTestO.item, 4)), ItemStack(AppleTestO.item, count = 4)))
|
||||||
@ -117,7 +117,7 @@ class SimpleContainerActionTest {
|
|||||||
val connection = createConnection()
|
val connection = createConnection()
|
||||||
val container = createContainer(connection)
|
val container = createContainer(connection)
|
||||||
container[12] = ItemStack(AppleTestO.item, count = 9)
|
container[12] = ItemStack(AppleTestO.item, count = 9)
|
||||||
container.invokeAction(SimpleContainerAction(12, SimpleContainerAction.ContainerCounts.PART))
|
container.actions.invoke(SimpleContainerAction(12, SimpleContainerAction.ContainerCounts.PART))
|
||||||
assertEquals(container.slots, slotsOf(12 to ItemStack(AppleTestO.item, 4)))
|
assertEquals(container.slots, slotsOf(12 to ItemStack(AppleTestO.item, 4)))
|
||||||
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 5))
|
assertEquals(container.floatingItem, ItemStack(AppleTestO.item, count = 5))
|
||||||
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 12, 0, 1, 0, slotsOf(12 to ItemStack(AppleTestO.item, 4)), ItemStack(AppleTestO.item, count = 5)))
|
connection.assertOnlyPacket(ContainerClickC2SP(9, container.serverRevision, 12, 0, 1, 0, slotsOf(12 to ItemStack(AppleTestO.item, 4)), ItemStack(AppleTestO.item, count = 5)))
|
||||||
|
@ -13,13 +13,11 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.data.container
|
package de.bixilon.minosoft.data.container
|
||||||
|
|
||||||
import de.bixilon.kutil.collections.CollectionUtil.synchronizedBiMapOf
|
|
||||||
import de.bixilon.kutil.collections.map.bi.SynchronizedBiMap
|
|
||||||
import de.bixilon.kutil.concurrent.lock.thread.ThreadLock
|
import de.bixilon.kutil.concurrent.lock.thread.ThreadLock
|
||||||
import de.bixilon.kutil.observer.DataObserver.Companion.observe
|
import de.bixilon.kutil.observer.DataObserver.Companion.observe
|
||||||
import de.bixilon.kutil.observer.DataObserver.Companion.observed
|
import de.bixilon.kutil.observer.DataObserver.Companion.observed
|
||||||
import de.bixilon.kutil.observer.map.MapObserver.Companion.observedMap
|
import de.bixilon.kutil.observer.map.MapObserver.Companion.observedMap
|
||||||
import de.bixilon.minosoft.data.container.actions.ContainerAction
|
import de.bixilon.minosoft.data.container.actions.ContainerActions
|
||||||
import de.bixilon.minosoft.data.container.actions.types.SlotSwapContainerAction
|
import de.bixilon.minosoft.data.container.actions.types.SlotSwapContainerAction
|
||||||
import de.bixilon.minosoft.data.container.sections.ContainerSection
|
import de.bixilon.minosoft.data.container.sections.ContainerSection
|
||||||
import de.bixilon.minosoft.data.container.slots.DefaultSlotType
|
import de.bixilon.minosoft.data.container.slots.DefaultSlotType
|
||||||
@ -45,9 +43,8 @@ abstract class Container(
|
|||||||
var propertiesRevision by observed(0L)
|
var propertiesRevision by observed(0L)
|
||||||
var revision by observed(0L)
|
var revision by observed(0L)
|
||||||
var serverRevision = 0
|
var serverRevision = 0
|
||||||
private var lastActionId = 0
|
|
||||||
var actions: SynchronizedBiMap<Int, ContainerAction> = synchronizedBiMapOf()
|
|
||||||
var floatingItem: ItemStack? by observed(null)
|
var floatingItem: ItemStack? by observed(null)
|
||||||
|
val actions = ContainerActions(this)
|
||||||
|
|
||||||
val id: Int?
|
val id: Int?
|
||||||
get() = connection.player.containers.getKey(this)
|
get() = connection.player.containers.getKey(this)
|
||||||
@ -189,30 +186,6 @@ abstract class Container(
|
|||||||
internalCommit()
|
internalCommit()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Synchronized
|
|
||||||
fun createAction(action: ContainerAction): Int {
|
|
||||||
val nextId = lastActionId++
|
|
||||||
actions[nextId] = action
|
|
||||||
return nextId
|
|
||||||
}
|
|
||||||
|
|
||||||
@Synchronized
|
|
||||||
fun invokeAction(action: ContainerAction) {
|
|
||||||
action.invoke(connection, id ?: return, this)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun acknowledgeAction(actionId: Int) {
|
|
||||||
actions.remove(actionId)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun revertAction(actionId: Int) {
|
|
||||||
actions.remove(actionId)?.let { revertAction(it) }
|
|
||||||
}
|
|
||||||
|
|
||||||
fun revertAction(action: ContainerAction) {
|
|
||||||
action.revert(connection, id ?: return, this)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun close(force: Boolean = false) {
|
fun close(force: Boolean = false) {
|
||||||
connection.events.fire(ContainerCloseEvent(connection, this))
|
connection.events.fire(ContainerCloseEvent(connection, this))
|
||||||
onClose()
|
onClose()
|
||||||
|
@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* Minosoft
|
||||||
|
* Copyright (C) 2020-2023 Moritz Zwerger
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.bixilon.minosoft.data.container.actions
|
||||||
|
|
||||||
|
import de.bixilon.kutil.collections.CollectionUtil.synchronizedBiMapOf
|
||||||
|
import de.bixilon.kutil.collections.map.bi.SynchronizedBiMap
|
||||||
|
import de.bixilon.minosoft.data.container.Container
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger
|
||||||
|
|
||||||
|
class ContainerActions(private val container: Container) {
|
||||||
|
private var id = AtomicInteger()
|
||||||
|
private val actions: SynchronizedBiMap<Int, ContainerAction> = synchronizedBiMapOf()
|
||||||
|
|
||||||
|
|
||||||
|
fun createId(action: ContainerAction): Int {
|
||||||
|
val id = id.getAndIncrement()
|
||||||
|
actions[id] = action
|
||||||
|
return id
|
||||||
|
}
|
||||||
|
|
||||||
|
fun invoke(action: ContainerAction) {
|
||||||
|
action.invoke(container.connection, container.id ?: return, container)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun acknowledge(actionId: Int) {
|
||||||
|
actions.remove(actionId)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun revert(actionId: Int) {
|
||||||
|
actions.remove(actionId)?.let { revert(it) }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun revert(action: ContainerAction) {
|
||||||
|
action.revert(container.connection, container.id ?: return, container)
|
||||||
|
}
|
||||||
|
}
|
@ -32,7 +32,7 @@ class CloneContainerAction(
|
|||||||
this.copied = itemStack
|
this.copied = itemStack
|
||||||
|
|
||||||
// TODO (1.18.2): use creative inventory packet
|
// TODO (1.18.2): use creative inventory packet
|
||||||
connection.sendPacket(ContainerClickC2SP(containerId, container.serverRevision, slot, 3, 0, container.createAction(this), slotsOf(), itemStack))
|
connection.sendPacket(ContainerClickC2SP(containerId, container.serverRevision, slot, 3, 0, container.actions.createId(this), slotsOf(), itemStack))
|
||||||
|
|
||||||
container.floatingItem = itemStack
|
container.floatingItem = itemStack
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,7 @@ class DropContainerAction(
|
|||||||
item.item.decreaseCount()
|
item.item.decreaseCount()
|
||||||
}
|
}
|
||||||
|
|
||||||
val actionId = container.createAction(this)
|
val actionId = container.actions.createId(this)
|
||||||
connection.sendPacket(ContainerClickC2SP(containerId, container.serverRevision, slot, 4, if (stack) 1 else 0, actionId, slotsOf(slot to item), null))
|
connection.sendPacket(ContainerClickC2SP(containerId, container.serverRevision, slot, 4, if (stack) 1 else 0, actionId, slotsOf(slot to item), null))
|
||||||
|
|
||||||
// TODO (1.18.2): use creative inventory packet
|
// TODO (1.18.2): use creative inventory packet
|
||||||
|
@ -95,7 +95,7 @@ class FastMoveContainerAction(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
connection.sendPacket(ContainerClickC2SP(containerId, container.serverRevision, this.slot, 1, 0, container.createAction(this), changes, null))
|
connection.sendPacket(ContainerClickC2SP(containerId, container.serverRevision, this.slot, 1, 0, container.actions.createId(this), changes, null))
|
||||||
} finally {
|
} finally {
|
||||||
container.commit()
|
container.commit()
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,7 @@ class PickAllContainerAction(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
container.floatingItem = floating
|
container.floatingItem = floating
|
||||||
connection.sendPacket(ContainerClickC2SP(containerId, container.serverRevision, this.slot, 6, 0, container.createAction(this), changes, floating))
|
connection.sendPacket(ContainerClickC2SP(containerId, container.serverRevision, this.slot, 6, 0, container.actions.createId(this), changes, floating))
|
||||||
} finally {
|
} finally {
|
||||||
container.commit()
|
container.commit()
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,7 @@ class SimpleContainerAction(
|
|||||||
}
|
}
|
||||||
|
|
||||||
container.floatingItem = floatingItem
|
container.floatingItem = floatingItem
|
||||||
connection.sendPacket(ContainerClickC2SP(containerId, container.serverRevision, slot, 0, count.ordinal, container.createAction(this), slotsOf(slot to item), floatingItem))
|
connection.sendPacket(ContainerClickC2SP(containerId, container.serverRevision, slot, 0, count.ordinal, container.actions.createId(this), slotsOf(slot to item), floatingItem))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun putItem(connection: PlayConnection, containerId: Int, container: Container, floatingItem: ItemStack) {
|
private fun putItem(connection: PlayConnection, containerId: Int, container: Container, floatingItem: ItemStack) {
|
||||||
@ -58,7 +58,7 @@ class SimpleContainerAction(
|
|||||||
} else {
|
} else {
|
||||||
floatingItem.item._count-- // don't use decrease, item + container is already locked
|
floatingItem.item._count-- // don't use decrease, item + container is already locked
|
||||||
}
|
}
|
||||||
return connection.sendPacket(ContainerClickC2SP(containerId, container.serverRevision, null, 0, count.ordinal, container.createAction(this), slotsOf(), null))
|
return connection.sendPacket(ContainerClickC2SP(containerId, container.serverRevision, null, 0, count.ordinal, container.actions.createId(this), slotsOf(), null))
|
||||||
}
|
}
|
||||||
var target = container[slot]
|
var target = container[slot]
|
||||||
val slotType = container.getSlotType(slot)
|
val slotType = container.getSlotType(slot)
|
||||||
@ -90,7 +90,7 @@ class SimpleContainerAction(
|
|||||||
} else {
|
} else {
|
||||||
container.floatingItem = null
|
container.floatingItem = null
|
||||||
}
|
}
|
||||||
connection.sendPacket(ContainerClickC2SP(containerId, container.serverRevision, slot, 0, count.ordinal, container.createAction(this), slotsOf(slot to target), container.floatingItem))
|
connection.sendPacket(ContainerClickC2SP(containerId, container.serverRevision, slot, 0, count.ordinal, container.actions.createId(this), slotsOf(slot to target), container.floatingItem))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (target != null && slotType?.canRemove(container, slot, target) != true) {
|
if (target != null && slotType?.canRemove(container, slot, target) != true) {
|
||||||
@ -106,13 +106,13 @@ class SimpleContainerAction(
|
|||||||
if (count == ContainerCounts.ALL || (!matches && target != null)) {
|
if (count == ContainerCounts.ALL || (!matches && target != null)) {
|
||||||
container.floatingItem = target
|
container.floatingItem = target
|
||||||
container[slot] = floatingItem
|
container[slot] = floatingItem
|
||||||
connection.sendPacket(ContainerClickC2SP(containerId, container.serverRevision, slot, 0, count.ordinal, container.createAction(this), slotsOf(slot to floatingItem), target))
|
connection.sendPacket(ContainerClickC2SP(containerId, container.serverRevision, slot, 0, count.ordinal, container.actions.createId(this), slotsOf(slot to floatingItem), target))
|
||||||
} else {
|
} else {
|
||||||
floatingItem.item.count--
|
floatingItem.item.count--
|
||||||
container.floatingItem = floatingItem
|
container.floatingItem = floatingItem
|
||||||
target = floatingItem.copy(count = 1)
|
target = floatingItem.copy(count = 1)
|
||||||
container[slot] = target
|
container[slot] = target
|
||||||
connection.sendPacket(ContainerClickC2SP(containerId, container.serverRevision, slot, 0, count.ordinal, container.createAction(this), slotsOf(slot to target), floatingItem))
|
connection.sendPacket(ContainerClickC2SP(containerId, container.serverRevision, slot, 0, count.ordinal, container.actions.createId(this), slotsOf(slot to target), floatingItem))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ class SlotSwapContainerAction(
|
|||||||
container[this.sourceId] = target
|
container[this.sourceId] = target
|
||||||
container[targetId] = source
|
container[targetId] = source
|
||||||
|
|
||||||
connection.sendPacket(ContainerClickC2SP(containerId, container.serverRevision, sourceId, 2, this.target.button, container.createAction(this), slotsOf(sourceId to target, targetId to source), source))
|
connection.sendPacket(ContainerClickC2SP(containerId, container.serverRevision, sourceId, 2, this.target.button, container.actions.createId(this), slotsOf(sourceId to target, targetId to source), source))
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
container.commit()
|
container.commit()
|
||||||
|
@ -97,7 +97,7 @@ class ItemElement(
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if (button == MouseButtons.LEFT && count == 2 && itemsElement.container[slotId] == null) {
|
if (button == MouseButtons.LEFT && count == 2 && itemsElement.container[slotId] == null) {
|
||||||
itemsElement.container.invokeAction(PickAllContainerAction(slotId))
|
itemsElement.container.actions.invoke(PickAllContainerAction(slotId))
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,11 +106,11 @@ class ItemElement(
|
|||||||
if (guiRenderer.connection.player.gamemode != Gamemodes.CREATIVE) {
|
if (guiRenderer.connection.player.gamemode != Gamemodes.CREATIVE) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
itemsElement.container.invokeAction(CloneContainerAction(slotId))
|
itemsElement.container.actions.invoke(CloneContainerAction(slotId))
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if (button == MouseButtons.LEFT || button == MouseButtons.RIGHT) {
|
if (button == MouseButtons.LEFT || button == MouseButtons.RIGHT) {
|
||||||
itemsElement.container.invokeAction(if (shiftDown) {
|
itemsElement.container.actions.invoke(if (shiftDown) {
|
||||||
FastMoveContainerAction(slotId)
|
FastMoveContainerAction(slotId)
|
||||||
} else {
|
} else {
|
||||||
SimpleContainerAction(slotId, if (button == MouseButtons.LEFT) SimpleContainerAction.ContainerCounts.ALL else SimpleContainerAction.ContainerCounts.PART)
|
SimpleContainerAction(slotId, if (button == MouseButtons.LEFT) SimpleContainerAction.ContainerCounts.ALL else SimpleContainerAction.ContainerCounts.PART)
|
||||||
@ -125,7 +125,7 @@ class ItemElement(
|
|||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
if (button == MouseButtons.LEFT && count == 2) {
|
if (button == MouseButtons.LEFT && count == 2) {
|
||||||
itemsElement.container.invokeAction(PickAllContainerAction(slotId))
|
itemsElement.container.actions.invoke(PickAllContainerAction(slotId))
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
if (draggable !is FloatingItem) {
|
if (draggable !is FloatingItem) {
|
||||||
@ -133,9 +133,9 @@ class ItemElement(
|
|||||||
}
|
}
|
||||||
val shiftDown = guiRenderer.isKeyDown(ModifierKeys.SHIFT)
|
val shiftDown = guiRenderer.isKeyDown(ModifierKeys.SHIFT)
|
||||||
if (shiftDown && button == MouseButtons.LEFT) {
|
if (shiftDown && button == MouseButtons.LEFT) {
|
||||||
itemsElement.container.invokeAction(FastMoveContainerAction(slotId))
|
itemsElement.container.actions.invoke(FastMoveContainerAction(slotId))
|
||||||
} else if (button == MouseButtons.LEFT || button == MouseButtons.RIGHT) {
|
} else if (button == MouseButtons.LEFT || button == MouseButtons.RIGHT) {
|
||||||
itemsElement.container.invokeAction(SimpleContainerAction(slotId, if (button == MouseButtons.LEFT) SimpleContainerAction.ContainerCounts.ALL else SimpleContainerAction.ContainerCounts.PART))
|
itemsElement.container.actions.invoke(SimpleContainerAction(slotId, if (button == MouseButtons.LEFT) SimpleContainerAction.ContainerCounts.ALL else SimpleContainerAction.ContainerCounts.PART))
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
return this
|
return this
|
||||||
@ -148,18 +148,18 @@ class ItemElement(
|
|||||||
val container = itemsElement.container
|
val container = itemsElement.container
|
||||||
when (key) {
|
when (key) {
|
||||||
// ToDo: Make this configurable
|
// ToDo: Make this configurable
|
||||||
KeyCodes.KEY_Q -> container.invokeAction(DropContainerAction(slotId, guiRenderer.isKeyDown(ModifierKeys.CONTROL)))
|
KeyCodes.KEY_Q -> container.actions.invoke(DropContainerAction(slotId, guiRenderer.isKeyDown(ModifierKeys.CONTROL)))
|
||||||
|
|
||||||
KeyCodes.KEY_1 -> container.invokeAction(SlotSwapContainerAction(slotId, SlotSwapContainerAction.SwapTargets.HOTBAR_1))
|
KeyCodes.KEY_1 -> container.actions.invoke(SlotSwapContainerAction(slotId, SlotSwapContainerAction.SwapTargets.HOTBAR_1))
|
||||||
KeyCodes.KEY_2 -> container.invokeAction(SlotSwapContainerAction(slotId, SlotSwapContainerAction.SwapTargets.HOTBAR_2))
|
KeyCodes.KEY_2 -> container.actions.invoke(SlotSwapContainerAction(slotId, SlotSwapContainerAction.SwapTargets.HOTBAR_2))
|
||||||
KeyCodes.KEY_3 -> container.invokeAction(SlotSwapContainerAction(slotId, SlotSwapContainerAction.SwapTargets.HOTBAR_3))
|
KeyCodes.KEY_3 -> container.actions.invoke(SlotSwapContainerAction(slotId, SlotSwapContainerAction.SwapTargets.HOTBAR_3))
|
||||||
KeyCodes.KEY_4 -> container.invokeAction(SlotSwapContainerAction(slotId, SlotSwapContainerAction.SwapTargets.HOTBAR_4))
|
KeyCodes.KEY_4 -> container.actions.invoke(SlotSwapContainerAction(slotId, SlotSwapContainerAction.SwapTargets.HOTBAR_4))
|
||||||
KeyCodes.KEY_5 -> container.invokeAction(SlotSwapContainerAction(slotId, SlotSwapContainerAction.SwapTargets.HOTBAR_5))
|
KeyCodes.KEY_5 -> container.actions.invoke(SlotSwapContainerAction(slotId, SlotSwapContainerAction.SwapTargets.HOTBAR_5))
|
||||||
KeyCodes.KEY_6 -> container.invokeAction(SlotSwapContainerAction(slotId, SlotSwapContainerAction.SwapTargets.HOTBAR_6))
|
KeyCodes.KEY_6 -> container.actions.invoke(SlotSwapContainerAction(slotId, SlotSwapContainerAction.SwapTargets.HOTBAR_6))
|
||||||
KeyCodes.KEY_7 -> container.invokeAction(SlotSwapContainerAction(slotId, SlotSwapContainerAction.SwapTargets.HOTBAR_7))
|
KeyCodes.KEY_7 -> container.actions.invoke(SlotSwapContainerAction(slotId, SlotSwapContainerAction.SwapTargets.HOTBAR_7))
|
||||||
KeyCodes.KEY_8 -> container.invokeAction(SlotSwapContainerAction(slotId, SlotSwapContainerAction.SwapTargets.HOTBAR_8))
|
KeyCodes.KEY_8 -> container.actions.invoke(SlotSwapContainerAction(slotId, SlotSwapContainerAction.SwapTargets.HOTBAR_8))
|
||||||
KeyCodes.KEY_9 -> container.invokeAction(SlotSwapContainerAction(slotId, SlotSwapContainerAction.SwapTargets.HOTBAR_9))
|
KeyCodes.KEY_9 -> container.actions.invoke(SlotSwapContainerAction(slotId, SlotSwapContainerAction.SwapTargets.HOTBAR_9))
|
||||||
KeyCodes.KEY_F -> container.invokeAction(SlotSwapContainerAction(slotId, SlotSwapContainerAction.SwapTargets.OFFHAND))
|
KeyCodes.KEY_F -> container.actions.invoke(SlotSwapContainerAction(slotId, SlotSwapContainerAction.SwapTargets.OFFHAND))
|
||||||
else -> Unit
|
else -> Unit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ class FloatingItem(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (target == null) {
|
if (target == null) {
|
||||||
container?.invokeAction(SimpleContainerAction(null, if (button == MouseButtons.LEFT) SimpleContainerAction.ContainerCounts.ALL else SimpleContainerAction.ContainerCounts.PART))
|
container?.actions?.invoke(SimpleContainerAction(null, if (button == MouseButtons.LEFT) SimpleContainerAction.ContainerCounts.ALL else SimpleContainerAction.ContainerCounts.PART))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Minosoft
|
* Minosoft
|
||||||
* Copyright (C) 2020-2022 Moritz Zwerger
|
* Copyright (C) 2020-2023 Moritz Zwerger
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||||
*
|
*
|
||||||
@ -29,9 +29,9 @@ class ContainerActionS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket {
|
|||||||
override fun handle(connection: PlayConnection) {
|
override fun handle(connection: PlayConnection) {
|
||||||
val container = connection.player.containers[containerId] ?: return
|
val container = connection.player.containers[containerId] ?: return
|
||||||
if (accepted) {
|
if (accepted) {
|
||||||
container.acknowledgeAction(actionId)
|
container.actions.acknowledge(actionId)
|
||||||
} else {
|
} else {
|
||||||
container.revertAction(actionId)
|
container.actions.revert(actionId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user