Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-12-24 15:20:25 +01:00
Update to 1.21.30 (#5041)
Co-authored-by: Camotoy <20743703+Camotoy@users.noreply.github.com>
Dieser Commit ist enthalten in:
Ursprung
a5e45ad7ed
Commit
11f76b6c86
@ -54,7 +54,7 @@ public enum GeyserAttributeType {
|
|||||||
|
|
||||||
// Bedrock Attributes
|
// Bedrock Attributes
|
||||||
ABSORPTION(null, "minecraft:absorption", 0f, 1024f, 0f),
|
ABSORPTION(null, "minecraft:absorption", 0f, 1024f, 0f),
|
||||||
EXHAUSTION(null, "minecraft:player.exhaustion", 0f, 5f, 0f),
|
EXHAUSTION(null, "minecraft:player.exhaustion", 0f, 20f, 0f),
|
||||||
EXPERIENCE(null, "minecraft:player.experience", 0f, 1f, 0f),
|
EXPERIENCE(null, "minecraft:player.experience", 0f, 1f, 0f),
|
||||||
EXPERIENCE_LEVEL(null, "minecraft:player.level", 0f, 24791.00f, 0f),
|
EXPERIENCE_LEVEL(null, "minecraft:player.level", 0f, 24791.00f, 0f),
|
||||||
HEALTH(null, "minecraft:health", 0f, 1024f, 20f),
|
HEALTH(null, "minecraft:health", 0f, 1024f, 20f),
|
||||||
|
@ -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()),
|
new CameraPreset(CameraPerspective.FIRST_PERSON.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()),
|
new CameraPreset(CameraPerspective.FREE.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()),
|
new CameraPreset(CameraPerspective.THIRD_PERSON.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()),
|
new CameraPreset(CameraPerspective.THIRD_PERSON_FRONT.id(), "", null, null, null, null, null, null, OptionalBoolean.empty(), null, OptionalBoolean.empty(), null),
|
||||||
new CameraPreset("geyser:free_audio", "minecraft:free", null, null, null, null, null, CameraAudioListener.PLAYER, OptionalBoolean.of(false)),
|
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_effects", "minecraft:free", null, null, null, null, null, CameraAudioListener.CAMERA, OptionalBoolean.of(true)),
|
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_audio_effects", "minecraft:free", null, null, null, null, null, CameraAudioListener.PLAYER, OptionalBoolean.of(true)));
|
new CameraPreset("geyser:free_audio_effects", "minecraft:free", null, null, null, null, null, CameraAudioListener.PLAYER, OptionalBoolean.empty(), null, OptionalBoolean.of(true), null));
|
||||||
|
|
||||||
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++) {
|
||||||
|
@ -32,6 +32,8 @@ 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;
|
||||||
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.FullContainerName;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
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.GeyserImpl;
|
import org.geysermc.geyser.GeyserImpl;
|
||||||
@ -78,6 +80,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater {
|
|||||||
slotPacket.setContainerId(ContainerId.UI);
|
slotPacket.setContainerId(ContainerId.UI);
|
||||||
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));
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -98,6 +101,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater {
|
|||||||
slotPacket.setContainerId(ContainerId.UI);
|
slotPacket.setContainerId(ContainerId.UI);
|
||||||
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));
|
||||||
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
|
||||||
@ -105,6 +109,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater {
|
|||||||
slotPacket.setContainerId(ContainerId.UI);
|
slotPacket.setContainerId(ContainerId.UI);
|
||||||
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));
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -168,6 +173,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater {
|
|||||||
slotPacket.setContainerId(ContainerId.UI);
|
slotPacket.setContainerId(ContainerId.UI);
|
||||||
slotPacket.setSlot(translator.javaSlotToBedrock(slot));
|
slotPacket.setSlot(translator.javaSlotToBedrock(slot));
|
||||||
slotPacket.setItem(itemData);
|
slotPacket.setItem(itemData);
|
||||||
|
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +25,8 @@
|
|||||||
|
|
||||||
package org.geysermc.geyser.inventory.updater;
|
package org.geysermc.geyser.inventory.updater;
|
||||||
|
|
||||||
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType;
|
||||||
|
import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket;
|
||||||
@ -61,6 +63,7 @@ public class ChestInventoryUpdater extends InventoryUpdater {
|
|||||||
InventoryContentPacket contentPacket = new InventoryContentPacket();
|
InventoryContentPacket contentPacket = new InventoryContentPacket();
|
||||||
contentPacket.setContainerId(inventory.getBedrockId());
|
contentPacket.setContainerId(inventory.getBedrockId());
|
||||||
contentPacket.setContents(bedrockItems);
|
contentPacket.setContents(bedrockItems);
|
||||||
|
contentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
session.sendUpstreamPacket(contentPacket);
|
session.sendUpstreamPacket(contentPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,6 +76,7 @@ public class ChestInventoryUpdater extends InventoryUpdater {
|
|||||||
slotPacket.setContainerId(inventory.getBedrockId());
|
slotPacket.setContainerId(inventory.getBedrockId());
|
||||||
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));
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,8 @@
|
|||||||
|
|
||||||
package org.geysermc.geyser.inventory.updater;
|
package org.geysermc.geyser.inventory.updater;
|
||||||
|
|
||||||
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType;
|
||||||
|
import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket;
|
||||||
@ -49,6 +51,7 @@ public class ContainerInventoryUpdater extends InventoryUpdater {
|
|||||||
InventoryContentPacket contentPacket = new InventoryContentPacket();
|
InventoryContentPacket contentPacket = new InventoryContentPacket();
|
||||||
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));
|
||||||
session.sendUpstreamPacket(contentPacket);
|
session.sendUpstreamPacket(contentPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,6 +64,7 @@ public class ContainerInventoryUpdater extends InventoryUpdater {
|
|||||||
slotPacket.setContainerId(inventory.getBedrockId());
|
slotPacket.setContainerId(inventory.getBedrockId());
|
||||||
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));
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,8 @@
|
|||||||
package org.geysermc.geyser.inventory.updater;
|
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.FullContainerName;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket;
|
||||||
@ -56,6 +58,7 @@ public class CrafterInventoryUpdater extends InventoryUpdater {
|
|||||||
contentPacket = new InventoryContentPacket();
|
contentPacket = new InventoryContentPacket();
|
||||||
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));
|
||||||
session.sendUpstreamPacket(contentPacket);
|
session.sendUpstreamPacket(contentPacket);
|
||||||
|
|
||||||
// inventory and hotbar
|
// inventory and hotbar
|
||||||
@ -67,6 +70,7 @@ public class CrafterInventoryUpdater extends InventoryUpdater {
|
|||||||
contentPacket = new InventoryContentPacket();
|
contentPacket = new InventoryContentPacket();
|
||||||
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));
|
||||||
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.
|
||||||
@ -88,6 +92,7 @@ public class CrafterInventoryUpdater extends InventoryUpdater {
|
|||||||
packet.setContainerId(containerId);
|
packet.setContainerId(containerId);
|
||||||
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));
|
||||||
session.sendUpstreamPacket(packet);
|
session.sendUpstreamPacket(packet);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,8 @@
|
|||||||
|
|
||||||
package org.geysermc.geyser.inventory.updater;
|
package org.geysermc.geyser.inventory.updater;
|
||||||
|
|
||||||
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType;
|
||||||
|
import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket;
|
||||||
@ -49,6 +51,7 @@ public class HorseInventoryUpdater extends InventoryUpdater {
|
|||||||
InventoryContentPacket contentPacket = new InventoryContentPacket();
|
InventoryContentPacket contentPacket = new InventoryContentPacket();
|
||||||
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));
|
||||||
session.sendUpstreamPacket(contentPacket);
|
session.sendUpstreamPacket(contentPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,6 +64,7 @@ public class HorseInventoryUpdater extends InventoryUpdater {
|
|||||||
slotPacket.setContainerId(4); // Horse GUI?
|
slotPacket.setContainerId(4); // Horse GUI?
|
||||||
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));
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,8 @@
|
|||||||
package org.geysermc.geyser.inventory.updater;
|
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.FullContainerName;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket;
|
||||||
@ -45,6 +47,7 @@ public class InventoryUpdater {
|
|||||||
InventoryContentPacket contentPacket = new InventoryContentPacket();
|
InventoryContentPacket contentPacket = new InventoryContentPacket();
|
||||||
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));
|
||||||
session.sendUpstreamPacket(contentPacket);
|
session.sendUpstreamPacket(contentPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,6 +57,7 @@ public class InventoryUpdater {
|
|||||||
slotPacket.setContainerId(ContainerId.INVENTORY);
|
slotPacket.setContainerId(ContainerId.INVENTORY);
|
||||||
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));
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,8 @@
|
|||||||
package org.geysermc.geyser.inventory.updater;
|
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.FullContainerName;
|
||||||
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;
|
||||||
@ -46,6 +48,7 @@ public class UIInventoryUpdater extends InventoryUpdater {
|
|||||||
slotPacket.setContainerId(ContainerId.UI);
|
slotPacket.setContainerId(ContainerId.UI);
|
||||||
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));
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -59,6 +62,7 @@ public class UIInventoryUpdater extends InventoryUpdater {
|
|||||||
slotPacket.setContainerId(ContainerId.UI);
|
slotPacket.setContainerId(ContainerId.UI);
|
||||||
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));
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,6 @@ import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.MobArmorEquipment
|
|||||||
import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.MobEquipmentSerializer_v291;
|
import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.MobEquipmentSerializer_v291;
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.PlayerHotbarSerializer_v291;
|
import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.PlayerHotbarSerializer_v291;
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.SetEntityLinkSerializer_v291;
|
import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.SetEntityLinkSerializer_v291;
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.SetEntityMotionSerializer_v291;
|
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.v390.serializer.PlayerSkinSerializer_v390;
|
import org.cloudburstmc.protocol.bedrock.codec.v390.serializer.PlayerSkinSerializer_v390;
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.v407.serializer.InventoryContentSerializer_v407;
|
import org.cloudburstmc.protocol.bedrock.codec.v407.serializer.InventoryContentSerializer_v407;
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.v407.serializer.InventorySlotSerializer_v407;
|
import org.cloudburstmc.protocol.bedrock.codec.v407.serializer.InventorySlotSerializer_v407;
|
||||||
@ -43,6 +42,8 @@ import org.cloudburstmc.protocol.bedrock.codec.v662.serializer.SetEntityMotionSe
|
|||||||
import org.cloudburstmc.protocol.bedrock.codec.v712.serializer.InventoryContentSerializer_v712;
|
import org.cloudburstmc.protocol.bedrock.codec.v712.serializer.InventoryContentSerializer_v712;
|
||||||
import org.cloudburstmc.protocol.bedrock.codec.v712.serializer.InventorySlotSerializer_v712;
|
import org.cloudburstmc.protocol.bedrock.codec.v712.serializer.InventorySlotSerializer_v712;
|
||||||
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.InventorySlotSerializer_v729;
|
||||||
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;
|
||||||
@ -139,6 +140,13 @@ class CodecProcessor {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private static final BedrockPacketSerializer<InventoryContentPacket> INVENTORY_CONTENT_SERIALIZER_V729 = new InventoryContentSerializer_v729() {
|
||||||
|
@Override
|
||||||
|
public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, InventoryContentPacket packet) {
|
||||||
|
throw new IllegalArgumentException("Client cannot send InventoryContentPacket in server-auth inventory environment!");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Serializer that throws an exception when trying to deserialize InventorySlotPacket since server-auth inventory is used.
|
* Serializer that throws an exception when trying to deserialize InventorySlotPacket since server-auth inventory is used.
|
||||||
*/
|
*/
|
||||||
@ -159,6 +167,13 @@ class CodecProcessor {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private static final BedrockPacketSerializer<InventorySlotPacket> INVENTORY_SLOT_SERIALIZER_V729 = new InventorySlotSerializer_v729() {
|
||||||
|
@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.
|
||||||
*/
|
*/
|
||||||
@ -214,16 +229,7 @@ class CodecProcessor {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Serializer that does nothing when trying to deserialize SetEntityMotionPacket since it is not used from the client for codec v291.
|
* Serializer that does nothing when trying to deserialize SetEntityMotionPacket since it is not used from the client.
|
||||||
*/
|
|
||||||
private static final BedrockPacketSerializer<SetEntityMotionPacket> SET_ENTITY_MOTION_SERIALIZER_V291 = new SetEntityMotionSerializer_v291() {
|
|
||||||
@Override
|
|
||||||
public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, SetEntityMotionPacket packet) {
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Serializer that does nothing when trying to deserialize SetEntityMotionPacket since it is not used from the client for codec v662.
|
|
||||||
*/
|
*/
|
||||||
private static final BedrockPacketSerializer<SetEntityMotionPacket> SET_ENTITY_MOTION_SERIALIZER = new SetEntityMotionSerializer_v662() {
|
private static final BedrockPacketSerializer<SetEntityMotionPacket> SET_ENTITY_MOTION_SERIALIZER = new SetEntityMotionSerializer_v662() {
|
||||||
@Override
|
@Override
|
||||||
@ -256,8 +262,27 @@ class CodecProcessor {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
static BedrockCodec processCodec(BedrockCodec codec) {
|
static BedrockCodec processCodec(BedrockCodec codec) {
|
||||||
boolean isPre712 = codec.getProtocolVersion() < 712;
|
boolean is729OrAbove = codec.getProtocolVersion() >= 729;
|
||||||
|
boolean is712OrAbove = codec.getProtocolVersion() >= 712;
|
||||||
|
|
||||||
|
BedrockPacketSerializer<InventoryContentPacket> inventoryContentSerializer;
|
||||||
|
if (is729OrAbove) {
|
||||||
|
inventoryContentSerializer = INVENTORY_CONTENT_SERIALIZER_V729;
|
||||||
|
} else if (is712OrAbove) {
|
||||||
|
inventoryContentSerializer = INVENTORY_CONTENT_SERIALIZER_V712;
|
||||||
|
} else {
|
||||||
|
inventoryContentSerializer = INVENTORY_CONTENT_SERIALIZER_V407;
|
||||||
|
}
|
||||||
|
|
||||||
|
BedrockPacketSerializer<InventorySlotPacket> inventorySlotSerializer;
|
||||||
|
if (is729OrAbove) {
|
||||||
|
inventorySlotSerializer = INVENTORY_SLOT_SERIALIZER_V729;
|
||||||
|
} else if (is712OrAbove) {
|
||||||
|
inventorySlotSerializer = INVENTORY_SLOT_SERIALIZER_V712;
|
||||||
|
} else {
|
||||||
|
inventorySlotSerializer = INVENTORY_SLOT_SERIALIZER_V407;
|
||||||
|
}
|
||||||
|
|
||||||
BedrockCodec.Builder codecBuilder = codec.toBuilder()
|
BedrockCodec.Builder codecBuilder = codec.toBuilder()
|
||||||
// Illegal unused serverbound EDU packets
|
// Illegal unused serverbound EDU packets
|
||||||
.updateSerializer(PhotoTransferPacket.class, ILLEGAL_SERIALIZER)
|
.updateSerializer(PhotoTransferPacket.class, ILLEGAL_SERIALIZER)
|
||||||
@ -286,11 +311,11 @@ class CodecProcessor {
|
|||||||
.updateSerializer(AnvilDamagePacket.class, IGNORED_SERIALIZER)
|
.updateSerializer(AnvilDamagePacket.class, IGNORED_SERIALIZER)
|
||||||
.updateSerializer(RefreshEntitlementsPacket.class, IGNORED_SERIALIZER)
|
.updateSerializer(RefreshEntitlementsPacket.class, IGNORED_SERIALIZER)
|
||||||
// Illegal when serverbound due to Geyser specific setup
|
// Illegal when serverbound due to Geyser specific setup
|
||||||
.updateSerializer(InventoryContentPacket.class, isPre712 ? INVENTORY_CONTENT_SERIALIZER_V407 : INVENTORY_CONTENT_SERIALIZER_V712)
|
.updateSerializer(InventoryContentPacket.class, inventoryContentSerializer)
|
||||||
.updateSerializer(InventorySlotPacket.class, isPre712 ? INVENTORY_SLOT_SERIALIZER_V407 : INVENTORY_SLOT_SERIALIZER_V712)
|
.updateSerializer(InventorySlotPacket.class, inventorySlotSerializer)
|
||||||
// Ignored only when serverbound
|
// Ignored only when serverbound
|
||||||
.updateSerializer(BossEventPacket.class, BOSS_EVENT_SERIALIZER)
|
.updateSerializer(BossEventPacket.class, BOSS_EVENT_SERIALIZER)
|
||||||
.updateSerializer(MobArmorEquipmentPacket.class, isPre712 ? MOB_ARMOR_EQUIPMENT_SERIALIZER_V291 : MOB_ARMOR_EQUIPMENT_SERIALIZER_V712)
|
.updateSerializer(MobArmorEquipmentPacket.class, is712OrAbove ? MOB_ARMOR_EQUIPMENT_SERIALIZER_V712 : MOB_ARMOR_EQUIPMENT_SERIALIZER_V291)
|
||||||
.updateSerializer(PlayerHotbarPacket.class, PLAYER_HOTBAR_SERIALIZER)
|
.updateSerializer(PlayerHotbarPacket.class, PLAYER_HOTBAR_SERIALIZER)
|
||||||
.updateSerializer(PlayerSkinPacket.class, PLAYER_SKIN_SERIALIZER)
|
.updateSerializer(PlayerSkinPacket.class, PLAYER_SKIN_SERIALIZER)
|
||||||
.updateSerializer(SetEntityDataPacket.class, SET_ENTITY_DATA_SERIALIZER)
|
.updateSerializer(SetEntityDataPacket.class, SET_ENTITY_DATA_SERIALIZER)
|
||||||
|
@ -31,6 +31,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.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.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;
|
||||||
@ -49,8 +50,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_v712.CODEC.toBuilder()
|
public static final BedrockCodec DEFAULT_BEDROCK_CODEC = CodecProcessor.processCodec(Bedrock_v729.CODEC.toBuilder()
|
||||||
.minecraftVersion("1.21.20/1.21.21")
|
.minecraftVersion("1.21.30")
|
||||||
.build());
|
.build());
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -74,6 +75,9 @@ public final class GameProtocol {
|
|||||||
SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v686.CODEC.toBuilder()
|
SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v686.CODEC.toBuilder()
|
||||||
.minecraftVersion("1.21.2/1.21.3")
|
.minecraftVersion("1.21.2/1.21.3")
|
||||||
.build()));
|
.build()));
|
||||||
|
SUPPORTED_BEDROCK_CODECS.add(CodecProcessor.processCodec(Bedrock_v712.CODEC.toBuilder()
|
||||||
|
.minecraftVersion("1.21.20 - 1.21.23")
|
||||||
|
.build()));
|
||||||
SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC);
|
SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,6 +39,7 @@ import org.cloudburstmc.nbt.*;
|
|||||||
import org.cloudburstmc.protocol.bedrock.codec.v671.Bedrock_v671;
|
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.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;
|
||||||
@ -110,7 +111,41 @@ public final class BlockRegistryPopulator {
|
|||||||
var blockMappers = ImmutableMap.<ObjectIntPair<String>, Remapper>builder()
|
var blockMappers = ImmutableMap.<ObjectIntPair<String>, Remapper>builder()
|
||||||
.put(ObjectIntPair.of("1_20_80", Bedrock_v671.CODEC.getProtocolVersion()), Conversion685_671::remapBlock)
|
.put(ObjectIntPair.of("1_20_80", Bedrock_v671.CODEC.getProtocolVersion()), Conversion685_671::remapBlock)
|
||||||
.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()), tag -> tag)
|
.put(ObjectIntPair.of("1_21_20", Bedrock_v712.CODEC.getProtocolVersion()), Conversion729_712::remapBlock)
|
||||||
|
.put(ObjectIntPair.of("1_21_30", Bedrock_v729.CODEC.getProtocolVersion()), tag -> { // TODO: Remove me when mappings is updated
|
||||||
|
String name = tag.getString("name");
|
||||||
|
if ("minecraft:sponge".equals(name)) {
|
||||||
|
NbtMapBuilder builder = tag.getCompound("states").toBuilder();
|
||||||
|
builder.remove("sponge_type");
|
||||||
|
NbtMap states = builder.build();
|
||||||
|
return tag.toBuilder().putCompound("states", states).build();
|
||||||
|
}
|
||||||
|
if ("minecraft:tnt".equals(name)) {
|
||||||
|
NbtMapBuilder builder = tag.getCompound("states").toBuilder();
|
||||||
|
builder.remove("allow_underwater_bit");
|
||||||
|
NbtMap states = builder.build();
|
||||||
|
return tag.toBuilder().putCompound("states", states).build();
|
||||||
|
}
|
||||||
|
if ("minecraft:cobblestone_wall".equals(name)) {
|
||||||
|
NbtMapBuilder builder = tag.getCompound("states").toBuilder();
|
||||||
|
builder.remove("wall_block_type");
|
||||||
|
NbtMap states = builder.build();
|
||||||
|
return tag.toBuilder().putCompound("states", states).build();
|
||||||
|
}
|
||||||
|
if ("minecraft:purpur_block".equals(name)) {
|
||||||
|
NbtMapBuilder builder = tag.getCompound("states").toBuilder();
|
||||||
|
builder.remove("chisel_type");
|
||||||
|
NbtMap states = builder.build();
|
||||||
|
return tag.toBuilder().putCompound("states", states).build();
|
||||||
|
}
|
||||||
|
if ("minecraft:structure_void".equals(name)) {
|
||||||
|
NbtMapBuilder builder = tag.getCompound("states").toBuilder();
|
||||||
|
builder.remove("structure_void_type");
|
||||||
|
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
|
||||||
|
@ -0,0 +1,141 @@
|
|||||||
|
package org.geysermc.geyser.registry.populator;
|
||||||
|
|
||||||
|
import org.cloudburstmc.nbt.NbtMap;
|
||||||
|
import org.geysermc.geyser.item.type.Item;
|
||||||
|
import org.geysermc.geyser.registry.type.GeyserMappingItem;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
public class Conversion729_712 {
|
||||||
|
private static final List<String> NEW_PURPUR_BLOCKS = List.of("minecraft:purpur_block", "minecraft:purpur_pillar");
|
||||||
|
private static final List<String> NEW_WALL_BLOCKS = List.of("minecraft:cobblestone_wall", "minecraft:mossy_cobblestone_wall", "minecraft:granite_wall", "minecraft:diorite_wall", "minecraft:andesite_wall", "minecraft:sandstone_wall", "minecraft:brick_wall", "minecraft:stone_brick_wall", "minecraft:mossy_stone_brick_wall", "minecraft:nether_brick_wall", "minecraft:end_stone_brick_wall", "minecraft:prismarine_wall", "minecraft:red_sandstone_wall", "minecraft:red_nether_brick_wall");
|
||||||
|
private static final List<String> NEW_SPONGE_BLOCKS = List.of("minecraft:sponge", "minecraft:wet_sponge");
|
||||||
|
private static final List<String> NEW_TNT_BLOCKS = List.of("minecraft:tnt", "minecraft:underwater_tnt");
|
||||||
|
private static final List<String> NEW_BLOCKS = Stream.of(NEW_PURPUR_BLOCKS, NEW_WALL_BLOCKS, NEW_SPONGE_BLOCKS, NEW_TNT_BLOCKS).flatMap(List::stream).toList();
|
||||||
|
|
||||||
|
static GeyserMappingItem remapItem(Item item, GeyserMappingItem mapping) {
|
||||||
|
String identifier = mapping.getBedrockIdentifier();
|
||||||
|
|
||||||
|
if (!NEW_BLOCKS.contains(identifier)) {
|
||||||
|
return mapping;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (identifier.equals("minecraft:underwater_tnt")) {
|
||||||
|
return mapping.withBedrockIdentifier("minecraft:tnt").withBedrockData(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NEW_PURPUR_BLOCKS.contains(identifier)) {
|
||||||
|
switch (identifier) {
|
||||||
|
case "minecraft:purpur_block" -> { return mapping.withBedrockIdentifier("minecraft:purpur_block").withBedrockData(0); }
|
||||||
|
case "minecraft:purpur_pillar" -> { return mapping.withBedrockIdentifier("minecraft:purpur_block").withBedrockData(1); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NEW_WALL_BLOCKS.contains(identifier)) {
|
||||||
|
switch (identifier) {
|
||||||
|
case "minecraft:cobblestone_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(0); }
|
||||||
|
case "minecraft:mossy_cobblestone_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(1); }
|
||||||
|
case "minecraft:granite_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(2); }
|
||||||
|
case "minecraft:diorite_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(3); }
|
||||||
|
case "minecraft:andesite_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(4); }
|
||||||
|
case "minecraft:sandstone_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(5); }
|
||||||
|
case "minecraft:brick_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(6); }
|
||||||
|
case "minecraft:stone_brick_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(7); }
|
||||||
|
case "minecraft:mossy_stone_brick_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(8); }
|
||||||
|
case "minecraft:nether_brick_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(9); }
|
||||||
|
case "minecraft:end_stone_brick_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(10); }
|
||||||
|
case "minecraft:prismarine_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(11); }
|
||||||
|
case "minecraft:red_sandstone_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(12); }
|
||||||
|
case "minecraft:red_nether_brick_wall" -> { return mapping.withBedrockIdentifier("minecraft:cobblestone_wall").withBedrockData(13); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NEW_SPONGE_BLOCKS.contains(identifier)) {
|
||||||
|
switch (identifier) {
|
||||||
|
case "minecraft:sponge" -> { return mapping.withBedrockIdentifier("minecraft:sponge").withBedrockData(0); }
|
||||||
|
case "minecraft:wet_sponge" -> { return mapping.withBedrockIdentifier("minecraft:sponge").withBedrockData(1); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return mapping;
|
||||||
|
}
|
||||||
|
|
||||||
|
static NbtMap remapBlock(NbtMap tag) {
|
||||||
|
final String name = tag.getString("name");
|
||||||
|
|
||||||
|
if (!NEW_BLOCKS.contains(name)) {
|
||||||
|
return tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
String replacement;
|
||||||
|
|
||||||
|
if (NEW_PURPUR_BLOCKS.contains(name)) {
|
||||||
|
replacement = "minecraft:purpur_block";
|
||||||
|
String purpurType = name.equals("minecraft:purpur_pillar") ? "lines" : "default";
|
||||||
|
|
||||||
|
NbtMap states = tag.getCompound("states")
|
||||||
|
.toBuilder()
|
||||||
|
.putString("chisel_type", purpurType)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NEW_WALL_BLOCKS.contains(name)) {
|
||||||
|
replacement = "minecraft:cobblestone_wall";
|
||||||
|
String wallType;
|
||||||
|
|
||||||
|
switch (name) {
|
||||||
|
case "minecraft:cobblestone_wall" -> wallType = "cobblestone";
|
||||||
|
case "minecraft:mossy_cobblestone_wall" -> wallType = "mossy";
|
||||||
|
case "minecraft:granite_wall" -> wallType = "granite";
|
||||||
|
case "minecraft:diorite_wall" -> wallType = "diorite";
|
||||||
|
case "minecraft:andesite_wall" -> wallType = "andesite";
|
||||||
|
case "minecraft:sandstone_wall" -> wallType = "sandstone";
|
||||||
|
case "minecraft:brick_wall" -> wallType = "brick";
|
||||||
|
case "minecraft:stone_brick_wall" -> wallType = "stone_brick";
|
||||||
|
case "minecraft:mossy_stone_brick_wall" -> wallType = "mossy_stone_brick";
|
||||||
|
case "minecraft:nether_brick_wall" -> wallType = "nether_brick";
|
||||||
|
case "minecraft:end_stone_brick_wall" -> wallType = "end_stone_brick";
|
||||||
|
case "minecraft:prismarine_wall" -> wallType = "prismarine";
|
||||||
|
case "minecraft:red_sandstone_wall" -> wallType = "red_sandstone";
|
||||||
|
case "minecraft:red_nether_brick_wall" -> wallType = "red_nether_brick";
|
||||||
|
default -> throw new IllegalStateException("Unexpected value: " + name);
|
||||||
|
}
|
||||||
|
|
||||||
|
NbtMap states = tag.getCompound("states")
|
||||||
|
.toBuilder()
|
||||||
|
.putString("wall_block_type", wallType)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NEW_SPONGE_BLOCKS.contains(name)) {
|
||||||
|
replacement = "minecraft:sponge";
|
||||||
|
String spongeType = name.equals("minecraft:wet_sponge") ? "wet" : "dry";
|
||||||
|
|
||||||
|
NbtMap states = tag.getCompound("states")
|
||||||
|
.toBuilder()
|
||||||
|
.putString("sponge_type", spongeType)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NEW_TNT_BLOCKS.contains(name)) {
|
||||||
|
replacement = "minecraft:tnt";
|
||||||
|
byte tntType = (byte) (name.equals("minecraft:underwater_tnt") ? 1 : 0);
|
||||||
|
|
||||||
|
NbtMap states = tag.getCompound("states")
|
||||||
|
.toBuilder()
|
||||||
|
.putByte("allow_underwater_bit", tntType)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
return tag.toBuilder().putString("name", replacement).putCompound("states", states).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
return tag;
|
||||||
|
}
|
||||||
|
}
|
@ -42,6 +42,7 @@ import org.cloudburstmc.nbt.NbtUtils;
|
|||||||
import org.cloudburstmc.protocol.bedrock.codec.v671.Bedrock_v671;
|
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.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;
|
||||||
@ -92,7 +93,8 @@ public class ItemRegistryPopulator {
|
|||||||
List<PaletteVersion> paletteVersions = new ArrayList<>(3);
|
List<PaletteVersion> paletteVersions = new ArrayList<>(3);
|
||||||
paletteVersions.add(new PaletteVersion("1_20_80", Bedrock_v671.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion685_671::remapItem));
|
paletteVersions.add(new PaletteVersion("1_20_80", Bedrock_v671.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion685_671::remapItem));
|
||||||
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()));
|
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()));
|
||||||
|
|
||||||
GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap();
|
GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap();
|
||||||
|
|
||||||
|
@ -981,11 +981,11 @@ public abstract class InventoryTranslator {
|
|||||||
|
|
||||||
List<ItemStackResponseContainer> containerEntries = new ArrayList<>();
|
List<ItemStackResponseContainer> containerEntries = new ArrayList<>();
|
||||||
for (Map.Entry<ContainerSlotType, List<ItemStackResponseSlot>> entry : containerMap.entrySet()) {
|
for (Map.Entry<ContainerSlotType, List<ItemStackResponseSlot>> entry : containerMap.entrySet()) {
|
||||||
containerEntries.add(new ItemStackResponseContainer(entry.getKey(), entry.getValue(), new FullContainerName(entry.getKey(), 0)));
|
containerEntries.add(new ItemStackResponseContainer(entry.getKey(), entry.getValue(), new FullContainerName(entry.getKey(), null)));
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemStackResponseSlot cursorEntry = makeItemEntry(0, session.getPlayerInventory().getCursor());
|
ItemStackResponseSlot cursorEntry = makeItemEntry(0, session.getPlayerInventory().getCursor());
|
||||||
containerEntries.add(new ItemStackResponseContainer(ContainerSlotType.CURSOR, Collections.singletonList(cursorEntry), new FullContainerName(ContainerSlotType.CURSOR, 0)));
|
containerEntries.add(new ItemStackResponseContainer(ContainerSlotType.CURSOR, Collections.singletonList(cursorEntry), new FullContainerName(ContainerSlotType.CURSOR, null)));
|
||||||
|
|
||||||
return containerEntries;
|
return containerEntries;
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@ package org.geysermc.geyser.translator.inventory;
|
|||||||
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.ContainerType;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType;
|
||||||
|
import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequest;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequest;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData;
|
||||||
@ -139,6 +140,7 @@ public class OldSmithingTableTranslator extends AbstractBlockInventoryTranslator
|
|||||||
slotPacket.setContainerId(ContainerId.UI);
|
slotPacket.setContainerId(ContainerId.UI);
|
||||||
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));
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,7 @@ import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
|
|||||||
import it.unimi.dsi.fastutil.ints.IntSet;
|
import it.unimi.dsi.fastutil.ints.IntSet;
|
||||||
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.ItemData;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequest;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequest;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData;
|
||||||
@ -83,6 +84,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator {
|
|||||||
contents[i - 36] = inventory.getItem(i).getItemData(session);
|
contents[i - 36] = inventory.getItem(i).getItemData(session);
|
||||||
}
|
}
|
||||||
inventoryContentPacket.setContents(Arrays.asList(contents));
|
inventoryContentPacket.setContents(Arrays.asList(contents));
|
||||||
|
inventoryContentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
session.sendUpstreamPacket(inventoryContentPacket);
|
session.sendUpstreamPacket(inventoryContentPacket);
|
||||||
|
|
||||||
// Armor
|
// Armor
|
||||||
@ -99,12 +101,14 @@ public class PlayerInventoryTranslator extends InventoryTranslator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
armorContentPacket.setContents(Arrays.asList(contents));
|
armorContentPacket.setContents(Arrays.asList(contents));
|
||||||
|
armorContentPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
session.sendUpstreamPacket(armorContentPacket);
|
session.sendUpstreamPacket(armorContentPacket);
|
||||||
|
|
||||||
// Offhand
|
// Offhand
|
||||||
InventoryContentPacket offhandPacket = new InventoryContentPacket();
|
InventoryContentPacket offhandPacket = new InventoryContentPacket();
|
||||||
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));
|
||||||
session.sendUpstreamPacket(offhandPacket);
|
session.sendUpstreamPacket(offhandPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,6 +130,7 @@ public class PlayerInventoryTranslator extends InventoryTranslator {
|
|||||||
slotPacket.setItem(inventory.getItem(i).getItemData(session));
|
slotPacket.setItem(inventory.getItem(i).getItemData(session));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -162,11 +167,13 @@ public class PlayerInventoryTranslator extends InventoryTranslator {
|
|||||||
slotPacket.setSlot(slot + 27);
|
slotPacket.setSlot(slot + 27);
|
||||||
}
|
}
|
||||||
slotPacket.setItem(bedrockItem);
|
slotPacket.setItem(bedrockItem);
|
||||||
|
slotPacket.setContainerNameData(new FullContainerName(ContainerSlotType.ANVIL_INPUT, null));
|
||||||
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));
|
||||||
session.sendUpstreamPacket(offhandPacket);
|
session.sendUpstreamPacket(offhandPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ package org.geysermc.geyser.translator.inventory.horse;
|
|||||||
|
|
||||||
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.ItemData;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket;
|
||||||
@ -94,6 +95,7 @@ public abstract class ChestedHorseInventoryTranslator extends AbstractHorseInven
|
|||||||
InventoryContentPacket contentPacket = new InventoryContentPacket();
|
InventoryContentPacket contentPacket = new InventoryContentPacket();
|
||||||
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));
|
||||||
session.sendUpstreamPacket(contentPacket);
|
session.sendUpstreamPacket(contentPacket);
|
||||||
|
|
||||||
ItemData[] horseItems = new ItemData[chestSize + 1];
|
ItemData[] horseItems = new ItemData[chestSize + 1];
|
||||||
@ -107,6 +109,7 @@ public abstract class ChestedHorseInventoryTranslator extends AbstractHorseInven
|
|||||||
InventoryContentPacket horseContentsPacket = new InventoryContentPacket();
|
InventoryContentPacket horseContentsPacket = new InventoryContentPacket();
|
||||||
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));
|
||||||
session.sendUpstreamPacket(horseContentsPacket);
|
session.sendUpstreamPacket(horseContentsPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,8 @@ import org.cloudburstmc.protocol.bedrock.data.SoundEvent;
|
|||||||
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
|
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.entity.EntityEventType;
|
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.FullContainerName;
|
||||||
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;
|
||||||
@ -167,6 +169,7 @@ public class JavaEntityEventTranslator extends PacketTranslator<ClientboundEntit
|
|||||||
InventoryContentPacket offhandPacket = new InventoryContentPacket();
|
InventoryContentPacket offhandPacket = new InventoryContentPacket();
|
||||||
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));
|
||||||
session.sendUpstreamPacket(offhandPacket);
|
session.sendUpstreamPacket(offhandPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +25,8 @@
|
|||||||
|
|
||||||
package org.geysermc.geyser.translator.protocol.java.inventory;
|
package org.geysermc.geyser.translator.protocol.java.inventory;
|
||||||
|
|
||||||
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType;
|
||||||
|
import org.cloudburstmc.protocol.bedrock.data.inventory.FullContainerName;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack;
|
import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.recipe.Ingredient;
|
import org.geysermc.mcprotocollib.protocol.data.game.recipe.Ingredient;
|
||||||
import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.inventory.ClientboundContainerSetSlotPacket;
|
import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.inventory.ClientboundContainerSetSlotPacket;
|
||||||
@ -180,6 +182,7 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound
|
|||||||
slotPacket.setContainerId(ContainerId.UI);
|
slotPacket.setContainerId(ContainerId.UI);
|
||||||
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));
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
@ -212,6 +215,7 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator<Clientbound
|
|||||||
slotPacket.setContainerId(ContainerId.UI);
|
slotPacket.setContainerId(ContainerId.UI);
|
||||||
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));
|
||||||
session.sendUpstreamPacket(slotPacket);
|
session.sendUpstreamPacket(slotPacket);
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,8 @@ import org.cloudburstmc.nbt.NbtMapBuilder;
|
|||||||
import org.cloudburstmc.nbt.NbtType;
|
import org.cloudburstmc.nbt.NbtType;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition;
|
import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition;
|
||||||
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.FullContainerName;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket;
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.PlayerHotbarPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.PlayerHotbarPacket;
|
||||||
@ -180,6 +182,7 @@ public class InventoryUtils {
|
|||||||
cursorPacket.setContainerId(ContainerId.UI);
|
cursorPacket.setContainerId(ContainerId.UI);
|
||||||
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));
|
||||||
session.sendUpstreamPacket(cursorPacket);
|
session.sendUpstreamPacket(cursorPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BIN
core/src/main/resources/bedrock/block_palette.1_21_30.nbt
Normale Datei
BIN
core/src/main/resources/bedrock/block_palette.1_21_30.nbt
Normale Datei
Binäre Datei nicht angezeigt.
6214
core/src/main/resources/bedrock/creative_items.1_21_30.json
Normale Datei
6214
core/src/main/resources/bedrock/creative_items.1_21_30.json
Normale Datei
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
6898
core/src/main/resources/bedrock/runtime_item_states.1_21_30.json
Normale Datei
6898
core/src/main/resources/bedrock/runtime_item_states.1_21_30.json
Normale Datei
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
@ -8,5 +8,5 @@ org.gradle.vfs.watch=false
|
|||||||
|
|
||||||
group=org.geysermc
|
group=org.geysermc
|
||||||
id=geyser
|
id=geyser
|
||||||
version=2.4.2-SNAPSHOT
|
version=2.4.3-SNAPSHOT
|
||||||
description=Allows for players from Minecraft: Bedrock Edition to join Minecraft: Java Edition servers.
|
description=Allows for players from Minecraft: Bedrock Edition to join Minecraft: Java Edition servers.
|
||||||
|
@ -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.Beta4-20240828.162251-1"
|
protocol-connection = "3.0.0.Beta5-20240916.181041-6"
|
||||||
protocol-common = "3.0.0.Beta4-20240828.162251-1"
|
protocol-common = "3.0.0.Beta5-20240916.181041-6"
|
||||||
protocol-codec = "3.0.0.Beta4-20240828.162251-1"
|
protocol-codec = "3.0.0.Beta5-20240916.181041-6"
|
||||||
raknet = "1.0.0.CR3-20240416.144209-1"
|
raknet = "1.0.0.CR3-20240416.144209-1"
|
||||||
minecraftauth = "4.1.1-20240806.235051-7"
|
minecraftauth = "4.1.1-20240806.235051-7"
|
||||||
mcprotocollib = "1.21-20240725.013034-16"
|
mcprotocollib = "1.21-20240725.013034-16"
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren