Java源码示例:net.minecraft.network.play.client.CPacketCloseWindow
示例1
public static Container callInventoryOpenEvent(EntityPlayerMP player, Container container, boolean cancelled) {
if (player.openContainer != player.inventoryContainer) { // fire INVENTORY_CLOSE if one already open
player.connection.processCloseWindow(new CPacketCloseWindow(player.openContainer.windowId));
}
CraftServer server = player.world.getServer();
CraftPlayer craftPlayer = player.getBukkitEntity();
player.openContainer.transferTo(container, craftPlayer);
InventoryOpenEvent event = new InventoryOpenEvent(container.getBukkitView());
event.setCancelled(cancelled);
server.getPluginManager().callEvent(event);
if (event.isCancelled()) {
container.transferTo(player.openContainer, craftPlayer);
return null;
}
return container;
}
示例2
@Override
public void onDisable() {
super.onDisable();
if (Minecraft.getMinecraft().world != null) {
Minecraft.getMinecraft().player.connection.sendPacket(new CPacketCloseWindow(Minecraft.getMinecraft().player.inventoryContainer.windowId));
}
}
示例3
@Listener
public void sendPacket(EventSendPacket event) {
if (event.getStage() == EventStageable.EventStage.PRE) {
if (event.getPacket() instanceof CPacketCloseWindow) {
final CPacketCloseWindow packet = (CPacketCloseWindow) event.getPacket();
if (packet.windowId == Minecraft.getMinecraft().player.inventoryContainer.windowId) {
event.setCanceled(true);
}
}
}
}
示例4
public void openInventory(InventoryView inventory) {
if (!(getHandle() instanceof EntityPlayerMP)) return; // TODO: NPC support?
if (((EntityPlayerMP) getHandle()).connection == null) return;
if (getHandle().inventoryContainer != getHandle().inventoryContainer) {
// fire INVENTORY_CLOSE if one already open
((EntityPlayerMP) getHandle()).connection.processCloseWindow(new CPacketCloseWindow(getHandle().inventoryContainer.windowId));
}
EntityPlayerMP player = (EntityPlayerMP) getHandle();
Container container;
if (inventory instanceof CraftInventoryView) {
container = ((CraftInventoryView) inventory).getHandle();
} else {
container = new CraftContainer(inventory, this.getHandle(), player.getNextWindowIdCB());
}
// Trigger an INVENTORY_OPEN event
container = CraftEventFactory.callInventoryOpenEvent(player, container);
if (container == null) {
return;
}
// Now open the window
InventoryType type = inventory.getType();
String windowType = CraftContainer.getNotchInventoryType(type);
String title = inventory.getTitle();
int size = inventory.getTopInventory().getSize();
player.connection.sendPacket(new SPacketOpenWindow(container.windowId, windowType, new TextComponentString(title), size));
player.inventoryContainer = container;
player.inventoryContainer.addListener(player);
}