mirror of
https://github.com/Pumpkin-MC/Pumpkin.git
synced 2026-08-30 20:14:23 +00:00
* Fix deadlock when throwing items try test again * remove unnecessary async
This commit is contained in:
@@ -165,7 +165,7 @@ pub trait ScreenHandler: Send + Sync {
|
||||
}
|
||||
}
|
||||
|
||||
async fn set_received_hash(&mut self, slot: usize, hash: OptionalItemStackHash) {
|
||||
fn set_received_hash(&mut self, slot: usize, hash: OptionalItemStackHash) {
|
||||
let behaviour = self.get_behaviour_mut();
|
||||
if slot < behaviour.previous_tracked_stacks.len() {
|
||||
behaviour.previous_tracked_stacks[slot].set_received_hash(hash);
|
||||
@@ -178,12 +178,12 @@ pub trait ScreenHandler: Send + Sync {
|
||||
}
|
||||
}
|
||||
|
||||
async fn set_received_stack(&mut self, slot: usize, stack: ItemStack) {
|
||||
fn set_received_stack(&mut self, slot: usize, stack: ItemStack) {
|
||||
let behaviour = self.get_behaviour_mut();
|
||||
behaviour.previous_tracked_stacks[slot].set_received_stack(stack);
|
||||
}
|
||||
|
||||
async fn set_received_cursor_hash(&mut self, hash: OptionalItemStackHash) {
|
||||
fn set_received_cursor_hash(&mut self, hash: OptionalItemStackHash) {
|
||||
let behaviour = self.get_behaviour_mut();
|
||||
behaviour.previous_cursor_stack.set_received_hash(hash);
|
||||
}
|
||||
|
||||
@@ -1454,6 +1454,8 @@ impl Player {
|
||||
}
|
||||
|
||||
pub async fn drop_held_item(&self, drop_stack: bool) {
|
||||
// should be locked first otherwise cause deadlock in tick() (this thread lock stack, that thread lock screen_handler)
|
||||
let screen_binding = self.current_screen_handler.lock().await;
|
||||
let binding = self.inventory.held_item();
|
||||
let mut item_stack = binding.lock().await;
|
||||
|
||||
@@ -1464,16 +1466,13 @@ impl Player {
|
||||
item_stack.decrement(drop_amount);
|
||||
let selected_slot = self.inventory.get_selected_slot();
|
||||
let inv: Arc<dyn Inventory> = self.inventory.clone();
|
||||
let binding = self.current_screen_handler.lock().await;
|
||||
let mut screen_handler = binding.lock().await;
|
||||
let mut screen_handler = screen_binding.lock().await;
|
||||
let slot_index = screen_handler
|
||||
.get_slot_index(&inv, selected_slot as usize)
|
||||
.await;
|
||||
|
||||
if let Some(slot_index) = slot_index {
|
||||
screen_handler
|
||||
.set_received_stack(slot_index, *item_stack)
|
||||
.await;
|
||||
screen_handler.set_received_stack(slot_index, *item_stack);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1821,12 +1820,10 @@ impl Player {
|
||||
.await;
|
||||
|
||||
for (key, value) in packet.array_of_changed_slots {
|
||||
screen_handler.set_received_hash(key as usize, value).await;
|
||||
screen_handler.set_received_hash(key as usize, value);
|
||||
}
|
||||
|
||||
screen_handler
|
||||
.set_received_cursor_hash(packet.carried_item)
|
||||
.await;
|
||||
screen_handler.set_received_cursor_hash(packet.carried_item);
|
||||
screen_handler.enable_sync().await;
|
||||
|
||||
if not_in_sync {
|
||||
|
||||
@@ -1459,9 +1459,7 @@ impl Player {
|
||||
.await
|
||||
.set_stack(item_stack)
|
||||
.await;
|
||||
player_screen_handler
|
||||
.set_received_stack(packet.slot as usize, item_stack)
|
||||
.await;
|
||||
player_screen_handler.set_received_stack(packet.slot as usize, item_stack);
|
||||
player_screen_handler.send_content_updates().await;
|
||||
} else if is_negative && is_legal {
|
||||
// Item drop
|
||||
|
||||
Reference in New Issue
Block a user