Skip to content

Commit 4639f83

Browse files
authored
Update client window when changing creative windows. (#479)
* Fix client not sending updates about removed items. * Removes option from Server. And removed unit tests * Revert "Datapack parsing (#455)" This reverts commit 7e46ec7. * removed unused variable.
1 parent 0da1a5d commit 4639f83

File tree

2 files changed

+8
-86
lines changed

2 files changed

+8
-86
lines changed

feather/server/src/packet_handlers.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ pub fn handle_packet(
5050
ClientPlayPacket::PlayerDigging(packet) => handle_player_digging(game, packet, player_id),
5151

5252
ClientPlayPacket::CreativeInventoryAction(packet) => {
53-
inventory::handle_creative_inventory_action(player, packet)
53+
inventory::handle_creative_inventory_action(player, packet, server)
5454
}
5555
ClientPlayPacket::ClickWindow(packet) => {
5656
inventory::handle_click_window(server, player, packet)

feather/server/src/packet_handlers/inventory.rs

Lines changed: 7 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use crate::{ClientId, Server};
99
pub fn handle_creative_inventory_action(
1010
player: EntityRef,
1111
packet: CreativeInventoryAction,
12+
server: &mut Server,
1213
) -> SysResult {
1314
if *player.get::<Gamemode>()? != Gamemode::Creative {
1415
bail!("cannot use Creative Inventory Action outside of creative mode");
@@ -23,6 +24,12 @@ pub fn handle_creative_inventory_action(
2324
window
2425
.inner()
2526
.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);
2633
}
2734

2835
Ok(())
@@ -75,88 +82,3 @@ fn _handle_click_window(player: &EntityRef, packet: &ClickWindow) -> SysResult {
7582

7683
Ok(())
7784
}
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

Comments
 (0)