Commit Graph

816 Commits

Author SHA1 Message Date
Snowiiii
1f8385e890 Add Serverbound Player Input 2024-11-04 22:02:14 +01:00
Snowiiii
f30da32848 Add Serverbound Client Tick End 2024-11-04 21:53:40 +01:00
Snowiiii
3c7106af0b Print raw Packet ID when not found
We now will use Raw Packet IDs instead of hex
2024-11-04 21:48:28 +01:00
user622628252416
87aa5ec493 Commands: Fix Bug, Refactor Arguments, Add /tp (#227)
* fix command dispatch, add/refactor arguments & add tp command

* implement teleport facing location/facing entity

* implement teleport facing location/facing entity

* implement arg_player/arg_entity and refactor commands accordingly

* implement ~ coordinate notation

* refactor arg_position_3d

* major command refactor

* add documentation

* add default names to more argument types

* add argument names to arg_bounded_nums

* change command argument api

---------

Co-authored-by: user622628252416 <nnew8715@gmail.com>
2024-11-03 23:15:49 +01:00
Snowiiii
8db277f63e Minior Changes 2024-11-03 22:36:00 +01:00
Snowiiii
1842e8e6b1 Parse Serverbound Packet IDs from JSON as well
Before only Clientbound Packet IDs where parsed from JSON, Now Serverbound Packet IDs are parsed from JSON as well. This makes porting to new minecraft version much easier
2024-11-03 12:25:10 +01:00
Snowiiii
8f90b29cfe Extractor: Parse and use screens.json 2024-11-03 11:25:15 +01:00
Snowiiii
9e7adec16b Parse Registries from JSON 2024-11-02 16:34:35 +01:00
Snowiiii
b090c34228 Extractor: Make Recipes work 2024-11-01 18:17:19 +01:00
Snowiiii
1b510eaa21 Fix: https://github.com/Snowiiii/Pumpkin/issues/222
Check if item is a block, Because Not every item can be placed
2024-11-01 16:18:01 +01:00
Snowiiii
460e9d3cae Add more informations about blocks
Also fixed light for transparent blocks
2024-11-01 11:01:25 +01:00
Snowiiii
21dd9c194c Split PacketError into 2 Structs
Much nicer now
2024-11-01 10:26:07 +01:00
Snowiiii
9b1e518556 Remove docs from master branch
Its now in a other branch
2024-10-31 18:56:06 +01:00
Snowiiii
acf2fab100 Fix: Block still placed when empty slot 2024-10-31 18:35:03 +01:00
Snowiiii
3fb191fa37 Fix: deadlock when removing player 2024-10-31 17:47:01 +01:00
Alvsch
3f2bbcc7f9 small CChunkData write improvement (#216)
* small CChunkData write improvement

* Reuse palette instead of palette_ids
2024-10-31 17:39:44 +01:00
Polygons1
99c9866840 Fix spelling error (#220) 2024-10-31 14:17:13 +01:00
Snowiiii
14c8c7e362 Add more docs 2024-10-29 23:21:04 +01:00
Snowiiii
9f70b95b9b Split commands into their own Folder
Now its much nicer separate from the command base
2024-10-29 22:47:52 +01:00
Snowiiii
74c4662121 Fix: https://github.com/Snowiiii/Pumpkin/issues/195 2024-10-29 16:35:09 +01:00
suprohub
89640fe0c0 Command /say (#211)
* add say command
2024-10-29 11:07:53 +01:00
suprohub
abbb76ab19 Chunk optimization: remove subarray (#209)
* Removed array helper

* Removed array helper 2

* Add functions in ChunkBlocks

* cargo fmt

* clippy fix
2024-10-29 08:14:57 +01:00
Snowiiii
e0dd8d6b61 Move Chunks things from Client to Player
Also made Chunk handling more robust
2024-10-28 22:48:17 +01:00
suprohub
ba6f50aae0 Super commit (#208) 2024-10-28 21:04:56 +01:00
Snowiiii
79d2f91deb Chunk: Use Air if block is not found
So currently we trough an error and don't load the entire chunk if a block is not found in the registry, Which is often the case when loading worlds from older or newer version than Currently supported. So now we will just not load the not founded blocks and load blocks which we found
2024-10-27 22:45:51 +01:00
DirefulBelt6803
d9fcbf623d Added detailed documentation on how to contribute (#205) 2024-10-27 21:48:55 +01:00
Snowiiii
245053d50c Port Chunk Status to 1.21.3
This sometimes causes problems with some worlds
2024-10-27 19:07:27 +01:00
lokka30
1c048a17cc Implement cross platform signal handling with tokio (#183)
* ctrlc: also handle `sigterm` and `sighup` via `termination` feature

This commit enables the `termination` feature in `ctrlc` so that
`sigterm` and `sighup` are also handled on UNIX systems. This in turn
improves Docker compatibility since containers now listen to the
`SIGTERM` signal it sends to containers when trying to stop the
container via `Ctrl-C` whilst attached.

* Replace `ctrlc` signal handling with `tokio`

This removes the `ctrlc` crate from the project, replacing (and upgrading) its functionality to also handle `sigterm` and `sighup`.

Sigterm handling is working on UNIX with this commit, I haven't tested Windows compatibility with `Ctrl-C` nor have I tested `sighup` or `sigint`.

Of course, compiles and runs on UNIX. Haven't tested Windows.

* fix: remove unused import; collapse if statement

* main: fix per-os signal handling

Will only compile Windows-specific/Unix-specific code when on their respective environments.

Handles signals in a separate tokio thread so it doesn't suspend the main thread.

Tested to work on UNIX (macOS) but not tested on Windows.

* main: cargo fmt

* main: fix setup_sighandler fn signature on windows

* main: attempt 2 at fixing windows sighandler

* main: enable ctrlc for all non-unix systems

Previously, ctrlc usage in tokio was only enabled on Windows systems
(since UNIX systems have their own signal handling in Pumpkin). Instead
of limiting ctrlc to just Windows, we can make it run on any non-UNIX
system since it should be platform independent anyhow.
2024-10-27 16:29:59 +01:00
lokka30
15d9920826 Implement max player limit (#194)
* Implement max player limit

* Removed unnecessary `return`.

* Moved server full check to start of `handle_login_start`

Also removed unnecessary debug log.

* Use  instead of  for max players; add disable logic

* Fix semicolon missing
2024-10-27 16:18:28 +01:00
Snowiiii
58ace310fc Add PR template 2024-10-27 16:03:28 +01:00
lokka30
1a1a7e351c Add player join and quit messages. (#192)
* pumpkin: Add player join and quit messages.

This implementation will send a 'joined the game' and 'left the game'
message akin to the vanilla server when a player joins or disconnects
respectively.

One caveat with this implementation is that it only broadcasts the
join/quit messages to players in the same world, unlike the vanilla
server, which broadcasts it to all online players (regardless of their
world).

I discussed this with Alex who suggested to keep it as per-world
(seemingly for now?) - [Discord conversation](https://discord.com/channels/1268592337445978193/1268611318617866261/1299668206734147597).

Regardless, this implementation works perfectly on my end. (yes, it has been tested)

* pumpkin: added logs for join/quit

* Move disconnect message code to world from player

Compiles and runs, sends join and quit messages in console with no
errors.

* Move join message from server to world
2024-10-27 14:50:52 +01:00
Snowiiii
a6f3b3f748 Clientbound Packets: use ids from JSON 2024-10-27 14:18:18 +01:00
Alvsch
5507b2069f Added Worldborder (#202)
* Added packets

* Created worldborder struct

* Added worldborder command

* Improved worldborder command

Added messages to worldborder command
Removed all .unwrap()
Created consumer for command

* Fixed small issue

/worldborder add wasn't working properly
2024-10-27 13:11:08 +01:00
DirefulBelt6803
2add2057da Update world.md (#200) 2024-10-27 12:32:17 +01:00
Snowiiii
b23b7421cf Revert "CChunkData optimizations (#193)"
This reverts commit a1b97730bd.

Due to Errors
```
thread 'tokio-runtime-worker' panicked at pumpkin-protocol/src/client/play/c_chunk_data.rs:84:25:
index out of bounds: the len is 4096 but the index is 25374
```
2024-10-27 12:29:53 +01:00
Alexander Medvedev
b17ade7b06 Add own Extractor (#201)
* Add custom extractor

* Add namespaces to blocks

* Fix: Errors
2024-10-27 12:21:55 +01:00
Alexander Medvedev
5e6374ecc2 Update and rename feature_request.md to feature_request.yml 2024-10-27 11:23:14 +01:00
Alexander Medvedev
7eec40fc43 Update bug_report.yml 2024-10-27 11:15:42 +01:00
Alexander Medvedev
9358d70518 Update and rename bug_report.md to bug_report.yml 2024-10-27 11:06:27 +01:00
Alexander Medvedev
9c5736a903 Update bug_report.md 2024-10-27 10:53:44 +01:00
Alvsch
a1b97730bd CChunkData optimizations (#193)
* optimized CChunkData::write

* Added a profiling profile

* fix CI
2024-10-27 00:15:01 +02:00
DirefulBelt6803
527777ec2c Added World Documentation (#190)
* Added World Documentation

* Added new page to vitepress
2024-10-27 00:08:55 +02:00
lokka30
fe934dc74d docker: add compose file for development (#181) 2024-10-26 14:12:36 +02:00
lokka30
5a1c2451dd world docs: corrected to 'world', not 'server' (#191)
These functions access only the world itself's current players, and thus
the old documentation was incorrect saying that it accesses the server's
online players.
2024-10-26 12:25:03 +02:00
kralverde
29b3c8260b make consumers async (#187) 2024-10-25 23:10:38 +02:00
kralverde
c15232929f reduce client id to u16 (#172) 2024-10-25 22:37:11 +02:00
Snowiiii
a395e61c15 Fix: block place in creative 2024-10-25 18:40:10 +02:00
lokka30
b68ad51672 Prevent duplicate profiles (#178)
* Implement get_player_by_uuid for server & world

Similar to the existing functions named get_player_by_name, these functions will search for a player with a matching Uuid.

This implementation is asynchronous and thus better suits being combined with #176, which makes get_player_by_name asynchronous too.

* make get_player_by_name async, rename old fn to get_player_by_name_blocking

Currently, the existing commands system is all that requires the existing blocking version of get_player_by_name function. After discussing in the Discord, it seems renaming the old blocking method with a suffix of _blocking in addition to adding an async version under the original (unmodified) name of get_player_by_name.

* Implement duplicate profile protections

* fmt client_packet.rs

* use hashmap search for players by uuid; move duplicate uuid check

I've confirmed this commit compiles and runs, my client is able to play
normally. However, I haven't confirmed it prevents duplicate usernames
or UUIDs as of yet.

* client_packet: check auth before duplications; check uuid offline too
2024-10-25 17:43:02 +02:00
lokka30
761ca11295 connection_cache: alter favicon logging (#185)
* connection_cache: alter favicon logging

* connection_cache: cargo fmt
2024-10-25 17:42:08 +02:00
Snowiiii
3d0e42315e Fix: Commands
Known Problems:
Target selection currently does not work
2024-10-25 11:58:36 +02:00