remove iter_tools
we only used them for collect_vec. I think its worth the "effort" to write Vec type annotations ourself and have one big crate with way too may features we don't need less
This commit is contained in:
parent
43c3f03bdb
commit
f587cb6748
@ -61,5 +61,3 @@ uuid = { version = "1.11.0", features = ["serde", "v3", "v4"] }
|
||||
derive_more = { version = "1.0.0", features = ["full"] }
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0"
|
||||
|
||||
itertools = "0.13.0"
|
||||
|
||||
@ -13,5 +13,3 @@ num-derive.workspace = true
|
||||
|
||||
colored = "2"
|
||||
md5 = "0.7.0"
|
||||
|
||||
enum_dispatch = "0.3.13"
|
||||
|
||||
@ -12,8 +12,6 @@ pumpkin-core = { path = "../pumpkin-core" }
|
||||
|
||||
log.workspace = true
|
||||
rayon.workspace = true
|
||||
itertools.workspace = true
|
||||
crossbeam.workspace = true
|
||||
tokio.workspace = true
|
||||
thiserror.workspace = true
|
||||
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
use itertools::Itertools;
|
||||
use pumpkin_registry::{
|
||||
flatten_3x3, get_tag_values, IngredientSlot, IngredientType, RecipeResult, TagCategory, RECIPES,
|
||||
};
|
||||
@ -76,13 +75,13 @@ fn shapeless_crafting_match(
|
||||
input: [[Option<ItemStack>; 3]; 3],
|
||||
pattern: &[[[Option<IngredientSlot>; 3]; 3]],
|
||||
) -> bool {
|
||||
let mut pattern = pattern
|
||||
let mut pattern: Vec<IngredientSlot> = pattern
|
||||
.iter()
|
||||
.flatten()
|
||||
.flatten()
|
||||
.flatten()
|
||||
.cloned()
|
||||
.collect_vec();
|
||||
.collect();
|
||||
for item in input.into_iter().flatten().flatten() {
|
||||
if let Some(index) = pattern.iter().enumerate().find_map(|(i, recipe_item)| {
|
||||
if ingredient_slot_check(recipe_item, item) {
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
use crate::container_click::MouseDragType;
|
||||
use crate::{Container, InventoryError};
|
||||
use itertools::Itertools;
|
||||
use num_traits::Euclid;
|
||||
use pumpkin_world::item::ItemStack;
|
||||
use std::collections::HashMap;
|
||||
@ -73,10 +72,10 @@ impl DragHandler {
|
||||
Err(InventoryError::MultiplePlayersDragging)?
|
||||
}
|
||||
let mut slots = container.all_slots();
|
||||
let slots_cloned = slots
|
||||
let slots_cloned: Vec<Option<ItemStack>> = slots
|
||||
.iter()
|
||||
.map(|stack| stack.map(|item| item.to_owned()))
|
||||
.collect_vec();
|
||||
.collect();
|
||||
let Some(carried_item) = maybe_carried_item else {
|
||||
return Ok(());
|
||||
};
|
||||
|
||||
@ -9,7 +9,6 @@ proc-macro = true
|
||||
[dependencies]
|
||||
serde.workspace = true
|
||||
serde_json.workspace = true
|
||||
itertools.workspace = true
|
||||
|
||||
proc-macro2 = "1.0"
|
||||
quote = "1.0"
|
||||
|
||||
@ -13,7 +13,6 @@ pumpkin-core = { path = "../pumpkin-core" }
|
||||
uuid.workspace = true
|
||||
serde.workspace = true
|
||||
thiserror.workspace = true
|
||||
itertools.workspace = true
|
||||
log.workspace = true
|
||||
tokio.workspace = true
|
||||
num-traits.workspace = true
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
use crate::{bytebuf::ByteBuffer, BitSet, ClientPacket, VarInt};
|
||||
use itertools::Itertools;
|
||||
|
||||
use pumpkin_macros::client_packet;
|
||||
use pumpkin_world::{chunk::ChunkData, DIRECT_PALETTE_BITS};
|
||||
@ -26,7 +25,7 @@ impl ClientPacket for CChunkData<'_> {
|
||||
data_buf.put_i16(block_count);
|
||||
//// Block states
|
||||
|
||||
let palette = chunk.iter().dedup().collect_vec();
|
||||
let palette = chunk;
|
||||
// TODO: make dynamic block_size work
|
||||
// TODO: make direct block_size work
|
||||
enum PaletteType {
|
||||
@ -55,7 +54,7 @@ impl ClientPacket for CChunkData<'_> {
|
||||
|
||||
palette.iter().for_each(|id| {
|
||||
// Palette
|
||||
data_buf.put_var_int(&VarInt(**id as i32));
|
||||
data_buf.put_var_int(&VarInt(*id as i32));
|
||||
});
|
||||
// Data array length
|
||||
let data_array_len = chunk.len().div_ceil(64 / block_size as usize);
|
||||
@ -67,7 +66,7 @@ impl ClientPacket for CChunkData<'_> {
|
||||
for block in block_clump.iter().rev() {
|
||||
let index = palette
|
||||
.iter()
|
||||
.position(|b| *b == block)
|
||||
.position(|b| b == block)
|
||||
.expect("Its just got added, ofc it should be there");
|
||||
out_long = out_long << block_size | (index as i64);
|
||||
}
|
||||
|
||||
@ -13,9 +13,3 @@ indexmap = { version = "2.7.0", features = ["serde"] }
|
||||
serde.workspace = true
|
||||
serde_json.workspace = true
|
||||
|
||||
rayon.workspace = true
|
||||
|
||||
num-traits.workspace = true
|
||||
num-derive.workspace = true
|
||||
|
||||
itertools.workspace = true
|
||||
|
||||
@ -2,8 +2,6 @@ use super::super::recipe::RecipeType;
|
||||
use super::read::{
|
||||
ingredients::IngredientSlot, CraftingType, RecipeKeys, RecipeResult, RecipeTrait,
|
||||
};
|
||||
use itertools::Itertools;
|
||||
|
||||
pub struct ShapedCrafting {
|
||||
keys: RecipeKeys,
|
||||
pattern: [[Option<char>; 3]; 3],
|
||||
@ -85,7 +83,7 @@ impl RecipeTrait for ShapelessCrafting {
|
||||
|
||||
[v1, v2, v3]
|
||||
})
|
||||
.collect_vec()
|
||||
.collect()
|
||||
}
|
||||
|
||||
fn result(self) -> RecipeResult {
|
||||
|
||||
@ -11,16 +11,13 @@ pumpkin-macros = { path = "../pumpkin-macros" }
|
||||
tokio.workspace = true
|
||||
rayon.workspace = true
|
||||
derive_more.workspace = true
|
||||
itertools.workspace = true
|
||||
thiserror.workspace = true
|
||||
serde.workspace = true
|
||||
serde_json.workspace = true
|
||||
log.workspace = true
|
||||
parking_lot.workspace = true
|
||||
|
||||
num-traits.workspace = true
|
||||
num-derive.workspace = true
|
||||
futures = "0.3"
|
||||
dashmap = "6.1.0"
|
||||
|
||||
# Compression
|
||||
@ -28,7 +25,6 @@ flate2 = "1.0"
|
||||
lz4 = "1.28.0"
|
||||
|
||||
enum_dispatch = "0.3.13"
|
||||
derive-getters = "0.5.0"
|
||||
|
||||
fastnbt = { git = "https://github.com/owengage/fastnbt.git" }
|
||||
|
||||
@ -39,7 +35,6 @@ rand = "0.8.5"
|
||||
[dev-dependencies]
|
||||
criterion = { version = "0.5.1", features = ["html_reports"] }
|
||||
|
||||
|
||||
[[bench]]
|
||||
name = "chunk_noise"
|
||||
harness = false
|
||||
|
||||
@ -4,7 +4,6 @@ use std::{
|
||||
};
|
||||
|
||||
use flate2::bufread::{GzDecoder, ZlibDecoder};
|
||||
use itertools::Itertools;
|
||||
|
||||
use crate::level::SaveFile;
|
||||
|
||||
@ -143,7 +142,7 @@ impl ChunkReader for AnvilChunkReader {
|
||||
};
|
||||
|
||||
// TODO: check checksum to make sure chunk is not corrupted
|
||||
let header = file_buf.drain(0..5).collect_vec();
|
||||
let header: Vec<u8> = file_buf.drain(0..5).collect();
|
||||
|
||||
let compression = Compression::from_byte(header[4]).ok_or(
|
||||
ChunkReadingError::Compression(CompressionError::UnknownCompression),
|
||||
@ -152,7 +151,7 @@ impl ChunkReader for AnvilChunkReader {
|
||||
let size = u32::from_be_bytes(header[..4].try_into().unwrap());
|
||||
|
||||
// size includes the compression scheme byte, so we need to subtract 1
|
||||
let chunk_data = file_buf.drain(0..size as usize - 1).collect_vec();
|
||||
let chunk_data = file_buf.drain(0..size as usize - 1).collect();
|
||||
let decompressed_chunk = compression
|
||||
.decompress_data(chunk_data)
|
||||
.map_err(ChunkReadingError::Compression)?;
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
use itertools::Itertools;
|
||||
use pumpkin_core::math::vector2::Vector2;
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
||||
@ -76,7 +75,7 @@ impl Cylindrical {
|
||||
all_chunks
|
||||
.into_iter()
|
||||
.filter(|chunk| self.is_within_distance(chunk.x, chunk.z))
|
||||
.collect_vec()
|
||||
.collect()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
use std::{marker::PhantomData, sync::Arc};
|
||||
|
||||
use enum_dispatch::enum_dispatch;
|
||||
use itertools::Itertools;
|
||||
|
||||
use crate::world_gen::noise::lerp;
|
||||
|
||||
@ -302,13 +301,13 @@ impl<E: DensityFunctionEnvironment, R: ComponentReference<E>> MutableSpline<E, R
|
||||
.iter()
|
||||
.all(|point| matches!(point, SplinePoint::Immutable(_)))
|
||||
{
|
||||
let immutable_points = converted_points
|
||||
let immutable_points: Vec<ImmutablePoint> = converted_points
|
||||
.into_iter()
|
||||
.map(|point| match point {
|
||||
SplinePoint::Immutable(point) => point,
|
||||
_ => unreachable!(),
|
||||
})
|
||||
.collect_vec();
|
||||
.collect();
|
||||
SplineRef::Immutable(
|
||||
ImmutableSpline {
|
||||
function: shared,
|
||||
@ -387,7 +386,7 @@ impl<E: DensityFunctionEnvironment, R: ComponentReference<E>> MutableSplineImpl<
|
||||
let converted_points = points
|
||||
.into_iter()
|
||||
.map(|point| point.convert(converter))
|
||||
.collect_vec();
|
||||
.collect();
|
||||
|
||||
Self::create_new_spline(converted_base, converted_points)
|
||||
}
|
||||
@ -398,7 +397,7 @@ impl<E: DensityFunctionEnvironment, R: ComponentReference<E>> MutableSplineImpl<
|
||||
.points
|
||||
.iter()
|
||||
.map(|point| point.clone_to_new_point())
|
||||
.collect_vec();
|
||||
.collect();
|
||||
|
||||
Self::create_new_spline(cloned_function, cloned_points)
|
||||
}
|
||||
@ -462,18 +461,18 @@ impl ImmutableSplineRef {
|
||||
converter: &mut dyn ConverterImpl<E>,
|
||||
) -> Option<SplineRef<E>> {
|
||||
let converted_base = self.0.function.maybe_convert(converter);
|
||||
let maybe_converted_points = self
|
||||
let maybe_converted_points: Vec<Option<SplinePoint<E>>> = self
|
||||
.0
|
||||
.points
|
||||
.iter()
|
||||
.map(|point| point.maybe_convert(converter))
|
||||
.collect_vec();
|
||||
.collect();
|
||||
|
||||
if converted_base.is_none() && maybe_converted_points.iter().all(|point| point.is_none()) {
|
||||
None
|
||||
} else {
|
||||
let converted_base = converted_base.unwrap_or_else(|| self.0.function.clone().into());
|
||||
let converted_points = maybe_converted_points
|
||||
let converted_points: Vec<SplinePoint<E>> = maybe_converted_points
|
||||
.into_iter()
|
||||
.enumerate()
|
||||
.map(|(index, point)| {
|
||||
@ -483,7 +482,7 @@ impl ImmutableSplineRef {
|
||||
self.0.points[index].clone().into()
|
||||
}
|
||||
})
|
||||
.collect_vec();
|
||||
.collect();
|
||||
|
||||
Some(match converted_base {
|
||||
ComponentReferenceImplementation::Shared(shared) => {
|
||||
@ -491,13 +490,13 @@ impl ImmutableSplineRef {
|
||||
.iter()
|
||||
.all(|point| matches!(point, SplinePoint::Immutable(_)))
|
||||
{
|
||||
let immutable_points = converted_points
|
||||
let immutable_points: Vec<ImmutablePoint> = converted_points
|
||||
.into_iter()
|
||||
.map(|point| match point {
|
||||
SplinePoint::Immutable(point) => point,
|
||||
_ => unreachable!(),
|
||||
})
|
||||
.collect_vec();
|
||||
.collect();
|
||||
SplineRef::Immutable(
|
||||
ImmutableSpline {
|
||||
function: shared,
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use itertools::{izip, Itertools};
|
||||
use num_traits::Pow;
|
||||
use pumpkin_core::random::RandomGenerator;
|
||||
|
||||
@ -226,19 +225,6 @@ impl OctavePerlinNoiseSampler {
|
||||
random.skip(262);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(debug_assertions)]
|
||||
{
|
||||
use itertools::Itertools;
|
||||
use num_traits::Zero;
|
||||
|
||||
if let Ok(length1) = samplers.iter().filter(|x| x.is_some()).try_len() {
|
||||
if let Ok(length2) = amplitudes.iter().filter(|x| !x.is_zero()).try_len() {
|
||||
assert_eq!(length1, length2);
|
||||
}
|
||||
}
|
||||
assert!(j >= i as i32 - 1);
|
||||
}
|
||||
} else {
|
||||
let splitter = random.next_splitter();
|
||||
for k in 0..i {
|
||||
@ -256,20 +242,20 @@ impl OctavePerlinNoiseSampler {
|
||||
let mut lacunarity = 2f64.pow((-j) as f64);
|
||||
let max_value = Self::get_total_amplitude(2f64, persistence, amplitudes);
|
||||
|
||||
let persistences = (0..amplitudes.len())
|
||||
let persistences: Vec<f64> = (0..amplitudes.len())
|
||||
.map(|_| {
|
||||
let result = persistence;
|
||||
persistence /= 2f64;
|
||||
result
|
||||
})
|
||||
.collect_vec();
|
||||
let lacunarities = (0..amplitudes.len())
|
||||
.collect();
|
||||
let lacunarities: Vec<f64> = (0..amplitudes.len())
|
||||
.map(|_| {
|
||||
let result = lacunarity;
|
||||
lacunarity *= 2f64;
|
||||
result
|
||||
})
|
||||
.collect_vec();
|
||||
.collect();
|
||||
|
||||
Self {
|
||||
octave_samplers: samplers.into(),
|
||||
@ -284,13 +270,13 @@ impl OctavePerlinNoiseSampler {
|
||||
pub fn sample(&self, x: f64, y: f64, z: f64) -> f64 {
|
||||
let mut d = 0f64;
|
||||
|
||||
for (sampler, amplitude, persistence, lacunarity) in izip!(
|
||||
&self.octave_samplers,
|
||||
&self.amplitudes,
|
||||
&self.persistences,
|
||||
&self.lacunarities
|
||||
) {
|
||||
if let Some(sampler) = sampler {
|
||||
let num_octaves = self.octave_samplers.len();
|
||||
for i in 0..num_octaves {
|
||||
if let Some(sampler) = &self.octave_samplers[i] {
|
||||
let lacunarity = self.lacunarities[i];
|
||||
let amplitude = self.amplitudes[i];
|
||||
let persistence = self.persistences[i];
|
||||
|
||||
let g = sampler.sample_no_fade(
|
||||
Self::maintain_precision(x * lacunarity),
|
||||
Self::maintain_precision(y * lacunarity),
|
||||
|
||||
@ -216,7 +216,6 @@ impl ProtoChunk {
|
||||
mod test {
|
||||
use std::{fs, path::Path};
|
||||
|
||||
use itertools::Itertools;
|
||||
use pumpkin_core::math::vector2::Vector2;
|
||||
|
||||
use crate::read_data_from_file;
|
||||
@ -235,7 +234,7 @@ mod test {
|
||||
.flat_block_map
|
||||
.into_iter()
|
||||
.map(|state| state.state_id)
|
||||
.collect_vec()
|
||||
.collect::<Vec<u16>>()
|
||||
);
|
||||
}
|
||||
|
||||
@ -252,7 +251,7 @@ mod test {
|
||||
.flat_block_map
|
||||
.into_iter()
|
||||
.map(|state| state.state_id)
|
||||
.collect_vec()
|
||||
.collect::<Vec<u16>>()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -21,7 +21,6 @@ pumpkin-protocol = { path = "../pumpkin-protocol" }
|
||||
pumpkin-registry = { path = "../pumpkin-registry" }
|
||||
pumpkin-macros = { path = "../pumpkin-macros" }
|
||||
|
||||
itertools.workspace = true
|
||||
log.workspace = true
|
||||
crossbeam.workspace = true
|
||||
uuid.workspace = true
|
||||
@ -31,7 +30,6 @@ thiserror.workspace = true
|
||||
|
||||
num-traits.workspace = true
|
||||
num-derive.workspace = true
|
||||
parking_lot.workspace = true
|
||||
|
||||
# config
|
||||
serde.workspace = true
|
||||
@ -56,14 +54,14 @@ reqwest = { version = "0.12.9", default-features = false, features = [
|
||||
] }
|
||||
|
||||
sha1 = "0.10.6"
|
||||
digest = "=0.11.0-pre.9"
|
||||
|
||||
# velocity en
|
||||
hmac = "0.12.1"
|
||||
sha2 = "0.10.8"
|
||||
|
||||
# icon loading
|
||||
base64 = "0.22.1"
|
||||
|
||||
# icon loading
|
||||
png = "0.17.15"
|
||||
|
||||
# logging
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
use crate::entity::player::Player;
|
||||
use crate::server::Server;
|
||||
use itertools::Itertools;
|
||||
use pumpkin_core::text::TextComponent;
|
||||
use pumpkin_core::GameMode;
|
||||
use pumpkin_inventory::container_click::{
|
||||
@ -59,11 +58,11 @@ impl Player {
|
||||
|
||||
let container = OptionallyCombinedContainer::new(&mut inventory, container);
|
||||
|
||||
let slots = container
|
||||
let slots: Vec<Slot> = container
|
||||
.all_slots_ref()
|
||||
.into_iter()
|
||||
.map(Slot::from)
|
||||
.collect_vec();
|
||||
.collect();
|
||||
|
||||
let carried_item = self
|
||||
.carried_item
|
||||
@ -462,7 +461,7 @@ impl Player {
|
||||
}
|
||||
|
||||
async fn get_current_players_in_container(&self, server: &Server) -> Vec<Arc<Self>> {
|
||||
let player_ids = {
|
||||
let player_ids: Vec<i32> = {
|
||||
let open_containers = server.open_containers.read().await;
|
||||
open_containers
|
||||
.get(&self.open_container.load().unwrap())
|
||||
@ -470,7 +469,7 @@ impl Player {
|
||||
.all_player_ids()
|
||||
.into_iter()
|
||||
.filter(|player_id| *player_id != self.entity_id())
|
||||
.collect_vec()
|
||||
.collect()
|
||||
};
|
||||
let player_token = self.gameprofile.id;
|
||||
|
||||
@ -493,7 +492,7 @@ impl Player {
|
||||
player_ids.contains(&entity_id).then(|| player.clone())
|
||||
}
|
||||
})
|
||||
.collect_vec();
|
||||
.collect();
|
||||
players
|
||||
}
|
||||
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use async_trait::async_trait;
|
||||
use itertools::Itertools;
|
||||
use pumpkin_config::BASIC_CONFIG;
|
||||
use pumpkin_core::text::TextComponent;
|
||||
|
||||
@ -35,10 +34,7 @@ impl CommandExecutor for ListExecutor {
|
||||
"There are {} of a max of {} players online: {}",
|
||||
players.len(),
|
||||
BASIC_CONFIG.max_players,
|
||||
players
|
||||
.iter()
|
||||
.map(|player| &player.gameprofile.name)
|
||||
.join(", ")
|
||||
get_player_names(players)
|
||||
)
|
||||
};
|
||||
|
||||
@ -48,6 +44,17 @@ impl CommandExecutor for ListExecutor {
|
||||
}
|
||||
}
|
||||
|
||||
fn get_player_names(players: Vec<Arc<Player>>) -> String {
|
||||
let mut names = String::new();
|
||||
for player in players {
|
||||
if !names.is_empty() {
|
||||
names.push_str(", ");
|
||||
}
|
||||
names.push_str(&player.gameprofile.name);
|
||||
}
|
||||
names
|
||||
}
|
||||
|
||||
pub fn init_command_tree<'a>() -> CommandTree<'a> {
|
||||
CommandTree::new(NAMES, DESCRIPTION).execute(&ListExecutor)
|
||||
}
|
||||
|
||||
@ -9,7 +9,6 @@ use crate::{
|
||||
error::PumpkinError,
|
||||
server::Server,
|
||||
};
|
||||
use itertools::Itertools;
|
||||
use level_time::LevelTime;
|
||||
use pumpkin_config::BasicConfiguration;
|
||||
use pumpkin_core::math::vector2::Vector2;
|
||||
@ -224,11 +223,7 @@ impl World {
|
||||
server: &Server,
|
||||
) {
|
||||
let command_dispatcher = &server.command_dispatcher;
|
||||
let dimensions = &server
|
||||
.dimensions
|
||||
.iter()
|
||||
.map(DimensionType::name)
|
||||
.collect_vec();
|
||||
let dimensions: Vec<&str> = server.dimensions.iter().map(DimensionType::name).collect();
|
||||
|
||||
// This code follows the vanilla packet order
|
||||
let entity_id = player.entity_id();
|
||||
@ -245,7 +240,7 @@ impl World {
|
||||
.send_packet(&CLogin::new(
|
||||
entity_id,
|
||||
base_config.hardcore,
|
||||
dimensions,
|
||||
&dimensions,
|
||||
base_config.max_players.into(),
|
||||
base_config.view_distance.into(), // TODO: view distance
|
||||
base_config.simulation_distance.into(), // TODO: sim view dinstance
|
||||
|
||||
Loading…
Reference in New Issue
Block a user