下面列出了怎么用net.minecraft.inventory.container.Container的API类实例代码及写法,或者点击链接到github查看源代码。
public static void handle(PacketGhostSlot msg, Supplier<NetworkEvent.Context> ctx) {
ctx.get().enqueueWork(() -> {
ServerPlayerEntity sender = ctx.get().getSender();
if (sender == null)
return;
Container container = sender.openContainer;
if (container == null)
return;
Slot slot = container.inventorySlots.get(msg.slotNumber);
if (slot instanceof GhostSlot)
slot.putStack(msg.stack);
});
ctx.get().setPacketHandled(true);
}
@SuppressWarnings ("unchecked")
private void handleOpenContainer(PacketCustom packet, Minecraft mc) {
ContainerType<?> rawType = packet.readRegistryIdUnsafe(ForgeRegistries.CONTAINERS);
int windowId = packet.readVarInt();
ITextComponent name = packet.readTextComponent();
if (rawType instanceof ICCLContainerType<?>) {
ICCLContainerType<?> type = (ICCLContainerType<?>) rawType;
ScreenManager.getScreenFactory(rawType, mc, windowId, name)//
.map(e -> (ScreenManager.IScreenFactory<Container, ?>) e)//
.ifPresent(screenFactory -> {
Container container = type.create(windowId, Minecraft.getInstance().player.inventory, packet);
Screen screen = screenFactory.create(container, mc.player.inventory, name);
mc.player.openContainer = ((IHasContainer<?>) screen).getContainer();
mc.displayGuiScreen(screen);
});
}
}
public static void openContainer(ServerPlayerEntity player, INamedContainerProvider containerProvider, Consumer<MCDataOutput> packetConsumer) {
if (player.world.isRemote()) {
return;
}
player.closeContainer();
player.getNextWindowId();
int containerId = player.currentWindowId;
Container container = containerProvider.createMenu(containerId, player.inventory, player);
ContainerType<?> type = container.getType();
PacketCustom packet = new PacketCustom(CCLNetwork.NET_CHANNEL, C_OPEN_CONTAINER);
packet.writeRegistryIdUnsafe(ForgeRegistries.CONTAINERS, type);
packet.writeVarInt(containerId);
packet.writeTextComponent(containerProvider.getDisplayName());
packetConsumer.accept(packet);
packet.sendToPlayer(player);
player.openContainer = container;
player.openContainer.addListener(player);
MinecraftForge.EVENT_BUS.post(new PlayerContainerEvent.Open(player, container));
}
public static void handle(PacketOpenFilterContainer msg, Supplier<NetworkEvent.Context> ctx) {
ctx.get().enqueueWork(() -> {
ServerPlayerEntity sender = ctx.get().getSender();
if (sender == null)
return;
Container container = sender.openContainer;
if (container == null)
return;
ItemStack stack = MiningGadget.getGadget(sender);
if( stack.isEmpty() )
return;
ItemStackHandler ghostInventory = new ItemStackHandler(30) {
@Override
protected void onContentsChanged(int slot) {
stack.getOrCreateTag().put(MiningProperties.KEY_FILTERS, serializeNBT());
}
};
ghostInventory.deserializeNBT(stack.getOrCreateChildTag(MiningProperties.KEY_FILTERS));
sender.openContainer(new SimpleNamedContainerProvider(
(windowId, playerInventory, playerEntity) -> new FilterContainer(windowId, playerInventory, ghostInventory), new StringTextComponent("")
));
});
ctx.get().setPacketHandled(true);
}
@Nullable
@Override
public Container createMenu(int i, PlayerInventory playerInventory, PlayerEntity playerEntity) {
return new ModificationTableContainer(i, world, pos, playerInventory);
}
static <T extends Container> ContainerType<T> create(ICCLContainerFactory<T> factory) {
return new CCLContainerType<>(factory);
}
@Nullable
@Override
public Container createMenu(int windowId, PlayerInventory playerInventory, PlayerEntity player)
{
return new SawmillContainer(windowId, this, playerInventory);
}
@Nullable
@Override
public Container createMenu(int windowId, PlayerInventory playerInventory, PlayerEntity player)
{
return new DryingRackContainer(windowId, this, playerInventory);
}