replaceininv changes
This commit is contained in:
parent
edd54dfa7f
commit
056368b412
@ -6,31 +6,38 @@ use crate::instance::{ArgType, InstBundle};
|
||||
use crate::map_block::{MapBlock, NodeMetadataList};
|
||||
use crate::utils::{query_keys, fmt_big_num};
|
||||
|
||||
const NEWLINE: u8 = b'\n';
|
||||
const SPACE: u8 = b' ';
|
||||
|
||||
|
||||
fn do_replace(inv: &mut Vec<u8>, item: &[u8], new_item: &[u8], del_meta: bool)
|
||||
-> u64
|
||||
{
|
||||
const NEWLINE: u8 = b'\n';
|
||||
const SPACE: u8 = b' ';
|
||||
|
||||
let mut new_inv = Vec::new();
|
||||
let delete = new_item == b"Empty";
|
||||
let mut new_inv = Vec::with_capacity(inv.len());
|
||||
let mut mods = 0;
|
||||
for line in inv.split(|&x| x == NEWLINE) {
|
||||
let parts: Vec<&[u8]> = line.splitn(4, |&x| x == SPACE).collect();
|
||||
|
||||
if parts[0] == b"Item" && parts[1] == item {
|
||||
for line in inv.split(|&x| x == NEWLINE) {
|
||||
let mut parts = line.splitn(4, |&x| x == SPACE);
|
||||
|
||||
if parts.next() == Some(b"Item") && parts.next() == Some(item) {
|
||||
if delete {
|
||||
new_inv.extend_from_slice(b"Empty");
|
||||
} else {
|
||||
new_inv.extend_from_slice(b"Item ");
|
||||
new_inv.extend_from_slice(new_item);
|
||||
if let Some(count) = parts.get(2) {
|
||||
|
||||
if let Some(count) = parts.next() {
|
||||
new_inv.push(SPACE);
|
||||
new_inv.extend_from_slice(count);
|
||||
}
|
||||
if !del_meta {
|
||||
if let Some(meta) = parts.get(3) {
|
||||
if let Some(meta) = parts.next() {
|
||||
new_inv.push(SPACE);
|
||||
new_inv.extend_from_slice(meta);
|
||||
}
|
||||
}
|
||||
}
|
||||
mods += 1;
|
||||
} else {
|
||||
new_inv.extend_from_slice(line);
|
||||
@ -38,7 +45,9 @@ fn do_replace(inv: &mut Vec<u8>, item: &[u8], new_item: &[u8], del_meta: bool)
|
||||
new_inv.push(NEWLINE);
|
||||
}
|
||||
|
||||
if mods > 0 {
|
||||
*inv = new_inv;
|
||||
}
|
||||
mods
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user