use of net.minecraft.container.Container in project tweakermore by Fallen-Breath.
the class ContainerProcessor method process.
public static void process(Container container) {
if (hasTweakEnabled()) {
Screen screen = MinecraftClient.getInstance().currentScreen;
ClientPlayerEntity player = MinecraftClient.getInstance().player;
// not inventory and not crafting table
if (player != null && screen instanceof ContainerScreen<?> && !(screen instanceof AbstractInventoryScreen) && !(screen instanceof CraftingTableScreen)) {
ContainerScreen<?> containerScreen = (ContainerScreen<?>) screen;
if (containerScreen.getContainer() != container || !((AutoProcessableScreen) screen).shouldProcess()) {
return;
}
((AutoProcessableScreen) screen).setShouldProcess(false);
List<Slot> allSlots = container.slots;
List<Slot> playerInvSlots = allSlots.stream().filter(slot -> slot.inventory instanceof PlayerInventory).collect(Collectors.toList());
if (allSlots.isEmpty() || playerInvSlots.isEmpty()) {
return;
}
List<Slot> containerInvSlots = allSlots.stream().filter(slot -> ItemScrollerInventoryUtilsAccessor.areSlotsInSameInventory(slot, allSlots.get(0))).collect(Collectors.toList());
if (containerInvSlots.isEmpty()) {
return;
}
for (Processor processor : CONTAINER_PROCESSORS) {
if (processor.isEnabled()) {
boolean success = processor.process(player, containerScreen, allSlots, playerInvSlots, containerInvSlots);
if (success) {
break;
}
}
}
player.closeContainer();
}
}
}
use of net.minecraft.container.Container in project fabric by FabricMC.
the class ContainerProviderImpl method openContainer.
@Override
public void openContainer(Identifier identifier, ServerPlayerEntity player, Consumer<PacketByteBuf> writer) {
int syncId;
if (player instanceof ServerPlayerEntitySyncHook) {
ServerPlayerEntitySyncHook serverPlayerEntitySyncHook = (ServerPlayerEntitySyncHook) player;
syncId = serverPlayerEntitySyncHook.fabric_incrementSyncId();
} else if (player instanceof ServerPlayerEntityAccessor) {
if (!emittedNoSyncHookWarning) {
LOGGER.warn("ServerPlayerEntitySyncHook could not be applied - fabric-containers is using a hack!");
emittedNoSyncHookWarning = true;
}
syncId = (((ServerPlayerEntityAccessor) player).getContainerSyncId() + 1) % 100;
((ServerPlayerEntityAccessor) player).setContainerSyncId(syncId);
} else {
throw new RuntimeException("Neither ServerPlayerEntitySyncHook nor Accessor present! This should not happen!");
}
PacketByteBuf buf = new PacketByteBuf(Unpooled.buffer());
buf.writeIdentifier(identifier);
buf.writeByte(syncId);
writer.accept(buf);
player.networkHandler.sendPacket(new CustomPayloadS2CPacket(PacketTypes.OPEN_CONTAINER, buf));
PacketByteBuf clonedBuf = new PacketByteBuf(buf.duplicate());
clonedBuf.readIdentifier();
clonedBuf.readUnsignedByte();
Container container = createContainer(syncId, identifier, player, clonedBuf);
if (container == null) {
return;
}
player.container = container;
player.container.addListener(player);
}
Aggregations