Commit Graph

96 Commits

Author SHA1 Message Date
ice_iix cfbcf71b40 Bump image from 0.21.3 to 0.22.3. Closes #238 2020-01-05 09:10:59 -08:00
ice_iix 20bcddfb13 Replace into_iter() -> iter() for arrays, fixes 1.42-nightly warning
warning: this method call currently resolves to `<&[T; N] as IntoIterator>::into_iter` (due to autoref coercions), but that might change in the future when `IntoIterator` impls for arrays are added.
   --> src/entity/player.rs:363:11
    |
363 |         ].into_iter().enumerate() {
    |           ^^^^^^^^^ help: use `.iter()` instead of `.into_iter()` to avoid ambiguity: `iter`
    |
    = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
    = note: for more information, see issue #66145 <https://github.com/rust-lang/rust/issues/66145>
2020-01-04 19:33:05 -08:00
ice_iix 2daca512b0 1.15.1 protocol support (575) (#252)
* Add v1_15_1 for protocol 575

* Update for shifted packet IDs

https://wiki.vg/index.php?title=Pre-release_protocol&oldid=15213#Packets
https://wiki.vg/Pre-release_protocol

* Add SpawnMob packet variant, no metadata

* Add SpawnPlayer packet variant, no metadata

* Add block update actions comments, including beehive

* Add particle packet variant with 64-bit floats

* Add and handle join game and respawn packet variants, with hashed seeds

* Add chunk data packet variant with 3D biomes

https://wiki.vg/index.php?title=Pre-release_protocol&oldid=15213#Chunk_Data
"1024 biome IDs, ordered by x then z then d, in 4×4×4 blocks. Not
present if full chunk is false."

This is a fixed-size array of integers, but Rust doesn't yet support
generics over integers, so the 1024-element array doesn't support
fmt::Debug, hence we wrap it and implement fmt::Debug ourselves.

* Add load_chunk115 to not read chunk data structure biomes

https://wiki.vg/index.php?title=Pre-release_protocol&oldid=15213#Data_structure
2019-12-29 15:55:19 -08:00
ice_iix 19948ff397 Fix redundant imports on rustc 0.35.0. Fixes #175 2019-05-30 18:13:54 -07:00
iceiix e9b336192a Add support for a modded block: rockwool from Thermal Expansion (#153)
The first in support for modded content, a simple custom block: "rockwool" from the Thermal Expansion and Thermal Foundation mods for Forge:

https://ftb.gamepedia.com/Rockwool_(Thermal_Expansion_3)

This makes use of the Forge handshake (#88 #134 #144), matching the mod block names from the negotiation to numeric identifiers in the world to steven_blocks. Rockwool was chosen due to ease of implementation, it looks like wool from vanilla (except is fire-proof), and by supporting it the groundwork necessary is laid for more sophisticated mod support.

Tested with Thermal Expansion on 1.7.10, 1.10.2 (FTB Beyond), and 1.12.2 Forge servers.

* Add `modid` macro token, skipped from vanilla mappings

* Add ThermalExpansionRockwool block (1.7.10)

* Register modded blocks by modid->[data], and lookup block metadata

* Save block IDs from ModIdData/RegistryData to World modded_block_ids

* Add namespaced mod ids for ModIdData, \u{1}=block \u{2}=item

* Add ThermalFoundation's Rockwool (1.12.2)
2019-05-15 12:49:57 -07:00
iceiix 9adf589436
Add 18w50a (451) multiprotocol support (#79)
Adds 18w50a (451) multiprotocol support, last snapshot of 2018
Reference: https://wiki.vg/index.php?title=Pre-release_protocol&oldid=14491

* Use v18w50a module for protocol

* Add blasting, smoking, and suspicious stew recipe types

* Add entity tags to tags packet

* Add chunk data packet variant with height map

* Add update light packet

* Add chunk format parsing with block_count, without skylights, conditionalize on protocol_version >= 451

* Add villager data entity metadata type parsing

https://wiki.vg/Pre-release_protocol#Entity_Metadata

* Add open book and entity sound effect packets
2019-01-10 17:21:19 -08:00
iceiix 11f2d2ae13 1.13.2 (404) multiprotocol support (#67)
Adds support for 1.13.2 protocol (404)
Expands https://github.com/iceiix/steven/issues/18 Enhance protocol support

Metadata:

* Support 1.13.2 slot data format, bool and varint item id, optional damage (moved to NBT)

https://wiki.vg/index.php?title=Slot_Data&type=revision&diff=14363&oldid=7835

Packets:

* Add 1.13.2 packets, and implement all the command data parsers

https://wiki.vg/Command_Data#Parsers

* Send new plugin channel minecraft:brand

https://wiki.vg/Plugin_channels#minecraft:brand

* Add 1.13.2 metadata format, with shifted IDs

https://wiki.vg/Entity_metadata#Entity_Metadata_Format

* Implement particle entity metadata

* Add structures for 16 new packets

Blocks: The Flattening:

* Assign flattened IDs in correct order using new 'offset' macro token

* Assign hierarchical (pre-flattening) block IDs sequentially by counting Some data

* Split VANILLA_ID_MAP into flat/hier struct, to support before and after the flattening

* Extend travis build time to 20 minutes because the blocks macro takes a long time

* Support both flat/hier blocks by passing protocol_version to by_vanilla_id

Add block states and offsets for all blocks, replacing metadata for 1.13+:

* Add stripped logs and what was Log2 to Log
* Add the Wood blocks, should be called bark, previously Axis::None Log
* Add leaves distance and offset
* Add jungle/acacia to Leaves moved from Leaves2
* Add dispenser offsets, direction
* Add note block states
* Add offset None to Missing253 and Missing254, no holes in block states of 1.13.2
* Add bed colors
* Add seagrass, tall seagrass, remove redundant deadgrass, and piston offset
* Add torch, TNT, fire offsets, remove slabs
* Add furnance offset, merges lit into a property
* Add pressure plate offsets, new pressure plates, redstone ore/lit merged
* Add lever offsets, new directions from ceiling/floor, rename LeverDirections
* Add redstone torch offsets, new blocks since lit/unlit is now merged, and standing/wall is split
* Change lever to split face/facing, rm LeverDirection, add AttachedFace
* Add stone button offsets, face/facing similar to lever
* Move face/facing data and variant to AttachedFace, reuse for lever/stonebutton
* Add data_with_facing_and_powered() to AttachedFace, for lever/stonebutton
* Add wooden button offsets each wood
* Add pumpkin without a face
* Add carved pumpkin, portal offsets
* Add lit pumpkin (as jack-o-lantern) offsets after carved pumpkin
* Add repeater offsets, merged into Repeater
* Change brown mushroom block to booleans instead of MushroomVariant
* Add mushroom block offsets, red/brown mushroom blocks, and a new mushroom stem block
* Add command block, cobblestone walls, and flower pot offsets
Empty flower pot, and potted plants including saplings. Rename
variant DarkOak to DarkOakSaplings because it is a sapling, and
remove the duplicate Dandelion variant which causes duplicate blocks.
* Increase recursion limit in steven_blocks
* Add colored banner offsets
* Add wooden slab including double slab, in a different position for pre-1.13 and 1.13
* StoneSlabVariant::Wood -> StoneSlabVariant::PetrifiedWood
* Add fence_gate_offset() for wooden fence gates
* Add frosted ice age, offset
* Add new blocks: kelp, turtle egg, coral, coral fans, sea pickle, blue ice, smooth stone
* Add new blocks: conduit, void air, cave aid, bubble column, last of the 1.13 blocks
2018-12-28 21:22:58 -08:00
iceiix 2b641c9af3 1.7.10 (5) multiprotocol support (#64)
Adds 1.7.10 protocol version 5 support, a major update with significant changes.
Expands https://github.com/iceiix/steven/issues/18 Enhance protocol support

* Add v1_7_10 protocol packet structures and IDs

* EncryptionRequest/Response i16 variant in login protocol

* 1.7.10 slot NBT data parsing

* Support both 1.7/1.8+ item::Stack in read_from, using if protocol_verson

* 1.7.10 chunk format support, ChunkDataBulk_17 and ChunkData_17

* Extract dirty_chunks_by_bitmask from load_chunks17/18/19

* Implement keepalive i32 handler

* Send PlayerPositionLook_HeadY

* Send PlayerBlockPlacement_u8_Item_u8y

* Handle JoinGame_i8_NoDebug

* Handle SpawnPlayer_i32_HeldItem_String

* BlockChange_u8, MultiBlockChange_i16, UpdateBlockEntity_Data, EntityMove_i8_i32_NoGround, EntityLook_i32_NoGround, EntityLookAndMove_i8_i32_NoGround

* UpdateSign_u16, PlayerInfo_String, EntityDestroy_u8, EntityTeleport_i32_i32_NoGround

* Send feet_y = head_y - 1.62, fixes Illegal stance

https://wiki.vg/index.php?title=Protocol&oldid=6003#Player_Position

> Updates the players XYZ position on the server. If HeadY - FeetY is less than 0.1 or greater than 1.65, the stance is illegal and the client will be kicked with the message “Illegal Stance”.

> Absolute feet position, normally HeadY - 1.62. Used to modify the players bounding box when going up stairs, crouching, etc…

* Set on_ground = true in entity teleport, fixes bouncing

* Implement block change, fix metadata/id packing, bounce _u8 through on_block_change

* Implement on_multi_block_change_u16, used with explosions
2018-12-17 15:59:17 -08:00
ice_iix 1cb671093d 1.8.9 (47) multiprotocol support (#57)
Protocol 47 (1.8.9-1.8) is the biggest multiprotocol (https://github.com/iceiix/steven/issues/18) change yet:

* New chunk format (load_chunk18)
* New metadata format (Metadata18)
* New packets and changes to 13 packets

References:

http://wiki.vg/index.php?title=Protocol&oldid=7368
https://wiki.vg/Protocol_version_numbers#Versions_after_the_Netty_rewrite
https://wiki.vg/Protocol_History#1.8
https://github.com/PrismarineJS/minecraft-data/blob/master/data/pc/1.8/protocol.json
1.8 chunk format: https://wiki.vg/index.php?title=Chunk_Format&oldid=6124
1.9 chunk format: https://wiki.vg/index.php?title=Chunk_Format&oldid=7411
1.8 vs 1.9: https://wiki.vg/index.php?title=Chunk_Format&diff=7411&oldid=6124
https://github.com/PrismarineJS/prismarine-chunk/blob/master/src/pc/1.8/section.js
https://github.com/PrismarineJS/prismarine-chunk/blob/master/src/pc/1.8/chunk.js

Details:

* Add 1.8.9 packet IDs from https://github.com/iceiix/steven/pull/37

* Add ChunkDataBulk, parse the ChunkMeta and save data in Vec<u8>

* Add EntityEquipment u16 variant, EntityStatus, ChunkData u16 variants

* SpawnPlayer with added held item

https://wiki.vg/Protocol_History#15w31a Removed Current Item short from Spawn Player (0x0C)

* SpawnObject no UUID and optional velocity

https://wiki.vg/index.php?title=Protocol&oldid=7368#Spawn_Object
https://wiki.vg/Protocol_History#15w31a
Added Entity UUID after entity ID to Spawn Object (0x0E)
Spawn Object always sends velocity, even if data is 0

* SpawnMob no UUID variant

https://wiki.vg/Protocol_History#15w31a
Added Entity UUID after entity ID to Spawn Mob (0x0F)

* Maps packet without tracking position boolean

https://wiki.vg/index.php?title=Protocol&oldid=7368#Map
https://wiki.vg/Protocol_History#15w34a
Added tracking position boolean to Map (0x34)

* Update Entity NBT was removed and Bossbar added (both 0x49) >1.8

https://wiki.vg/index.php?title=Protocol&oldid=7368#Update_Entity_NBT
https://wiki.vg/Protocol_History#15w31a
Removed Update Entity NBT Packet (0x49)
Added Boss Bar packet (0x4

* Use entity without hands

https://wiki.vg/index.php?title=Protocol&oldid=7368#Use_Entity
https://wiki.vg/Protocol_History#15w31a
Added VarInt enum for selected hand in Use Entity (0x02); only sent if type is interact or interact at

* Player block placement, held item stack and face byte variant

https://wiki.vg/index.php?title=Protocol&oldid=7368#Player_Block_Placement
https://wiki.vg/Protocol_History#15w31a
Face for Player Block Placement is now a VarInt enum instead of a byte
Replaced held item (slot) with VarInt enum selected hand in Player Block Placement

* Arm swing without hands, a packet with no fields, uses a ZST

https://wiki.vg/index.php?title=Protocol&oldid=7368#Animation_2
https://github.com/iceiix/steven/pull/57#issuecomment-444289008
https://doc.rust-lang.org/nomicon/exotic-sizes.html

* ClickWindow uses u8 mode, same as in 15w39c

* ClientSettings without hands

* SpectateTeleport is added before ResourcePackStatus

* Copy load_chunk to load_chunk19 and load_chunk18

* 1.8 chunk reading implementation, load_chunk18

* Support both metadata formats, Metadata18/Metadata19

* Remove fmt::Debug

* Implement formatting in MetadataBase and bounce through fmt::Debug
2018-12-09 12:03:55 -08:00
ice_iix 77cd4ecf35 Use field init shorthand, instead of x:x, just x,
https://rust-lang-nursery.github.io/edition-guide/rust-2018/data-types/field-init-shorthand.html

find src -name '*.rs' -exec perl -pe 's/\b(\w+): \1,/$1,/g' -i {} \;
2018-11-04 13:43:30 -08:00
ice_iix 411e4f69a6 Remove unnecessary 'extern crate's in Rust 2018 edition, import macros
https://rust-lang-nursery.github.io/edition-guide/print.html#no-more-extern-crate
https://rust-lang-nursery.github.io/edition-guide/rust-2018/macros/macro-changes.html
https://github.com/iceiix/steven/pull/13#issuecomment-435702507
2018-11-04 12:39:23 -08:00
ice_iix a40cd43a2e Update to use crate:: for current crate, for Rust 2018 edition
From `cargo fix --edition`, see https://rust-lang-nursery.github.io/edition-guide/print.html#the-crate-keyword-refers-to-the-current-crate
2018-11-04 12:06:00 -08:00
ice_iix db02f9e790 Update try!() to new ? syntax for Rust 2018 edition
Not automatically updated, see https://users.rust-lang.org/t/why-does-cargo-fix-replace-try-with-r-try-instead-of/21972/3
There are other tools to replace it, btu this is what I used:
find src -name '*.rs' -exec perl -MRegexp::Common -0777 -pe'$bp=$RE{balanced}{-parens=>"()"}; s/try\!($bp)/substr($1, 1, length($1) - 2) . "?"/ges' -i {} \;
2018-11-04 11:48:51 -08:00
iceiix 90aaeaf16a
Support beta Rust release. Closes #8 (#11)
* Remove seemingly unneeded const on MetadataKey<T> new

* Change biome temperature/moisture to integer, x100 to remove floating-point so can use within stable 'const fn'

* Remove unstable const_fn feature, now using stable const fn: see https://www.reddit.com/r/rust/comments/9msqfn/const_fn_soon_on_stable_rust/

* Test on Rust beta (awaiting 1.31 release for stable)

* Update readme for beta Rust support
2018-11-02 16:57:23 -07:00
ice_iix 80c740c1c5 Update to cgmath 0.16.1, collision 0.18.0
https://github.com/iceiix/steven/issues/4
2018-10-27 18:11:26 -07:00
ice_iix 2f861f815a Use std::time for 5ms light updates instead of time crate
More progress on https://github.com/iceiix/steven/issues/3
2018-09-29 22:36:55 -07:00
llogiq 5e0c041a71 Fixed another batch of clippy warnings
Those are mostly readability-related. Also did a cargo update.
2016-09-15 15:15:52 +01:00
Thinkofname f8be801eac Improve biome color handling 2016-04-24 20:09:24 +01:00
Thinkofname 3038596b27 Simplify chunk loading 2016-04-21 21:20:28 +01:00
Thinkofname d719e117ad Work around a block mapping bug 2016-04-21 13:38:49 +01:00
Thinkofname feb7ea1630 Fix a crash caused by duplicate block mappings 2016-04-21 12:55:42 +01:00
Thinkofname 23e779c0d7 Make BlockSnapshots use BlockStorage 2016-04-20 21:52:04 +01:00
Thinkofname 94bfc1493b Make the storage system used for chunk sections reusable 2016-04-20 21:52:04 +01:00
Thinkofname 027134f4c6 Better handling for unused blocks found during chunk load (Fixes #34) 2016-04-08 01:48:45 +01:00
Thinkofname 51ec66ec5c Don't clean up air blocks from the block map on chunk load (Fixes #34) 2016-04-08 01:18:08 +01:00
Thinkofname a0ae0465b0 Don't over resize chunk sections 2016-04-08 01:01:28 +01:00
Thinkofname 2a21429685 Restore the original lighting when updating a chunk 2016-04-05 21:41:39 +01:00
Thinkofname c117f28b2a Block entity support, implement signs 2016-04-04 22:08:24 +01:00
Thinkofname 3fb58a1b2c Smooth biome colors + biome bug fixes 2016-04-04 15:05:24 +01:00
Thinkofname 17cfa26532 Remove unused block entries from chunks sent by the server 2016-04-04 13:24:33 +01:00
Thinkofname 1544543c6a Optimize chunk loading 2016-04-04 12:37:21 +01:00
Thinkofname 8094fbbd0a Fix chunks being culled at the edge of the screen when they shouldn't 2016-04-03 23:00:00 +01:00
Thinkofname ed4399a3e6 Default sky light to 15 when out of bounds 2016-04-03 21:03:56 +01:00
Thinkofname 98ecd348c6 Replace usages of x,y,z for block positions with Position 2016-04-03 20:53:40 +01:00
Thinkofname 92d773bd72 Move blocks into its own crate to speed up compile times 2016-04-03 18:26:52 +01:00
Scetch 051f836fde Remove unused Display impl. 2016-04-03 11:16:51 -04:00
Scetch dc9e70bd72 Implement lighting for various blocks. 2016-04-03 10:59:44 -04:00
Thinkofname 222c095d8c Fix bounds check on chunk functions 2016-04-03 15:42:54 +01:00
Thinkofname 74c507ec7e Initial implementation of light updates 2016-04-03 15:08:36 +01:00
Thinkofname e7cef1eea7 Simplify material handling to reduce duplicates 2016-04-03 12:58:53 +01:00
Thinkofname d2c5d0641c Fix collisions for slabs 2016-04-03 01:55:10 +01:00
llogiq 0b8cc33c17 Fixed various clippy warnings 2016-04-03 01:26:31 +01:00
Scetch 4efa8c936c Fix some simple collisions. 2016-04-02 12:05:15 -04:00
Scetch 62f33ac712 Don't silently fail. 2016-04-01 17:07:52 -04:00
Scetch b696ade883 Slab collision. 2016-04-01 17:02:05 -04:00
Thinkofname 2ad817c540 Flag surrounding sections as dirty when setting a block 2016-04-01 21:17:21 +01:00
Thinkofname 0d9073420c Add fancy clouds 2016-04-01 20:01:10 +01:00
Scetch c59aca6cd8 Holy collisions batman. 2016-04-01 14:56:08 -04:00
Scetch c8026743cf Fix most connectables, mycelium, and pumpkin/melon stem tints. 2016-04-01 12:45:08 -04:00
Thinkofname c9c44e9309 Fix a few spotted mistakes in blocks 2016-04-01 11:23:23 +01:00
Thinkofname 34c4d5d54d Fix redstone wire 2016-04-01 11:17:27 +01:00
Scetch 96d4184933 Some more progress. Updated TODO list. I'm sorry. 2016-04-01 01:04:08 -04:00
Thinkofname b161e3004c Fix leaves2's culling 2016-03-31 20:51:59 +01:00
Scetch 643737c00f Fix portal, hay bale and purpur pillar. 2016-03-31 13:18:52 -04:00
Thinkofname 7f70fd7dfe Fix double flowers data value
Apparently the unused bits do get used sometimes
2016-03-31 15:39:22 +01:00
Thinkofname 480b7afd3b Multipart model support 2016-03-31 14:59:40 +01:00
Scetch 35d9a2aefa 99 broken blocks in the world, 99 brocken blocks. Track one down, patch it around, 100 broken blocks in the world. 2016-03-30 09:37:04 -04:00
Thinkofname ec50947617 Fix trapdoors 2016-03-29 21:04:35 +01:00
Scetch d621528bb8 A few more block fixes. 2016-03-29 11:14:58 -04:00
Thinkofname 81dd2adc42 Model loading changes and a few more block fixes 2016-03-29 14:52:07 +01:00
Thinkofname af33935f47 Implement update_state for doors + fixes for various blocks 2016-03-29 13:44:46 +01:00
Scetch 1a50332150 Implement block data for a lot of blocks. 2016-03-29 00:46:00 +01:00
Thinkofname fc0a0e3090 Don't cull the chunk section the player is standing in 2016-03-28 00:18:55 +01:00
Thinkofname 7f1e859a87 Implement more blocks 2016-03-26 18:48:10 +00:00
Thinkofname c70f9548c6 Follow some of clippy's suggestions 2016-03-26 14:24:26 +00:00
Thinkofname c25dba3c8b Fix some warnings 2016-03-26 13:28:14 +00:00
Thinkofname 25a743703c Implement stairs 2016-03-26 13:21:19 +00:00
Thinkofname 0855424e52 Move Direction and BlockVertex into better locations 2016-03-26 11:46:37 +00:00
Thinkofname fdfdfa71e2 Add a way to do state updates for blocks 2016-03-26 11:40:53 +00:00
Thinkofname e43b86e750 Fix a typo in Farmland's model name 2016-03-26 10:19:50 +00:00
Thinkofname 75eb62c975 Collisions and normal style movement 2016-03-26 10:19:16 +00:00
Thinkofname d5274c0b5b Add a workaround for leaves' culling changes 2016-03-25 21:15:13 +00:00
Thinkofname ba29de40ae Update to 1.9.0 2016-03-25 20:56:45 +00:00
Thinkofname 69139b2933 Add most blocks without full implementation 2016-03-25 17:30:29 +00:00
Thinkofname 63da7e5452 Fix a mistake with log's data value 2016-03-25 14:26:55 +00:00
Thinkofname 3738c5a0c0 Liquid rendering 2016-03-25 09:47:39 +00:00
Thinkofname d7bc0b2b0f Transparent renderering 2016-03-25 01:17:03 +00:00
Thinkofname de673f1ee1 Implement better chunk culling 2016-03-24 23:27:22 +00:00
Thinkofname 7692c54cf7 More layout changes to chunk rendering 2016-03-24 21:47:11 +00:00
Thinkofname 70ccd5cd3d Tidy up chunk rendering 2016-03-24 21:13:24 +00:00
Thinkofname 99a500b4dd Implement biome colors 2016-03-24 19:39:14 +00:00
Thinkofname f8b8c5eea4 Initial work on implementing biomes 2016-03-24 19:20:26 +00:00
Thinkofname e149a7eca5 Tidy up block defining 2016-03-24 18:37:51 +00:00
Thinkofname 480bfcba5e Add a few more blocks 2016-03-24 18:09:28 +00:00
Thinkofname 12b1dd6445 Initial block model support 2016-03-24 15:39:57 +00:00
Thinkofname baeb6b94aa Rework block system 2016-03-23 21:10:40 +00:00
Thinkofname 2969dfe799 Failed attempt at working with the block system 2016-03-23 18:36:52 +00:00
Thinkofname 49a749534c Don't use the default hasher 2016-03-22 19:49:11 +00:00
Thinkofname e6477bd186 Spectator style movement + chunk unloading 2016-03-21 22:34:57 +00:00
Thinkofname 217ec33413 Render chunks nearest to the player first 2016-03-21 16:51:19 +00:00
Thinkofname 99caa01032 Implement basic culling 2016-03-21 16:36:50 +00:00
Thinkofname ce1c286801 Implement chunk loading 2016-03-21 14:05:13 +00:00
Thinkofname 189c063f67 First attempt at block handling rework 2016-03-20 00:29:35 +00:00
Thinkofname 6bee18b68c Initial rendering implementation 2016-03-19 18:09:10 +00:00
Thinkofname ad81ef8f17 Basic chunk building (not rendering) 2016-03-19 16:32:13 +00:00
Thinkofname 5f17aead7e Base implementation for worlds/blocks 2016-03-18 22:24:30 +00:00