@@ -9,6 +9,7 @@ use crate::{ClientId, Server};
9
9
pub fn handle_creative_inventory_action (
10
10
player : EntityRef ,
11
11
packet : CreativeInventoryAction ,
12
+ server : & mut Server ,
12
13
) -> SysResult {
13
14
if * player. get :: < Gamemode > ( ) ? != Gamemode :: Creative {
14
15
bail ! ( "cannot use Creative Inventory Action outside of creative mode" ) ;
@@ -23,6 +24,12 @@ pub fn handle_creative_inventory_action(
23
24
window
24
25
. inner ( )
25
26
. set_item ( packet. slot as usize , packet. clicked_item ) ?;
27
+
28
+ // Sends the client updates about window changes.
29
+ // Is required to make delete inventory button reflect in-game.
30
+ let client_id = * player. get :: < ClientId > ( ) ?;
31
+ let client = server. clients . get ( client_id) . unwrap ( ) ;
32
+ client. send_window_items ( & window) ;
26
33
}
27
34
28
35
Ok ( ( ) )
@@ -75,88 +82,3 @@ fn _handle_click_window(player: &EntityRef, packet: &ClickWindow) -> SysResult {
75
82
76
83
Ok ( ( ) )
77
84
}
78
-
79
- #[ cfg( test) ]
80
- mod tests {
81
- use base:: { Inventory , Item , ItemStack } ;
82
- use common:: Game ;
83
-
84
- use super :: * ;
85
-
86
- #[ test]
87
- fn creative_inventory_action_survival_mode ( ) {
88
- let mut game = Game :: new ( ) ;
89
- let entity = game. ecs . spawn ( ( Gamemode :: Survival , player_window ( ) ) ) ;
90
- let player = game. ecs . entity ( entity) . unwrap ( ) ;
91
-
92
- let packet = CreativeInventoryAction {
93
- slot : 10 ,
94
- clicked_item : Some ( ItemStack :: new ( Item :: Diamond , 64 ) ) ,
95
- } ;
96
- handle_creative_inventory_action ( player, packet) . unwrap_err ( ) ;
97
-
98
- assert ! ( game
99
- . ecs
100
- . get:: <Window >( entity)
101
- . unwrap( )
102
- . item( 10 )
103
- . unwrap( )
104
- . is_none( ) ) ;
105
- }
106
-
107
- #[ test]
108
- fn creative_inventory_action_non_player_window ( ) {
109
- let mut game = Game :: new ( ) ;
110
- let entity = game. ecs . spawn ( (
111
- Window :: new ( BackingWindow :: Generic9x3 {
112
- player : Inventory :: player ( ) ,
113
- block : Inventory :: chest ( ) ,
114
- } ) ,
115
- Gamemode :: Creative ,
116
- ) ) ;
117
- let player = game. ecs . entity ( entity) . unwrap ( ) ;
118
-
119
- let packet = CreativeInventoryAction {
120
- slot : 5 ,
121
- clicked_item : Some ( ItemStack :: new ( Item :: Diamond , 64 ) ) ,
122
- } ;
123
- handle_creative_inventory_action ( player, packet) . unwrap_err ( ) ;
124
-
125
- assert ! ( game
126
- . ecs
127
- . get:: <Window >( entity)
128
- . unwrap( )
129
- . item( 5 )
130
- . unwrap( )
131
- . is_none( ) ) ;
132
- }
133
-
134
- #[ test]
135
- fn creative_inventory_action ( ) {
136
- let mut game = Game :: new ( ) ;
137
- let entity = game. ecs . spawn ( ( Gamemode :: Creative , player_window ( ) ) ) ;
138
- let player = game. ecs . entity ( entity) . unwrap ( ) ;
139
-
140
- let packet = CreativeInventoryAction {
141
- slot : 5 ,
142
- clicked_item : Some ( ItemStack :: new ( Item :: Diamond , 64 ) ) ,
143
- } ;
144
- handle_creative_inventory_action ( player, packet) . unwrap ( ) ;
145
-
146
- assert_eq ! (
147
- game. ecs
148
- . get:: <Window >( entity)
149
- . unwrap( )
150
- . item( 5 )
151
- . unwrap( )
152
- . clone( ) ,
153
- Some ( ItemStack :: new( Item :: Diamond , 64 ) )
154
- ) ;
155
- }
156
-
157
- fn player_window ( ) -> Window {
158
- Window :: new ( BackingWindow :: Player {
159
- player : Inventory :: player ( ) ,
160
- } )
161
- }
162
- }
0 commit comments