Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-11-19 22:40:18 +01:00
Merge upstream (1.19.4/1.19.70)
Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com>
Dieser Commit ist enthalten in:
Commit
9be2ec9d65
@ -17,7 +17,7 @@ The ultimate goal of this project is to allow Minecraft: Bedrock Edition users t
|
|||||||
|
|
||||||
Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have joined us here!
|
Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have joined us here!
|
||||||
|
|
||||||
### Currently supporting Minecraft Bedrock 1.19.20 - 1.19.63 and Minecraft Java 1.19.3.
|
### Currently supporting Minecraft Bedrock 1.19.30 - 1.19.70 and Minecraft Java 1.19.4.
|
||||||
|
|
||||||
## Setting Up
|
## Setting Up
|
||||||
Take a look [here](https://wiki.geysermc.org/geyser/setup/) for how to set up Geyser.
|
Take a look [here](https://wiki.geysermc.org/geyser/setup/) for how to set up Geyser.
|
||||||
|
@ -31,10 +31,6 @@ dependencies {
|
|||||||
exclude("com.github.GeyserMC", "mcauthlib")
|
exclude("com.github.GeyserMC", "mcauthlib")
|
||||||
}
|
}
|
||||||
|
|
||||||
api(libs.packetlib) {
|
|
||||||
exclude("io.netty", "netty-all")
|
|
||||||
}
|
|
||||||
|
|
||||||
implementation(libs.raknet) {
|
implementation(libs.raknet) {
|
||||||
exclude("io.netty", "*");
|
exclude("io.netty", "*");
|
||||||
}
|
}
|
||||||
|
@ -83,8 +83,6 @@ public interface GeyserConfiguration {
|
|||||||
|
|
||||||
boolean isDisableBedrockScaffolding();
|
boolean isDisableBedrockScaffolding();
|
||||||
|
|
||||||
boolean isAlwaysQuickChangeArmor();
|
|
||||||
|
|
||||||
EmoteOffhandWorkaroundOption getEmoteOffhandWorkaround();
|
EmoteOffhandWorkaroundOption getEmoteOffhandWorkaround();
|
||||||
|
|
||||||
String getDefaultLocale();
|
String getDefaultLocale();
|
||||||
|
@ -111,9 +111,6 @@ public abstract class GeyserJacksonConfiguration implements GeyserConfiguration
|
|||||||
@JsonProperty("disable-bedrock-scaffolding")
|
@JsonProperty("disable-bedrock-scaffolding")
|
||||||
private boolean disableBedrockScaffolding = false;
|
private boolean disableBedrockScaffolding = false;
|
||||||
|
|
||||||
@JsonProperty("always-quick-change-armor")
|
|
||||||
private boolean alwaysQuickChangeArmor = false;
|
|
||||||
|
|
||||||
@JsonDeserialize(using = EmoteOffhandWorkaroundOption.Deserializer.class)
|
@JsonDeserialize(using = EmoteOffhandWorkaroundOption.Deserializer.class)
|
||||||
@JsonProperty("emote-offhand-workaround")
|
@JsonProperty("emote-offhand-workaround")
|
||||||
private EmoteOffhandWorkaroundOption emoteOffhandWorkaround = EmoteOffhandWorkaroundOption.DISABLED;
|
private EmoteOffhandWorkaroundOption emoteOffhandWorkaround = EmoteOffhandWorkaroundOption.DISABLED;
|
||||||
|
@ -486,7 +486,7 @@ public final class EntityDefinitions {
|
|||||||
ENDERMAN = EntityDefinition.inherited(EndermanEntity::new, mobEntityBase)
|
ENDERMAN = EntityDefinition.inherited(EndermanEntity::new, mobEntityBase)
|
||||||
.type(EntityType.ENDERMAN)
|
.type(EntityType.ENDERMAN)
|
||||||
.height(2.9f).width(0.6f)
|
.height(2.9f).width(0.6f)
|
||||||
.addTranslator(MetadataType.BLOCK_STATE, EndermanEntity::setCarriedBlock)
|
.addTranslator(MetadataType.OPTIONAL_BLOCK_STATE, EndermanEntity::setCarriedBlock)
|
||||||
.addTranslator(MetadataType.BOOLEAN, EndermanEntity::setScreaming)
|
.addTranslator(MetadataType.BOOLEAN, EndermanEntity::setScreaming)
|
||||||
.addTranslator(MetadataType.BOOLEAN, EndermanEntity::setAngry)
|
.addTranslator(MetadataType.BOOLEAN, EndermanEntity::setAngry)
|
||||||
.build();
|
.build();
|
||||||
@ -858,7 +858,6 @@ public final class EntityDefinitions {
|
|||||||
{
|
{
|
||||||
EntityDefinition<AbstractHorseEntity> abstractHorseEntityBase = EntityDefinition.inherited(AbstractHorseEntity::new, ageableEntityBase)
|
EntityDefinition<AbstractHorseEntity> abstractHorseEntityBase = EntityDefinition.inherited(AbstractHorseEntity::new, ageableEntityBase)
|
||||||
.addTranslator(MetadataType.BYTE, AbstractHorseEntity::setHorseFlags)
|
.addTranslator(MetadataType.BYTE, AbstractHorseEntity::setHorseFlags)
|
||||||
.addTranslator(null) // UUID of owner
|
|
||||||
.build();
|
.build();
|
||||||
CAMEL = EntityDefinition.inherited(CamelEntity::new, abstractHorseEntityBase)
|
CAMEL = EntityDefinition.inherited(CamelEntity::new, abstractHorseEntityBase)
|
||||||
.type(EntityType.CAMEL)
|
.type(EntityType.CAMEL)
|
||||||
|
@ -28,6 +28,7 @@ package org.geysermc.geyser.entity.type.living.monster;
|
|||||||
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
|
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
|
||||||
import com.github.steveice10.mc.protocol.data.game.entity.metadata.OptionalIntMetadataType;
|
import com.github.steveice10.mc.protocol.data.game.entity.metadata.OptionalIntMetadataType;
|
||||||
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
|
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
|
||||||
|
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
|
||||||
import com.nukkitx.math.vector.Vector3f;
|
import com.nukkitx.math.vector.Vector3f;
|
||||||
import com.nukkitx.protocol.bedrock.data.SoundEvent;
|
import com.nukkitx.protocol.bedrock.data.SoundEvent;
|
||||||
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
|
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
|
||||||
@ -45,13 +46,8 @@ public class EndermanEntity extends MonsterEntity {
|
|||||||
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
|
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCarriedBlock(EntityMetadata<OptionalInt, OptionalIntMetadataType> entityMetadata) {
|
public void setCarriedBlock(IntEntityMetadata entityMetadata) {
|
||||||
int bedrockBlockId;
|
int bedrockBlockId = session.getBlockMappings().getBedrockBlockId(entityMetadata.getPrimitiveValue());;
|
||||||
if (entityMetadata.getValue().isPresent()) {
|
|
||||||
bedrockBlockId = session.getBlockMappings().getBedrockBlockId(entityMetadata.getValue().getAsInt());
|
|
||||||
} else {
|
|
||||||
bedrockBlockId = session.getBlockMappings().getBedrockAirId();
|
|
||||||
}
|
|
||||||
|
|
||||||
dirtyMetadata.put(EntityData.CARRIED_BLOCK, bedrockBlockId);
|
dirtyMetadata.put(EntityData.CARRIED_BLOCK, bedrockBlockId);
|
||||||
}
|
}
|
||||||
|
@ -25,19 +25,18 @@
|
|||||||
|
|
||||||
package org.geysermc.geyser.level.physics;
|
package org.geysermc.geyser.level.physics;
|
||||||
|
|
||||||
import com.github.steveice10.mc.protocol.data.game.level.block.value.PistonValue;
|
|
||||||
import com.nukkitx.math.vector.Vector3i;
|
import com.nukkitx.math.vector.Vector3i;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
public enum Direction {
|
public enum Direction {
|
||||||
DOWN(1, Vector3i.from(0, -1, 0), Axis.Y, PistonValue.DOWN),
|
DOWN(1, Vector3i.from(0, -1, 0), Axis.Y, com.github.steveice10.mc.protocol.data.game.entity.object.Direction.DOWN),
|
||||||
UP(0, Vector3i.UNIT_Y, Axis.Y, PistonValue.UP),
|
UP(0, Vector3i.UNIT_Y, Axis.Y, com.github.steveice10.mc.protocol.data.game.entity.object.Direction.UP),
|
||||||
NORTH(3, Vector3i.from(0, 0, -1), Axis.Z, PistonValue.NORTH),
|
NORTH(3, Vector3i.from(0, 0, -1), Axis.Z, com.github.steveice10.mc.protocol.data.game.entity.object.Direction.NORTH),
|
||||||
SOUTH(2, Vector3i.UNIT_Z, Axis.Z, PistonValue.SOUTH),
|
SOUTH(2, Vector3i.UNIT_Z, Axis.Z, com.github.steveice10.mc.protocol.data.game.entity.object.Direction.SOUTH),
|
||||||
WEST(5, Vector3i.from(-1, 0, 0), Axis.X, PistonValue.WEST),
|
WEST(5, Vector3i.from(-1, 0, 0), Axis.X, com.github.steveice10.mc.protocol.data.game.entity.object.Direction.WEST),
|
||||||
EAST(4, Vector3i.UNIT_X, Axis.X, PistonValue.EAST);
|
EAST(4, Vector3i.UNIT_X, Axis.X, com.github.steveice10.mc.protocol.data.game.entity.object.Direction.EAST);
|
||||||
|
|
||||||
public static final Direction[] VALUES = values();
|
public static final Direction[] VALUES = values();
|
||||||
|
|
||||||
@ -46,10 +45,9 @@ public enum Direction {
|
|||||||
private final Vector3i unitVector;
|
private final Vector3i unitVector;
|
||||||
@Getter
|
@Getter
|
||||||
private final Axis axis;
|
private final Axis axis;
|
||||||
@Getter
|
private final com.github.steveice10.mc.protocol.data.game.entity.object.Direction pistonValue;
|
||||||
private final PistonValue pistonValue;
|
|
||||||
|
|
||||||
Direction(int reversedId, Vector3i unitVector, Axis axis, PistonValue pistonValue) {
|
Direction(int reversedId, Vector3i unitVector, Axis axis, com.github.steveice10.mc.protocol.data.game.entity.object.Direction pistonValue) {
|
||||||
this.reversedId = reversedId;
|
this.reversedId = reversedId;
|
||||||
this.unitVector = unitVector;
|
this.unitVector = unitVector;
|
||||||
this.axis = axis;
|
this.axis = axis;
|
||||||
@ -69,7 +67,7 @@ public enum Direction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
public static Direction fromPistonValue(PistonValue pistonValue) {
|
public static Direction fromPistonValue(com.github.steveice10.mc.protocol.data.game.entity.object.Direction pistonValue) {
|
||||||
for (Direction direction : VALUES) {
|
for (Direction direction : VALUES) {
|
||||||
if (direction.pistonValue == pistonValue) {
|
if (direction.pistonValue == pistonValue) {
|
||||||
return direction;
|
return direction;
|
||||||
|
@ -28,6 +28,7 @@ package org.geysermc.geyser.network;
|
|||||||
import com.github.steveice10.mc.protocol.codec.MinecraftCodec;
|
import com.github.steveice10.mc.protocol.codec.MinecraftCodec;
|
||||||
import com.github.steveice10.mc.protocol.codec.PacketCodec;
|
import com.github.steveice10.mc.protocol.codec.PacketCodec;
|
||||||
import com.nukkitx.protocol.bedrock.BedrockPacketCodec;
|
import com.nukkitx.protocol.bedrock.BedrockPacketCodec;
|
||||||
|
import com.nukkitx.protocol.bedrock.v554.Bedrock_v554;
|
||||||
import com.nukkitx.protocol.bedrock.v557.Bedrock_v557;
|
import com.nukkitx.protocol.bedrock.v557.Bedrock_v557;
|
||||||
import com.nukkitx.protocol.bedrock.v560.Bedrock_v560;
|
import com.nukkitx.protocol.bedrock.v560.Bedrock_v560;
|
||||||
import com.nukkitx.protocol.bedrock.v567.Bedrock_v567;
|
import com.nukkitx.protocol.bedrock.v567.Bedrock_v567;
|
||||||
@ -46,7 +47,10 @@ 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 BedrockPacketCodec DEFAULT_BEDROCK_CODEC = Bedrock_v567.V567_CODEC;
|
public static final BedrockPacketCodec DEFAULT_BEDROCK_CODEC = Bedrock_v567patch.BEDROCK_V567PATCH.toBuilder()
|
||||||
|
.protocolVersion(575)
|
||||||
|
.minecraftVersion("1.19.70")
|
||||||
|
.build();
|
||||||
/**
|
/**
|
||||||
* A list of all supported Bedrock versions that can join Geyser
|
* A list of all supported Bedrock versions that can join Geyser
|
||||||
*/
|
*/
|
||||||
@ -59,17 +63,21 @@ public final class GameProtocol {
|
|||||||
private static final PacketCodec DEFAULT_JAVA_CODEC = MinecraftCodec.CODEC;
|
private static final PacketCodec DEFAULT_JAVA_CODEC = MinecraftCodec.CODEC;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
SUPPORTED_BEDROCK_CODECS.add(Bedrock_v554.V554_CODEC.toBuilder()
|
||||||
|
.minecraftVersion("1.19.30/1.19.31")
|
||||||
|
.build());
|
||||||
SUPPORTED_BEDROCK_CODECS.add(Bedrock_v557.V557_CODEC.toBuilder()
|
SUPPORTED_BEDROCK_CODECS.add(Bedrock_v557.V557_CODEC.toBuilder()
|
||||||
.minecraftVersion("1.19.40/1.19.41")
|
.minecraftVersion("1.19.40/1.19.41")
|
||||||
.build());
|
.build());
|
||||||
SUPPORTED_BEDROCK_CODECS.add(Bedrock_v560.V560_CODEC.toBuilder()
|
SUPPORTED_BEDROCK_CODECS.add(Bedrock_v560.V560_CODEC.toBuilder()
|
||||||
.minecraftVersion("1.19.50/1.19.51")
|
.minecraftVersion("1.19.50/1.19.51")
|
||||||
.build());
|
.build());
|
||||||
SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC);
|
SUPPORTED_BEDROCK_CODECS.add(Bedrock_v567.V567_CODEC);
|
||||||
SUPPORTED_BEDROCK_CODECS.add(Bedrock_v567patch.BEDROCK_V567PATCH.toBuilder()
|
SUPPORTED_BEDROCK_CODECS.add(Bedrock_v567patch.BEDROCK_V567PATCH.toBuilder()
|
||||||
.protocolVersion(568)
|
.protocolVersion(568)
|
||||||
.minecraftVersion("1.19.62")
|
.minecraftVersion("1.19.62")
|
||||||
.build());
|
.build());
|
||||||
|
SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -79,6 +79,16 @@ public final class BlockRegistryPopulator {
|
|||||||
.put(ObjectIntPair.of("1_19_20", Bedrock_v544.V544_CODEC.getProtocolVersion()), emptyMapper)
|
.put(ObjectIntPair.of("1_19_20", Bedrock_v544.V544_CODEC.getProtocolVersion()), emptyMapper)
|
||||||
.put(ObjectIntPair.of("1_19_50", Bedrock_v560.V560_CODEC.getProtocolVersion()), emptyMapper)
|
.put(ObjectIntPair.of("1_19_50", Bedrock_v560.V560_CODEC.getProtocolVersion()), emptyMapper)
|
||||||
.put(ObjectIntPair.of("1_19_60", Bedrock_v567.V567_CODEC.getProtocolVersion()), emptyMapper)
|
.put(ObjectIntPair.of("1_19_60", Bedrock_v567.V567_CODEC.getProtocolVersion()), emptyMapper)
|
||||||
|
.put(ObjectIntPair.of("1_19_70", 575), (bedrockIdentifier, statesBuilder) -> {
|
||||||
|
if (bedrockIdentifier.equals("minecraft:wool")) {
|
||||||
|
String color = (String) statesBuilder.remove("color");
|
||||||
|
if ("silver".equals(color)) {
|
||||||
|
color = "light_gray";
|
||||||
|
}
|
||||||
|
return "minecraft:" + color + "_wool";
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
})
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
for (Map.Entry<ObjectIntPair<String>, BiFunction<String, NbtMapBuilder, String>> palette : blockMappers.entrySet()) {
|
for (Map.Entry<ObjectIntPair<String>, BiFunction<String, NbtMapBuilder, String>> palette : blockMappers.entrySet()) {
|
||||||
|
@ -90,6 +90,7 @@ public class ItemRegistryPopulator {
|
|||||||
paletteVersions.put("1_19_20", new PaletteVersion(Bedrock_v544.V544_CODEC.getProtocolVersion(), Collections.emptyMap()));
|
paletteVersions.put("1_19_20", new PaletteVersion(Bedrock_v544.V544_CODEC.getProtocolVersion(), Collections.emptyMap()));
|
||||||
paletteVersions.put("1_19_50", new PaletteVersion(Bedrock_v560.V560_CODEC.getProtocolVersion(), Collections.emptyMap()));
|
paletteVersions.put("1_19_50", new PaletteVersion(Bedrock_v560.V560_CODEC.getProtocolVersion(), Collections.emptyMap()));
|
||||||
paletteVersions.put("1_19_60", new PaletteVersion(Bedrock_v567.V567_CODEC.getProtocolVersion(), Collections.emptyMap()));
|
paletteVersions.put("1_19_60", new PaletteVersion(Bedrock_v567.V567_CODEC.getProtocolVersion(), Collections.emptyMap()));
|
||||||
|
paletteVersions.put("1_19_70", new PaletteVersion(575, Collections.emptyMap()));
|
||||||
|
|
||||||
GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap();
|
GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap();
|
||||||
|
|
||||||
@ -323,6 +324,11 @@ public class ItemRegistryPopulator {
|
|||||||
mappingItem = entry.getValue();
|
mappingItem = entry.getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 1.19.70+
|
||||||
|
if (palette.getValue().protocolVersion() >= 575 && mappingItem.getBedrockIdentifier().equals("minecraft:wool")) {
|
||||||
|
mappingItem.setBedrockIdentifier(javaIdentifier);
|
||||||
|
}
|
||||||
|
|
||||||
if (customItemsAllowed && javaIdentifier.equals("minecraft:furnace_minecart")) {
|
if (customItemsAllowed && javaIdentifier.equals("minecraft:furnace_minecart")) {
|
||||||
javaFurnaceMinecartId = itemIndex;
|
javaFurnaceMinecartId = itemIndex;
|
||||||
itemIndex++;
|
itemIndex++;
|
||||||
|
@ -33,7 +33,9 @@ import lombok.Getter;
|
|||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@ -44,7 +46,7 @@ public final class Team {
|
|||||||
|
|
||||||
@Getter(AccessLevel.PACKAGE)
|
@Getter(AccessLevel.PACKAGE)
|
||||||
private final Set<String> entities;
|
private final Set<String> entities;
|
||||||
@Setter private NameTagVisibility nameTagVisibility;
|
@Setter @Nullable private NameTagVisibility nameTagVisibility;
|
||||||
@Setter private TeamColor color;
|
@Setter private TeamColor color;
|
||||||
|
|
||||||
private final TeamData currentData;
|
private final TeamData currentData;
|
||||||
@ -187,6 +189,11 @@ public final class Team {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isVisibleFor(String entity) {
|
public boolean isVisibleFor(String entity) {
|
||||||
|
if (nameTagVisibility == null) {
|
||||||
|
// Null - normal behavior
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return switch (nameTagVisibility) {
|
return switch (nameTagVisibility) {
|
||||||
case HIDE_FOR_OTHER_TEAMS -> {
|
case HIDE_FOR_OTHER_TEAMS -> {
|
||||||
// Player must be in a team in order for HIDE_FOR_OTHER_TEAMS to be triggered
|
// Player must be in a team in order for HIDE_FOR_OTHER_TEAMS to be triggered
|
||||||
@ -199,6 +206,10 @@ public final class Team {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public NameTagVisibility getNameTagVisibility() {
|
||||||
|
return Objects.requireNonNullElse(this.nameTagVisibility, NameTagVisibility.ALWAYS);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return id.hashCode();
|
return id.hashCode();
|
||||||
|
@ -1018,7 +1018,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
|
|||||||
// Server is offline, probably
|
// Server is offline, probably
|
||||||
disconnectMessage = GeyserLocale.getPlayerLocaleString("geyser.network.remote.server_offline", locale());
|
disconnectMessage = GeyserLocale.getPlayerLocaleString("geyser.network.remote.server_offline", locale());
|
||||||
} else {
|
} else {
|
||||||
disconnectMessage = MessageTranslator.convertMessageLenient(event.getReason());
|
disconnectMessage = MessageTranslator.convertMessage(event.getReason());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (downstream instanceof LocalSession) {
|
if (downstream instanceof LocalSession) {
|
||||||
|
@ -32,12 +32,7 @@ import com.github.steveice10.mc.protocol.data.game.entity.player.Hand;
|
|||||||
import com.github.steveice10.mc.protocol.data.game.entity.player.InteractAction;
|
import com.github.steveice10.mc.protocol.data.game.entity.player.InteractAction;
|
||||||
import com.github.steveice10.mc.protocol.data.game.entity.player.PlayerAction;
|
import com.github.steveice10.mc.protocol.data.game.entity.player.PlayerAction;
|
||||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClickPacket;
|
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClickPacket;
|
||||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundInteractPacket;
|
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.*;
|
||||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerPosRotPacket;
|
|
||||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundPlayerActionPacket;
|
|
||||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundSwingPacket;
|
|
||||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundUseItemOnPacket;
|
|
||||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundUseItemPacket;
|
|
||||||
import com.nukkitx.math.vector.Vector3d;
|
import com.nukkitx.math.vector.Vector3d;
|
||||||
import com.nukkitx.math.vector.Vector3f;
|
import com.nukkitx.math.vector.Vector3f;
|
||||||
import com.nukkitx.math.vector.Vector3i;
|
import com.nukkitx.math.vector.Vector3i;
|
||||||
@ -46,14 +41,12 @@ import com.nukkitx.protocol.bedrock.data.inventory.ContainerType;
|
|||||||
import com.nukkitx.protocol.bedrock.data.inventory.InventoryActionData;
|
import com.nukkitx.protocol.bedrock.data.inventory.InventoryActionData;
|
||||||
import com.nukkitx.protocol.bedrock.data.inventory.InventorySource;
|
import com.nukkitx.protocol.bedrock.data.inventory.InventorySource;
|
||||||
import com.nukkitx.protocol.bedrock.data.inventory.ItemData;
|
import com.nukkitx.protocol.bedrock.data.inventory.ItemData;
|
||||||
import com.nukkitx.protocol.bedrock.data.inventory.LegacySetItemSlotData;
|
|
||||||
import com.nukkitx.protocol.bedrock.packet.ContainerOpenPacket;
|
import com.nukkitx.protocol.bedrock.packet.ContainerOpenPacket;
|
||||||
import com.nukkitx.protocol.bedrock.packet.InventoryTransactionPacket;
|
import com.nukkitx.protocol.bedrock.packet.InventoryTransactionPacket;
|
||||||
import com.nukkitx.protocol.bedrock.packet.LevelEventPacket;
|
import com.nukkitx.protocol.bedrock.packet.LevelEventPacket;
|
||||||
import com.nukkitx.protocol.bedrock.packet.UpdateBlockPacket;
|
import com.nukkitx.protocol.bedrock.packet.UpdateBlockPacket;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMaps;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectMaps;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
|
||||||
import org.geysermc.geyser.entity.EntityDefinitions;
|
import org.geysermc.geyser.entity.EntityDefinitions;
|
||||||
import org.geysermc.geyser.entity.type.Entity;
|
import org.geysermc.geyser.entity.type.Entity;
|
||||||
import org.geysermc.geyser.entity.type.ItemFrameEntity;
|
import org.geysermc.geyser.entity.type.ItemFrameEntity;
|
||||||
@ -76,9 +69,7 @@ import org.geysermc.geyser.util.BlockUtils;
|
|||||||
import org.geysermc.geyser.util.CooldownUtils;
|
import org.geysermc.geyser.util.CooldownUtils;
|
||||||
import org.geysermc.geyser.util.EntityUtils;
|
import org.geysermc.geyser.util.EntityUtils;
|
||||||
import org.geysermc.geyser.util.InteractionResult;
|
import org.geysermc.geyser.util.InteractionResult;
|
||||||
import org.geysermc.geyser.util.InventoryUtils;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -357,43 +348,6 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve
|
|||||||
|
|
||||||
ServerboundUseItemPacket useItemPacket = new ServerboundUseItemPacket(Hand.MAIN_HAND, session.getWorldCache().nextPredictionSequence());
|
ServerboundUseItemPacket useItemPacket = new ServerboundUseItemPacket(Hand.MAIN_HAND, session.getWorldCache().nextPredictionSequence());
|
||||||
session.sendDownstreamPacket(useItemPacket);
|
session.sendDownstreamPacket(useItemPacket);
|
||||||
|
|
||||||
List<LegacySetItemSlotData> legacySlots = packet.getLegacySlots();
|
|
||||||
if (packet.getActions().size() == 1 && legacySlots.size() > 0) {
|
|
||||||
InventoryActionData actionData = packet.getActions().get(0);
|
|
||||||
LegacySetItemSlotData slotData = legacySlots.get(0);
|
|
||||||
if (slotData.getContainerId() == 6 && actionData.getToItem().getId() != 0) {
|
|
||||||
// The player is trying to swap out an armor piece that already has an item in it
|
|
||||||
if (session.getGeyser().getConfig().isAlwaysQuickChangeArmor()) {
|
|
||||||
// Java doesn't know when a player is in its own inventory and not, so we
|
|
||||||
// can abuse this feature to send a swap inventory packet
|
|
||||||
int bedrockHotbarSlot = packet.getHotbarSlot();
|
|
||||||
Click click = InventoryUtils.getClickForHotbarSwap(bedrockHotbarSlot);
|
|
||||||
if (click != null && slotData.getSlots().length != 0) {
|
|
||||||
Inventory playerInventory = session.getPlayerInventory();
|
|
||||||
// Bedrock sends us the index of the slot in the armor container; armor in Java
|
|
||||||
// Edition is offset by 5 in the player inventory
|
|
||||||
int armorSlot = slotData.getSlots()[0] + 5;
|
|
||||||
GeyserItemStack armorSlotItem = playerInventory.getItem(armorSlot);
|
|
||||||
GeyserItemStack hotbarItem = playerInventory.getItem(playerInventory.getOffsetForHotbar(bedrockHotbarSlot));
|
|
||||||
playerInventory.setItem(armorSlot, hotbarItem, session);
|
|
||||||
playerInventory.setItem(bedrockHotbarSlot, armorSlotItem, session);
|
|
||||||
|
|
||||||
Int2ObjectMap<ItemStack> changedSlots = new Int2ObjectOpenHashMap<>(2);
|
|
||||||
changedSlots.put(armorSlot, hotbarItem.getItemStack());
|
|
||||||
changedSlots.put(bedrockHotbarSlot, armorSlotItem.getItemStack());
|
|
||||||
|
|
||||||
ServerboundContainerClickPacket clickPacket = new ServerboundContainerClickPacket(
|
|
||||||
playerInventory.getJavaId(), playerInventory.getStateId(), armorSlot,
|
|
||||||
click.actionType, click.action, null, changedSlots);
|
|
||||||
session.sendDownstreamPacket(clickPacket);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Disallowed; let's revert
|
|
||||||
session.getInventoryTranslator().updateInventory(session, session.getPlayerInventory());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
case 2 -> {
|
case 2 -> {
|
||||||
int blockState = session.getGameMode() == GameMode.CREATIVE ?
|
int blockState = session.getGameMode() == GameMode.CREATIVE ?
|
||||||
|
@ -29,9 +29,9 @@ import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack;
|
|||||||
import com.github.steveice10.mc.protocol.data.game.recipe.Ingredient;
|
import com.github.steveice10.mc.protocol.data.game.recipe.Ingredient;
|
||||||
import com.github.steveice10.mc.protocol.data.game.recipe.Recipe;
|
import com.github.steveice10.mc.protocol.data.game.recipe.Recipe;
|
||||||
import com.github.steveice10.mc.protocol.data.game.recipe.RecipeType;
|
import com.github.steveice10.mc.protocol.data.game.recipe.RecipeType;
|
||||||
|
import com.github.steveice10.mc.protocol.data.game.recipe.data.LegacyUpgradeRecipeData;
|
||||||
import com.github.steveice10.mc.protocol.data.game.recipe.data.ShapedRecipeData;
|
import com.github.steveice10.mc.protocol.data.game.recipe.data.ShapedRecipeData;
|
||||||
import com.github.steveice10.mc.protocol.data.game.recipe.data.ShapelessRecipeData;
|
import com.github.steveice10.mc.protocol.data.game.recipe.data.ShapelessRecipeData;
|
||||||
import com.github.steveice10.mc.protocol.data.game.recipe.data.SmithingRecipeData;
|
|
||||||
import com.github.steveice10.mc.protocol.data.game.recipe.data.StoneCuttingRecipeData;
|
import com.github.steveice10.mc.protocol.data.game.recipe.data.StoneCuttingRecipeData;
|
||||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundUpdateRecipesPacket;
|
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundUpdateRecipesPacket;
|
||||||
import com.nukkitx.protocol.bedrock.data.inventory.CraftingData;
|
import com.nukkitx.protocol.bedrock.data.inventory.CraftingData;
|
||||||
@ -137,7 +137,7 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator<ClientboundUpd
|
|||||||
}
|
}
|
||||||
case SMITHING -> {
|
case SMITHING -> {
|
||||||
// Required to translate these as of 1.18.10, or else they cannot be crafted
|
// Required to translate these as of 1.18.10, or else they cannot be crafted
|
||||||
SmithingRecipeData recipeData = (SmithingRecipeData) recipe.getData();
|
LegacyUpgradeRecipeData recipeData = (LegacyUpgradeRecipeData) recipe.getData();
|
||||||
ItemData output = ItemTranslator.translateToBedrock(session, recipeData.getResult());
|
ItemData output = ItemTranslator.translateToBedrock(session, recipeData.getResult());
|
||||||
for (ItemStack base : recipeData.getBase().getOptions()) {
|
for (ItemStack base : recipeData.getBase().getOptions()) {
|
||||||
ItemDescriptorWithCount bedrockBase = ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, base));
|
ItemDescriptorWithCount bedrockBase = ItemDescriptorWithCount.fromItem(ItemTranslator.translateToBedrock(session, base));
|
||||||
|
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019-2023 GeyserMC. http://geysermc.org
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* @author GeyserMC
|
||||||
|
* @link https://github.com/GeyserMC/Geyser
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.geysermc.geyser.translator.protocol.java.entity;
|
||||||
|
|
||||||
|
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.ClientboundDamageEventPacket;
|
||||||
|
import com.nukkitx.protocol.bedrock.data.entity.EntityEventType;
|
||||||
|
import com.nukkitx.protocol.bedrock.packet.EntityEventPacket;
|
||||||
|
import org.geysermc.geyser.entity.type.Entity;
|
||||||
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
|
import org.geysermc.geyser.translator.protocol.PacketTranslator;
|
||||||
|
import org.geysermc.geyser.translator.protocol.Translator;
|
||||||
|
|
||||||
|
@Translator(packet = ClientboundDamageEventPacket.class)
|
||||||
|
public class JavaDamageEventTranslator extends PacketTranslator<ClientboundDamageEventPacket> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void translate(GeyserSession session, ClientboundDamageEventPacket packet) {
|
||||||
|
Entity entity = session.getEntityCache().getEntityByJavaId(packet.getEntityId());
|
||||||
|
if (entity == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We can probably actually map damage types.
|
||||||
|
EntityEventPacket entityEventPacket = new EntityEventPacket();
|
||||||
|
entityEventPacket.setRuntimeEntityId(entity.getGeyserId());
|
||||||
|
entityEventPacket.setType(EntityEventType.HURT);
|
||||||
|
session.sendUpstreamPacket(entityEventPacket);
|
||||||
|
}
|
||||||
|
}
|
@ -83,15 +83,6 @@ public class JavaEntityEventTranslator extends PacketTranslator<ClientboundEntit
|
|||||||
session.sendAdventureSettings();
|
session.sendAdventureSettings();
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// EntityEventType.HURT sends extra data depending on the type of damage. However this appears to have no visual changes
|
|
||||||
case LIVING_BURN:
|
|
||||||
case LIVING_DROWN:
|
|
||||||
case LIVING_HURT:
|
|
||||||
case LIVING_HURT_SWEET_BERRY_BUSH:
|
|
||||||
case LIVING_HURT_THORNS:
|
|
||||||
case LIVING_FREEZE:
|
|
||||||
entityEventPacket.setType(EntityEventType.HURT);
|
|
||||||
break;
|
|
||||||
case LIVING_DEATH:
|
case LIVING_DEATH:
|
||||||
entityEventPacket.setType(EntityEventType.DEATH);
|
entityEventPacket.setType(EntityEventType.DEATH);
|
||||||
if (entity.getDefinition() == EntityDefinitions.EGG) {
|
if (entity.getDefinition() == EntityDefinitions.EGG) {
|
||||||
|
@ -91,6 +91,16 @@ public class JavaSetPassengersTranslator extends PacketTranslator<ClientboundSet
|
|||||||
EntityUtils.updateMountOffset(passenger, entity, false, false, (packet.getPassengerIds().length > 1));
|
EntityUtils.updateMountOffset(passenger, entity, false, false, (packet.getPassengerIds().length > 1));
|
||||||
// Force an update to the passenger metadata
|
// Force an update to the passenger metadata
|
||||||
passenger.updateBedrockMetadata();
|
passenger.updateBedrockMetadata();
|
||||||
|
|
||||||
|
if (passenger == session.getPlayerEntity()) {
|
||||||
|
//TODO test
|
||||||
|
if (session.getMountVehicleScheduledFuture() != null) {
|
||||||
|
// Cancel this task as it is now unnecessary.
|
||||||
|
// Note that this isn't present in JavaSetPassengersTranslator as that code is not called for players
|
||||||
|
// as of Java 1.19.3, but the scheduled future checks for the vehicle being null anyway.
|
||||||
|
session.getMountVehicleScheduledFuture().cancel(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,20 +30,16 @@ import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.player
|
|||||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.level.ServerboundAcceptTeleportationPacket;
|
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.level.ServerboundAcceptTeleportationPacket;
|
||||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerPosRotPacket;
|
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerPosRotPacket;
|
||||||
import com.nukkitx.math.vector.Vector3f;
|
import com.nukkitx.math.vector.Vector3f;
|
||||||
import com.nukkitx.protocol.bedrock.data.entity.EntityLinkData;
|
|
||||||
import com.nukkitx.protocol.bedrock.packet.ChunkRadiusUpdatedPacket;
|
import com.nukkitx.protocol.bedrock.packet.ChunkRadiusUpdatedPacket;
|
||||||
import com.nukkitx.protocol.bedrock.packet.MovePlayerPacket;
|
import com.nukkitx.protocol.bedrock.packet.MovePlayerPacket;
|
||||||
import com.nukkitx.protocol.bedrock.packet.RespawnPacket;
|
import com.nukkitx.protocol.bedrock.packet.RespawnPacket;
|
||||||
import com.nukkitx.protocol.bedrock.packet.SetEntityLinkPacket;
|
|
||||||
import org.geysermc.geyser.entity.EntityDefinitions;
|
import org.geysermc.geyser.entity.EntityDefinitions;
|
||||||
import org.geysermc.geyser.entity.type.Entity;
|
|
||||||
import org.geysermc.geyser.entity.type.player.SessionPlayerEntity;
|
import org.geysermc.geyser.entity.type.player.SessionPlayerEntity;
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
import org.geysermc.geyser.session.cache.TeleportCache;
|
import org.geysermc.geyser.session.cache.TeleportCache;
|
||||||
import org.geysermc.geyser.translator.protocol.PacketTranslator;
|
import org.geysermc.geyser.translator.protocol.PacketTranslator;
|
||||||
import org.geysermc.geyser.translator.protocol.Translator;
|
import org.geysermc.geyser.translator.protocol.Translator;
|
||||||
import org.geysermc.geyser.util.ChunkUtils;
|
import org.geysermc.geyser.util.ChunkUtils;
|
||||||
import org.geysermc.geyser.util.EntityUtils;
|
|
||||||
|
|
||||||
@Translator(packet = ClientboundPlayerPositionPacket.class)
|
@Translator(packet = ClientboundPlayerPositionPacket.class)
|
||||||
public class JavaPlayerPositionTranslator extends PacketTranslator<ClientboundPlayerPositionPacket> {
|
public class JavaPlayerPositionTranslator extends PacketTranslator<ClientboundPlayerPositionPacket> {
|
||||||
@ -101,27 +97,6 @@ public class JavaPlayerPositionTranslator extends PacketTranslator<ClientboundPl
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Entity vehicle;
|
|
||||||
if (packet.isDismountVehicle() && (vehicle = session.getPlayerEntity().getVehicle()) != null) {
|
|
||||||
SetEntityLinkPacket linkPacket = new SetEntityLinkPacket();
|
|
||||||
linkPacket.setEntityLink(new EntityLinkData(vehicle.getGeyserId(), entity.getGeyserId(), EntityLinkData.Type.REMOVE, false, false));
|
|
||||||
session.sendUpstreamPacket(linkPacket);
|
|
||||||
|
|
||||||
vehicle.getPassengers().remove(entity);
|
|
||||||
session.getPlayerEntity().setVehicle(null);
|
|
||||||
|
|
||||||
EntityUtils.updateRiderRotationLock(entity, null, false);
|
|
||||||
EntityUtils.updateMountOffset(entity, null, false, false, entity.getPassengers().size() > 1);
|
|
||||||
entity.updateBedrockMetadata();
|
|
||||||
|
|
||||||
if (session.getMountVehicleScheduledFuture() != null) {
|
|
||||||
// Cancel this task as it is now unnecessary.
|
|
||||||
// Note that this isn't present in JavaSetPassengersTranslator as that code is not called for players
|
|
||||||
// as of Java 1.19.3, but the scheduled future checks for the vehicle being null anyway.
|
|
||||||
session.getMountVehicleScheduledFuture().cancel(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If coordinates are relative, then add to the existing coordinate
|
// If coordinates are relative, then add to the existing coordinate
|
||||||
double newX = packet.getX() +
|
double newX = packet.getX() +
|
||||||
(packet.getRelative().contains(PositionElement.X) ? entity.getPosition().getX() : 0);
|
(packet.getRelative().contains(PositionElement.X) ? entity.getPosition().getX() : 0);
|
||||||
|
@ -63,7 +63,7 @@ public class JavaBlockEventTranslator extends PacketTranslator<ClientboundBlockE
|
|||||||
session.sendUpstreamPacket(blockEventPacket);
|
session.sendUpstreamPacket(blockEventPacket);
|
||||||
} else if (packet.getValue() instanceof PistonValue pistonValue) {
|
} else if (packet.getValue() instanceof PistonValue pistonValue) {
|
||||||
PistonValueType action = (PistonValueType) packet.getType();
|
PistonValueType action = (PistonValueType) packet.getType();
|
||||||
Direction direction = Direction.fromPistonValue(pistonValue);
|
Direction direction = Direction.fromPistonValue(pistonValue.getDirection());
|
||||||
PistonCache pistonCache = session.getPistonCache();
|
PistonCache pistonCache = session.getPistonCache();
|
||||||
|
|
||||||
if (session.getGeyser().getPlatformType() == PlatformType.SPIGOT) {
|
if (session.getGeyser().getPlatformType() == PlatformType.SPIGOT) {
|
||||||
|
@ -157,7 +157,7 @@ public class JavaLevelEventTranslator extends PacketTranslator<ClientboundLevelE
|
|||||||
|
|
||||||
SmokeEventData smokeEventData = (SmokeEventData) packet.getData();
|
SmokeEventData smokeEventData = (SmokeEventData) packet.getData();
|
||||||
int data = 0;
|
int data = 0;
|
||||||
switch (smokeEventData) {
|
switch (smokeEventData.getDirection()) {
|
||||||
case DOWN -> {
|
case DOWN -> {
|
||||||
data = 4;
|
data = 4;
|
||||||
pos = pos.add(0, -0.9f, 0);
|
pos = pos.add(0, -0.9f, 0);
|
||||||
|
BIN
core/src/main/resources/bedrock/block_palette.1_19_70.nbt
Normale Datei
BIN
core/src/main/resources/bedrock/block_palette.1_19_70.nbt
Normale Datei
Binäre Datei nicht angezeigt.
5452
core/src/main/resources/bedrock/creative_items.1_19_70.json
Normale Datei
5452
core/src/main/resources/bedrock/creative_items.1_19_70.json
Normale Datei
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
4786
core/src/main/resources/bedrock/runtime_item_states.1_19_70.json
Normale Datei
4786
core/src/main/resources/bedrock/runtime_item_states.1_19_70.json
Normale Datei
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
@ -130,10 +130,6 @@ show-coordinates: true
|
|||||||
# Whether Bedrock players are blocked from performing their scaffolding-style bridging.
|
# Whether Bedrock players are blocked from performing their scaffolding-style bridging.
|
||||||
disable-bedrock-scaffolding: false
|
disable-bedrock-scaffolding: false
|
||||||
|
|
||||||
# Whether Bedrock players can right-click outside of their inventory to replace armor in their inventory, even if the
|
|
||||||
# armor slot is already occupied (which Java Edition doesn't allow)
|
|
||||||
always-quick-change-armor: false
|
|
||||||
|
|
||||||
# If set, when a Bedrock player performs any emote, it will swap the offhand and mainhand items, just like the Java Edition keybind
|
# If set, when a Bedrock player performs any emote, it will swap the offhand and mainhand items, just like the Java Edition keybind
|
||||||
# There are three options this can be set to:
|
# There are three options this can be set to:
|
||||||
# disabled - the default/fallback, which doesn't apply this workaround
|
# disabled - the default/fallback, which doesn't apply this workaround
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 677c5b0872d2f0c99ad834c0ca49a0ae3b45fde3
|
Subproject commit eab643ddbaf31c4d76531376838f8fd30633bb8e
|
@ -11,8 +11,7 @@ websocket = "1.5.1"
|
|||||||
protocol = "2.9.17-20230217.002312-1"
|
protocol = "2.9.17-20230217.002312-1"
|
||||||
raknet = "1.6.28-20220125.214016-6"
|
raknet = "1.6.28-20220125.214016-6"
|
||||||
mcauthlib = "d9d773e"
|
mcauthlib = "d9d773e"
|
||||||
mcprotocollib = "1.19.3-20230107.194116-10"
|
mcprotocollib = "1.19.4-20230314.173921-2"
|
||||||
packetlib = "3.0.1"
|
|
||||||
adventure = "4.12.0-20220629.025215-9"
|
adventure = "4.12.0-20220629.025215-9"
|
||||||
adventure-platform = "4.1.2"
|
adventure-platform = "4.1.2"
|
||||||
junit = "5.9.2"
|
junit = "5.9.2"
|
||||||
@ -84,7 +83,6 @@ gson = { group = "com.google.code.gson", name = "gson", version.ref = "gson" }
|
|||||||
junit = { group = "org.junit.jupiter", name = "junit-jupiter", version.ref = "junit" }
|
junit = { group = "org.junit.jupiter", name = "junit-jupiter", version.ref = "junit" }
|
||||||
mcauthlib = { group = "com.github.GeyserMC", name = "MCAuthLib", version.ref = "mcauthlib" }
|
mcauthlib = { group = "com.github.GeyserMC", name = "MCAuthLib", version.ref = "mcauthlib" }
|
||||||
mcprotocollib = { group = "com.github.steveice10", name = "mcprotocollib", version.ref = "mcprotocollib" }
|
mcprotocollib = { group = "com.github.steveice10", name = "mcprotocollib", version.ref = "mcprotocollib" }
|
||||||
packetlib = { group = "com.github.steveice10", name = "packetlib", version.ref = "packetlib" }
|
|
||||||
protocol = { group = "com.nukkitx.protocol", name = "bedrock-v567", version.ref = "protocol" }
|
protocol = { group = "com.nukkitx.protocol", name = "bedrock-v567", version.ref = "protocol" }
|
||||||
raknet = { group = "com.nukkitx.network", name = "raknet", version.ref = "raknet" }
|
raknet = { group = "com.nukkitx.network", name = "raknet", version.ref = "raknet" }
|
||||||
sponge-api = { group = "org.spongepowered", name = "spongeapi", version.ref = "sponge" }
|
sponge-api = { group = "org.spongepowered", name = "spongeapi", version.ref = "sponge" }
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren