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