mirror of
https://github.com/GeyserMC/Geyser.git
synced 2024-12-22 22:45:04 +01:00
Protocol Update 1.21.40 (#5091)
Co-authored-by: Camotoy <20743703+Camotoy@users.noreply.github.com>
This commit is contained in:
parent
0f184627f3
commit
fb868e41ed
27 changed files with 13367 additions and 21 deletions
|
@ -20,6 +20,9 @@
|
||||||
<AppenderRef ref="TerminalConsole"/>
|
<AppenderRef ref="TerminalConsole"/>
|
||||||
<AppenderRef ref="Console"/>
|
<AppenderRef ref="Console"/>
|
||||||
<AppenderRef ref="File"/>
|
<AppenderRef ref="File"/>
|
||||||
|
<filters>
|
||||||
|
<MarkerFilter marker="packet_logging" onMatch="DENY" onMismatch="ACCEPT" />
|
||||||
|
</filters>
|
||||||
</Root>
|
</Root>
|
||||||
</Loggers>
|
</Loggers>
|
||||||
</Configuration>
|
</Configuration>
|
|
@ -43,13 +43,13 @@ public class CameraDefinitions {
|
||||||
|
|
||||||
static {
|
static {
|
||||||
CAMERA_PRESETS = List.of(
|
CAMERA_PRESETS = List.of(
|
||||||
new CameraPreset(CameraPerspective.FIRST_PERSON.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null),
|
new CameraPreset(CameraPerspective.FIRST_PERSON.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()),
|
||||||
new CameraPreset(CameraPerspective.FREE.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null),
|
new CameraPreset(CameraPerspective.FREE.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()),
|
||||||
new CameraPreset(CameraPerspective.THIRD_PERSON.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null),
|
new CameraPreset(CameraPerspective.THIRD_PERSON.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()),
|
||||||
new CameraPreset(CameraPerspective.THIRD_PERSON_FRONT.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null),
|
new CameraPreset(CameraPerspective.THIRD_PERSON_FRONT.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()),
|
||||||
new CameraPreset("geyser:free_audio", "minecraft:free", null, null, null, null, null, CameraAudioListener.PLAYER, OptionalBoolean.empty(), null, OptionalBoolean.of(false), null),
|
new CameraPreset("geyser:free_audio", "minecraft:free", null, null, null, null, null, CameraAudioListener.PLAYER, OptionalBoolean.empty(), null, OptionalBoolean.of(false), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()),
|
||||||
new CameraPreset("geyser:free_effects", "minecraft:free", null, null, null, null, null, CameraAudioListener.CAMERA, OptionalBoolean.empty(), null, OptionalBoolean.of(true), null),
|
new CameraPreset("geyser:free_effects", "minecraft:free", null, null, null, null, null, CameraAudioListener.CAMERA, OptionalBoolean.empty(), null, OptionalBoolean.of(true), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()),
|
||||||
new CameraPreset("geyser:free_audio_effects", "minecraft:free", null, null, null, null, null, CameraAudioListener.PLAYER, OptionalBoolean.empty(), null, OptionalBoolean.of(true), null));
|
new CameraPreset("geyser:free_audio_effects", "minecraft:free", null, null, null, null, null, CameraAudioListener.PLAYER, OptionalBoolean.empty(), null, OptionalBoolean.of(true), null, null, null, OptionalBoolean.empty(), OptionalBoolean.empty()));
|
||||||
|
|
||||||
SimpleDefinitionRegistry.Builder<NamedDefinition> builder = SimpleDefinitionRegistry.builder();
|
SimpleDefinitionRegistry.Builder<NamedDefinition> builder = SimpleDefinitionRegistry.builder();
|
||||||
for (int i = 0; i < CAMERA_PRESETS.size(); i++) {
|
for (int i = 0; i < CAMERA_PRESETS.size(); i++) {
|
||||||
|
|
|
@ -27,7 +27,6 @@ package org.geysermc.geyser.inventory.updater;
|
||||||
|
|
||||||
import it.unimi.dsi.fastutil.objects.Object2IntMap;
|
import it.unimi.dsi.fastutil.objects.Object2IntMap;
|
||||||
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
|
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
|
||||||
import java.util.stream.IntStream;
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.cloudburstmc.nbt.NbtMap;
|
import org.cloudburstmc.nbt.NbtMap;
|
||||||
import org.cloudburstmc.nbt.NbtMapBuilder;
|
import org.cloudburstmc.nbt.NbtMapBuilder;
|
||||||
|
@ -41,8 +40,8 @@ import org.geysermc.geyser.inventory.AnvilContainer;
|
||||||
import org.geysermc.geyser.inventory.GeyserItemStack;
|
import org.geysermc.geyser.inventory.GeyserItemStack;
|
||||||
import org.geysermc.geyser.inventory.Inventory;
|
import org.geysermc.geyser.inventory.Inventory;
|
||||||
import org.geysermc.geyser.inventory.item.BedrockEnchantment;
|
import org.geysermc.geyser.inventory.item.BedrockEnchantment;
|
||||||
import org.geysermc.geyser.item.enchantment.Enchantment;
|
|
||||||
import org.geysermc.geyser.item.Items;
|
import org.geysermc.geyser.item.Items;
|
||||||
|
import org.geysermc.geyser.item.enchantment.Enchantment;
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
import org.geysermc.geyser.session.cache.tags.EnchantmentTag;
|
import org.geysermc.geyser.session.cache.tags.EnchantmentTag;
|
||||||
import org.geysermc.geyser.session.cache.tags.ItemTag;
|
import org.geysermc.geyser.session.cache.tags.ItemTag;
|
||||||
|
@ -57,6 +56,7 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.S
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
public class AnvilInventoryUpdater extends InventoryUpdater {
|
public class AnvilInventoryUpdater extends InventoryUpdater {
|
||||||
public static final AnvilInventoryUpdater INSTANCE = new AnvilInventoryUpdater();
|
public static final AnvilInventoryUpdater INSTANCE = new AnvilInventoryUpdater();
|
||||||
|
@ -81,6 +81,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater {
|
||||||
slotPacket.setSlot(bedrockSlot);
|
slotPacket.setSlot(bedrockSlot);
|
||||||
slotPacket.setItem(inventory.getItem(i).getItemData(session));
|
slotPacket.setItem(inventory.getItem(i).getItemData(session));
|
||||||
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
slotPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -102,6 +103,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater {
|
||||||
slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot));
|
slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot));
|
||||||
slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session));
|
slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session));
|
||||||
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
slotPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
} else if (lastTargetSlot != javaSlot) {
|
} else if (lastTargetSlot != javaSlot) {
|
||||||
// Update the previous target slot to remove repair cost changes
|
// Update the previous target slot to remove repair cost changes
|
||||||
|
@ -110,6 +112,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater {
|
||||||
slotPacket.setSlot(translator.javaSlotToBedrock(lastTargetSlot));
|
slotPacket.setSlot(translator.javaSlotToBedrock(lastTargetSlot));
|
||||||
slotPacket.setItem(inventory.getItem(lastTargetSlot).getItemData(session));
|
slotPacket.setItem(inventory.getItem(lastTargetSlot).getItemData(session));
|
||||||
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
slotPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,6 +177,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater {
|
||||||
slotPacket.setSlot(translator.javaSlotToBedrock(slot));
|
slotPacket.setSlot(translator.javaSlotToBedrock(slot));
|
||||||
slotPacket.setItem(itemData);
|
slotPacket.setItem(itemData);
|
||||||
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
slotPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,6 +64,7 @@ public class ChestInventoryUpdater extends InventoryUpdater {
|
||||||
contentPacket.setContainerId(inventory.getBedrockId());
|
contentPacket.setContainerId(inventory.getBedrockId());
|
||||||
contentPacket.setContents(bedrockItems);
|
contentPacket.setContents(bedrockItems);
|
||||||
contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
contentPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(contentPacket);
|
session.sendUpstreamPacket(contentPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,6 +78,7 @@ public class ChestInventoryUpdater extends InventoryUpdater {
|
||||||
slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot));
|
slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot));
|
||||||
slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session));
|
slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session));
|
||||||
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
slotPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,7 @@ public class ContainerInventoryUpdater extends InventoryUpdater {
|
||||||
contentPacket.setContainerId(inventory.getBedrockId());
|
contentPacket.setContainerId(inventory.getBedrockId());
|
||||||
contentPacket.setContents(Arrays.asList(bedrockItems));
|
contentPacket.setContents(Arrays.asList(bedrockItems));
|
||||||
contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
contentPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(contentPacket);
|
session.sendUpstreamPacket(contentPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,6 +66,7 @@ public class ContainerInventoryUpdater extends InventoryUpdater {
|
||||||
slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot));
|
slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot));
|
||||||
slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session));
|
slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session));
|
||||||
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
slotPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,6 +59,7 @@ public class CrafterInventoryUpdater extends InventoryUpdater {
|
||||||
contentPacket.setContainerId(inventory.getBedrockId());
|
contentPacket.setContainerId(inventory.getBedrockId());
|
||||||
contentPacket.setContents(Arrays.asList(bedrockItems));
|
contentPacket.setContents(Arrays.asList(bedrockItems));
|
||||||
contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
contentPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(contentPacket);
|
session.sendUpstreamPacket(contentPacket);
|
||||||
|
|
||||||
// inventory and hotbar
|
// inventory and hotbar
|
||||||
|
@ -71,6 +72,7 @@ public class CrafterInventoryUpdater extends InventoryUpdater {
|
||||||
contentPacket.setContainerId(ContainerId.INVENTORY);
|
contentPacket.setContainerId(ContainerId.INVENTORY);
|
||||||
contentPacket.setContents(Arrays.asList(bedrockItems));
|
contentPacket.setContents(Arrays.asList(bedrockItems));
|
||||||
contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
contentPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(contentPacket);
|
session.sendUpstreamPacket(contentPacket);
|
||||||
|
|
||||||
// Crafter result - it doesn't come after the grid, as explained elsewhere.
|
// Crafter result - it doesn't come after the grid, as explained elsewhere.
|
||||||
|
@ -93,6 +95,7 @@ public class CrafterInventoryUpdater extends InventoryUpdater {
|
||||||
packet.setSlot(translator.javaSlotToBedrock(javaSlot));
|
packet.setSlot(translator.javaSlotToBedrock(javaSlot));
|
||||||
packet.setItem(inventory.getItem(javaSlot).getItemData(session));
|
packet.setItem(inventory.getItem(javaSlot).getItemData(session));
|
||||||
packet.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
packet.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
packet.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(packet);
|
session.sendUpstreamPacket(packet);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,7 @@ public class HorseInventoryUpdater extends InventoryUpdater {
|
||||||
contentPacket.setContainerId(inventory.getBedrockId());
|
contentPacket.setContainerId(inventory.getBedrockId());
|
||||||
contentPacket.setContents(Arrays.asList(bedrockItems));
|
contentPacket.setContents(Arrays.asList(bedrockItems));
|
||||||
contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
contentPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(contentPacket);
|
session.sendUpstreamPacket(contentPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,6 +66,7 @@ public class HorseInventoryUpdater extends InventoryUpdater {
|
||||||
slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot));
|
slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot));
|
||||||
slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session));
|
slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session));
|
||||||
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
slotPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,7 @@ public class InventoryUpdater {
|
||||||
contentPacket.setContainerId(ContainerId.INVENTORY);
|
contentPacket.setContainerId(ContainerId.INVENTORY);
|
||||||
contentPacket.setContents(Arrays.asList(bedrockItems));
|
contentPacket.setContents(Arrays.asList(bedrockItems));
|
||||||
contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
contentPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(contentPacket);
|
session.sendUpstreamPacket(contentPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,6 +59,7 @@ public class InventoryUpdater {
|
||||||
slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot));
|
slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot));
|
||||||
slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session));
|
slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session));
|
||||||
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
slotPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ package org.geysermc.geyser.inventory.updater;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName;
|
||||||
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket;
|
||||||
import org.geysermc.geyser.inventory.Inventory;
|
import org.geysermc.geyser.inventory.Inventory;
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
|
@ -49,6 +50,7 @@ public class UIInventoryUpdater extends InventoryUpdater {
|
||||||
slotPacket.setSlot(bedrockSlot);
|
slotPacket.setSlot(bedrockSlot);
|
||||||
slotPacket.setItem(inventory.getItem(i).getItemData(session));
|
slotPacket.setItem(inventory.getItem(i).getItemData(session));
|
||||||
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
slotPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -63,6 +65,7 @@ public class UIInventoryUpdater extends InventoryUpdater {
|
||||||
slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot));
|
slotPacket.setSlot(translator.javaSlotToBedrock(javaSlot));
|
||||||
slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session));
|
slotPacket.setItem(inventory.getItem(javaSlot).getItemData(session));
|
||||||
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
slotPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,7 +63,7 @@ public final class BlockState {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
//noinspection unchecked
|
//noinspection unchecked
|
||||||
return (T) get(property);
|
return (T) value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T extends Comparable<T>> T getValue(Property<T> property, T def) {
|
public <T extends Comparable<T>> T getValue(Property<T> property, T def) {
|
||||||
|
|
|
@ -44,6 +44,8 @@ import org.cloudburstmc.protocol.bedrock.codec.v712.serializer.InventorySlotSeri
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.v712.serializer.MobArmorEquipmentSerializer_v712;
|
import org.cloudburstmc.protocol.bedrock.codec.v712.serializer.MobArmorEquipmentSerializer_v712;
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.v729.serializer.InventoryContentSerializer_v729;
|
import org.cloudburstmc.protocol.bedrock.codec.v729.serializer.InventoryContentSerializer_v729;
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.v729.serializer.InventorySlotSerializer_v729;
|
import org.cloudburstmc.protocol.bedrock.codec.v729.serializer.InventorySlotSerializer_v729;
|
||||||
|
import org.cloudburstmc.protocol.bedrock.codec.v748.serializer.InventoryContentSerializer_v748;
|
||||||
|
import org.cloudburstmc.protocol.bedrock.codec.v748.serializer.InventorySlotSerializer_v748;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.AnvilDamagePacket;
|
import org.cloudburstmc.protocol.bedrock.packet.AnvilDamagePacket;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.BossEventPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.BossEventPacket;
|
||||||
|
@ -140,6 +142,13 @@ class CodecProcessor {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private static final BedrockPacketSerializer<InventoryContentPacket> INVENTORY_CONTENT_SERIALIZER_V748 = new InventoryContentSerializer_v748() {
|
||||||
|
@Override
|
||||||
|
public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventoryContentPacket packet) {
|
||||||
|
throw new IllegalArgumentException("Client cannot send InventoryContentPacket in server-auth inventory environment!");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
private static final BedrockPacketSerializer<InventoryContentPacket> INVENTORY_CONTENT_SERIALIZER_V729 = new InventoryContentSerializer_v729() {
|
private static final BedrockPacketSerializer<InventoryContentPacket> INVENTORY_CONTENT_SERIALIZER_V729 = new InventoryContentSerializer_v729() {
|
||||||
@Override
|
@Override
|
||||||
public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventoryContentPacket packet) {
|
public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventoryContentPacket packet) {
|
||||||
|
@ -174,6 +183,13 @@ class CodecProcessor {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private static final BedrockPacketSerializer<InventorySlotPacket> INVENTORY_SLOT_SERIALIZER_V748 = new InventorySlotSerializer_v748() {
|
||||||
|
@Override
|
||||||
|
public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventorySlotPacket packet) {
|
||||||
|
throw new IllegalArgumentException("Client cannot send InventorySlotPacket in server-auth inventory environment!");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Serializer that does nothing when trying to deserialize BossEventPacket since it is not used from the client.
|
* Serializer that does nothing when trying to deserialize BossEventPacket since it is not used from the client.
|
||||||
*/
|
*/
|
||||||
|
@ -262,11 +278,14 @@ class CodecProcessor {
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
static BedrockCodec processCodec(BedrockCodec codec) {
|
static BedrockCodec processCodec(BedrockCodec codec) {
|
||||||
|
boolean is748OrAbove = codec.getProtocolVersion() >= 748;
|
||||||
boolean is729OrAbove = codec.getProtocolVersion() >= 729;
|
boolean is729OrAbove = codec.getProtocolVersion() >= 729;
|
||||||
boolean is712OrAbove = codec.getProtocolVersion() >= 712;
|
boolean is712OrAbove = codec.getProtocolVersion() >= 712;
|
||||||
|
|
||||||
BedrockPacketSerializer<InventoryContentPacket> inventoryContentSerializer;
|
BedrockPacketSerializer<InventoryContentPacket> inventoryContentSerializer;
|
||||||
if (is729OrAbove) {
|
if (is748OrAbove) {
|
||||||
|
inventoryContentSerializer = INVENTORY_CONTENT_SERIALIZER_V748;
|
||||||
|
} else if (is729OrAbove) {
|
||||||
inventoryContentSerializer = INVENTORY_CONTENT_SERIALIZER_V729;
|
inventoryContentSerializer = INVENTORY_CONTENT_SERIALIZER_V729;
|
||||||
} else if (is712OrAbove) {
|
} else if (is712OrAbove) {
|
||||||
inventoryContentSerializer = INVENTORY_CONTENT_SERIALIZER_V712;
|
inventoryContentSerializer = INVENTORY_CONTENT_SERIALIZER_V712;
|
||||||
|
@ -275,7 +294,9 @@ class CodecProcessor {
|
||||||
}
|
}
|
||||||
|
|
||||||
BedrockPacketSerializer<InventorySlotPacket> inventorySlotSerializer;
|
BedrockPacketSerializer<InventorySlotPacket> inventorySlotSerializer;
|
||||||
if (is729OrAbove) {
|
if (is748OrAbove) {
|
||||||
|
inventorySlotSerializer = INVENTORY_SLOT_SERIALIZER_V748;
|
||||||
|
} else if (is729OrAbove) {
|
||||||
inventorySlotSerializer = INVENTORY_SLOT_SERIALIZER_V729;
|
inventorySlotSerializer = INVENTORY_SLOT_SERIALIZER_V729;
|
||||||
} else if (is712OrAbove) {
|
} else if (is712OrAbove) {
|
||||||
inventorySlotSerializer = INVENTORY_SLOT_SERIALIZER_V712;
|
inventorySlotSerializer = INVENTORY_SLOT_SERIALIZER_V712;
|
||||||
|
|
|
@ -32,6 +32,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v685.Bedrock_v685;
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.v686.Bedrock_v686;
|
import org.cloudburstmc.protocol.bedrock.codec.v686.Bedrock_v686;
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.v712.Bedrock_v712;
|
import org.cloudburstmc.protocol.bedrock.codec.v712.Bedrock_v712;
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.v729.Bedrock_v729;
|
import org.cloudburstmc.protocol.bedrock.codec.v729.Bedrock_v729;
|
||||||
|
import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748;
|
||||||
import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec;
|
import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec;
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodec;
|
import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodec;
|
||||||
|
@ -50,8 +51,8 @@ public final class GameProtocol {
|
||||||
* Default Bedrock codec that should act as a fallback. Should represent the latest available
|
* Default Bedrock codec that should act as a fallback. Should represent the latest available
|
||||||
* release of the game that Geyser supports.
|
* release of the game that Geyser supports.
|
||||||
*/
|
*/
|
||||||
public static final BedrockCodec DEFAULT_BEDROCK_CODEC = CodecProcessor.processCodec(Bedrock_v729.CODEC.toBuilder()
|
public static final BedrockCodec DEFAULT_BEDROCK_CODEC = CodecProcessor.processCodec(Bedrock_v748.CODEC.toBuilder()
|
||||||
.minecraftVersion("1.21.31")
|
.minecraftVersion("1.21.40")
|
||||||
.build());
|
.build());
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -78,8 +79,11 @@ public final class GameProtocol {
|
||||||
SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v712.CODEC.toBuilder()
|
SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v712.CODEC.toBuilder()
|
||||||
.minecraftVersion("1.21.20 - 1.21.23")
|
.minecraftVersion("1.21.20 - 1.21.23")
|
||||||
.build()));
|
.build()));
|
||||||
|
SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v729.CODEC.toBuilder()
|
||||||
|
.minecraftVersion("1.21.30/1.21.31")
|
||||||
|
.build()));
|
||||||
SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC.toBuilder()
|
SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC.toBuilder()
|
||||||
.minecraftVersion("1.21.30/1.21.31")
|
.minecraftVersion("1.21.40")
|
||||||
.build());
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,6 +111,10 @@ public final class GameProtocol {
|
||||||
return session.getUpstream().getProtocolVersion() < Bedrock_v686.CODEC.getProtocolVersion();
|
return session.getUpstream().getProtocolVersion() < Bedrock_v686.CODEC.getProtocolVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isPre1_21_40(GeyserSession session) {
|
||||||
|
return session.getUpstream().getProtocolVersion() < Bedrock_v748.CODEC.getProtocolVersion();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the {@link PacketCodec} for Minecraft: Java Edition.
|
* Gets the {@link PacketCodec} for Minecraft: Java Edition.
|
||||||
*
|
*
|
||||||
|
|
|
@ -209,7 +209,7 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
|
||||||
ResourcePackManifest.Header header = pack.manifest().header();
|
ResourcePackManifest.Header header = pack.manifest().header();
|
||||||
resourcePacksInfo.getResourcePackInfos().add(new ResourcePacksInfoPacket.Entry(
|
resourcePacksInfo.getResourcePackInfos().add(new ResourcePacksInfoPacket.Entry(
|
||||||
header.uuid().toString(), header.version().toString(), codec.size(), pack.contentKey(),
|
header.uuid().toString(), header.version().toString(), codec.size(), pack.contentKey(),
|
||||||
"", header.uuid().toString(), false, false, false));
|
"", header.uuid().toString(), false, false, false, ""));
|
||||||
}
|
}
|
||||||
resourcePacksInfo.setForcedToAccept(GeyserImpl.getInstance().getConfig().isForceResourcePacks());
|
resourcePacksInfo.setForcedToAccept(GeyserImpl.getInstance().getConfig().isForceResourcePacks());
|
||||||
session.sendUpstreamPacket(resourcePacksInfo);
|
session.sendUpstreamPacket(resourcePacksInfo);
|
||||||
|
|
|
@ -48,6 +48,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v671.Bedrock_v671;
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.v685.Bedrock_v685;
|
import org.cloudburstmc.protocol.bedrock.codec.v685.Bedrock_v685;
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.v712.Bedrock_v712;
|
import org.cloudburstmc.protocol.bedrock.codec.v712.Bedrock_v712;
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.v729.Bedrock_v729;
|
import org.cloudburstmc.protocol.bedrock.codec.v729.Bedrock_v729;
|
||||||
|
import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData;
|
import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition;
|
import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition;
|
||||||
import org.geysermc.geyser.GeyserImpl;
|
import org.geysermc.geyser.GeyserImpl;
|
||||||
|
@ -60,6 +61,7 @@ import org.geysermc.geyser.level.block.property.Properties;
|
||||||
import org.geysermc.geyser.level.block.type.Block;
|
import org.geysermc.geyser.level.block.type.Block;
|
||||||
import org.geysermc.geyser.level.block.type.BlockState;
|
import org.geysermc.geyser.level.block.type.BlockState;
|
||||||
import org.geysermc.geyser.level.block.type.FlowerPotBlock;
|
import org.geysermc.geyser.level.block.type.FlowerPotBlock;
|
||||||
|
import org.geysermc.geyser.level.block.type.SkullBlock;
|
||||||
import org.geysermc.geyser.level.physics.PistonBehavior;
|
import org.geysermc.geyser.level.physics.PistonBehavior;
|
||||||
import org.geysermc.geyser.registry.BlockRegistries;
|
import org.geysermc.geyser.registry.BlockRegistries;
|
||||||
import org.geysermc.geyser.registry.Registries;
|
import org.geysermc.geyser.registry.Registries;
|
||||||
|
@ -129,6 +131,16 @@ public final class BlockRegistryPopulator {
|
||||||
.put(ObjectIntPair.of("1_21_0", Bedrock_v685.CODEC.getProtocolVersion()), Conversion712_685::remapBlock)
|
.put(ObjectIntPair.of("1_21_0", Bedrock_v685.CODEC.getProtocolVersion()), Conversion712_685::remapBlock)
|
||||||
.put(ObjectIntPair.of("1_21_20", Bedrock_v712.CODEC.getProtocolVersion()), Conversion729_712::remapBlock)
|
.put(ObjectIntPair.of("1_21_20", Bedrock_v712.CODEC.getProtocolVersion()), Conversion729_712::remapBlock)
|
||||||
.put(ObjectIntPair.of("1_21_30", Bedrock_v729.CODEC.getProtocolVersion()), tag -> tag)
|
.put(ObjectIntPair.of("1_21_30", Bedrock_v729.CODEC.getProtocolVersion()), tag -> tag)
|
||||||
|
.put(ObjectIntPair.of("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()), tag -> {
|
||||||
|
final String name = tag.getString("name");
|
||||||
|
if (name.endsWith("_wood") && tag.getCompound("states").containsKey("stripped_bit")) {
|
||||||
|
NbtMapBuilder builder = tag.getCompound("states").toBuilder();
|
||||||
|
builder.remove("stripped_bit");
|
||||||
|
NbtMap states = builder.build();
|
||||||
|
return tag.toBuilder().putCompound("states", states).build();
|
||||||
|
}
|
||||||
|
return tag;
|
||||||
|
})
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
// We can keep this strong as nothing should be garbage collected
|
// We can keep this strong as nothing should be garbage collected
|
||||||
|
@ -262,6 +274,15 @@ public final class BlockRegistryPopulator {
|
||||||
NbtMap originalBedrockTag = buildBedrockState(blockState, entry);
|
NbtMap originalBedrockTag = buildBedrockState(blockState, entry);
|
||||||
NbtMap bedrockTag = stateMapper.remap(originalBedrockTag);
|
NbtMap bedrockTag = stateMapper.remap(originalBedrockTag);
|
||||||
|
|
||||||
|
// FIXME TEMPORARY
|
||||||
|
if (blockState.block() instanceof SkullBlock && palette.valueInt() >= Bedrock_v748.CODEC.getProtocolVersion()) {
|
||||||
|
// The flattening must be a very interesting process.
|
||||||
|
String skullName = blockState.block().javaIdentifier().asString().replace("_wall", "");
|
||||||
|
bedrockTag = bedrockTag.toBuilder()
|
||||||
|
.putString("name", skullName)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
GeyserBedrockBlock vanillaBedrockDefinition = blockStateOrderedMap.get(bedrockTag);
|
GeyserBedrockBlock vanillaBedrockDefinition = blockStateOrderedMap.get(bedrockTag);
|
||||||
|
|
||||||
GeyserBedrockBlock bedrockDefinition;
|
GeyserBedrockBlock bedrockDefinition;
|
||||||
|
|
|
@ -43,6 +43,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v671.Bedrock_v671;
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.v685.Bedrock_v685;
|
import org.cloudburstmc.protocol.bedrock.codec.v685.Bedrock_v685;
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.v712.Bedrock_v712;
|
import org.cloudburstmc.protocol.bedrock.codec.v712.Bedrock_v712;
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.v729.Bedrock_v729;
|
import org.cloudburstmc.protocol.bedrock.codec.v729.Bedrock_v729;
|
||||||
|
import org.cloudburstmc.protocol.bedrock.codec.v748.Bedrock_v748;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition;
|
import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition;
|
import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition;
|
import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition;
|
||||||
|
@ -95,6 +96,7 @@ public class ItemRegistryPopulator {
|
||||||
paletteVersions.add(new PaletteVersion("1_21_0", Bedrock_v685.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion712_685::remapItem));
|
paletteVersions.add(new PaletteVersion("1_21_0", Bedrock_v685.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion712_685::remapItem));
|
||||||
paletteVersions.add(new PaletteVersion("1_21_20", Bedrock_v712.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion729_712::remapItem));
|
paletteVersions.add(new PaletteVersion("1_21_20", Bedrock_v712.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion729_712::remapItem));
|
||||||
paletteVersions.add(new PaletteVersion("1_21_30", Bedrock_v729.CODEC.getProtocolVersion()));
|
paletteVersions.add(new PaletteVersion("1_21_30", Bedrock_v729.CODEC.getProtocolVersion()));
|
||||||
|
paletteVersions.add(new PaletteVersion("1_21_40", Bedrock_v748.CODEC.getProtocolVersion()));
|
||||||
|
|
||||||
GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap();
|
GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap();
|
||||||
|
|
||||||
|
|
|
@ -141,6 +141,7 @@ public class OldSmithingTableTranslator extends AbstractBlockInventoryTranslator
|
||||||
slotPacket.setSlot(53);
|
slotPacket.setSlot(53);
|
||||||
slotPacket.setItem(UPGRADE_TEMPLATE.apply(session.getUpstream().getProtocolVersion()));
|
slotPacket.setItem(UPGRADE_TEMPLATE.apply(session.getUpstream().getProtocolVersion()));
|
||||||
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
slotPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,6 +85,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator {
|
||||||
}
|
}
|
||||||
inventoryContentPacket.setContents(Arrays.asList(contents));
|
inventoryContentPacket.setContents(Arrays.asList(contents));
|
||||||
inventoryContentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
inventoryContentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
inventoryContentPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(inventoryContentPacket);
|
session.sendUpstreamPacket(inventoryContentPacket);
|
||||||
|
|
||||||
// Armor
|
// Armor
|
||||||
|
@ -102,6 +103,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator {
|
||||||
}
|
}
|
||||||
armorContentPacket.setContents(Arrays.asList(contents));
|
armorContentPacket.setContents(Arrays.asList(contents));
|
||||||
armorContentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
armorContentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
armorContentPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(armorContentPacket);
|
session.sendUpstreamPacket(armorContentPacket);
|
||||||
|
|
||||||
// Offhand
|
// Offhand
|
||||||
|
@ -109,6 +111,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator {
|
||||||
offhandPacket.setContainerId(ContainerId.OFFHAND);
|
offhandPacket.setContainerId(ContainerId.OFFHAND);
|
||||||
offhandPacket.setContents(Collections.singletonList(inventory.getItem(45).getItemData(session)));
|
offhandPacket.setContents(Collections.singletonList(inventory.getItem(45).getItemData(session)));
|
||||||
offhandPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
offhandPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
offhandPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(offhandPacket);
|
session.sendUpstreamPacket(offhandPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,6 +134,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator {
|
||||||
}
|
}
|
||||||
|
|
||||||
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
slotPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -168,12 +172,14 @@ public class PlayerInventoryTranslator extends InventoryTranslator {
|
||||||
}
|
}
|
||||||
slotPacket.setItem(bedrockItem);
|
slotPacket.setItem(bedrockItem);
|
||||||
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
slotPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
} else if (slot == 45) {
|
} else if (slot == 45) {
|
||||||
InventoryContentPacket offhandPacket = new InventoryContentPacket();
|
InventoryContentPacket offhandPacket = new InventoryContentPacket();
|
||||||
offhandPacket.setContainerId(ContainerId.OFFHAND);
|
offhandPacket.setContainerId(ContainerId.OFFHAND);
|
||||||
offhandPacket.setContents(Collections.singletonList(bedrockItem));
|
offhandPacket.setContents(Collections.singletonList(bedrockItem));
|
||||||
offhandPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
offhandPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
offhandPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(offhandPacket);
|
session.sendUpstreamPacket(offhandPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,6 +96,7 @@ public abstract class ChestedHorseInventoryTranslator extends AbstractHorseInven
|
||||||
contentPacket.setContainerId(ContainerId.INVENTORY);
|
contentPacket.setContainerId(ContainerId.INVENTORY);
|
||||||
contentPacket.setContents(Arrays.asList(bedrockItems));
|
contentPacket.setContents(Arrays.asList(bedrockItems));
|
||||||
contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
contentPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(contentPacket);
|
session.sendUpstreamPacket(contentPacket);
|
||||||
|
|
||||||
ItemData[] horseItems = new ItemData[chestSize + 1];
|
ItemData[] horseItems = new ItemData[chestSize + 1];
|
||||||
|
@ -110,6 +111,7 @@ public abstract class ChestedHorseInventoryTranslator extends AbstractHorseInven
|
||||||
horseContentsPacket.setContainerId(inventory.getBedrockId());
|
horseContentsPacket.setContainerId(inventory.getBedrockId());
|
||||||
horseContentsPacket.setContents(Arrays.asList(horseItems));
|
horseContentsPacket.setContents(Arrays.asList(horseItems));
|
||||||
horseContentsPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
horseContentsPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
horseContentsPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(horseContentsPacket);
|
session.sendUpstreamPacket(horseContentsPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,7 @@ import org.geysermc.geyser.GeyserImpl;
|
||||||
import org.geysermc.geyser.level.block.property.Properties;
|
import org.geysermc.geyser.level.block.property.Properties;
|
||||||
import org.geysermc.geyser.level.block.type.BlockState;
|
import org.geysermc.geyser.level.block.type.BlockState;
|
||||||
import org.geysermc.geyser.level.block.type.SkullBlock;
|
import org.geysermc.geyser.level.block.type.SkullBlock;
|
||||||
|
import org.geysermc.geyser.network.GameProtocol;
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
import org.geysermc.geyser.session.cache.SkullCache;
|
import org.geysermc.geyser.session.cache.SkullCache;
|
||||||
import org.geysermc.geyser.skin.SkinProvider;
|
import org.geysermc.geyser.skin.SkinProvider;
|
||||||
|
@ -57,7 +58,9 @@ public class SkullBlockEntityTranslator extends BlockEntityTranslator implements
|
||||||
// Could be a wall skull block otherwise, which has rotation in its Bedrock state
|
// Could be a wall skull block otherwise, which has rotation in its Bedrock state
|
||||||
bedrockNbt.putFloat("Rotation", rotation * 22.5f);
|
bedrockNbt.putFloat("Rotation", rotation * 22.5f);
|
||||||
}
|
}
|
||||||
bedrockNbt.putByte("SkullType", (byte) (blockState.block() instanceof SkullBlock skull ? skull.skullType().bedrockId() : 0));
|
if (GameProtocol.isPre1_21_40(session)) {
|
||||||
|
bedrockNbt.putByte("SkullType", (byte) (blockState.block() instanceof SkullBlock skull ? skull.skullType().bedrockId() : 0));
|
||||||
|
}
|
||||||
if (blockState.getValue(Properties.POWERED)) {
|
if (blockState.getValue(Properties.POWERED)) {
|
||||||
bedrockNbt.putBoolean("MouthMoving", true);
|
bedrockNbt.putBoolean("MouthMoving", true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,7 @@ import org.cloudburstmc.protocol.bedrock.data.entity.EntityEventType;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName;
|
||||||
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.EntityEventPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.EntityEventPacket;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket;
|
||||||
|
@ -170,6 +171,7 @@ public class JavaEntityEventTranslator extends PacketTranslator<ClientboundEntit
|
||||||
offhandPacket.setContainerId(ContainerId.OFFHAND);
|
offhandPacket.setContainerId(ContainerId.OFFHAND);
|
||||||
offhandPacket.setContents(Collections.singletonList(InventoryUtils.getTotemOfUndying().apply(session.getUpstream().getProtocolVersion())));
|
offhandPacket.setContents(Collections.singletonList(InventoryUtils.getTotemOfUndying().apply(session.getUpstream().getProtocolVersion())));
|
||||||
offhandPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
offhandPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
offhandPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(offhandPacket);
|
session.sendUpstreamPacket(offhandPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -183,6 +183,7 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound
|
||||||
slotPacket.setSlot(col + (row * gridDimensions) + offset);
|
slotPacket.setSlot(col + (row * gridDimensions) + offset);
|
||||||
slotPacket.setItem(ItemData.AIR);
|
slotPacket.setItem(ItemData.AIR);
|
||||||
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
slotPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
@ -216,6 +217,7 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound
|
||||||
slotPacket.setSlot(col + (row * gridDimensions) + offset);
|
slotPacket.setSlot(col + (row * gridDimensions) + offset);
|
||||||
slotPacket.setItem(ingredients[index]);
|
slotPacket.setItem(ingredients[index]);
|
||||||
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
slotPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -183,6 +183,7 @@ public class InventoryUtils {
|
||||||
cursorPacket.setSlot(0);
|
cursorPacket.setSlot(0);
|
||||||
cursorPacket.setItem(session.getPlayerInventory().getCursor().getItemData(session));
|
cursorPacket.setItem(session.getPlayerInventory().getCursor().getItemData(session));
|
||||||
cursorPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
cursorPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
|
cursorPacket.setStorageItem(ItemData.AIR);
|
||||||
session.sendUpstreamPacket(cursorPacket);
|
session.sendUpstreamPacket(cursorPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Binary file not shown.
BIN
core/src/main/resources/bedrock/block_palette.1_21_40.nbt
Normal file
BIN
core/src/main/resources/bedrock/block_palette.1_21_40.nbt
Normal file
Binary file not shown.
6262
core/src/main/resources/bedrock/creative_items.1_21_40.json
Normal file
6262
core/src/main/resources/bedrock/creative_items.1_21_40.json
Normal file
File diff suppressed because it is too large
Load diff
6994
core/src/main/resources/bedrock/runtime_item_states.1_21_40.json
Normal file
6994
core/src/main/resources/bedrock/runtime_item_states.1_21_40.json
Normal file
File diff suppressed because it is too large
Load diff
|
@ -10,9 +10,9 @@ netty-io-uring = "0.0.25.Final-SNAPSHOT"
|
||||||
guava = "29.0-jre"
|
guava = "29.0-jre"
|
||||||
gson = "2.3.1" # Provided by Spigot 1.8.8
|
gson = "2.3.1" # Provided by Spigot 1.8.8
|
||||||
websocket = "1.5.1"
|
websocket = "1.5.1"
|
||||||
protocol-connection = "3.0.0.Beta5-20240916.181041-6"
|
protocol-connection = "3.0.0.Beta5-20241021.154858-12"
|
||||||
protocol-common = "3.0.0.Beta5-20240916.181041-6"
|
protocol-common = "3.0.0.Beta5-20241021.154858-12"
|
||||||
protocol-codec = "3.0.0.Beta5-20240916.181041-6"
|
protocol-codec = "3.0.0.Beta5-20241021.154858-12"
|
||||||
raknet = "1.0.0.CR3-20240416.144209-1"
|
raknet = "1.0.0.CR3-20240416.144209-1"
|
||||||
minecraftauth = "4.1.1"
|
minecraftauth = "4.1.1"
|
||||||
mcprotocollib = "1.21-20241010.155958-24"
|
mcprotocollib = "1.21-20241010.155958-24"
|
||||||
|
|
Loading…
Reference in a new issue