This commit is contained in:
dordsor21 2021-08-25 16:19:51 +01:00
parent 4050cf238f
commit da8289f8ba
No known key found for this signature in database
GPG Key ID: 1E53E88969FFCF0B
2 changed files with 42 additions and 5 deletions

View File

@ -21,6 +21,7 @@
package com.sk89q.worldedit.bukkit; package com.sk89q.worldedit.bukkit;
import com.sk89q.worldedit.LocalSession;
import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.entity.Player; import com.sk89q.worldedit.entity.Player;
import com.sk89q.worldedit.event.platform.SessionIdleEvent; import com.sk89q.worldedit.event.platform.SessionIdleEvent;
@ -37,6 +38,7 @@ import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerCommandSendEvent; import org.bukkit.event.player.PlayerCommandSendEvent;
import org.bukkit.event.player.PlayerGameModeChangeEvent; import org.bukkit.event.player.PlayerGameModeChangeEvent;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.EquipmentSlot;
import org.enginehub.piston.CommandManager; import org.enginehub.piston.CommandManager;
@ -68,10 +70,29 @@ public class WorldEditListener implements Listener {
return; return;
} }
// this will automatically refresh their session, we don't have to do anything //FAWE start - correctly handle refreshing LocalSession
WorldEdit.getInstance().getSessionManager().get(plugin.wrapPlayer(event.getPlayer())); Player player = plugin.wrapPlayer(event.getPlayer());
LocalSession session;
if ((session = WorldEdit.getInstance().getSessionManager().getIfPresent(player)) == null) {
session = WorldEdit.getInstance().getSessionManager().get(player);
}
session.loadDefaults(player, true);
} }
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onJoin(PlayerJoinEvent event) {
if (!plugin.getInternalPlatform().isHookingEvents()) {
return;
}
Player player = plugin.wrapPlayer(event.getPlayer());
LocalSession session;
if ((session = WorldEdit.getInstance().getSessionManager().getIfPresent(player)) != null) {
session.loadDefaults(player, true);
}
}
//FAWE end
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onPlayerCommandSend(PlayerCommandSendEvent event) { public void onPlayerCommandSend(PlayerCommandSendEvent event) {
InjectedValueStore store = MapBackedValueStore.create(); InjectedValueStore store = MapBackedValueStore.create();

View File

@ -1071,10 +1071,26 @@ public class LocalSession implements TextureHolder {
*/ */
@Nullable @Nullable
@Deprecated @Deprecated
public Tool getTool(ItemType item) { //FAWE start - refresh wand item if permissions change
public Tool getTool(ItemType item, Player player) {
Tool tool;
synchronized (this.tools) { synchronized (this.tools) {
return tools.get(item.getInternalId()); tool = tools.get(item.getInternalId());
} }
if (tool == SelectionWand.INSTANCE && !SelectionWand.INSTANCE.canUse(player)) {
tools.remove(wandItem.getInternalId());
loadDefaults(player, true); // Permissions have changed so redo the player's current tools.
return null;
}
if (tool != null) {
return tool;
} else if (item.getInternalId() == wandItem.getInternalId() && SelectionWand.INSTANCE.canUse(player)) {
loadDefaults(player, true); // Permissions have changed so redo the player's current tools.
return SelectionWand.INSTANCE;
} else {
return null;
}
//FAWE end
} }
//FAWE start //FAWE start
@ -1098,7 +1114,7 @@ public class LocalSession implements TextureHolder {
return tool; return tool;
} }
} }
return getTool(item.getType()); return getTool(item.getType(), player);
} }
public void loadDefaults(Actor actor, boolean force) { public void loadDefaults(Actor actor, boolean force) {