Skip to content

Commit 115de78

Browse files
Merge pull request PowerNukkit#1399 from GoodLucky777/update/1.19.30
Update to Minecraft v1.19.30 (Protocol v554)
2 parents 6b4a8cc + 0cdc4a3 commit 115de78

24 files changed

+971
-338
lines changed

src/main/java/cn/nukkit/AdventureSettings.java

Lines changed: 77 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package cn.nukkit;
22

33
import cn.nukkit.api.PowerNukkitDifference;
4-
import cn.nukkit.network.protocol.AdventureSettingsPacket;
4+
import cn.nukkit.api.Since;
5+
import cn.nukkit.network.protocol.UpdateAbilitiesPacket;
6+
import cn.nukkit.network.protocol.UpdateAdventureSettingsPacket;
7+
import cn.nukkit.network.protocol.types.AbilityLayer;
8+
import cn.nukkit.network.protocol.types.PlayerAbility;
59

610
import java.util.EnumMap;
711
import java.util.Map;
@@ -42,59 +46,102 @@ public AdventureSettings set(Type type, boolean value) {
4246

4347
public boolean get(Type type) {
4448
Boolean value = this.values.get(type);
45-
4649
return value == null ? type.getDefaultValue() : value;
4750
}
4851

4952
@PowerNukkitDifference(
5053
info = "Players in spectator mode will be flagged as member even if they are OP due to a client-side limitation",
5154
since = "1.3.1.2-PN")
5255
public void update() {
53-
AdventureSettingsPacket pk = new AdventureSettingsPacket();
54-
for (Type t : Type.values()) {
55-
pk.setFlag(t.getId(), get(t));
56+
UpdateAbilitiesPacket packet = new UpdateAbilitiesPacket();
57+
packet.setEntityId(player.getId());
58+
packet.setCommandPermission(player.isOp() ? UpdateAbilitiesPacket.CommandPermission.OPERATOR : UpdateAbilitiesPacket.CommandPermission.NORMAL);
59+
packet.setPlayerPermission(player.isOp() && !player.isSpectator() ? UpdateAbilitiesPacket.PlayerPermission.OPERATOR : UpdateAbilitiesPacket.PlayerPermission.MEMBER);
60+
61+
AbilityLayer layer = new AbilityLayer();
62+
layer.setLayerType(AbilityLayer.Type.BASE);
63+
layer.getAbilitiesSet().addAll(PlayerAbility.VALUES);
64+
65+
for (Type type : Type.values()) {
66+
if (type.isAbility() && this.get(type)) {
67+
layer.getAbilityValues().add(type.getAbility());
68+
}
69+
}
70+
71+
// Because we send speed
72+
layer.getAbilityValues().add(PlayerAbility.WALK_SPEED);
73+
layer.getAbilityValues().add(PlayerAbility.FLY_SPEED);
74+
75+
if (player.isCreative()) { // Make sure player can interact with creative menu
76+
layer.getAbilityValues().add(PlayerAbility.INSTABUILD);
77+
}
78+
79+
if (player.isOp()) {
80+
layer.getAbilityValues().add(PlayerAbility.OPERATOR_COMMANDS);
5681
}
5782

58-
pk.commandPermission = (player.isOp() ? AdventureSettingsPacket.PERMISSION_OPERATOR : AdventureSettingsPacket.PERMISSION_NORMAL);
59-
pk.playerPermission = (player.isOp() && !player.isSpectator() ? Player.PERMISSION_OPERATOR : Player.PERMISSION_MEMBER);
60-
pk.entityUniqueId = player.getId();
83+
layer.setWalkSpeed(Player.DEFAULT_SPEED);
84+
layer.setFlySpeed(Player.DEFAULT_FLY_SPEED);
85+
packet.getAbilityLayers().add(layer);
6186

62-
Server.broadcastPacket(player.getViewers().values(), pk);
63-
player.dataPacket(pk);
87+
UpdateAdventureSettingsPacket adventurePacket = new UpdateAdventureSettingsPacket();
88+
adventurePacket.setAutoJump(get(Type.AUTO_JUMP));
89+
adventurePacket.setImmutableWorld(get(Type.WORLD_IMMUTABLE));
90+
adventurePacket.setNoMvP(get(Type.NO_MVP));
91+
adventurePacket.setNoPvM(get(Type.NO_PVM));
92+
adventurePacket.setShowNameTags(get(Type.SHOW_NAME_TAGS));
6493

94+
player.dataPacket(packet);
95+
player.dataPacket(adventurePacket);
6596
player.resetInAirTicks();
6697
}
6798

6899
public enum Type {
69-
WORLD_IMMUTABLE(AdventureSettingsPacket.WORLD_IMMUTABLE, false),
70-
AUTO_JUMP(AdventureSettingsPacket.AUTO_JUMP, true),
71-
ALLOW_FLIGHT(AdventureSettingsPacket.ALLOW_FLIGHT, false),
72-
NO_CLIP(AdventureSettingsPacket.NO_CLIP, false),
73-
WORLD_BUILDER(AdventureSettingsPacket.WORLD_BUILDER, true),
74-
FLYING(AdventureSettingsPacket.FLYING, false),
75-
MUTED(AdventureSettingsPacket.MUTED, false),
76-
BUILD_AND_MINE(AdventureSettingsPacket.BUILD_AND_MINE, true),
77-
DOORS_AND_SWITCHED(AdventureSettingsPacket.DOORS_AND_SWITCHES, true),
78-
OPEN_CONTAINERS(AdventureSettingsPacket.OPEN_CONTAINERS, true),
79-
ATTACK_PLAYERS(AdventureSettingsPacket.ATTACK_PLAYERS, true),
80-
ATTACK_MOBS(AdventureSettingsPacket.ATTACK_MOBS, true),
81-
OPERATOR(AdventureSettingsPacket.OPERATOR, false),
82-
TELEPORT(AdventureSettingsPacket.TELEPORT, false);
83-
84-
private final int id;
100+
WORLD_IMMUTABLE(false),
101+
NO_PVM(false),
102+
NO_MVP(PlayerAbility.INVULNERABLE, false),
103+
SHOW_NAME_TAGS(false),
104+
AUTO_JUMP(true),
105+
ALLOW_FLIGHT(PlayerAbility.MAY_FLY, false),
106+
NO_CLIP(PlayerAbility.NO_CLIP, false),
107+
WORLD_BUILDER(PlayerAbility.WORLD_BUILDER, false),
108+
FLYING(PlayerAbility.FLYING, false),
109+
MUTED(PlayerAbility.MUTED, false),
110+
MINE(PlayerAbility.MINE, true),
111+
DOORS_AND_SWITCHED(PlayerAbility.DOORS_AND_SWITCHES, true),
112+
OPEN_CONTAINERS(PlayerAbility.OPEN_CONTAINERS, true),
113+
ATTACK_PLAYERS(PlayerAbility.ATTACK_PLAYERS, true),
114+
ATTACK_MOBS(PlayerAbility.ATTACK_MOBS, true),
115+
OPERATOR(PlayerAbility.OPERATOR_COMMANDS, false),
116+
TELEPORT(PlayerAbility.TELEPORT, false),
117+
BUILD(PlayerAbility.BUILD, true),
118+
119+
@Deprecated
120+
DEFAULT_LEVEL_PERMISSIONS(null, false);
121+
122+
private final PlayerAbility ability;
85123
private final boolean defaultValue;
86124

87-
Type(int id, boolean defaultValue) {
88-
this.id = id;
125+
Type(boolean defaultValue) {
89126
this.defaultValue = defaultValue;
127+
this.ability = null;
90128
}
91129

92-
public int getId() {
93-
return id;
130+
Type(PlayerAbility ability, boolean defaultValue) {
131+
this.ability = ability;
132+
this.defaultValue = defaultValue;
94133
}
95134

96135
public boolean getDefaultValue() {
97136
return this.defaultValue;
98137
}
138+
139+
public PlayerAbility getAbility() {
140+
return this.ability;
141+
}
142+
143+
public boolean isAbility() {
144+
return this.ability != null;
145+
}
99146
}
100147
}

0 commit comments

Comments
 (0)