Update Upstream

0036e06 Alter the CUI lifecycle to be more consistent and reliable (1633)
This commit is contained in:
NotMyFault
2021-06-05 11:27:27 +02:00
parent d1af6c38e7
commit 75fbe654ee
17 changed files with 326 additions and 118 deletions

View File

@ -53,14 +53,9 @@ public class CUIChannelHandler implements RawDataListener {
LocalSession session = SpongeWorldEdit.inst().getSession(player);
if (session.hasCUISupport()) {
return;
}
final SpongePlayer actor = SpongeWorldEdit.inst().wrapPlayer(player);
session.handleCUIInitializationMessage(new String(data.readBytes(data.available()), StandardCharsets.UTF_8),
actor);
session.describeCUI(actor);
}
}
}

View File

@ -239,18 +239,18 @@ public class SpongePlayer extends AbstractPlayerActor {
@Override
public SessionKey getSessionKey() {
return new SessionKeyImpl(player.getUniqueId(), player.getName());
return new SessionKeyImpl(player);
}
private static class SessionKeyImpl implements SessionKey {
static class SessionKeyImpl implements SessionKey {
// If not static, this will leak a reference
private final UUID uuid;
private final String name;
private SessionKeyImpl(UUID uuid, String name) {
this.uuid = uuid;
this.name = name;
SessionKeyImpl(Player player) {
this.uuid = player.getUniqueId();
this.name = player.getName();
}
@Override

View File

@ -27,6 +27,7 @@ import com.sk89q.worldedit.LocalSession;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.blocks.BaseItemStack;
import com.sk89q.worldedit.event.platform.PlatformReadyEvent;
import com.sk89q.worldedit.event.platform.SessionIdleEvent;
import com.sk89q.worldedit.extension.platform.Actor;
import com.sk89q.worldedit.extension.platform.Capability;
import com.sk89q.worldedit.extension.platform.Platform;
@ -54,6 +55,7 @@ import org.spongepowered.api.event.game.state.GamePreInitializationEvent;
import org.spongepowered.api.event.game.state.GameStartedServerEvent;
import org.spongepowered.api.event.game.state.GameStoppingServerEvent;
import org.spongepowered.api.event.item.inventory.InteractItemEvent;
import org.spongepowered.api.event.network.ClientConnectionEvent;
import org.spongepowered.api.item.ItemType;
import org.spongepowered.api.item.inventory.ItemStack;
import org.spongepowered.api.plugin.Plugin;
@ -290,6 +292,12 @@ public class SpongeWorldEdit {
}
}
@Listener
public void onPlayerQuit(ClientConnectionEvent.Disconnect event) {
WorldEdit.getInstance().getEventBus()
.post(new SessionIdleEvent(new SpongePlayer.SessionKeyImpl(event.getTargetEntity())));
}
public static ItemStack toSpongeItemStack(BaseItemStack item) {
return inst().getAdapter().makeSpongeStack(item);
}