Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
105 commits
Select commit Hold shift + click to select a range
b9f5954
Started on Bedrock Inventory
Exterminate5573 Dec 23, 2025
7f1bb08
Why bedrock
Exterminate5573 Dec 23, 2025
9e61009
Work in progress
Exterminate5573 Dec 23, 2025
6cbdf8e
Functional (kinda)
Exterminate5573 Dec 23, 2025
83a0edd
Actuall Functional (kinda)
Exterminate5573 Dec 23, 2025
1b57121
Request Tracking
Exterminate5573 Dec 24, 2025
dc5a981
small cleanup
Exterminate5573 Dec 24, 2025
eb8eb7b
Safety checks
Exterminate5573 Dec 24, 2025
5d49fe7
Change cursor handling
Exterminate5573 Dec 24, 2025
6e642ea
Fix issues
Exterminate5573 Dec 24, 2025
1e92e07
Furnaces
Exterminate5573 Dec 25, 2025
ad9bc9d
Container + Inventory support
Exterminate5573 Dec 26, 2025
4981236
Furnace UI sync (WIP)
Exterminate5573 Dec 26, 2025
4f60d13
extremely experimental QUICK_MOVE
Exterminate5573 Dec 26, 2025
81eb773
Fix some docs
Exterminate5573 Dec 26, 2025
79493ba
Brewing Stand UI (WIP)
Exterminate5573 Dec 26, 2025
4340fd6
More things
Exterminate5573 Dec 28, 2025
a125edc
Dispenser and Dropper
Exterminate5573 Dec 28, 2025
db96e41
Make a start on crafting
Exterminate5573 Dec 28, 2025
ae33d2c
Yikes
Exterminate5573 Dec 28, 2025
555d76a
I dont even know anymore
Exterminate5573 Dec 29, 2025
958423a
Fix block tags
Exterminate5573 Dec 29, 2025
115a9bd
Bandaid fix for out of bounds slots
Exterminate5573 Dec 30, 2025
3815a1a
help
Exterminate5573 Dec 30, 2025
c05f656
Crafting!!!
Exterminate5573 Jan 6, 2026
77541fa
More code I am not proud of
Exterminate5573 Jan 6, 2026
b4546fb
Help
Exterminate5573 Jan 6, 2026
c2ccb44
Merge branch 'refs/heads/main' into feat/inventory
Exterminate5573 Jan 7, 2026
79d6657
massive cleanup
Exterminate5573 Jan 7, 2026
f9856b5
Fix shaped recipes and add item tags
Exterminate5573 Jan 7, 2026
6973f46
Cursed recipe book init
Exterminate5573 Jan 7, 2026
f584305
View recipe output
Exterminate5573 Jan 8, 2026
29a938b
Crafting amount fix
Exterminate5573 Jan 8, 2026
1420ad8
Anvil Stuff
Exterminate5573 Jan 8, 2026
0f501f8
Temporary Double Chest implementation
Exterminate5573 Jan 8, 2026
0dd8623
Beacon Payments
Exterminate5573 Jan 9, 2026
8fb0e8f
Send more beacon properties
Exterminate5573 Jan 9, 2026
282c4cc
Start on SmithingTable
Exterminate5573 Jan 10, 2026
b9745cf
Isolate experimental changes
RaphiMC Jan 10, 2026
6717d6c
Fix
Exterminate5573 Jan 13, 2026
abaa1aa
Smithing Table
Exterminate5573 Jan 13, 2026
3e0bf77
Hopper
Exterminate5573 Jan 14, 2026
53489db
Merge branch 'main' into feat/inventory
Exterminate5573 Jan 19, 2026
a6d320e
Update branch
Exterminate5573 Jan 19, 2026
90fd16c
Merge branch 'main' into feat/inventory
Exterminate5573 Jan 21, 2026
2a1a320
Fix item desync potentially causing a crash and disable QUICK_MOVE as…
Exterminate5573 Jan 23, 2026
a5ba484
Merge branch 'main' into feat/inventory
Exterminate5573 Jan 23, 2026
85912c5
Merge branch 'main' into feat/inventory
Exterminate5573 Jan 24, 2026
e2a2b9a
Fix merge issues
Exterminate5573 Jan 24, 2026
f91acde
Merge branch 'main' into feat/inventory
Exterminate5573 Jan 26, 2026
8309aed
Fix item placing
Exterminate5573 Jan 26, 2026
91c59cf
Fix dropping cursor item in some containers
Exterminate5573 Jan 26, 2026
4993415
add a todo
Exterminate5573 Jan 26, 2026
30c30bb
Merge branch 'main' into feat/inventory
Exterminate5573 Feb 8, 2026
f64a8ad
Merge branch 'main' into feat/inventory
Exterminate5573 Feb 23, 2026
2ae0fb8
Start on stonecutter
Exterminate5573 Feb 26, 2026
2df498e
Fix Interact packet
Exterminate5573 Feb 26, 2026
e428300
Add a null check
Exterminate5573 Feb 26, 2026
5d34d59
Another NPE check
Exterminate5573 Feb 26, 2026
c5cfd7d
More NPE check
Exterminate5573 Feb 26, 2026
09d313d
Implement barrels and shulker boxes
Exterminate5573 Feb 28, 2026
03f2c96
Merge branch 'main' into feat/inventory
Exterminate5573 Feb 28, 2026
bd72f7a
Convert item lore
Exterminate5573 Feb 28, 2026
25e7a4e
Merge branch 'main' into feat/inventory
Exterminate5573 Mar 4, 2026
f8056bb
Fix merge import
Exterminate5573 Mar 4, 2026
5d0c993
Add workbench to block entities
Exterminate5573 Mar 6, 2026
60a0d3d
Edge case fixes
Exterminate5573 Mar 6, 2026
1775494
Merge branch 'main' into feat/inventory
Exterminate5573 Mar 7, 2026
edc6deb
Some work on stonecutters
Exterminate5573 Mar 10, 2026
661440e
Merge branch 'main' into feat/inventory
Exterminate5573 Mar 13, 2026
d99d412
Grindstone and Stonecutter stuff
Exterminate5573 Mar 18, 2026
f4984f1
Merge branch 'main' into feat/inventory
Exterminate5573 Mar 22, 2026
cb58464
Ender chest
Exterminate5573 Mar 22, 2026
5e747f6
Crafter
Exterminate5573 Mar 22, 2026
8bd2610
Finish Crafter
Exterminate5573 Mar 22, 2026
3b5a20f
Merge branch 'main' into feat/inventory
Exterminate5573 Apr 2, 2026
9ccbdc7
Update for 26.1
Exterminate5573 Apr 2, 2026
01da9b2
Merge branch 'main' into feat/inventory
Exterminate5573 Apr 3, 2026
cd4a780
Some fixes
Exterminate5573 Apr 4, 2026
9d937c4
Major refactor
Exterminate5573 Apr 9, 2026
d14cb4f
Enchant Table
Exterminate5573 Apr 9, 2026
69e99a7
Merge branch 'main' into feat/inventory
Exterminate5573 Apr 17, 2026
4398d24
fix
Exterminate5573 Apr 17, 2026
7cf6002
Refactor crafting helper functions
Exterminate5573 Apr 27, 2026
a2a24aa
More refactoring
Exterminate5573 Apr 27, 2026
ccb1ef6
Merge branch 'main' into feat/inventory
Exterminate5573 Apr 27, 2026
becb707
stuff
Exterminate5573 Apr 27, 2026
d1aacac
fix
Exterminate5573 Apr 29, 2026
4f5a4d1
Stonecutter
Exterminate5573 Apr 30, 2026
f75364e
Merge branch 'main' into feat/inventory
Exterminate5573 May 6, 2026
6088393
Quick Move
Exterminate5573 May 6, 2026
6365205
Proper stack size checking
Exterminate5573 May 6, 2026
5b1eaf1
another
Exterminate5573 May 6, 2026
f42a8fd
Fix ItemDescriptor and use Slot Display registry
Exterminate5573 May 7, 2026
70df2a1
Some cleaning
Exterminate5573 May 8, 2026
9c01b62
Merge branch 'main' into feat/inventory
Exterminate5573 May 19, 2026
4eb1299
Update packets for v975
Exterminate5573 May 19, 2026
d20a848
Merge branch 'main' into feat/inventory
Exterminate5573 May 24, 2026
0a51b47
Merge branch 'main' into feat/inventory
Exterminate5573 May 25, 2026
bafd580
Update items.json
Exterminate5573 May 27, 2026
5135052
Merge branch 'main' into feat/inventory
Exterminate5573 May 27, 2026
dbf3aa4
Merge branch 'main' into feat/inventory
Exterminate5573 Jul 3, 2026
08abdc3
Update items
Exterminate5573 Jul 9, 2026
8e16648
Fix build issues for new version
Exterminate5573 Jul 9, 2026
6f5d7a5
Merge branch 'main' into feat/inventory
Exterminate5573 Jul 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions Data Asset Sources.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,15 @@ This file has been dumped from a BDS server using [CloudburstMC/ProxyPass](https
### data/bedrock/item_tags.json
[PMMP/BedrockData](https://github.com/pmmp/BedrockData/blob/7e91146842837b2267a8e4d8bf8b8dab5e482970/item_tags.json)

### data/bedrock/items.json
[AllayMC/BedrockData](https://github.com/AllayMC/BedrockData/blob/986a7f06bfa6d012d6c39b0c0d0acef25a9535ce/1.26.12.2/items.json)

### data/bedrock/level_sound_event_mappings.json
This file has been generated using `BedrockSoundListGenerator` using data from the official bedrock client's assets folder.

### data/bedrock/particles.json
This file has been generated using `BedrockParticleListGenerator` using data from the official bedrock client's assets folder.

### data/bedrock/runtime_item_states.json
This file has been dumped from a BDS server using [CloudburstMC/ProxyPass](https://github.com/CloudburstMC/ProxyPass).

### data/bedrock/sounds.json
This file has been generated using `BedrockSoundListGenerator` using data from the official bedrock client's assets folder.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,14 @@ public void addFromNetworkTag(final String identifier, final CompoundTag tag) {
}
}
}

if (itemProperties.contains("minecraft:max_stack_size")) {
itemDefinition.maxStackSize = itemProperties.getInt("minecraft:max_stack_size");
}

if (itemProperties.contains("minecraft:allow_offhand")) {
itemDefinition.allowOffhand = itemProperties.getBoolean("minecraft:allow_offhand");
}
}
if (components.get("minecraft:display_name") instanceof CompoundTag displayName) {
if (displayName.get("value") instanceof StringTag value) {
Expand All @@ -92,6 +100,8 @@ public static class ItemDefinition {
private final String identifier;
private String iconComponent;
private String displayNameComponent;
private Integer maxStackSize;
private boolean allowOffhand = false;

public ItemDefinition(final String identifier) {
this.identifier = identifier;
Expand All @@ -109,6 +119,14 @@ public String displayNameComponent() {
return this.displayNameComponent;
}

public Integer maxStackSize() {
return this.maxStackSize;
}

public boolean allowOffhand() {
return this.allowOffhand;
}

}

}

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,13 @@
import com.viaversion.viaversion.api.minecraft.BlockPosition;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.type.Types;
import com.viaversion.viaversion.protocols.v1_21_9to1_21_11.packet.ClientboundPackets1_21_11;
import com.viaversion.viaversion.api.type.types.version.VersionedTypes;
import com.viaversion.viaversion.protocols.v1_21_11to26_1.packet.ClientboundPackets26_1;
import net.raphimc.viabedrock.api.model.entity.Entity;
import net.raphimc.viabedrock.experimental.model.container.ExperimentalContainer;
import net.raphimc.viabedrock.experimental.model.inventory.ItemStackRequestInfo;
import net.raphimc.viabedrock.experimental.storage.ExperimentalInventoryTracker;
import net.raphimc.viabedrock.experimental.types.ExperimentalBedrockTypes;
import net.raphimc.viabedrock.protocol.BedrockProtocol;
import net.raphimc.viabedrock.protocol.ServerboundBedrockPackets;
import net.raphimc.viabedrock.protocol.data.enums.bedrock.generated.InteractPacket_Action;
Expand All @@ -32,6 +37,20 @@

public class ExperimentalPacketFactory {

public static void sendJavaContainerSetContent(final UserConnection user, final ExperimentalContainer container) {
final PacketWrapper containerSetContent = PacketWrapper.create(ClientboundPackets26_1.CONTAINER_SET_CONTENT, user);
writeJavaContainerSetContent(containerSetContent, container);
containerSetContent.send(BedrockProtocol.class);
}

public static void sendJavaContainerProperties(final UserConnection user, final ExperimentalContainer container, final short property, final short value) {
final PacketWrapper containerSetProperty = PacketWrapper.create(ClientboundPackets26_1.CONTAINER_SET_DATA, user);
containerSetProperty.write(Types.VAR_INT, (int) container.javaContainerId()); // container id
containerSetProperty.write(Types.SHORT, property); // property id
containerSetProperty.write(Types.SHORT, value); // property value
containerSetProperty.send(BedrockProtocol.class);
}

public static void sendBedrockPlayerAction(final UserConnection user, long entityId, PlayerActionType actionType, BlockPosition position, BlockPosition resultPosition, int face) {
final PacketWrapper startItemUseOn = PacketWrapper.create(ServerboundBedrockPackets.PLAYER_ACTION, user);
startItemUseOn.write(BedrockTypes.UNSIGNED_VAR_LONG, entityId); // entity runtime id
Expand All @@ -42,6 +61,19 @@ public static void sendBedrockPlayerAction(final UserConnection user, long entit
startItemUseOn.sendToServer(BedrockProtocol.class);
}

public static void sendBedrockInventoryRequest(final UserConnection user, ItemStackRequestInfo[] info) {
final PacketWrapper inventoryRequest = PacketWrapper.create(ServerboundBedrockPackets.ITEM_STACK_REQUEST, user);
inventoryRequest.write(ExperimentalBedrockTypes.ITEM_STACK_REQUESTS, info);
inventoryRequest.sendToServer(BedrockProtocol.class);
}

public static void writeJavaContainerSetContent(final PacketWrapper wrapper, final ExperimentalContainer container) {
wrapper.write(Types.VAR_INT, (int) container.javaContainerId()); // container id
wrapper.write(Types.VAR_INT, 0); // revision
wrapper.write(VersionedTypes.V26_1.itemArray, container.getJavaItems()); // items
wrapper.write(VersionedTypes.V26_1.item, wrapper.user().get(ExperimentalInventoryTracker.class).getHudContainer().getJavaItem(0)); // cursor item
}

public static void sendBedrockDismount(final UserConnection user, long entityRId) {
final PacketWrapper dismountPacket = PacketWrapper.create(ServerboundBedrockPackets.INTERACT, user);
dismountPacket.write(Types.UNSIGNED_BYTE, (short) InteractPacket_Action.StopRiding.getValue()); // action
Expand All @@ -52,7 +84,7 @@ public static void sendBedrockDismount(final UserConnection user, long entityRId

public static void sendJavaSetPassengers(final UserConnection user, Entity vehicle) {
final EntityTracker entityTracker = user.get(EntityTracker.class);
final PacketWrapper setPassengersPacket = PacketWrapper.create(ClientboundPackets1_21_11.SET_PASSENGERS, user);
final PacketWrapper setPassengersPacket = PacketWrapper.create(ClientboundPackets26_1.SET_PASSENGERS, user);
setPassengersPacket.write(Types.VAR_INT, vehicle.javaId()); // vehicle
setPassengersPacket.write(Types.VAR_INT, vehicle.passengers().size()); // number of passengers
for (long passengerUid : vehicle.passengers()) {
Expand Down
Loading