SPIGOT-6535: PlayerGameModeChangeEvent event incorrectly reports old gamemode

By: Parker Hawke <hawkeboyz2@hotmail.com>
This commit is contained in:
CraftBukkit/Spigot
2021-06-13 08:43:21 +10:00
parent 94c0260719
commit f7478ccc32
2 changed files with 44 additions and 42 deletions

View File

@@ -538,14 +538,14 @@
+ // CraftBukkit start
+ ResourceKey<World> maindimensionkey = CraftDimensionUtil.getMainDimensionKey(worldserver);
+ ResourceKey<World> maindimensionkey1 = CraftDimensionUtil.getMainDimensionKey(this.level);
+
- CriterionTriggers.CHANGED_DIMENSION.a(this, resourcekey, resourcekey1);
- if (resourcekey == World.NETHER && resourcekey1 == World.OVERWORLD && this.enteredNetherPosition != null) {
+ CriterionTriggers.CHANGED_DIMENSION.a(this, maindimensionkey, maindimensionkey1);
+ if (maindimensionkey != resourcekey || maindimensionkey1 != resourcekey1) {
+ CriterionTriggers.CHANGED_DIMENSION.a(this, resourcekey, resourcekey1);
+ }
- CriterionTriggers.CHANGED_DIMENSION.a(this, resourcekey, resourcekey1);
- if (resourcekey == World.NETHER && resourcekey1 == World.OVERWORLD && this.enteredNetherPosition != null) {
+
+ if (maindimensionkey == World.NETHER && maindimensionkey1 == World.OVERWORLD && this.enteredNetherPosition != null) {
+ // CraftBukkit end
CriterionTriggers.NETHER_TRAVEL.a(this, this.enteredNetherPosition);
@@ -786,21 +786,7 @@
}
@Override
@@ -1289,6 +1648,13 @@
if (!this.gameMode.setGameMode(enumgamemode)) {
return false;
} else {
+ // CraftBukkit start
+ PlayerGameModeChangeEvent event = new PlayerGameModeChangeEvent(getBukkitEntity(), GameMode.getByValue(enumgamemode.getId()));
+ level.getCraftServer().getPluginManager().callEvent(event);
+ if (event.isCancelled()) {
+ return false;
+ }
+ // CraftBukkit end
this.connection.sendPacket(new PacketPlayOutGameStateChange(PacketPlayOutGameStateChange.CHANGE_GAME_MODE, (float) enumgamemode.getId()));
if (enumgamemode == EnumGamemode.SPECTATOR) {
this.releaseShoulderEntities();
@@ -1341,7 +1707,20 @@
@@ -1341,7 +1700,20 @@
return s;
}
@@ -821,7 +807,7 @@
this.chatVisibility = packetplayinsettings.d();
this.canChatColor = packetplayinsettings.e();
this.textFilteringEnabled = packetplayinsettings.h();
@@ -1411,7 +1790,7 @@
@@ -1411,7 +1783,7 @@
this.camera = (Entity) (entity == null ? this : entity);
if (entity1 != this.camera) {
this.connection.sendPacket(new PacketPlayOutCamera(this.camera));
@@ -830,7 +816,7 @@
}
}
@@ -1440,7 +1819,7 @@
@@ -1440,7 +1812,7 @@
@Nullable
public IChatBaseComponent getPlayerListName() {
@@ -839,7 +825,7 @@
}
@Override
@@ -1461,9 +1840,16 @@
@@ -1461,9 +1833,16 @@
return this.advancements;
}
@@ -856,7 +842,7 @@
if (worldserver == this.level) {
this.connection.b(d0, d1, d2, f, f1);
} else {
@@ -1483,6 +1869,9 @@
@@ -1483,6 +1862,9 @@
this.server.getPlayerList().a(this, worldserver);
this.server.getPlayerList().updateClient(this);
}
@@ -866,7 +852,7 @@
}
@@ -1628,4 +2017,144 @@
@@ -1628,4 +2010,144 @@
CriterionTriggers.USING_ITEM.a(this, itemstack);
super.a(itemstack);
}